from typing import Dict, List, Optional, Any from typing_extensions import TypedDict class UserRequirements(TypedDict): """User's home design requirements""" budget: Optional[float] location: Optional[str] family_size: Optional[int] lifestyle_preferences: List[str] special_needs: List[str] class FloorplanRequirements(TypedDict): """Floorplan-specific requirements""" num_floors: Optional[int] total_sqft: Optional[int] lot_shape: Optional[str] lot_dimensions: Optional[str] rooms: List[Dict[str, Any]] # [{"type": "bedroom", "count": 3, "min_size": 120}] class DetailedFloorplan(TypedDict): """Detailed floorplan design from architectural analysis""" design_analysis: Optional[Dict[str, Any]] detailed_rooms: List[Dict[str, Any]] # Each room with exact dimensions, placement, features structural_elements: List[Dict[str, Any]] # Walls, doors, windows circulation_plan: Dict[str, Any] # Hallways, stairs, traffic flow lot_utilization: Dict[str, Any] # How the building sits on the lot architectural_features: List[str] # Special design elements class BudgetBreakdown(TypedDict): """Detailed construction cost breakdown""" site_preparation: Optional[float] foundation: Optional[float] framing: Optional[float] roofing: Optional[float] exterior_finishes: Optional[float] interior_finishes: Optional[float] mechanical_systems: Optional[float] electrical_systems: Optional[float] plumbing_systems: Optional[float] permits_fees: Optional[float] professional_services: Optional[float] contingency: Optional[float] total_construction_cost: Optional[float] cost_per_sqft: Optional[float] budget_analysis: Optional[str] class ConversationState(TypedDict): """Overall conversation state with enhanced multi-agent memory""" messages: List[Dict[str, str]] current_topic: Optional[str] # "general", "budget", "floorplan" user_requirements: UserRequirements floorplan_requirements: FloorplanRequirements detailed_floorplan: DetailedFloorplan budget_breakdown: BudgetBreakdown conversation_history: List[str] agent_recommendations: List[str] agent_memory: Dict[str, Any] # Shared memory between agents next_agent: Optional[str] floorplan_ready: bool budget_ready: bool