mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-28 06:51:16 +08:00
fix(tui): reject fast mode for unsupported live models
Match classic CLI parity by refusing to enable fast mode when the active model cannot produce fast request overrides, avoiding a misleading fast status with no runtime effect.
This commit is contained in:
@@ -747,6 +747,40 @@ def test_config_set_fast_status_is_non_mutating(monkeypatch):
|
||||
server._sessions.pop("sid", None)
|
||||
|
||||
|
||||
def test_config_set_fast_rejects_unsupported_model(monkeypatch):
|
||||
writes = []
|
||||
agent = types.SimpleNamespace(
|
||||
model="unsupported-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))
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"hermes_cli.models.resolve_fast_mode_overrides",
|
||||
lambda _model_id: None,
|
||||
)
|
||||
|
||||
try:
|
||||
resp = server.handle_request(
|
||||
{
|
||||
"id": "1",
|
||||
"method": "config.set",
|
||||
"params": {"session_id": "sid", "key": "fast", "value": "fast"},
|
||||
}
|
||||
)
|
||||
assert resp["error"]["code"] == 4002
|
||||
assert "not available" 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 = []
|
||||
|
||||
|
||||
@@ -2880,8 +2880,9 @@ def _(rid, params: dict) -> dict:
|
||||
|
||||
if key == "fast":
|
||||
raw = str(value or "").strip().lower()
|
||||
if session and session.get("agent") is not None:
|
||||
current_fast = getattr(session["agent"], "service_tier", None) == "priority"
|
||||
agent = session.get("agent") if session else None
|
||||
if agent is not None:
|
||||
current_fast = getattr(agent, "service_tier", None) == "priority"
|
||||
else:
|
||||
current_fast = _load_service_tier() == "priority"
|
||||
|
||||
@@ -2900,19 +2901,27 @@ def _(rid, params: dict) -> dict:
|
||||
else:
|
||||
return _err(rid, 4002, f"unknown fast mode: {value}")
|
||||
|
||||
overrides = None
|
||||
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()
|
||||
overrides = resolve_fast_mode_overrides(target_model)
|
||||
if not overrides:
|
||||
return _err(
|
||||
rid,
|
||||
4002,
|
||||
"fast mode is not available for this model",
|
||||
)
|
||||
|
||||
_write_config_key("agent.service_tier", nv)
|
||||
if session and session.get("agent") is not None:
|
||||
agent = session["agent"]
|
||||
if agent is not None:
|
||||
agent.service_tier = "priority" if nv == "fast" else None
|
||||
current_overrides = dict(getattr(agent, "request_overrides", {}) or {})
|
||||
current_overrides.pop("service_tier", None)
|
||||
current_overrides.pop("speed", None)
|
||||
if nv == "fast":
|
||||
from hermes_cli.models import resolve_fast_mode_overrides
|
||||
|
||||
current_overrides.update(
|
||||
resolve_fast_mode_overrides(getattr(agent, "model", None)) or {}
|
||||
)
|
||||
current_overrides.update(overrides)
|
||||
agent.request_overrides = current_overrides
|
||||
_emit(
|
||||
"session.info",
|
||||
|
||||
Reference in New Issue
Block a user