grading / main.py
Hammad712's picture
Update main.py
9680b8f verified
raw
history blame
1.87 kB
import os
import shutil
from fastapi import FastAPI, UploadFile, File, HTTPException
from fastapi.responses import JSONResponse
from models import EvaluationRequest
from pdf_processor import extract_answers_from_pdf, evaluate_student
app = FastAPI()
# Directory to temporarily store uploaded files.
UPLOAD_DIR = "uploads"
if not os.path.exists(UPLOAD_DIR):
os.makedirs(UPLOAD_DIR)
@app.get("/")
async def root():
"""
Root endpoint that provides a welcome message.
"""
return {
"message": "Welcome to the PDF Processing API. Use '/extract/' to extract answers from a PDF or '/evaluate/' to calculate marks using pre-extracted answers."
}
@app.post("/extract/")
async def extract_pdf(file: UploadFile = File(...)):
"""
Endpoint to extract answers from a PDF file.
"""
try:
file_location = os.path.join(UPLOAD_DIR, file.filename)
with open(file_location, "wb") as f:
shutil.copyfileobj(file.file, f)
result = extract_answers_from_pdf(file_location)
return JSONResponse(content=result.model_dump())
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
finally:
if os.path.exists(file_location):
os.remove(file_location)
@app.post("/evaluate/")
async def evaluate(evaluation_request: EvaluationRequest):
"""
Endpoint to evaluate student answers.
Expects a JSON payload with the pre-extracted answer key and student answers.
"""
try:
evaluation = evaluate_student(evaluation_request.answer_key, evaluation_request.student)
return JSONResponse(content=evaluation.model_dump())
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)