- Add Python FastAPI backend with Pydantic validation - Port WhiskClient and MetaAIClient to Python - Create API routers for all endpoints - Add Swagger/ReDoc documentation at /docs - Update Dockerfile for multi-service container - Add lib/api.ts frontend client - Update README for V3
59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
"""
|
|
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
|