| # ---------------------------------------------------------------------- | |
| # API ROUTES | |
| # ---------------------------------------------------------------------- | |
| from fastapi import APIRouter, HTTPException | |
| from typing import List, Dict, Any, Union | |
| from src.config import ( | |
| HTTP_OK, | |
| HTTP_BAD_REQUEST, | |
| ERROR_INVALID_PAYLOAD, | |
| ERROR_NO_VALID_URLS | |
| ) | |
| # ---------------------------------------------------------------------- | |
| # ROUTER SETUP | |
| # ---------------------------------------------------------------------- | |
| router = APIRouter(prefix="/api", tags=["processing"]) | |
| # ---------------------------------------------------------------------- | |
| # ROUTE HANDLERS | |
| # ---------------------------------------------------------------------- | |
| async def get_status(): | |
| from src.models.model_loader import MODELS_LOADED, DEVICE | |
| from src.utils import get_system_info | |
| return { | |
| "status": "online", | |
| "models_loaded": MODELS_LOADED, | |
| "device": DEVICE, | |
| "system": get_system_info() | |
| } | |
| async def process_images(payload: Dict[str, Any]): | |
| if "urls" not in payload: | |
| raise HTTPException( | |
| status_code=HTTP_BAD_REQUEST, | |
| detail=ERROR_INVALID_PAYLOAD | |
| ) | |
| urls = payload.get("urls", []) | |
| if not urls: | |
| raise HTTPException( | |
| status_code=HTTP_BAD_REQUEST, | |
| detail=ERROR_NO_VALID_URLS | |
| ) | |
| from app import process_images as process_fn | |
| return process_fn( | |
| urls=urls, | |
| product_type=payload.get("product_type", "General") | |
| ) | |