mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-06 14:22:47 +02:00
Add registry and factory for route subagent specs.
This commit is contained in:
parent
745bcec390
commit
dcc348d72a
1 changed files with 132 additions and 0 deletions
|
|
@ -0,0 +1,132 @@
|
|||
"""Central registry of route ``build_subagent`` callables (keyed by ``NAME``)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Sequence
|
||||
from typing import Any, Protocol
|
||||
|
||||
from deepagents import SubAgent
|
||||
from langchain_core.language_models import BaseChatModel
|
||||
|
||||
from app.agents.multi_agent_with_deepagents.subagents.builtins.deliverables.agent import (
|
||||
build_subagent as build_deliverables_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.builtins.memory.agent import (
|
||||
build_subagent as build_memory_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.builtins.research.agent import (
|
||||
build_subagent as build_research_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.airtable.agent import (
|
||||
build_subagent as build_airtable_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.calendar.agent import (
|
||||
build_subagent as build_calendar_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.clickup.agent import (
|
||||
build_subagent as build_clickup_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.confluence.agent import (
|
||||
build_subagent as build_confluence_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.discord.agent import (
|
||||
build_subagent as build_discord_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.dropbox.agent import (
|
||||
build_subagent as build_dropbox_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.gmail.agent import (
|
||||
build_subagent as build_gmail_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.google_drive.agent import (
|
||||
build_subagent as build_google_drive_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.jira.agent import (
|
||||
build_subagent as build_jira_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.linear.agent import (
|
||||
build_subagent as build_linear_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.luma.agent import (
|
||||
build_subagent as build_luma_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.notion.agent import (
|
||||
build_subagent as build_notion_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.onedrive.agent import (
|
||||
build_subagent as build_onedrive_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.slack.agent import (
|
||||
build_subagent as build_slack_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.connectors.teams.agent import (
|
||||
build_subagent as build_teams_subagent,
|
||||
)
|
||||
from app.agents.multi_agent_with_deepagents.subagents.shared.permissions import (
|
||||
ToolsPermissions,
|
||||
)
|
||||
|
||||
|
||||
class SubagentBuilder(Protocol):
|
||||
def __call__(
|
||||
self,
|
||||
*,
|
||||
dependencies: dict[str, Any],
|
||||
model: BaseChatModel | None = None,
|
||||
extra_middleware: Sequence[Any] | None = None,
|
||||
extra_tools_bucket: ToolsPermissions | None = None,
|
||||
) -> SubAgent: ...
|
||||
|
||||
|
||||
SUBAGENT_BUILDERS_BY_NAME: dict[str, SubagentBuilder] = {
|
||||
"airtable": build_airtable_subagent,
|
||||
"calendar": build_calendar_subagent,
|
||||
"clickup": build_clickup_subagent,
|
||||
"confluence": build_confluence_subagent,
|
||||
"deliverables": build_deliverables_subagent,
|
||||
"discord": build_discord_subagent,
|
||||
"dropbox": build_dropbox_subagent,
|
||||
"gmail": build_gmail_subagent,
|
||||
"google_drive": build_google_drive_subagent,
|
||||
"jira": build_jira_subagent,
|
||||
"linear": build_linear_subagent,
|
||||
"luma": build_luma_subagent,
|
||||
"memory": build_memory_subagent,
|
||||
"notion": build_notion_subagent,
|
||||
"onedrive": build_onedrive_subagent,
|
||||
"research": build_research_subagent,
|
||||
"slack": build_slack_subagent,
|
||||
"teams": build_teams_subagent,
|
||||
}
|
||||
|
||||
__all__ = [
|
||||
"SUBAGENT_BUILDERS_BY_NAME",
|
||||
"SubagentBuilder",
|
||||
"build_subagents",
|
||||
]
|
||||
|
||||
|
||||
def build_subagents(
|
||||
*,
|
||||
dependencies: dict[str, Any],
|
||||
model: BaseChatModel | None = None,
|
||||
extra_middleware: Sequence[Any] | None = None,
|
||||
mcp_tools_by_agent: dict[str, ToolsPermissions] | None = None,
|
||||
only_names: frozenset[str] | None = None,
|
||||
) -> list[SubAgent]:
|
||||
"""Build registry route specs; ``only_names`` selects which routes."""
|
||||
mcp = mcp_tools_by_agent or {}
|
||||
specs: list[SubAgent] = []
|
||||
for name in sorted(SUBAGENT_BUILDERS_BY_NAME):
|
||||
if only_names is not None and name not in only_names:
|
||||
continue
|
||||
builder = SUBAGENT_BUILDERS_BY_NAME[name]
|
||||
specs.append(
|
||||
builder(
|
||||
dependencies=dependencies,
|
||||
model=model,
|
||||
extra_middleware=extra_middleware,
|
||||
extra_tools_bucket=mcp.get(name),
|
||||
),
|
||||
)
|
||||
return specs
|
||||
Loading…
Add table
Add a link
Reference in a new issue