example-submission / app /api /controllers.py
sachin sharma
fix for async methods as per PR
d481329
raw
history blame
1.2 kB
"""API controllers for request handling and validation."""
import asyncio
from fastapi import HTTPException
from app.core.logging import logger
from app.services.base import InferenceService
from app.api.models import ImageRequest, PredictionResponse
class PredictionController:
"""Controller for prediction endpoints."""
@staticmethod
async def predict(
request: ImageRequest,
service: InferenceService
) -> PredictionResponse:
"""Run inference using the configured service."""
try:
if not service or not service.is_loaded:
raise HTTPException(503, "Service not available")
if not request.image.mediaType.startswith('image/'):
raise HTTPException(400, f"Invalid media type: {request.image.mediaType}")
return await asyncio.to_thread(service.predict, request)
except HTTPException:
raise
except ValueError as e:
logger.error(f"Invalid input: {e}")
raise HTTPException(400, str(e))
except Exception as e:
logger.error(f"Prediction failed: {e}")
raise HTTPException(500, "Internal server error")