From 498aa8aa0dbaa5bf20e9e9a0022f543605b105df Mon Sep 17 00:00:00 2001 From: haikdc Date: Thu, 2 Apr 2026 19:09:07 -0700 Subject: [PATCH] [Haik]: ckpt, pulled out the BrowserCommandFn also re implemented ws.has_global_connections --- backend/apps/agents/ws.py | 10 +++++----- .../core/shared_structs/browser/BrowserCommandFn.py | 3 +++ .../tools/make_builtin_toolkit/make_builtin_toolkit.py | 2 +- .../handlers/make_browser_action_handler.py | 5 ++--- .../make_browser_actions_toolkit.py | 3 ++- .../handlers/make_create_browser_agent_handler.py | 3 +-- .../handlers/make_invoke_browser_agent_handler.py | 3 +-- .../handlers/utils/run_browser_agent.py | 4 ++-- .../make_browser_delegation_toolkit.py | 3 +-- 9 files changed, 18 insertions(+), 18 deletions(-) create mode 100644 backend/core/shared_structs/browser/BrowserCommandFn.py diff --git a/backend/apps/agents/ws.py b/backend/apps/agents/ws.py index e35c315b..603aedf4 100644 --- a/backend/apps/agents/ws.py +++ b/backend/apps/agents/ws.py @@ -9,16 +9,12 @@ Three concerns, one module: import asyncio import json -import logging from typing import Callable, Awaitable from fastapi import WebSocket from pydantic import BaseModel, Field -logger = logging.getLogger(__name__) - - # --------------------------------------------------------------------------- # 1. Connection pool # --------------------------------------------------------------------------- @@ -46,6 +42,10 @@ def disconnect_session(session_id: str, ws: WebSocket) -> None: del P_SESSION_CONNECTIONS[session_id] +def has_global_connections() -> bool: + return len(P_GLOBAL_CONNECTIONS) > 0 + + def disconnect_global(ws: WebSocket) -> None: P_GLOBAL_CONNECTIONS[:] = [c for c in P_GLOBAL_CONNECTIONS if c is not ws] @@ -98,7 +98,7 @@ class FutureBridge(BaseModel): try: return await asyncio.wait_for(future, timeout=timeout) except asyncio.TimeoutError: - logger.warning("FutureBridge request %s timed out after %ss", request_id, timeout) + print(f"[FutureBridge.request] Request {request_id} timed out after {timeout}s") return {"error": "Timed out"} finally: self.p_pending.pop(request_id, None) diff --git a/backend/core/shared_structs/browser/BrowserCommandFn.py b/backend/core/shared_structs/browser/BrowserCommandFn.py new file mode 100644 index 00000000..2231289e --- /dev/null +++ b/backend/core/shared_structs/browser/BrowserCommandFn.py @@ -0,0 +1,3 @@ +from typing import Any, Callable, Awaitable, Dict + +BrowserCommandFn = Callable[[str, str, str, Dict[str, Any]], Awaitable[dict]] diff --git a/backend/core/tools/make_builtin_toolkit/make_builtin_toolkit.py b/backend/core/tools/make_builtin_toolkit/make_builtin_toolkit.py index 359858b6..40c918eb 100644 --- a/backend/core/tools/make_builtin_toolkit/make_builtin_toolkit.py +++ b/backend/core/tools/make_builtin_toolkit/make_builtin_toolkit.py @@ -4,7 +4,7 @@ from backend.core.tools.shared_structs.Toolkit import Toolkit from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.agents_toolkit.make_agents_toolkit import make_agents_toolkit from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.make_browser_delegation_toolkit import make_browser_delegation_toolkit from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.make_browser_actions_toolkit import make_browser_actions_toolkit -from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import BrowserCommandFn +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn from backend.core.tools.make_builtin_toolkit.pre_existing_toolkits.basic_toolkits.FILESYSTEM_TOOLKIT import FILESYSTEM_TOOLKIT from backend.core.tools.make_builtin_toolkit.pre_existing_toolkits.meta_toolkits.INTERACTION_TOOLKIT import INTERACTION_TOOLKIT diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py index 042e00df..27dfa0f8 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/handlers/make_browser_action_handler.py @@ -1,10 +1,9 @@ import json -from typing import Dict, Any, Callable, Awaitable +from typing import Dict, Any from typeguard import typechecked from backend.core.shared_structs.agent.Message.agent_outputs import ToolResponse - -BrowserCommandFn = Callable[[str, str, str, Dict[str, Any]], Awaitable[dict]] +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn ACTION_MAP: Dict[str, str] = { "BrowserScreenshot": "screenshot", diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py index 338f5632..f8a51192 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_actions_toolkit/make_browser_actions_toolkit.py @@ -13,8 +13,9 @@ from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit BrowserWaitInput, ) from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import ( - make_browser_action_handler, BrowserCommandFn, + make_browser_action_handler ) +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn SERVER_NAME = "openswarm-browser-actions" diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py index 114fbcd2..36dff814 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_create_browser_agent_handler.py @@ -6,8 +6,7 @@ from backend.core.shared_structs.agent.Message.agent_outputs import ToolResponse from backend.core.Agent.Agent import Agent from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.run_browser_agent import run_browser_agent from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.create_browser_card import create_browser_card -from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import BrowserCommandFn - +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn class CreateBrowserAgentInput(TypedDict): task: str diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_invoke_browser_agent_handler.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_invoke_browser_agent_handler.py index 20474028..dc2da451 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_invoke_browser_agent_handler.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/handlers/make_invoke_browser_agent_handler.py @@ -4,8 +4,7 @@ from typeguard import typechecked from backend.core.shared_structs.agent.Message.agent_outputs import ToolResponse from backend.core.Agent.Agent import Agent from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.run_browser_agent import run_browser_agent -from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import BrowserCommandFn - +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn class InvokeBrowserAgentInput(TypedDict): browser_id: str 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 36335f63..a84032d5 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 @@ -10,9 +10,9 @@ from backend.core.shared_structs.agent.Message.Message import ( ) from backend.core.tools.shared_structs.MCP_Tool import SDK_MCP_Tool from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.make_browser_actions_toolkit import make_browser_actions_toolkit -from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import BrowserCommandFn -from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.constants import BROWSER_AGENT_SYSTEM_PROMPT +from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_delegation_toolkit.handlers.utils.constants import BROWSER_AGENT_SYSTEM_PROMPT +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn @typechecked async def run_browser_agent( diff --git a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py index caf28aea..9d9bacbb 100644 --- a/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py +++ b/backend/core/tools/make_builtin_toolkit/open_swarm_toolkits/browser_toolkit/make_browser_delegation_toolkit/make_browser_delegation_toolkit.py @@ -8,8 +8,7 @@ from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit make_invoke_browser_agent_handler, InvokeBrowserAgentInput, ) from backend.core.Agent.Agent import Agent -from backend.core.tools.make_builtin_toolkit.open_swarm_toolkits.browser_toolkit.make_browser_actions_toolkit.handlers.make_browser_action_handler import BrowserCommandFn - +from backend.core.shared_structs.browser.BrowserCommandFn import BrowserCommandFn @typechecked def make_browser_delegation_toolkit(parent: Agent, send_command: BrowserCommandFn) -> Toolkit: