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 dependencies
|
||||||
gpt-researcher>=0.12.16
|
gpt-researcher>=0.13.3
|
||||||
python-dotenv~=1.1.0
|
python-dotenv~=1.1.0
|
||||||
|
|
||||||
# MCP dependencies
|
# MCP dependencies
|
||||||
|
|
|
@ -162,7 +162,7 @@ async def deep_research(query: str) -> AsyncGenerator[str, None]:
|
||||||
"status": "Research completed successfully",
|
"status": "Research completed successfully",
|
||||||
"source_count": len(sources),
|
"source_count": len(sources),
|
||||||
"context": context,
|
"context": context,
|
||||||
"sources": format_sources_for_response(sources), # Nutze deine Formatierungsfunktion
|
"sources": format_sources_for_response(sources),
|
||||||
"source_urls": source_urls
|
"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.
|
# oder die Exception weiter werfen, wenn FastMCP das besser handhabt.
|
||||||
|
|
||||||
@mcp.tool()
|
@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.
|
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
|
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)
|
researcher = GPTResearcher(query)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
yield format_sse_event(
|
||||||
|
"message",
|
||||||
|
{"research_id": search_id, "query": query, "status": "Research initiated"}
|
||||||
|
)
|
||||||
|
|
||||||
# Perform quick search
|
# Perform quick search
|
||||||
search_results = await researcher.quick_search(query=query)
|
search_results = await researcher.quick_search(query=query)
|
||||||
mcp.researchers[search_id] = researcher
|
mcp.researchers[search_id] = researcher
|
||||||
logger.info(f"Quick search completed for ID: {search_id}")
|
logger.info(f"Quick search completed for ID: {search_id}")
|
||||||
|
|
||||||
return create_success_response({
|
final_data_payload = {
|
||||||
"search_id": search_id,
|
"search_id": search_id,
|
||||||
"query": query,
|
"query": query,
|
||||||
"result_count": len(search_results) if search_results else 0,
|
"result_count": len(search_results) if search_results else 0,
|
||||||
"search_results": search_results
|
"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:
|
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()
|
@mcp.tool()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue