45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
"""Schemas Pydantic du service de prediction (contrat d'entree/sortie de l'API)."""
|
|
|
|
import datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class PredictionRequest(BaseModel):
|
|
"""Ce que le client fournit : QUI et QUAND, pas les features (calculees cote serveur)."""
|
|
|
|
client_id: str = Field(
|
|
...,
|
|
description="Identifiant du client (ex. 'MT_124').",
|
|
examples=["MT_124"],
|
|
)
|
|
date: datetime.date | None = Field(
|
|
default=None,
|
|
description="Date de la prediction (parametre de requete). Optionnelle.",
|
|
examples=["2015-01-01"],
|
|
)
|
|
|
|
|
|
class BatchPredictionRequest(BaseModel):
|
|
"""Prediction pour plusieurs clients en une seule requete (inference batch)."""
|
|
|
|
client_ids: list[str] = Field(
|
|
...,
|
|
description="Liste d'identifiants clients.",
|
|
examples=[["MT_124", "MT_156", "MT_158"]],
|
|
)
|
|
date: datetime.date | None = None
|
|
|
|
|
|
class PredictionResponse(BaseModel):
|
|
client_id: str
|
|
prediction_kwh: float = Field(description="Consommation predite (kWh).")
|
|
model_name: str
|
|
model_version: str
|
|
|
|
|
|
class BatchPredictionResponse(BaseModel):
|
|
predictions: list[PredictionResponse]
|
|
# Clients ignores (features introuvables) : on ne fait pas echouer tout le lot.
|
|
unknown_client_ids: list[str] = Field(default_factory=list)
|