From 0fcb2acfdc42eefdc6fc3d92597806dd88821962 Mon Sep 17 00:00:00 2001 From: CREDO23 Date: Thu, 30 Apr 2026 00:59:57 +0200 Subject: [PATCH] Add multi_agent_chat supervisor agent graph and supervisor prompt. --- .../multi_agent_chat/supervisor/__init__.py | 5 ++++ .../multi_agent_chat/supervisor/graph.py | 30 +++++++++++++++++++ .../supervisor/supervisor_prompt.md | 1 + 3 files changed, 36 insertions(+) create mode 100644 surfsense_backend/app/agents/multi_agent_chat/supervisor/__init__.py create mode 100644 surfsense_backend/app/agents/multi_agent_chat/supervisor/graph.py create mode 100644 surfsense_backend/app/agents/multi_agent_chat/supervisor/supervisor_prompt.md 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.