From c6fdf48b79ebd336015a24bc52fdd2c1c69a5df5 Mon Sep 17 00:00:00 2001 From: Brooklyn Nicholson Date: Sat, 25 Apr 2026 14:17:57 -0500 Subject: [PATCH] fix(tui): sync inference model after switches - keep HERMES_INFERENCE_MODEL aligned with HERMES_MODEL after in-TUI model switches - clarify static provider detection remapping docs --- hermes_cli/models.py | 3 ++- tests/test_tui_gateway_server.py | 2 ++ tui_gateway/server.py | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/hermes_cli/models.py b/hermes_cli/models.py index 93a5111c56..10b63cbbb4 100644 --- a/hermes_cli/models.py +++ b/hermes_cli/models.py @@ -1452,7 +1452,8 @@ def detect_static_provider_for_model( ) -> Optional[tuple[str, str]]: """Auto-detect a provider from static catalogs only. - Returns ``(provider_id, model_name)`` — the model name may be remapped + Returns ``(provider_id, model_name)``. The model name may be remapped + when a static alias or bare provider name resolves to a catalog default. Returns ``None`` when no confident match is found. """ name = (model_name or "").strip() diff --git a/tests/test_tui_gateway_server.py b/tests/test_tui_gateway_server.py index d4cdab8421..f7eacb6859 100644 --- a/tests/test_tui_gateway_server.py +++ b/tests/test_tui_gateway_server.py @@ -562,6 +562,8 @@ def test_config_set_model_syncs_tui_provider_env(monkeypatch): assert resp["result"]["value"] == "anthropic/claude-sonnet-4.6" assert os.environ["HERMES_TUI_PROVIDER"] == "anthropic" + assert os.environ["HERMES_MODEL"] == "anthropic/claude-sonnet-4.6" + assert os.environ["HERMES_INFERENCE_MODEL"] == "anthropic/claude-sonnet-4.6" finally: server._sessions.clear() diff --git a/tui_gateway/server.py b/tui_gateway/server.py index 7f981663a3..81a2a98e01 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -774,6 +774,7 @@ def _apply_model_switch(sid: str, session: dict, raw_input: str) -> dict: _emit("session.info", sid, _session_info(agent)) os.environ["HERMES_MODEL"] = result.new_model + os.environ["HERMES_INFERENCE_MODEL"] = result.new_model # Keep the process-level provider env var in sync with the user's explicit # choice so any ambient re-resolution (credential pool refresh, compressor # rebuild, aux clients) resolves to the new provider instead of the