From 021cf7cc210653dd22eb727d53b36489a40b0d8d Mon Sep 17 00:00:00 2001 From: Arnav Date: Sat, 25 Apr 2026 11:54:42 -0500 Subject: [PATCH] working tools for api key --- backend/apps/agents/agents.py | 12 ++++++++++-- .../handlers/make_create_agent_handler.py | 2 +- .../handlers/make_invoke_agent_handler.py | 2 +- .../handlers/utils/run_browser_agent.py | 2 +- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/backend/apps/agents/agents.py b/backend/apps/agents/agents.py index efa3ee94..8da49047 100644 --- a/backend/apps/agents/agents.py +++ b/backend/apps/agents/agents.py @@ -43,16 +43,24 @@ NINE_ROUTER_MODEL_MAP: dict[str, str] = { "haiku": "cc/claude-haiku-4-5-20251001", } +CANONICAL_MODEL_MAP: dict[str, str] = { + alias: mid.removeprefix("cc/") + for alias, mid in NINE_ROUTER_MODEL_MAP.items() +} + def _resolve_nine_router_model(model: str, has_api_key: bool) -> str: """Resolve a model name for the active connection mode. - When using a direct API key the model passes through unchanged. + When using a direct API key, any ``cc/`` prefix is stripped (the model + may have come from 9Router's model list) and short aliases are mapped + to their canonical Anthropic model IDs. When routing through 9Router, short aliases are mapped to their ``cc/``-prefixed canonical IDs; models that already carry the prefix are returned as-is to avoid double-prefixing. """ if has_api_key: - return model + clean = model.removeprefix("cc/") + return CANONICAL_MODEL_MAP.get(clean, clean) if model.startswith("cc/"): return model return NINE_ROUTER_MODEL_MAP.get(model, f"cc/{model}") diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_create_agent_handler.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_create_agent_handler.py index 2d59bfd8..db43c6a6 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_create_agent_handler.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_create_agent_handler.py @@ -28,7 +28,7 @@ def make_create_agent_handler(parent: Agent): if child.task: await child.task last_response = "No response from sub-agent." - for m in reversed[AnyMessage](child.messages.messages): + for m in reversed(child.messages.messages): if isinstance(m, AssistantMessage): last_response = m.content break diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_invoke_agent_handler.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_invoke_agent_handler.py index 17038752..5fe8523d 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_invoke_agent_handler.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/agents_toolkit/handlers/make_invoke_agent_handler.py @@ -36,7 +36,7 @@ def make_invoke_agent_handler(agent_registry: Dict[str, Agent]): await fork.task last_response = "No response from invoked agent." - for m in reversed[AnyMessage](fork.messages.messages): + for m in reversed(fork.messages.messages): if isinstance(m, AssistantMessage): last_response = m.content break diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_agent.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_agent.py index f758af45..ee2a4ee2 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_agent.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/utils/run_browser_agent.py @@ -56,7 +56,7 @@ async def run_browser_agent( if child.task: await child.task - for m in reversed[AnyMessage](child.messages.messages): + for m in reversed(child.messages.messages): if isinstance(m, AssistantMessage): return m.content