Add multi_agent_chat routing tools and supervisor routing composition.

This commit is contained in:
CREDO23 2026-04-30 00:59:58 +02:00
parent 0fcb2acfdc
commit f1a5f1c683
3 changed files with 83 additions and 0 deletions

View file

@ -0,0 +1,11 @@
"""Supervisor routing: domain-agent wrappers and composed routing tool lists."""
from app.agents.multi_agent_chat.routing.from_domain_agents import routing_tools_from_domain_agents
from app.agents.multi_agent_chat.routing.supervisor_routing import build_supervisor_routing_tools
from app.agents.multi_agent_chat.shared.invoke_output import extract_last_assistant_text
__all__ = [
"build_supervisor_routing_tools",
"extract_last_assistant_text",
"routing_tools_from_domain_agents",
]

View file

@ -0,0 +1,45 @@
"""LangChain ``@tool`` wrappers that invoke compiled domain-agent graphs (supervisor-facing only)."""
from __future__ import annotations
from typing import Any
from langchain_core.tools import BaseTool, tool
from app.agents.multi_agent_chat.shared.invoke_output import extract_last_assistant_text
def routing_tools_from_domain_agents(
*,
gmail_domain_agent: Any,
calendar_domain_agent: Any,
) -> list[BaseTool]:
"""Build ``gmail`` / ``calendar`` tools that invoke the given graphs (factory, not import-time exports)."""
@tool(
"gmail",
description=(
"Route Gmail-related work to the Gmail sub-agent. "
"Pass a clear natural-language task."
),
)
def call_gmail_agent(task: str) -> str:
result = gmail_domain_agent.invoke(
{"messages": [{"role": "user", "content": task}]}
)
return extract_last_assistant_text(result)
@tool(
"calendar",
description=(
"Route Google Calendar work to the Calendar sub-agent. "
"Pass a clear natural-language task."
),
)
def call_calendar_agent(task: str) -> str:
result = calendar_domain_agent.invoke(
{"messages": [{"role": "user", "content": task}]}
)
return extract_last_assistant_text(result)
return [call_gmail_agent, call_calendar_agent]

View file

@ -0,0 +1,27 @@
"""Compose domain agents + connector tool lists into supervisor ``gmail`` / ``calendar`` routing tools."""
from __future__ import annotations
from collections.abc import Sequence
from langchain_core.language_models import BaseChatModel
from langchain_core.tools import BaseTool
from app.agents.multi_agent_chat.calendar import build_calendar_domain_agent
from app.agents.multi_agent_chat.gmail import build_gmail_domain_agent
from app.agents.multi_agent_chat.routing.from_domain_agents import routing_tools_from_domain_agents
def build_supervisor_routing_tools(
llm: BaseChatModel,
*,
gmail_tools: Sequence[BaseTool] | None = None,
calendar_tools: Sequence[BaseTool] | None = None,
) -> list[BaseTool]:
"""Domain agents (with their connector tools) → ``gmail`` / ``calendar`` routing tools."""
gmail_domain_agent = build_gmail_domain_agent(llm, list(gmail_tools or []))
calendar_domain_agent = build_calendar_domain_agent(llm, list(calendar_tools or []))
return routing_tools_from_domain_agents(
gmail_domain_agent=gmail_domain_agent,
calendar_domain_agent=calendar_domain_agent,
)