ishaq101's picture
[NOTICKET] Demo agentic agent
bef5e76
"""Search tool for agent."""
from langchain_core.tools import tool
from src.rag.retriever import retriever
from sqlalchemy.ext.asyncio import AsyncSession
from src.middlewares.logging import get_logger
logger = get_logger("search_tool")
@tool
async def search_documents(
query: str,
user_id: str,
db: AsyncSession,
num_results: int = 5
) -> str:
"""Search user's uploaded documents for relevant information.
Args:
query: The search query or question
user_id: The user's ID
db: Database session
num_results: Number of results to return (default: 5)
Returns:
Relevant document excerpts with source and page information
"""
try:
results = await retriever.retrieve(query, user_id, db, num_results)
if not results:
return "No relevant information found in the documents."
formatted_results = []
for result in results:
filename = result["metadata"].get("filename", "Unknown")
page = result["metadata"].get("page_label")
source_label = f"{filename}, p.{page}" if page else filename
formatted_results.append(f"[Source: {source_label}]\n{result['content']}\n")
return "\n".join(formatted_results)
except Exception as e:
logger.error("Search failed", error=str(e))
return "Sorry, I encountered an error while searching the documents."