diff --git a/surfsense_backend/app/agents/multi_agent_chat/supervisor/__init__.py b/surfsense_backend/app/agents/multi_agent_chat/supervisor/__init__.py new file mode 100644 index 000000000..d96ee3e39 --- /dev/null +++ b/surfsense_backend/app/agents/multi_agent_chat/supervisor/__init__.py @@ -0,0 +1,5 @@ +"""Supervisor agent graph only; supply routing ``tools`` from ``build_supervisor_routing_tools``.""" + +from app.agents.multi_agent_chat.supervisor.graph import build_supervisor_agent + +__all__ = ["build_supervisor_agent"] diff --git a/surfsense_backend/app/agents/multi_agent_chat/supervisor/graph.py b/surfsense_backend/app/agents/multi_agent_chat/supervisor/graph.py new file mode 100644 index 000000000..5cee73c37 --- /dev/null +++ b/surfsense_backend/app/agents/multi_agent_chat/supervisor/graph.py @@ -0,0 +1,30 @@ +"""Compile the supervisor agent graph (supervisor prompt + caller-supplied routing tools).""" + +from __future__ import annotations + +from collections.abc import Sequence + +import app.agents.multi_agent_chat.supervisor as supervisor_pkg + +from langchain.agents import create_agent +from langchain_core.language_models import BaseChatModel +from langchain_core.tools import BaseTool +from langgraph.types import Checkpointer + +from app.agents.multi_agent_chat.shared.prompt_loader import read_prompt_md + + +def build_supervisor_agent( + llm: BaseChatModel, + *, + tools: Sequence[BaseTool], + checkpointer: Checkpointer | None = None, +): + """Compile the supervisor **agent** (graph). ``tools`` = output of ``build_supervisor_routing_tools``.""" + system_prompt = read_prompt_md(supervisor_pkg.__name__, "supervisor_prompt") + return create_agent( + llm, + system_prompt=system_prompt, + tools=list(tools), + checkpointer=checkpointer, + ) diff --git a/surfsense_backend/app/agents/multi_agent_chat/supervisor/supervisor_prompt.md b/surfsense_backend/app/agents/multi_agent_chat/supervisor/supervisor_prompt.md new file mode 100644 index 000000000..071a9eafe --- /dev/null +++ b/surfsense_backend/app/agents/multi_agent_chat/supervisor/supervisor_prompt.md @@ -0,0 +1 @@ +You are the supervisor agent. Route Gmail-related requests through the **gmail** tool and Google Calendar requests through the **calendar** tool, each with a clear task description. Answer directly when no sub-agent is needed. When sub-agents return results, combine them into one coherent reply for the user.