Spaces:
Sleeping
Sleeping
File size: 3,038 Bytes
d0fda5a 5482546 d0fda5a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | from datetime import datetime
from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException, status
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from src.config.db import get_db
from src.models.ml import MLModel
router = APIRouter(tags=["Models"])
class MLModelOut(BaseModel):
id: str = Field(..., description="Identifiant unique du modèle (UUID en chaîne).")
name: str = Field(..., description="Nom court du modèle.")
description: Optional[str] = Field(None, description="Description du modèle.")
created_at: Optional[datetime] = Field(
None, description="Date de création du modèle (UTC, ISO 8601)."
)
is_active: bool = Field(..., description="Modèle actif/inactif.")
model_config = {"json_schema_extra": {
"examples": [{
"id": "5b1c7b3a-0000-4000-8000-000000000002",
"name": "best_model",
"description": "XGB v1",
"created_at": "2025-09-15T10:11:03.950802+00:00",
"is_active": True
}]
}}
@router.get(
"/",
response_model=List[MLModelOut],
status_code=status.HTTP_200_OK,
summary="Lister les modèles ML",
description=(
"Retourne la liste des modèles disponibles, triés du plus récent au plus ancien.\n\n"
"**Remarques**\n"
"- Les champs sont mappés depuis la table `ml_models`.\n"
),
responses={
200: {
"description": "Liste des modèles.",
"content": {
"application/json": {
"example": [
{
"id": "5b1c7b3a-0000-4000-8000-000000000002",
"name": "best_model",
"description": "XGB v1",
"created_at": "2025-09-15T10:11:03.950802+00:00",
"is_active": True
},
{
"id": "5b1c7b3a-0000-4000-8000-000000000001",
"name": "baseline",
"description": "Baseline model",
"created_at": "2025-09-15T10:11:03.950802+00:00",
"is_active": True
}
]
}
},
},
500: {"description": "Erreur serveur lors de la lecture des modèles."},
},
)
def list_ml_models(db: Session = Depends(get_db)) -> List[MLModelOut]:
try:
rows = (
db.query(MLModel)
.order_by(MLModel.created_at.desc())
.all()
)
return [
MLModelOut(
id=str(r.id),
name=r.name,
description=r.description,
created_at=r.created_at,
is_active=r.is_active,
)
for r in rows
]
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
|