Doubt-Solver / app.py
ak0601's picture
Upload 2 files
00f5488 verified
from fastapi import FastAPI, Request, Form, UploadFile, File
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.staticfiles import StaticFiles
from dotenv import load_dotenv
import os, io
from PIL import Image
import markdown
import google.generativeai as genai
# Load environment variable
load_dotenv()
API_KEY = os.getenv("GOOGLE_API_KEY") or "AIzaSyDXqoZkx92J1jt_XAYxCGEHmYQtg2XwfLU"
genai.configure(api_key=API_KEY)
app = FastAPI()
templates = Jinja2Templates(directory="templates")
app.mount("/static", StaticFiles(directory="static"), name="static")
model = genai.GenerativeModel('gemini-2.0-flash')
# Create a global chat session
chat = None
chat_history = []
@app.get("/", response_class=HTMLResponse)
async def root(request: Request):
return templates.TemplateResponse("index.html", {
"request": request,
"chat_history": chat_history,
})
@app.post("/", response_class=HTMLResponse)
async def handle_input(
request: Request,
user_input: str = Form(...),
image: UploadFile = File(None)
):
global chat, chat_history
# Initialize chat session if needed
if chat is None:
chat = model.start_chat(history=[])
parts = []
if user_input:
parts.append(user_input)
# For display in the UI
user_message = user_input
if image and image.content_type.startswith("image/"):
data = await image.read()
try:
img = Image.open(io.BytesIO(data))
parts.append(img)
user_message += " [Image uploaded]" # Indicate image in chat history
except Exception as e:
chat_history.append({
"role": "model",
"content": markdown.markdown(f"**Error loading image:** {e}")
})
return RedirectResponse("/", status_code=303)
# Store user message for display
chat_history.append({"role": "user", "content": user_message})
try:
# Send message to Gemini model
resp = chat.send_message(parts)
# Add model response to history
raw = resp.text
chat_history.append({"role": "model", "content": raw})
except Exception as e:
err = f"**Error:** {e}"
chat_history.append({
"role": "model",
"content": markdown.markdown(err)
})
# Post-Redirect-Get
return RedirectResponse("/", status_code=303)
# Clear chat history and start fresh
@app.post("/new")
async def new_chat():
global chat, chat_history
chat = None
chat_history.clear()
return RedirectResponse("/", status_code=303)