Rajesh Betkiker
Added app.py
a7c9a13
raw
history blame
5.3 kB
"""
This file is the main file for the hackathon.
It contains the Gradio interface for the hackathon as a MCP server.
It exposes the following tools:
- search_knowledge_base_for_context
- research_write_review_topic
"""
from dotenv import load_dotenv
load_dotenv() # Load environment variables from .env file
import logging
# Configure logging to write to a file instead of stdout/stderr
# This avoids interference with the MCP communication channel
logging.basicConfig(
filename='hackathon-mcp.log', # Log to a file instead of stdout/stderr
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
import gradio as gr
from tools.rag_tools import search_groundx_for_rag_context
from tools.multi_agent_workflow_for_research import run_research_workflow
def search_knowledge_base_for_context(query: str) -> str:
"""
Searches and retrieves relevant context from a knowledge base (GroundX),
based on the user's query.
Example queries:
- "What are the main features of fuel system of SU-35."
- "What are the combat potential of SU-35."
Args:
query: The search query supplied by the user.
Returns:
str: Relevant text content that can be used by the LLM to answer the query.
"""
logger.info(f"Searching document for RAG context {query}")
response = search_groundx_for_rag_context(query)
logger.info(f"RAG Response: {response}")
return response
def research_write_review_topic(query: str) -> str:
"""
Helps with writing a report with research, writing, and review on any topic.
Returns a reviewed topic.
The query is a string that contains the topic to be researched and reviewed.
Example queries:
- "Write me a report on the history of the internet."
- "Write me a report on origin of the universe."
- "Write me a report on the impact of climate change on polar bears."
- "Write me a report on the benefits of meditation."
- "Write me a report on the future of artificial intelligence."
- "Write me a report on the effects of social media on mental health."
Args:
query (str): The query to research, write and review .
Returns:
str: A nicely formatted string.
"""
try:
logger.info(f"Researching the topic: {query}")
result = run_research_workflow(query)
return result or "Research completed, but no content was generated."
except Exception as e:
return f"Error: {e}"
with gr.Blocks() as server_info:
gr.Markdown("""
# MCP powered RAG and Research
I present to you a MCP powered RAG and Research.
RAG Tool uses GroundX service to fetch the knowledge base. The knowledge base is a document that contains information about the SU-35 aircraft, including its features, capabilities, and specifications.
Please check [this PDF](https://airgroup2000.com/gallery/albums/userpics/32438/SU-35_TM_eng.pdf) to formulate queries on Sukhoi.
The Research Tool is implemented using multi-agent workflow using LlamaIndex (ResearchAgent, WriteAgent, and ReviewAgent).
## Available Tools
### search_knowledge_base_for_context
- **Description**: Searches and retrieves relevant context from a knowledge base based on the user's query.
- **Example Queries**:
- "What are the main features of fuel system of SU-35."
- "What are the combat potential of SU-35."
### research_write_review_topic
- **Description**: Helps with writing a report with research, writing, and review on any topic.
- **Example Queries**:
- "Write me a report on the history of the internet."
- "Write me a report on origin of the universe."
- "Write me a report on the impact of climate change on polar bears."
## How to Use
- Use the MCP RAG Tool tab above to query the knowledge base.
- Use the Research Tool tab above to write report on any topic.
## Demo Link
[Link to Demo on Youtube](https://www.youtube.com/mcp-rag-research)
""")
mcp_rag_tool = gr.Interface(
fn=search_knowledge_base_for_context,
inputs=["text"],
outputs=[gr.Textbox(label="Knowledge Base", max_lines=10)],
title="MCP RAG Tool",
description="Searches and retrieves relevant context from a knowledge base"
)
research_tool = gr.Interface(
fn=research_write_review_topic,
inputs=["text"],
outputs=[gr.Textbox(label="Reviewed Topic", max_lines=10)],
title="Research Tool",
description="Helps with report writing with research, writing, and review agents on any topic. ",
concurrency_limit=10
)
named_interfaces = {
"Project Information": server_info,
"RAG - Tool": mcp_rag_tool,
"Research a Topic - Tool": research_tool
}
# Tab names and interfaces
tab_names = list(named_interfaces.keys())
interface_list = list(named_interfaces.values())
mcp_server = gr.TabbedInterface(
interface_list,
tab_names=tab_names,
title="πŸ‘ MCP powered RAG and Research 🌍"
)
# Launch the MCP Server
if __name__ == "__main__":
mcp_server.queue(default_concurrency_limit=10)
mcp_server.launch(
server_name="0.0.0.0",
server_port=7860,
share=False,
debug=False,
mcp_server=True
)