fix(cli): sync use_gateway in _reconfigure_provider for tts, browser, and web

_reconfigure_provider() updates cloud_provider/backend/tts.provider when
switching tool providers via "hermes setup tools → Reconfigure", but did
not update the matching use_gateway flag. _configure_provider() (the
initial-setup path) sets use_gateway on all three tool categories. The
omission in _reconfigure_provider leaves a stale value in config.yaml:
switching from a Nous-managed provider (use_gateway=True) to a self-hosted
one keeps use_gateway=True, continuing to route requests through the Nous
gateway; switching the other way leaves use_gateway unset so the managed
feature does not activate.

Fix: mirror _configure_provider's use_gateway = bool(managed_feature)
assignment in the tts, browser, and web blocks of _reconfigure_provider.
Symmetric across all three tool categories. No behavior change for any
provider that does not set tts_provider, browser_provider, or web_backend.

Fixes #15229
This commit is contained in:
nftpoetrist
2026-04-25 00:45:31 +03:00
committed by Teknium
parent ba8337464d
commit 4e2b20b705
2 changed files with 37 additions and 4 deletions

View File

@@ -2,10 +2,13 @@
from unittest.mock import patch
import pytest
from hermes_cli.tools_config import (
_DEFAULT_OFF_TOOLSETS,
_apply_toolset_change,
_configure_provider,
_reconfigure_provider,
_get_platform_tools,
_platform_toolset_summary,
_reconfigure_tool,
@@ -898,3 +901,27 @@ def test_get_effective_configurable_toolsets_dedupes_bundled_plugins():
assert len(spotify_rows) == 1, spotify_rows
# Built-in label wins over the plugin label.
assert spotify_rows[0][1] == "🎵 Spotify"
@pytest.mark.parametrize("provider,config_key,expected", [
# managed provider → use_gateway True
({"name": "T", "tts_provider": "elevenlabs", "managed_nous_feature": "tts", "env_vars": []}, "tts", True),
({"name": "B", "browser_provider": "browserbase", "managed_nous_feature": "browser", "env_vars": []}, "browser", True),
({"name": "W", "web_backend": "tavily", "managed_nous_feature": "web", "env_vars": []}, "web", True),
# self-hosted provider → use_gateway False
({"name": "T", "tts_provider": "elevenlabs", "env_vars": []}, "tts", False),
({"name": "B", "browser_provider": "browserbase", "env_vars": []}, "browser", False),
({"name": "W", "web_backend": "tavily", "env_vars": []}, "web", False),
])
def test_reconfigure_provider_syncs_use_gateway(provider, config_key, expected):
config = {}
_reconfigure_provider(provider, config)
assert config[config_key]["use_gateway"] is expected
def test_reconfigure_browser_provider_overwrites_stale_use_gateway():
# Switching from managed (use_gateway=True) to self-hosted must clear the stale flag.
config = {"browser": {"cloud_provider": "managed-browser", "use_gateway": True}}
provider = {"name": "Browserbase", "browser_provider": "browserbase", "env_vars": []}
_reconfigure_provider(provider, config)
assert config["browser"]["use_gateway"] is False