Doubt-Solver / app.py
ak0601's picture
Upload 2 files
00f5488 verified
raw
history blame
2.76 kB
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)