from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any from datetime import datetime # Source information model class SourceInfo(BaseModel): id: str name: str category: str price: str similarity_score: float # Chat request and response models class ChatRequest(BaseModel): message: str conversation_id: Optional[str] = None class ChatResponse(BaseModel): response: str sources: List[SourceInfo] # Changed from List[str] to List[SourceInfo] suggested_questions: List[str] conversation_id: Optional[str] = None # Make this optional # Product models class Product(BaseModel): id: str name: str category: str description: str price: float image_url: Optional[str] = None tags: List[str] = [] class SearchRequest(BaseModel): query: str category: Optional[str] = None limit: int = 20 # Conversation models class ChatMessage(BaseModel): role: str # "user" or "assistant" content: str timestamp: datetime class Conversation(BaseModel): id: str user_id: str messages: List[ChatMessage] created_at: datetime updated_at: datetime # Knowledge base models class Document(BaseModel): content: str metadata: Dict[str, Any] = {} source: str = "upload" class KnowledgeDocument(BaseModel): id: str content: str embedding: List[float] metadata: Dict[str, Any] source: str created_at: datetime