Let preset set replace corrupt entries (#1650)

This commit is contained in:
red person
2026-06-03 08:10:58 +03:00
committed by GitHub
parent 40e1d6e876
commit ade755b184
2 changed files with 42 additions and 1 deletions

View File

@@ -85,7 +85,8 @@ def cmd_set(args):
if prompt is None and args.temperature is None: if prompt is None and args.temperature is None:
fail("nothing to set — pass --prompt, --prompt-file, or --temperature") fail("nothing to set — pass --prompt, --prompt-file, or --temperature")
presets = _load() presets = _load()
entry = dict(presets.get(args.name) or {}) current = presets.get(args.name)
entry = dict(current) if isinstance(current, dict) else {}
entry.setdefault("name", args.name) entry.setdefault("name", args.name)
if prompt is not None: if prompt is not None:
entry["system_prompt"] = prompt entry["system_prompt"] = prompt

View File

@@ -0,0 +1,40 @@
import importlib.machinery
import importlib.util
from pathlib import Path
from types import SimpleNamespace
def _load_preset_cli():
path = Path(__file__).resolve().parent.parent / "scripts" / "odysseus-preset"
loader = importlib.machinery.SourceFileLoader("odysseus_preset_set_corrupt", str(path))
spec = importlib.util.spec_from_loader(loader.name, loader)
module = importlib.util.module_from_spec(spec)
loader.exec_module(module)
return module
def test_set_replaces_corrupt_existing_entry(monkeypatch):
cli = _load_preset_cli()
saved = {}
emitted = {}
monkeypatch.setattr(cli, "_load", lambda: {"broken": "raw prompt"})
monkeypatch.setattr(cli, "_save", lambda data: saved.update(data))
monkeypatch.setattr(cli, "emit", lambda payload, _args: emitted.update(payload))
args = SimpleNamespace(
name="broken",
prompt="new prompt",
prompt_file=None,
temperature=0.7,
display_name=None,
)
cli.cmd_set(args)
assert saved["broken"] == {
"name": "broken",
"system_prompt": "new prompt",
"temperature": 0.7,
}
assert emitted["ok"] is True