mlforge / api /routes /models.py
senthil2421
fix: remove project dependencies and redundant imports to fix server startup
8302f42
"""
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"])
@router.get("", response_model=list[Model])
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
@router.get("/{model_id}", response_model=Model)
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