""" Pydantic models for request/response validation and API documentation. """ from typing import Optional from pydantic import BaseModel, Field class TTSRequest(BaseModel): """Request model for TTS generation with optional voice cloning.""" text: str = Field(..., description="Text to convert to speech", max_length=5000) voice_prompt_base64: Optional[str] = Field(None, description="Base64 encoded voice prompt audio") class FullTextTTSRequest(BaseModel): """Request model for full-text TTS generation with server-side processing.""" text: str = Field(..., description="Full text to convert to speech (any length)") voice_prompt_base64: Optional[str] = Field(None, description="Base64 encoded voice prompt audio") max_chunk_size: Optional[int] = Field(800, description="Maximum characters per chunk") silence_duration: Optional[float] = Field(0.5, description="Silence duration between chunks (seconds)") fade_duration: Optional[float] = Field(0.1, description="Fade in/out duration (seconds)") overlap_sentences: Optional[int] = Field(0, description="Number of sentences to overlap between chunks") class TTSResponse(BaseModel): """Response model for TTS generation with JSON output.""" success: bool = Field(..., description="Whether the request was successful") message: str = Field(..., description="Status message") audio_base64: Optional[str] = Field(None, description="Base64 encoded audio data") duration_seconds: Optional[float] = Field(None, description="Duration of generated audio in seconds") class FullTextTTSResponse(BaseModel): """Response model for full-text TTS generation.""" success: bool = Field(..., description="Whether the request was successful") message: str = Field(..., description="Status message") audio_base64: Optional[str] = Field(None, description="Base64 encoded audio data") duration_seconds: Optional[float] = Field(None, description="Duration of generated audio in seconds") processing_info: Optional[dict] = Field(None, description="Information about the processing (chunks, etc.)") class HealthResponse(BaseModel): """Response model for health check endpoint.""" status: str = Field(..., description="Service status") model_loaded: bool = Field(..., description="Whether the TTS model is loaded")