From 390b03c455be6df898d17f5f277b953fbf5f0d10 Mon Sep 17 00:00:00 2001 From: Gille <4317663+helix4u@users.noreply.github.com> Date: Wed, 22 Jul 2026 21:49:06 -0600 Subject: [PATCH] fix(cli): persist provider on global model switch --- cli.py | 6 ++---- ...25106_global_switch_persists_base_url_api_mode.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/cli.py b/cli.py index 1fddbcacd04..7acf94517f6 100644 --- a/cli.py +++ b/cli.py @@ -8339,8 +8339,7 @@ class HermesCLI(CLIAgentSetupMixin, CLICommandsMixin, CLIBillingMixin): if persist_global: HermesCLI._clear_persisted_context_for_model_switch(self, result) save_config_value("model.default", result.new_model) - if result.provider_changed: - save_config_value("model.provider", result.target_provider) + save_config_value("model.provider", result.target_provider) # base_url/api_mode were previously never persisted here, so a # global switch left the OLD provider's endpoint/wire-protocol in # config.yaml. result.base_url/api_mode are always freshly @@ -8694,8 +8693,7 @@ class HermesCLI(CLIAgentSetupMixin, CLICommandsMixin, CLIBillingMixin): if persist_global: HermesCLI._clear_persisted_context_for_model_switch(self, result) save_config_value("model.default", result.new_model) - if result.provider_changed: - save_config_value("model.provider", result.target_provider) + save_config_value("model.provider", result.target_provider) # See _apply_model_switch_result above for why base_url/api_mode # must be synced on every global switch (#25106). save_config_value("model.base_url", result.base_url or None) diff --git a/tests/hermes_cli/test_25106_global_switch_persists_base_url_api_mode.py b/tests/hermes_cli/test_25106_global_switch_persists_base_url_api_mode.py index 35b316a677b..f3cd79413a6 100644 --- a/tests/hermes_cli/test_25106_global_switch_persists_base_url_api_mode.py +++ b/tests/hermes_cli/test_25106_global_switch_persists_base_url_api_mode.py @@ -90,6 +90,12 @@ def test_global_switch_persists_base_url_and_api_mode(monkeypatch): assert saved["model.api_mode"] == "chat_completions" +def test_global_switch_persists_provider_when_runtime_provider_is_unchanged(monkeypatch): + saved = _run_switch(monkeypatch, _make_result(provider_changed=False)) + + assert saved["model.provider"] == "custom:minimax" + + def test_global_switch_clears_base_url_and_api_mode_when_unresolved(monkeypatch): """When the resolver returns no base_url/api_mode for the new provider (e.g. a named provider needing neither), any previous value must be @@ -151,6 +157,12 @@ def test_picker_global_switch_persists_base_url_and_api_mode(monkeypatch): assert saved["model.api_mode"] == "chat_completions" +def test_picker_global_switch_persists_provider_when_runtime_provider_is_unchanged(monkeypatch): + saved = _run_apply(monkeypatch, _make_result(provider_changed=False)) + + assert saved["model.provider"] == "custom:minimax" + + def test_picker_global_switch_clears_base_url_and_api_mode_when_unresolved(monkeypatch): """Picker-path counterpart of `test_global_switch_clears_base_url_and_api_mode_when_unresolved`.""" result = _make_result(base_url="", api_mode="")