diff --git a/gateway/platforms/api_server.py b/gateway/platforms/api_server.py index 5b7064824633f..302b336a1c01f 100644 --- a/gateway/platforms/api_server.py +++ b/gateway/platforms/api_server.py @@ -3095,6 +3095,7 @@ class APIServerAdapter(BasePlatformAdapter): _get_effective_configurable_toolsets, _get_platform_tools, _toolset_has_keys, + get_nous_subscription_features, ) from toolsets import resolve_toolset @@ -3104,6 +3105,7 @@ class APIServerAdapter(BasePlatformAdapter): "api_server", include_default_mcp_servers=False, ) + features = get_nous_subscription_features(config) data: List[Dict[str, Any]] = [] for name, label, desc in _get_effective_configurable_toolsets(): try: @@ -3116,7 +3118,7 @@ class APIServerAdapter(BasePlatformAdapter): "label": label, "description": desc, "enabled": is_enabled, - "configured": _toolset_has_keys(name, config), + "configured": _toolset_has_keys(name, config, features=features), "tools": tools, }) except Exception: diff --git a/tests/gateway/test_api_server.py b/tests/gateway/test_api_server.py index 8c6f586c1ad5a..459bd908e1973 100644 --- a/tests/gateway/test_api_server.py +++ b/tests/gateway/test_api_server.py @@ -913,6 +913,7 @@ class TestToolsetsEndpoint: ("default", "Default Tools", "Core tools"), ("web", "Web Tools", "Search and extract"), ] + feature_snapshot = object() with patch( "hermes_cli.tools_config._get_effective_configurable_toolsets", return_value=fake_toolsets, @@ -920,9 +921,12 @@ class TestToolsetsEndpoint: "hermes_cli.tools_config._get_platform_tools", return_value={"default"}, ), patch( + "hermes_cli.tools_config.get_nous_subscription_features", + return_value=feature_snapshot, + ) as resolve_features, patch( "hermes_cli.tools_config._toolset_has_keys", return_value=True, - ), patch( + ) as has_keys, patch( "toolsets.resolve_toolset", side_effect=lambda name: { "default": ["terminal", "read_file"], @@ -943,6 +947,13 @@ class TestToolsetsEndpoint: assert by_name["web"]["tools"] == ["web_search"] assert by_name["default"]["configured"] is True + resolve_features.assert_called_once() + assert has_keys.call_count == len(fake_toolsets) + assert all( + call.kwargs["features"] is feature_snapshot + for call in has_keys.call_args_list + ) + # --------------------------------------------------------------------------- # /v1/chat/completions endpoint @@ -2846,4 +2857,3 @@ class TestCreateAgentModelRecovery: adapter._create_agent(session_id="another-session", gateway_session_key="stable-chan-1") assert captured[1]["model"] == "minimax/minimax-m3" -