diff --git a/src/phoenix_technologies/gpt_researcher/server.py b/src/phoenix_technologies/gpt_researcher/server.py index ad14203..fbfa63f 100644 --- a/src/phoenix_technologies/gpt_researcher/server.py +++ b/src/phoenix_technologies/gpt_researcher/server.py @@ -18,13 +18,10 @@ from gpt_researcher import GPTResearcher load_dotenv() from utils import ( - research_store, create_success_response, handle_exception, get_researcher_by_id, format_sources_for_response, - format_context_with_sources, - store_research_results, create_research_prompt ) @@ -54,50 +51,6 @@ class CustomLogsHandler: self.logs.append(data) # Append data to logs print(f"MCP Log: {data}") # For demonstration, print the log -@mcp.resource("research://{topic}") -async def research_resource(topic: str) -> str: - """ - Provide research context for a given topic directly as a resource. - - This allows LLMs to access web-sourced information without explicit function calls. - - Args: - topic: The research topic or query - - Returns: - String containing the research context with source information - """ - # Check if we've already researched this topic - if topic in research_store: - logger.info(f"Returning cached research for topic: {topic}") - return research_store[topic]["context"] - - # If not, conduct the research - logger.info(f"Conducting new research for resource on topic: {topic}") - custom_logs_handler = CustomLogsHandler() - - # Initialize GPT Researcher - researcher = GPTResearcher(query=topic, report_type=research_type, websocket=custom_logs_handler) - - try: - # Conduct the research - await researcher.conduct_research() - - # Get the context and sources - context = researcher.get_research_context() - sources = researcher.get_research_sources() - source_urls = researcher.get_source_urls() - - # Format with sources included - formatted_context = format_context_with_sources(topic, context, sources) - - # Store for future use - store_research_results(topic, context, sources, source_urls, formatted_context) - - return formatted_context - except Exception as e: - return f"Error conducting research on '{topic}': {str(e)}" - @mcp.tool() async def deep_research(query: str) -> Dict[str, Any]: @@ -132,9 +85,6 @@ async def deep_research(query: str) -> Dict[str, Any]: sources = researcher.get_research_sources() source_urls = researcher.get_source_urls() - # Store in the research store for the resource API - store_research_results(query, context, sources, source_urls) - return create_success_response({ "research_id": research_id, "query": query, diff --git a/src/phoenix_technologies/gpt_researcher/utils.py b/src/phoenix_technologies/gpt_researcher/utils.py index 8ad7d12..283d22d 100644 --- a/src/phoenix_technologies/gpt_researcher/utils.py +++ b/src/phoenix_technologies/gpt_researcher/utils.py @@ -11,8 +11,6 @@ from loguru import logger # Configure logging for console only (no file logging) logger.configure(handlers=[{"sink": sys.stderr, "level": "INFO"}]) -# Research store to track ongoing research topics and contexts -research_store = {} # API Response Utilities def create_error_response(message: str) -> Dict[str, Any]: @@ -68,44 +66,6 @@ def format_sources_for_response(sources: List[Dict[str, Any]]) -> List[Dict[str, ] -def format_context_with_sources(topic: str, context: str, sources: List[Dict[str, Any]]) -> str: - """ - Format research context with sources for display. - - Args: - topic: Research topic - context: Research context - sources: List of sources - - Returns: - Formatted context string with sources - """ - formatted_context = f"## Research: {topic}\n\n{context}\n\n" - formatted_context += "## Sources:\n" - for i, source in enumerate(sources): - formatted_context += f"{i+1}. {source.get('title', 'Unknown')}: {source.get('url', '')}\n" - return formatted_context - - -def store_research_results(topic: str, context: str, sources: List[Dict[str, Any]], - source_urls: List[str], formatted_context: Optional[str] = None): - """ - Store research results in the research store. - - Args: - topic: Research topic - context: Research context - sources: List of sources - source_urls: List of source URLs - formatted_context: Optional pre-formatted context - """ - research_store[topic] = { - "context": formatted_context or context, - "sources": sources, - "source_urls": source_urls - } - - def create_research_prompt(topic: str, goal: str, report_format: str = "research_report") -> str: """ Create a research query prompt for GPT Researcher. @@ -125,10 +85,7 @@ def create_research_prompt(topic: str, goal: str, report_format: str = "research You have two methods to access web-sourced information: - 1. Use the "research://{topic}" resource to directly access context about this topic if it exists - or if you want to get straight to the information without tracking a research ID. - - 2. Use the conduct_research tool to perform new research and get a research_id for later use. + Use the conduct_research tool to perform new research and get a research_id for later use. This tool also returns the context directly in its response, which you can use immediately. After getting context, you can: