From 6888f0b8bb097f17487817823a201f601b7d6772 Mon Sep 17 00:00:00 2001 From: Anish Sarkar <104695310+AnishSarkar22@users.noreply.github.com> Date: Wed, 15 Jul 2026 10:24:40 +0530 Subject: [PATCH] feat(amazon): add subagent builder --- .../subagents/builtins/amazon/__init__.py | 1 + .../subagents/builtins/amazon/agent.py | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/__init__.py create mode 100644 surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/agent.py diff --git a/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/__init__.py b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/__init__.py new file mode 100644 index 000000000..24f27b429 --- /dev/null +++ b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/__init__.py @@ -0,0 +1 @@ +"""``amazon`` builtin subagent: structured public Amazon product data.""" diff --git a/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/agent.py b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/agent.py new file mode 100644 index 000000000..cc2e261b4 --- /dev/null +++ b/surfsense_backend/app/agents/chat/multi_agent_chat/subagents/builtins/amazon/agent.py @@ -0,0 +1,43 @@ +"""``amazon`` 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 "Scrapes public Amazon product data for a URL or search term." + ) + 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, + )