fix(api-server): reuse toolset feature snapshot

This commit is contained in:
szzhoujiarui 2026-08-01 10:40:44 +00:00 committed by kshitij
parent 16bd5d23b4
commit b45d886906
2 changed files with 15 additions and 3 deletions

View File

@ -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:

View File

@ -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"