from pydantic import BaseModel from typing import Dict, List, Tuple class Furniture(BaseModel): id: str width: int # units (e.g. 1 unit = 0.5 meter) height: int rules: List[str] = [] class PlacedFurniture(BaseModel): id: str x: int y: int rotation: int # 0 or 90 class Action(BaseModel): action_type: str # "place_item", "remove_item", "no_op" item: str = "" x: int = 0 y: int = 0 rotation: int = 0 # 0 or 90 class Observation(BaseModel): room_size: Tuple[int, int] door_position: Tuple[int, int] windows: List[Tuple[int, int]] = [] unplaced_items: List[Furniture] placed_items: Dict[str, PlacedFurniture] solar_grid: List[List[bool]] = [] thermal_grid: List[List[float]] = [] feedback_logs: List[str] step_count: int max_steps: int class EpisodeResult(BaseModel): task_id: str success: bool score: float steps_taken: int