"""Models router: list and refresh the OpenRouter model cache.""" from fastapi import APIRouter, Depends, HTTPException, Query, status from ..db import get_conn, get_write_lock from ..dependencies import get_current_user, require_admin from ..services import models as models_service router = APIRouter(prefix="/models", tags=["models"]) @router.get("/") async def list_models( modality: str | None = Query( None, description="Filter by output modality: text, image, video, audio", ), _: dict = Depends(get_current_user), ): """Return cached models. Auto-refreshes cache if stale (older than 24 h).""" conn = get_conn() if models_service.is_cache_stale(conn): async with get_write_lock(): # Re-check inside lock to avoid redundant parallel refreshes if models_service.is_cache_stale(conn): try: await models_service.refresh_models_cache(conn) except Exception as exc: raise HTTPException( status_code=status.HTTP_502_BAD_GATEWAY, detail=f"Failed to refresh model cache: {exc}", ) return models_service.get_cached_models(conn, modality) @router.post("/refresh", status_code=200) async def refresh_models(_: dict = Depends(require_admin)): """Force-refresh the model cache from OpenRouter. Admin only.""" conn = get_conn() async with get_write_lock(): try: count = await models_service.refresh_models_cache(conn) except Exception as exc: raise HTTPException( status_code=status.HTTP_502_BAD_GATEWAY, detail=f"OpenRouter error: {exc}", ) return {"refreshed": count}