from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any class ProcessingRequest(BaseModel): """Model for video processing request.""" video_id: str frame_rate: int = Field(1, ge=1, le=90, description="Skip frames for processing (1-90)") backend: str = Field("opencv", description="Backend for face detection") language: str = Field("en", description="Language of the video") generate_annotated_video: bool = Field(False, description="Generate annotated video") model_name: str = Field("gpt-4o", description="AI model to use for analysis") class ProcessingStatus(BaseModel): """Model for video processing status response.""" video_id: str status: str progress: Optional[float] = None error: Optional[str] = None class EmotionData(BaseModel): """Model for emotion data at a specific frame.""" frame_index: int data: List[Dict[str, Any]] class ProcessingResult(BaseModel): """Model for video processing results response.""" video_id: str emotion_data: Dict[str, List[EmotionData]] transcript: str analysis: str annotated_video_available: bool emotion_percentages: Optional[Dict[str, Any]] = None overall_sentiment: Optional[str] = None frame_emotions_count: Optional[int] = None overall_summary: Optional[str] = None transcript_analysis: Optional[Dict[str, Any]] = None recommendations: Optional[Dict[str, Any]] = None body_language_analysis: Optional[Dict[str, Any]] = None body_language_data: Optional[Dict[str, Any]] = None eye_contact_analysis: Optional[Dict[str, Any]] = None eye_contact_data: Optional[Dict[str, Any]] = None class Config: from_attributes = True