from pydantic import BaseModel
from typing import List, Optional, Dict, Any
class Voice(BaseModel):
voice_id: str
name: str
category: str
labels: Optional[Dict[str, str]] = {}
description: Optional[str] = ""
preview_url: Optional[str] = None
class TTSResponse(BaseModel):
audio_base64: str
duration: float
sample_rate: int
format: str
visemes: Optional[List[Dict[str, Any]]] = None
class TaskResponse(BaseModel):
task_id: str
status: str
estimated_duration: float
message: str
class TaskStatusResponse(BaseModel):
task_id: str
status: str # "pending", "processing", "completed", "failed"
progress: float # 0.0 to 1.0
created_at: float
completed_at: Optional[float] = None
result: Optional[Dict[str, Any]] = None
error: Optional[str] = None
download_url: Optional[str] = None
class Viseme(BaseModel):
id: int # Azure standard index (0-21)
offset_ms: int # Offset from start of audio chunk