""" Pydantic request models for API validation """ from pydantic import BaseModel, Field from typing import Optional, List, Dict, Any class GenerateRequest(BaseModel): """Request for Whisk image generation""" prompt: str = Field(..., min_length=1, description="Image generation prompt") aspectRatio: str = Field(default="1:1", description="Aspect ratio (1:1, 9:16, 16:9, 4:3, 3:4)") refs: Optional[Dict[str, Any]] = Field(default=None, description="Reference images {subject, scene, style}") preciseMode: bool = Field(default=False, description="Enable precise mode") imageCount: int = Field(default=1, ge=1, le=4, description="Number of images to generate") cookies: Optional[str] = Field(default=None, description="Whisk cookies") class VideoGenerateRequest(BaseModel): """Request for Whisk video generation""" prompt: str = Field(..., min_length=1) imageBase64: Optional[str] = Field(default=None, description="Base64 image data") imageGenerationId: Optional[str] = Field(default=None, description="Existing image ID") cookies: Optional[str] = None class ReferenceUploadRequest(BaseModel): """Request for uploading reference image""" imageBase64: str = Field(..., description="Base64 encoded image") mimeType: str = Field(..., description="Image MIME type (image/jpeg, image/png, etc.)") category: str = Field(..., description="Reference category (subject, scene, style)") cookies: str = Field(..., description="Whisk cookies") class MetaGenerateRequest(BaseModel): """Request for Meta AI image generation""" prompt: str = Field(..., min_length=1) cookies: Optional[str] = Field(default=None, description="Meta AI cookies") imageCount: int = Field(default=4, ge=1, le=4) aspectRatio: str = Field(default="portrait", description="portrait, landscape, square") useMetaFreeWrapper: bool = Field(default=False) metaFreeWrapperUrl: Optional[str] = Field(default="http://localhost:8000") class MetaVideoRequest(BaseModel): """Request for Meta AI video generation""" prompt: str = Field(..., min_length=1) cookies: str = Field(..., description="Meta AI cookies") aspectRatio: str = Field(default="portrait") class PromptUseRequest(BaseModel): """Track prompt usage""" promptId: int = Field(..., description="Prompt ID to track") class PromptUploadRequest(BaseModel): """Upload prompt thumbnail""" promptId: int imageBase64: str