mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-06 14:22:47 +02:00
Revert "feat(subagents): add read-only gmail subagent."
This reverts commit e57633dab2.
This commit is contained in:
parent
e57633dab2
commit
fa5a209e5a
1 changed files with 0 additions and 143 deletions
|
|
@ -1,143 +0,0 @@
|
||||||
"""Gmail-focused subagent implementation."""
|
|
||||||
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import asyncio
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
from langchain.agents import create_agent
|
|
||||||
|
|
||||||
from app.agents.multi_agent_v1.contracts import SubagentTaskPlan
|
|
||||||
from app.agents.multi_agent_v1.subagents.utils import (
|
|
||||||
build_disabled_tools_list,
|
|
||||||
build_subagent_error_result,
|
|
||||||
build_subagent_input_state,
|
|
||||||
build_subagent_run_config,
|
|
||||||
extract_final_ai_message_text_from_state,
|
|
||||||
load_llm_for_request,
|
|
||||||
read_optional_integer,
|
|
||||||
read_optional_nonempty_string,
|
|
||||||
)
|
|
||||||
from app.agents.new_chat.system_prompt import build_surfsense_system_prompt
|
|
||||||
from app.agents.new_chat.tools.registry import (
|
|
||||||
build_tools_async,
|
|
||||||
get_connector_gated_tools,
|
|
||||||
)
|
|
||||||
from app.db import ChatVisibility, async_session_maker
|
|
||||||
from app.services.connector_service import ConnectorService
|
|
||||||
|
|
||||||
GMAIL_SUBAGENT_READ_ONLY_TOOLS: tuple[str, ...] = (
|
|
||||||
"get_connected_accounts",
|
|
||||||
"search_gmail",
|
|
||||||
"read_gmail_email",
|
|
||||||
"search_surfsense_docs",
|
|
||||||
"web_search",
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class GmailSubagent:
|
|
||||||
async def run(
|
|
||||||
self,
|
|
||||||
*,
|
|
||||||
plan: SubagentTaskPlan,
|
|
||||||
stream_kwargs: dict[str, Any],
|
|
||||||
) -> dict[str, Any]:
|
|
||||||
search_space_id = stream_kwargs.get("search_space_id")
|
|
||||||
if not isinstance(search_space_id, int):
|
|
||||||
return build_subagent_error_result("invalid_search_space_id")
|
|
||||||
|
|
||||||
llm_config_id = stream_kwargs.get("llm_config_id")
|
|
||||||
if not isinstance(llm_config_id, int):
|
|
||||||
return build_subagent_error_result("invalid_llm_config_id")
|
|
||||||
|
|
||||||
async with async_session_maker() as session:
|
|
||||||
llm = await load_llm_for_request(
|
|
||||||
session=session,
|
|
||||||
llm_config_id=llm_config_id,
|
|
||||||
search_space_id=search_space_id,
|
|
||||||
)
|
|
||||||
if llm is None:
|
|
||||||
return build_subagent_error_result("missing_llm")
|
|
||||||
|
|
||||||
agent = await _create_gmail_subagent_agent(
|
|
||||||
session=session,
|
|
||||||
llm=llm,
|
|
||||||
search_space_id=search_space_id,
|
|
||||||
disabled_tools=build_disabled_tools_list(
|
|
||||||
stream_kwargs.get("disabled_tools")
|
|
||||||
),
|
|
||||||
user_id=read_optional_nonempty_string(stream_kwargs, "user_id"),
|
|
||||||
thread_id=read_optional_integer(stream_kwargs, "chat_id"),
|
|
||||||
thread_visibility=stream_kwargs.get("thread_visibility")
|
|
||||||
or ChatVisibility.PRIVATE,
|
|
||||||
)
|
|
||||||
state = await agent.ainvoke(
|
|
||||||
build_subagent_input_state(goal=plan.goal, stream_kwargs=stream_kwargs),
|
|
||||||
config=build_subagent_run_config(
|
|
||||||
stream_kwargs=stream_kwargs,
|
|
||||||
scope="gmail",
|
|
||||||
),
|
|
||||||
)
|
|
||||||
summary = extract_final_ai_message_text_from_state(state)
|
|
||||||
if not summary:
|
|
||||||
return build_subagent_error_result("empty_subagent_summary")
|
|
||||||
return {
|
|
||||||
"status": "success",
|
|
||||||
"summary": summary,
|
|
||||||
"evidence": [],
|
|
||||||
"artifacts": [],
|
|
||||||
"needs_human": False,
|
|
||||||
"error_class": None,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def _create_gmail_subagent_agent(
|
|
||||||
*,
|
|
||||||
session: Any,
|
|
||||||
llm: Any,
|
|
||||||
search_space_id: int,
|
|
||||||
disabled_tools: list[str],
|
|
||||||
user_id: str | None,
|
|
||||||
thread_id: int | None,
|
|
||||||
thread_visibility: ChatVisibility,
|
|
||||||
) -> Any:
|
|
||||||
connector_service = ConnectorService(session, search_space_id=search_space_id)
|
|
||||||
available_connector_enums = await connector_service.get_available_connectors(
|
|
||||||
search_space_id
|
|
||||||
)
|
|
||||||
available_connectors = [
|
|
||||||
connector.value if hasattr(connector, "value") else str(connector)
|
|
||||||
for connector in available_connector_enums
|
|
||||||
]
|
|
||||||
available_document_types = await connector_service.get_available_document_types(
|
|
||||||
search_space_id
|
|
||||||
)
|
|
||||||
effective_disabled_tools = list(disabled_tools)
|
|
||||||
effective_disabled_tools.extend(get_connector_gated_tools(available_connectors))
|
|
||||||
dependencies = {
|
|
||||||
"search_space_id": search_space_id,
|
|
||||||
"db_session": session,
|
|
||||||
"connector_service": connector_service,
|
|
||||||
"user_id": user_id,
|
|
||||||
"thread_id": thread_id,
|
|
||||||
"thread_visibility": thread_visibility,
|
|
||||||
"available_connectors": available_connectors,
|
|
||||||
"available_document_types": available_document_types,
|
|
||||||
"llm": llm,
|
|
||||||
}
|
|
||||||
tools = await build_tools_async(
|
|
||||||
dependencies=dependencies,
|
|
||||||
enabled_tools=list(GMAIL_SUBAGENT_READ_ONLY_TOOLS),
|
|
||||||
disabled_tools=effective_disabled_tools,
|
|
||||||
)
|
|
||||||
system_prompt = build_surfsense_system_prompt(
|
|
||||||
thread_visibility=thread_visibility,
|
|
||||||
enabled_tool_names={tool.name for tool in tools},
|
|
||||||
disabled_tool_names=set(effective_disabled_tools),
|
|
||||||
)
|
|
||||||
return await asyncio.to_thread(
|
|
||||||
create_agent,
|
|
||||||
llm,
|
|
||||||
system_prompt=system_prompt,
|
|
||||||
tools=tools,
|
|
||||||
)
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue