Spaces:
Sleeping
Sleeping
| """ | |
| api/routes/models.py — /models REST endpoints (Cloud Registry Version). | |
| Provides global model discovery and metadata. | |
| """ | |
| from __future__ import annotations | |
| from typing import Annotated | |
| from fastapi import APIRouter, HTTPException, Query | |
| from models.model import Model | |
| from observability.logger import audit, get_logger | |
| from registry.registry import get_model, list_models | |
| log = get_logger("api.models") | |
| router = APIRouter(prefix="/models", tags=["models"]) | |
| async def index( | |
| search: Annotated[str | None, Query()] = None, | |
| task: Annotated[list[str] | None, Query()] = None, | |
| framework: Annotated[list[str] | None, Query()] = None, | |
| hardware: Annotated[list[str] | None, Query()] = None, | |
| source: Annotated[list[str] | None, Query()] = None, | |
| sort_by: Annotated[str, Query()] = "downloads", | |
| sort_dir: Annotated[str, Query()] = "desc", | |
| limit: Annotated[int, Query(ge=1, le=1000)] = 200, | |
| offset: Annotated[int, Query(ge=0)] = 0, | |
| ) -> list[Model]: | |
| """ | |
| List and search models in the global registry. | |
| """ | |
| models = await list_models( | |
| search=search, | |
| tasks=task, | |
| frameworks=framework, | |
| hardware=hardware, | |
| sources=source, | |
| sort_by=sort_by, | |
| sort_dir=sort_dir, | |
| limit=limit, | |
| offset=offset, | |
| ) | |
| await audit("api_list_models", payload={"count": len(models), "search": search}) | |
| return models | |
| async def detail(model_id: str) -> Model: | |
| model = await get_model(model_id) | |
| if not model: | |
| raise HTTPException(status_code=404, detail=f"Model '{model_id}' not found") | |
| await audit("api_get_model", model_id=model_id) | |
| return model | |