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="")