class BookingDetails(BaseModel): """Information extracted from the conversation. ``size_info`` is square footage for a house and seat count for a couch. Fields are optional because this model also represents partial extraction. """ service_type: ServiceType | None = Field(default=None) size_info: float | None = Field(default=None, gt=0) cleaning_depth: CleaningDepth | None = Field(default=None) add_ons: list[str] = Field(default_factory=list) address: str | None = Field(default=None) is_complete: bool = False next_question: str | None = Field( default=None, exclude=True, description="A concise question asking only for information still missing.", )