qtAnswering / main.py
ikraamkb's picture
Update main.py
84ef14b verified
raw
history blame
1.82 kB
from fastapi import FastAPI, UploadFile, Form, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import HTMLResponse, JSONResponse, FileResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
import shutil, os
app = FastAPI()
# βœ… CORS to allow frontend to access backend
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# βœ… Mount static folder (optional JS/CSS support)
app.mount("/static", StaticFiles(directory="static"), name="static")
# βœ… Set templates folder
templates = Jinja2Templates(directory="templates")
# βœ… Serve home.html
@app.get("/", response_class=HTMLResponse)
async def serve_home(request: Request):
return templates.TemplateResponse("home.html", {"request": request})
# βœ… Backend prediction API
@app.post("/predict")
async def predict(question: str = Form(...), file: UploadFile = Form(...)):
try:
temp_path = f"temp_{file.filename}"
with open(temp_path, "wb") as f:
shutil.copyfileobj(file.file, f)
if file.content_type.startswith("image/"):
from appImage import answer_question_from_image
from PIL import Image
image = Image.open(temp_path)
answer = answer_question_from_image(image, question)
else:
from app import answer_question_from_doc
class NamedFile:
def __init__(self, name): self.name = name
answer = answer_question_from_doc(NamedFile(temp_path), question)
os.remove(temp_path)
return JSONResponse(content={"answer": answer})
except Exception as e:
return JSONResponse(content={"error": str(e)}, status_code=500)