codelive007 commited on
Commit
4460d23
·
1 Parent(s): 7961432

updated api respondes v2

Browse files
Files changed (1) hide show
  1. mcp_server.py +89 -10
mcp_server.py CHANGED
@@ -609,6 +609,85 @@ Sample analysis content..."""
609
 
610
  return interface
611
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
612
  if __name__ == "__main__":
613
  try:
614
  # Configure event loop policy for Windows
@@ -618,15 +697,15 @@ if __name__ == "__main__":
618
  if sys.version_info[0] == 3 and sys.version_info[1] >= 8:
619
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
620
 
621
- server_logger.info("Starting Gradio server")
622
- interface = create_interface()
623
- interface.launch(
624
- server_name="0.0.0.0",
625
- share=False,
626
- debug=True,
627
- prevent_thread_lock=True, # Allow for proper cleanup
628
- mcp_server=True,
629
- )
630
  except Exception as e:
631
- server_logger.error(f"Failed to start Gradio server: {str(e)}", exc_info=True)
632
  raise
 
609
 
610
  return interface
611
 
612
+ # Create a FastAPI app for direct API access
613
+ app = gr.mount_gradio_app(
614
+ gr.routes.App(app=gr.Blocks()),
615
+ create_interface(),
616
+ path="/"
617
+ )
618
+
619
+ # Add a direct API endpoint for research
620
+ @app.post("/api/research")
621
+ async def api_research(request: dict):
622
+ try:
623
+ query = request.get('query', '')
624
+ if not query:
625
+ return {"error": "Query parameter is required"}, 400
626
+
627
+ # Initialize with default values or from environment variables
628
+ api_type = os.getenv("DEFAULT_API_TYPE", "Gemini")
629
+ gemini_key = os.getenv("GEMINI_API_KEY")
630
+ gemini_model = os.getenv("GEMINI_MODEL", "gemini-2.0-flash")
631
+ tavily_key = os.getenv("TAVILY_API_KEY")
632
+ openrouter_key = os.getenv("OPENROUTER_API_KEY")
633
+ openrouter_model = os.getenv("OPENROUTER_MODEL", "anthropic/claude-3-opus:beta")
634
+
635
+ # Override with request values if provided
636
+ if 'api_type' in request:
637
+ api_type = request['api_type']
638
+ if 'gemini_key' in request:
639
+ gemini_key = request['gemini_key']
640
+ if 'gemini_model' in request:
641
+ gemini_model = request['gemini_model']
642
+ if 'tavily_key' in request:
643
+ tavily_key = request['tavily_key']
644
+ if 'openrouter_key' in request:
645
+ openrouter_key = request['openrouter_key']
646
+ if 'openrouter_model' in request:
647
+ openrouter_model = request['openrouter_model']
648
+
649
+ # Validate required API keys
650
+ if not tavily_key:
651
+ return {"error": "Tavily API key is required"}, 400
652
+
653
+ if api_type == "Gemini" and not gemini_key:
654
+ return {"error": "Gemini API key is required when using Gemini"}, 400
655
+
656
+ if api_type == "OpenRouter" and not openrouter_key:
657
+ return {"error": "OpenRouter API key is required when using OpenRouter"}, 400
658
+
659
+ # Initialize the system
660
+ system = MultiAgentSystem(
661
+ use_gemini=(api_type == "Gemini"),
662
+ gemini_api_key=gemini_key,
663
+ gemini_model=gemini_model,
664
+ tavily_api_key=tavily_key,
665
+ openrouter_api_key=openrouter_key if api_type == "OpenRouter" else None,
666
+ openrouter_model=openrouter_model if api_type == "OpenRouter" else None
667
+ )
668
+
669
+ # Process the query
670
+ markdown_text = system.process_query(query)
671
+
672
+ # Generate file paths
673
+ md_file_path = save_markdown_report(markdown_text)
674
+ html_file_path = convert_to_html(markdown_text)
675
+
676
+ # Return the results
677
+ return {
678
+ "query": query,
679
+ "result": markdown_text,
680
+ "downloads": {
681
+ "markdown": md_file_path,
682
+ "html": html_file_path
683
+ },
684
+ "status": "success"
685
+ }
686
+
687
+ except Exception as e:
688
+ server_logger.error(f"API research failed: {str(e)}", exc_info=True)
689
+ return {"error": f"Research failed: {str(e)}"}, 500
690
+
691
  if __name__ == "__main__":
692
  try:
693
  # Configure event loop policy for Windows
 
697
  if sys.version_info[0] == 3 and sys.version_info[1] >= 8:
698
  asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
699
 
700
+ server_logger.info("Starting server...")
701
+
702
+ # Get port from environment variable or use default
703
+ port = int(os.getenv("PORT", 7860))
704
+
705
+ # Run the FastAPI app with uvicorn
706
+ import uvicorn
707
+ uvicorn.run(app, host="0.0.0.0", port=port)
708
+
709
  except Exception as e:
710
+ server_logger.error(f"Failed to start server: {str(e)}", exc_info=True)
711
  raise