apix/backend/models/requests.py
Khoa.vo 0ef7e5475c
Some checks are pending
CI / build (18.x) (push) Waiting to run
CI / build (20.x) (push) Waiting to run
v3.0.0: Add FastAPI backend
- 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
2026-01-13 07:46:32 +07:00

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