premo625's picture
Update api/endpoints/pest.py
54ae236 verified
from fastapi import APIRouter, UploadFile, File, HTTPException
from models.loader import ModelLoader
from request_queue.queue_manager import RequestQueue
from queue import Full
router = APIRouter(prefix="/predict/pest", tags=["Pest"])
model_loader = ModelLoader(config_dir="models/configs")
request_queue = RequestQueue(maxsize=10)
@router.post("")
async def predict_pest(file: UploadFile = File(...)):
if not file or not file.filename:
raise HTTPException(status_code=400, detail="No file uploaded or file is invalid.")
try:
image_bytes = await file.read()
if not image_bytes:
raise HTTPException(status_code=400, detail="Uploaded file is empty.")
def process_request():
try:
model = model_loader.load_model("pest")
except Exception:
raise HTTPException(status_code=503, detail="Pest model not loaded or unavailable.")
result = model.predict(image_bytes)
return {"filename": file.filename, **result}
try:
request_queue.add_request(process_request)
except Full:
raise HTTPException(status_code=429, detail="Request queue is full. Please try again later.")
response = request_queue.get_request()()
return response
except HTTPException as e:
raise e
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))