from pydantic import BaseModel, Field from typing import Dict, Literal, List, Optional class ResetRequest(BaseModel): task_id: str = "easy_spring" class Observation(BaseModel): time_step: int reservoir_level: float = Field(description="Current fresh water stored (Megaliters)") water_salinity: float = Field(description="PPM of salt in the water. >500 is unsafe.") energy_price: float = Field(description="Current grid energy price ($/MWh)") membrane_fouling: float = Field(description="0.0 is clean, 1.0 is totally blocked") city_demand: float = Field(description="Water demand for this step (Megaliters)") weather_condition: Literal["Normal", "Heatwave", "Storm"] = Field(description="Current weather event affecting parameters") maintenance_cooldown: int = Field(description="Steps until a cleaning crew is available again") class Action(BaseModel): production_rate: float = Field(description="Desired water output (ML/step), 0.0 to 50.0") run_cleaning: bool = Field(description="If True, halts production to chemically wash membranes (requires crew)") class StepResult(BaseModel): observation: Observation reward: float done: bool info: Dict class TaskConfig(BaseModel): task_id: str max_steps: int reservoir_capacity: float base_demand: float price_volatility: float weather_pattern: List[str]