Refactor quick_search
to support SSE response streaming.
Updated `quick_search` to return an `AsyncGenerator` for streaming server-sent events (SSE) during quick research execution. Enhanced error handling to provide detailed feedback and upgraded `gpt-researcher` dependency to version 0.13.3 for compatibility.
This commit is contained in:
parent
d66bb1cd7a
commit
1b60eb0ae6
2 changed files with 24 additions and 6 deletions
|
@ -1,5 +1,5 @@
|
|||
# GPT Researcher dependencies
|
||||
gpt-researcher>=0.12.16
|
||||
gpt-researcher>=0.13.3
|
||||
python-dotenv~=1.1.0
|
||||
|
||||
# MCP dependencies
|
||||
|
|
|
@ -162,7 +162,7 @@ async def deep_research(query: str) -> AsyncGenerator[str, None]:
|
|||
"status": "Research completed successfully",
|
||||
"source_count": len(sources),
|
||||
"context": context,
|
||||
"sources": format_sources_for_response(sources), # Nutze deine Formatierungsfunktion
|
||||
"sources": format_sources_for_response(sources),
|
||||
"source_urls": source_urls
|
||||
}
|
||||
|
||||
|
@ -185,7 +185,7 @@ async def deep_research(query: str) -> AsyncGenerator[str, None]:
|
|||
# oder die Exception weiter werfen, wenn FastMCP das besser handhabt.
|
||||
|
||||
@mcp.tool()
|
||||
async def quick_search(query: str) -> Dict[str, Any]:
|
||||
async def quick_search(query: str) -> AsyncGenerator[str, None]:
|
||||
"""
|
||||
Perform a quick web search on a given query and return search results with snippets.
|
||||
This optimizes for speed over quality and is useful when an LLM doesn't need in-depth
|
||||
|
@ -206,19 +206,37 @@ async def quick_search(query: str) -> Dict[str, Any]:
|
|||
researcher = GPTResearcher(query)
|
||||
|
||||
try:
|
||||
yield format_sse_event(
|
||||
"message",
|
||||
{"research_id": search_id, "query": query, "status": "Research initiated"}
|
||||
)
|
||||
|
||||
# Perform quick search
|
||||
search_results = await researcher.quick_search(query=query)
|
||||
mcp.researchers[search_id] = researcher
|
||||
logger.info(f"Quick search completed for ID: {search_id}")
|
||||
|
||||
return create_success_response({
|
||||
final_data_payload = {
|
||||
"search_id": search_id,
|
||||
"query": query,
|
||||
"result_count": len(search_results) if search_results else 0,
|
||||
"search_results": search_results
|
||||
})
|
||||
}
|
||||
|
||||
# Sende das finale Ergebnis als 'tool_result' Event
|
||||
yield format_sse_event("message", final_data_payload)
|
||||
logger.info(f"Sent final research result for ID: {search_id}")
|
||||
except Exception as e:
|
||||
return handle_exception(e, "Quick search")
|
||||
logger.error(f"Error during deep_research for query '{query}': {e}", exc_info=True)
|
||||
# Sende ein Fehler-Event an den Client
|
||||
error_payload = {
|
||||
"research_id": search_id, # Kann None sein, wenn Fehler sehr früh auftritt
|
||||
"query": query,
|
||||
"status": "Error occurred",
|
||||
"error_message": str(e),
|
||||
"error_details": "Check server logs for more information."
|
||||
}
|
||||
yield format_sse_event("message", error_payload)
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue