Multi-MCP / app.py
Zoro-147's picture
Upload 16 files
c4070e8 verified
from fastapi import FastAPI, File, UploadFile, Form
from fastapi.responses import HTMLResponse, JSONResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import uvicorn
import os
from dotenv import load_dotenv
load_dotenv()
import json
import google.generativeai as genai
from tools import calculator, email_drafter, pdf_qa, code_inspector
# Configure Gemini API
try:
genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
model = genai.GenerativeModel('gemini-2.5-flash')
except Exception as e:
print(f"Error configuring Gemini or loading model: {e}")
model = None # Set model to None if configuration fails
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse)
async def read_root():
with open("templates/index.html") as f:
return HTMLResponse(content=f.read(), status_code=200)
@app.post("/mcp")
async def mcp_endpoint(prompt: str = Form(...), file: UploadFile = File(None)):
if file:
file_path = f"temp_{file.filename}"
with open(file_path, "wb") as buffer:
buffer.write(await file.read())
if "pdf" in file.content_type:
response = pdf_qa.answer_pdf_question(file_path, prompt, model)
else:
response = "Unsupported file type."
os.remove(file_path)
return JSONResponse(content={"response": response})
tool_prompts = json.load(open("prompts/tool_prompts.json"))
if "sum" in prompt.lower():
response = calculator.calculate(prompt, "sum")
elif "multiply" in prompt.lower():
response = calculator.calculate(prompt, "multiply")
elif "subtract" in prompt.lower():
response = calculator.calculate(prompt, "subtract")
elif "divide" in prompt.lower():
response = calculator.calculate(prompt, "divide")
elif "draft an email" in prompt.lower():
response = email_drafter.draft_email(prompt, model)
elif "check code" in prompt.lower():
response = code_inspector.check_code(prompt, model)
else:
response = "I'm sorry, I don't understand that request."
return JSONResponse(content={"response": response})
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=7860)