mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-06 22:32:39 +02:00
Add subagent spec packing and shared package exports.
This commit is contained in:
parent
77f52af6cc
commit
5f84d46f96
2 changed files with 72 additions and 0 deletions
|
|
@ -0,0 +1,25 @@
|
||||||
|
"""Cross-slice helpers for route subagents."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from app.agents.multi_agent_with_deepagents.subagents.shared.md_file_reader import (
|
||||||
|
read_md_file,
|
||||||
|
)
|
||||||
|
from app.agents.multi_agent_with_deepagents.subagents.shared.permissions import (
|
||||||
|
ToolPermissionItem,
|
||||||
|
ToolsPermissions,
|
||||||
|
merge_tools_permissions,
|
||||||
|
tool_permission_row,
|
||||||
|
)
|
||||||
|
from app.agents.multi_agent_with_deepagents.subagents.shared.subagent_builder import (
|
||||||
|
pack_subagent,
|
||||||
|
)
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"ToolPermissionItem",
|
||||||
|
"ToolsPermissions",
|
||||||
|
"merge_tools_permissions",
|
||||||
|
"pack_subagent",
|
||||||
|
"read_md_file",
|
||||||
|
"tool_permission_row",
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,47 @@
|
||||||
|
"""Build delegated sub-agent specs from route-local pieces."""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from collections.abc import Sequence
|
||||||
|
from typing import Any, cast
|
||||||
|
|
||||||
|
from deepagents import SubAgent
|
||||||
|
from deepagents.middleware.patch_tool_calls import PatchToolCallsMiddleware
|
||||||
|
from langchain_core.language_models import BaseChatModel
|
||||||
|
from langchain_core.tools import BaseTool
|
||||||
|
|
||||||
|
from app.agents.new_chat.middleware import DedupHITLToolCallsMiddleware
|
||||||
|
|
||||||
|
|
||||||
|
def pack_subagent(
|
||||||
|
*,
|
||||||
|
name: str,
|
||||||
|
description: str,
|
||||||
|
system_prompt: str,
|
||||||
|
tools: list[BaseTool],
|
||||||
|
model: BaseChatModel | None = None,
|
||||||
|
extra_middleware: Sequence[Any] | None = None,
|
||||||
|
interrupt_on: dict[str, bool] | None = None,
|
||||||
|
) -> SubAgent:
|
||||||
|
"""Pack the route-local pieces passed in into one sub-agent spec."""
|
||||||
|
if not system_prompt.strip():
|
||||||
|
msg = f"Subagent {name!r}: system_prompt is empty"
|
||||||
|
raise ValueError(msg)
|
||||||
|
|
||||||
|
middleware: list[Any] = [
|
||||||
|
*(extra_middleware or []),
|
||||||
|
PatchToolCallsMiddleware(),
|
||||||
|
DedupHITLToolCallsMiddleware(agent_tools=tools),
|
||||||
|
]
|
||||||
|
spec: dict[str, Any] = {
|
||||||
|
"name": name,
|
||||||
|
"description": description,
|
||||||
|
"system_prompt": system_prompt,
|
||||||
|
"tools": tools,
|
||||||
|
"middleware": middleware,
|
||||||
|
}
|
||||||
|
if model is not None:
|
||||||
|
spec["model"] = model
|
||||||
|
if interrupt_on:
|
||||||
|
spec["interrupt_on"] = interrupt_on
|
||||||
|
return cast(SubAgent, spec)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue