# models.py from pydantic import BaseModel, Field from typing import List, Dict, Optional class TravelDataInput(BaseModel): destination: Optional[str] = Field(None, description="e.g., Neelum Valley") location_type: str = Field(..., description="City, Beach, Mountain, etc.") province: str = Field(..., description="Punjab, Sindh, etc.") starting_location: str = Field(..., description="e.g., Islamabad") gender: str = Field(..., description="Male, Female, Mixed") num_people: int = Field(..., gt=0, description="Number of people") has_children: bool = Field(False, description="Whether children are present") activity_type: str = Field(..., description="Adventure, Sightseeing, Both") travel_group: str = Field(..., description="Solo, With partner, etc.") preferences: List[str] = Field([], description="Cultural Experience, Food, etc.") budget: int = Field(0, ge=0, description="Budget in PKR") num_days: int = Field(..., gt=0, description="Number of days") additional_preferences: Optional[str] = Field(None, description="Any other requests") class PlanResponse(BaseModel): plan_text: str destination_used: str images: List[Dict] image_queries_used: List[str] source: str class ExtractionInput(BaseModel): plan_text: str class PackageData(BaseModel): packageName: str packageDescription: str packageDestination: str packageDays: int packageNights: int packageAccommodation: str packageTransportation: str packageMeals: str packageActivities: str packagePrice: Optional[float] packageDiscountPrice: Optional[float] packageOffer: bool packageRating: int packageTotalRatings: int packageImages: Optional[List[Dict]] = None class ChatMessage(BaseModel): role: str # user or assistant content: str class ChatInput(BaseModel): plan_text: str destination: str num_days: int chat_history: List[ChatMessage] user_input: str class ChatResponse(BaseModel): assistant_response: str