Spaces:
Sleeping
Sleeping
| """Pydantic schemas for API request/response validation.""" | |
| from typing import List, Optional | |
| from pydantic import BaseModel, Field | |
| class WeatherFeatures(BaseModel): | |
| """Input features for temperature prediction.""" | |
| min_temp: float = Field(..., description="Minimum temperature (Celsius)") | |
| max_temp: float = Field(..., description="Maximum temperature (Celsius)") | |
| global_radiation: float = Field(..., ge=0, description="Global radiation (W/m2)") | |
| sunshine: float = Field(..., ge=0, le=24, description="Hours of sunshine") | |
| cloud_cover: float = Field(..., ge=0, le=10, description="Cloud cover (oktas, 0-10)") | |
| precipitation: float = Field(..., ge=0, description="Precipitation (mm)") | |
| pressure: float = Field(..., gt=0, description="Atmospheric pressure (Pa)") | |
| snow_depth: float = Field(..., ge=0, description="Snow depth (cm)") | |
| class Config: | |
| json_schema_extra = { | |
| "example": { | |
| "min_temp": 5.2, | |
| "max_temp": 12.8, | |
| "global_radiation": 45.0, | |
| "sunshine": 3.5, | |
| "cloud_cover": 6.0, | |
| "precipitation": 0.5, | |
| "pressure": 101325.0, | |
| "snow_depth": 0.0, | |
| } | |
| } | |
| class PredictionResponse(BaseModel): | |
| """Response containing the predicted mean temperature.""" | |
| predicted_mean_temp: float = Field(..., description="Predicted mean temperature (Celsius)") | |
| model_version: str = Field(..., description="Model version/run ID") | |
| class Config: | |
| json_schema_extra = {"example": {"predicted_mean_temp": 9.5, "model_version": "random_forest_v1"}} | |
| class BatchPredictionRequest(BaseModel): | |
| """Request for batch predictions.""" | |
| instances: List[WeatherFeatures] = Field(..., min_length=1, max_length=1000) | |
| class BatchPredictionResponse(BaseModel): | |
| """Response containing multiple predictions.""" | |
| predictions: List[float] = Field(..., description="List of predicted mean temperatures") | |
| model_version: str = Field(..., description="Model version/run ID") | |
| count: int = Field(..., description="Number of predictions made") | |
| class HealthResponse(BaseModel): | |
| """Health check response.""" | |
| status: str = Field(..., description="Service status") | |
| model_loaded: bool = Field(..., description="Whether model is loaded") | |
| model_path: Optional[str] = Field(None, description="Path to loaded model") | |
| class ModelMetrics(BaseModel): | |
| """Model performance metrics.""" | |
| train_rmse: float | |
| train_mae: float | |
| train_r2: float | |
| valid_rmse: float | |
| valid_mae: float | |
| valid_r2: float | |
| test_rmse: float | |
| test_mae: float | |
| test_r2: float | |