fix(tui): tighten fast-mode support validation

Distinguish missing model from unsupported model before enabling fast mode and cover both cases so config and live agent state remain untouched on invalid fast toggles.
This commit is contained in:
Brooklyn Nicholson
2026-04-27 13:00:11 -05:00
parent 4a08f1015a
commit 4f59510dd4
2 changed files with 40 additions and 2 deletions

View File

@@ -781,6 +781,36 @@ def test_config_set_fast_rejects_unsupported_model(monkeypatch):
server._sessions.pop("sid", None)
def test_config_set_fast_rejects_missing_model(monkeypatch):
writes = []
agent = types.SimpleNamespace(
model="",
request_overrides={},
service_tier=None,
)
server._sessions["sid"] = _session(agent=agent)
monkeypatch.setattr(
server, "_write_config_key", lambda path, value: writes.append((path, value))
)
try:
resp = server.handle_request(
{
"id": "1",
"method": "config.set",
"params": {"session_id": "sid", "key": "fast", "value": "fast"},
}
)
assert resp["error"]["code"] == 4002
assert "without a selected model" in resp["error"]["message"]
assert agent.service_tier is None
assert agent.request_overrides == {}
assert writes == []
finally:
server._sessions.pop("sid", None)
def test_config_busy_get_and_set(monkeypatch):
writes = []

View File

@@ -2905,9 +2905,17 @@ def _(rid, params: dict) -> dict:
if nv == "fast":
from hermes_cli.models import resolve_fast_mode_overrides
target_model = getattr(agent, "model", None) if agent is not None else _resolve_model()
target_model = (
getattr(agent, "model", None) if agent is not None else _resolve_model()
)
if not target_model:
return _err(
rid,
4002,
"fast mode is not available without a selected model",
)
overrides = resolve_fast_mode_overrides(target_model)
if not overrides:
if overrides is None:
return _err(
rid,
4002,