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)