Spaces:
Running
Running
from fastapi import FastAPI, UploadFile, Form | |
from fastapi.middleware.cors import CORSMiddleware | |
from fastapi.responses import JSONResponse, RedirectResponse | |
import shutil, os | |
app = FastAPI() | |
# CORS | |
app.add_middleware( | |
CORSMiddleware, | |
allow_origins=["*"], allow_credentials=True, | |
allow_methods=["*"], allow_headers=["*"] | |
) | |
# β Basic root redirection (optional) | |
def home(): | |
return RedirectResponse(url="/docs") # Or to a frontend URL | |
# β File prediction endpoint | |
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) | |