SurfSense/surfsense_backend/app/agents/new_chat/chat_deepagent.py

76 lines
2.7 KiB
Python
Raw Normal View History

2025-12-18 23:57:57 -08:00
"""
2025-12-19 20:40:10 +02:00
SurfSense deep agent implementation.
2025-12-18 23:57:57 -08:00
2025-12-19 20:40:10 +02:00
This module provides the factory function for creating SurfSense deep agents
with knowledge base search capability.
2025-12-18 23:57:57 -08:00
"""
2025-12-19 20:21:39 +02:00
from collections.abc import Sequence
2025-12-18 23:57:57 -08:00
from deepagents import create_deep_agent
2025-12-19 20:21:39 +02:00
from langchain_core.tools import BaseTool
2025-12-18 23:57:57 -08:00
from langchain_litellm import ChatLiteLLM
from sqlalchemy.ext.asyncio import AsyncSession
2025-12-19 20:40:10 +02:00
from app.agents.new_chat.context import SurfSenseContextSchema
from app.agents.new_chat.knowledge_base import create_search_knowledge_base_tool
from app.agents.new_chat.system_prompt import build_surfsense_system_prompt
2025-12-18 23:57:57 -08:00
from app.services.connector_service import ConnectorService
# =============================================================================
# Deep Agent Factory
# =============================================================================
def create_surfsense_deep_agent(
llm: ChatLiteLLM,
search_space_id: int,
db_session: AsyncSession,
connector_service: ConnectorService,
2025-12-19 19:11:44 +02:00
user_instructions: str | None = None,
2025-12-19 19:18:32 +02:00
enable_citations: bool = True,
2025-12-19 20:21:39 +02:00
additional_tools: Sequence[BaseTool] | None = None,
2025-12-18 23:57:57 -08:00
):
"""
Create a SurfSense deep agent with knowledge base search capability.
Args:
llm: ChatLiteLLM instance
search_space_id: The user's search space ID
db_session: Database session
connector_service: Initialized connector service
2025-12-19 19:11:44 +02:00
user_instructions: Optional user instructions to inject into the system prompt.
These will be added to the system prompt to customize agent behavior.
2025-12-19 19:18:32 +02:00
enable_citations: Whether to include citation instructions in the system prompt (default: True).
When False, the agent will not be instructed to add citations to responses.
2025-12-19 20:21:39 +02:00
additional_tools: Optional sequence of additional tools to inject into the agent.
The search_knowledge_base tool will always be included.
2025-12-18 23:57:57 -08:00
Returns:
CompiledStateGraph: The configured deep agent
"""
# Create the search tool with injected dependencies
search_tool = create_search_knowledge_base_tool(
search_space_id=search_space_id,
db_session=db_session,
connector_service=connector_service,
)
2025-12-19 20:21:39 +02:00
# Combine search tool with any additional tools
tools = [search_tool]
if additional_tools:
tools.extend(additional_tools)
2025-12-19 19:11:44 +02:00
# Create the deep agent with user-configurable system prompt
2025-12-18 23:57:57 -08:00
agent = create_deep_agent(
model=llm,
2025-12-19 20:21:39 +02:00
tools=tools,
2025-12-19 19:11:44 +02:00
system_prompt=build_surfsense_system_prompt(
2025-12-19 19:18:32 +02:00
user_instructions=user_instructions,
enable_citations=enable_citations,
2025-12-19 19:11:44 +02:00
),
2025-12-18 23:57:57 -08:00
context_schema=SurfSenseContextSchema,
)
return agent