NutriLoop / app /schemas.py
AB1N05's picture
Nutriloop V2 Backend - Global Model Architected
1fa55f4
Raw
History Blame Contribute Delete
1.82 kB
"""
Pydantic schemas for NutriLoop AI request/response models.
"""
from datetime import date
from typing import Optional
from pydantic import BaseModel, Field
class PredictRequest(BaseModel):
"""Request body for /predict endpoint."""
restaurant_id: str = Field(..., description="Unique restaurant identifier")
item_name: str = Field(..., description="Menu item name")
city: str = Field(..., description="City name for news adjustment")
days: int = Field(default=7, ge=1, le=30, description="Forecast horizon in days")
class ColdStartRequest(BaseModel):
"""Request body for /cold-start endpoint."""
latitude: float = Field(..., description="Restaurant latitude")
longitude: float = Field(..., description="Restaurant longitude")
cuisine_type: str = Field(..., description="Type of cuisine")
avg_daily_quantity: float = Field(..., description="Average daily order quantity")
item_name: str = Field(..., description="Menu item to forecast")
city: str = Field(default="Unknown", description="City name for news adjustment")
days: int = Field(default=7, ge=1, le=30, description="Forecast horizon in days")
class PredictionPoint(BaseModel):
"""Single day forecast point."""
date: str # YYYY-MM-DD
quantity: int
adjusted_quantity: int
class PredictResponse(BaseModel):
"""Response body for /predict endpoint."""
restaurant_id: str
item_name: str
predictions: list[PredictionPoint]
news_multiplier: float
model_mae: float
source: str = Field(..., description="'prophet' or 'cold_start'")
class HealthResponse(BaseModel):
"""Response body for /health endpoint."""
status: str
global_model_present: bool
cluster_model_present: bool
config_valid: bool
last_retrain: Optional[str]
version: str