From 21bd1aec0e36fc0238f9107d5e229386118df323 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Sat, 4 Jul 2026 20:49:59 +0200 Subject: [PATCH] feat(google_search): add subagent builder --- .../builtins/google_search/__init__.py | 1 + .../subagents/builtins/google_search/agent.py | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/__init__.py create mode 100644 surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/agent.py diff --git a/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/__init__.py b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/__init__.py new file mode 100644 index 000000000..134c436ca --- /dev/null +++ b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/__init__.py @@ -0,0 +1 @@ +"""``google_search`` builtin subagent: structured Google Search results.""" diff --git a/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/agent.py b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/agent.py new file mode 100644 index 000000000..f98d68ac4 --- /dev/null +++ b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/google_search/agent.py @@ -0,0 +1,43 @@ +"""``google_search`` route: ``SurfSenseSubagentSpec`` builder for deepagents.""" + +from __future__ import annotations + +from typing import Any + +from langchain_core.language_models import BaseChatModel +from langchain_core.tools import BaseTool + +from app.agents.chat.multi_agent_chat.subagents.shared.md_file_reader import ( + read_md_file, +) +from app.agents.chat.multi_agent_chat.subagents.shared.spec import SurfSenseSubagentSpec +from app.agents.chat.multi_agent_chat.subagents.shared.subagent_builder import ( + pack_subagent, +) + +from .tools.index import NAME, RULESET, load_tools + + +def build_subagent( + *, + dependencies: dict[str, Any], + model: BaseChatModel | None = None, + middleware_stack: dict[str, Any] | None = None, + mcp_tools: list[BaseTool] | None = None, +) -> SurfSenseSubagentSpec: + tools = [*load_tools(dependencies=dependencies), *(mcp_tools or [])] + description = ( + read_md_file(__package__, "description").strip() + or "Searches Google and returns structured results for a query." + ) + system_prompt = read_md_file(__package__, "system_prompt").strip() + return pack_subagent( + name=NAME, + description=description, + system_prompt=system_prompt, + tools=tools, + ruleset=RULESET, + dependencies=dependencies, + model=model, + middleware_stack=middleware_stack, + )