Trial GPU-resident Qwen3.5-9B with verified 4B rollback
This commit is contained in:
1 parent
0929cdb555
commit
dec534cc88
10 files changed
+307
-93
No files matched your search
+54
-14
@@ -58,22 +58,25 @@ class PreparationTests(unittest.TestCase):
|
||||
self.assertEqual(updated["custom_providers"][1]["extra_body"]["max_tokens"], 2048)
|
||||
self.assertEqual(updated["auxiliary"]["compression"]["base_url"], "http://127.0.0.1:8081/v1")
|
||||
|
||||
def test_context_matches_both_main_profiles_and_replaces_stale_window(self):
|
||||
for previous in (None, 256000):
|
||||
with self.subTest(previous=previous):
|
||||
config = {"model": {"context_length": previous},
|
||||
"compression": {"threshold_tokens": 24000}}
|
||||
prepare.configure_hermes(config)
|
||||
window = config["model"]["context_length"]
|
||||
self.assertEqual(window, 65536)
|
||||
for name in ("routine", "large"):
|
||||
text = prepare.profile_config(name, [self.root / "weights.gguf"])
|
||||
self.assertIn(f"--ctx-size {window}", text)
|
||||
self.assertEqual(config["compression"]["threshold_tokens"], 24000)
|
||||
def test_context_and_compression_follow_selected_model(self):
|
||||
for name, window, trigger in (("routine", 65536, 24000), ("fallback", 65536, 24000), ("large", 65536, 24000)):
|
||||
with self.subTest(name=name):
|
||||
config = {"model": {"context_length": 256000}, "compression": {"threshold_tokens": 24000}}
|
||||
prepare.configure_hermes(config, context=window)
|
||||
self.assertEqual(config["model"]["context_length"], window)
|
||||
self.assertEqual(config["compression"]["threshold_tokens"], trigger)
|
||||
text = prepare.profile_config(name, [self.root / "weights.gguf"])
|
||||
self.assertIn(f"--ctx-size {window}", text)
|
||||
before = json.dumps(config, sort_keys=True)
|
||||
prepare.configure_hermes(config)
|
||||
prepare.configure_hermes(config, context=window)
|
||||
self.assertEqual(json.dumps(config, sort_keys=True), before)
|
||||
|
||||
def test_configuration_refuses_below_hermes_context_floor(self):
|
||||
config = {"model": {"context_length": 65536}}
|
||||
with self.assertRaisesRegex(ValueError, "at least 64000"):
|
||||
prepare.configure_hermes(config, context=16384)
|
||||
self.assertEqual(config, {"model": {"context_length": 65536}})
|
||||
|
||||
def test_existing_profiles_preserved_and_explicit_selection_backed_up(self):
|
||||
path = self.root / "llama.env"
|
||||
path.write_text("custom tuning\n")
|
||||
@@ -141,7 +144,44 @@ class ModelSwitchTests(unittest.TestCase):
|
||||
p.write_text("#!/usr/bin/env bash\n" + body + "\n")
|
||||
p.chmod(0o755)
|
||||
self.env = dict(os.environ, PATH=str(self.bin) + ":" + os.environ["PATH"],
|
||||
XDG_CONFIG_HOME=str(self.config.parent), XDG_RUNTIME_DIR=str(self.root), TEST_CALLS=str(self.root / "calls"))
|
||||
HERMES_HOME=str(self.root / "hermes"), XDG_CONFIG_HOME=str(self.config.parent), XDG_RUNTIME_DIR=str(self.root), TEST_CALLS=str(self.root / "calls"))
|
||||
|
||||
def test_switch_and_failure_keep_hermes_window_paired_with_model(self):
|
||||
import yaml
|
||||
directory = self.root / "hermes"
|
||||
directory.mkdir()
|
||||
path = directory / "config.yaml"
|
||||
original = "model:\n context_length: 65536\ncompression:\n threshold_tokens: 24000\nterminal:\n backend: docker\n"
|
||||
(self.config / "llama-routine.env").write_text("LLAMA_MODEL=new.gguf\nLLAMA_CONTEXT_TOKENS=64000\n")
|
||||
for fail in (False, True):
|
||||
path.write_text(original)
|
||||
(self.config / "llama.env").write_text("LLAMA_MODEL=old.gguf\n")
|
||||
result = subprocess.run(["bash", str(self.bin / "hermes-stack-model"), "routine"],
|
||||
env=dict(self.env, TEST_FAIL=str(int(fail))), capture_output=True, text=True)
|
||||
if fail:
|
||||
self.assertNotEqual(result.returncode, 0)
|
||||
self.assertEqual(path.read_text(), original)
|
||||
self.assertEqual((self.config / "llama.env").read_text(), "LLAMA_MODEL=old.gguf\n")
|
||||
else:
|
||||
self.assertEqual(result.returncode, 0, result.stderr)
|
||||
config = yaml.safe_load(path.read_text())
|
||||
self.assertEqual(config["model"]["context_length"], 64000)
|
||||
self.assertEqual(config["compression"]["threshold_tokens"], 24000)
|
||||
self.assertEqual(config["terminal"]["backend"], "docker")
|
||||
|
||||
def test_hermes_rejects_too_small_context_and_restores_pair(self):
|
||||
directory = self.root / "hermes"
|
||||
directory.mkdir()
|
||||
path = directory / "config.yaml"
|
||||
original = "model:\n context_length: 65536\n"
|
||||
path.write_text(original)
|
||||
(self.config / "llama-routine.env").write_text("LLAMA_MODEL=new.gguf\nLLAMA_CONTEXT_TOKENS=16384\n")
|
||||
result = subprocess.run(["bash", str(self.bin / "hermes-stack-model"), "routine"],
|
||||
env=self.env, capture_output=True, text=True)
|
||||
self.assertNotEqual(result.returncode, 0)
|
||||
self.assertIn("at least 64000", result.stderr)
|
||||
self.assertEqual(path.read_text(), original)
|
||||
self.assertEqual((self.config / "llama.env").read_text(), "LLAMA_MODEL=old.gguf\n")
|
||||
|
||||
def test_successful_switch_through_path_entrypoint(self):
|
||||
(self.root / "entrypoint").symlink_to(self.bin / "hermes-stack-model")
|
||||
|
||||
Reference in new issue
Block a user