from typing import List, Optional, Literal from pydantic import BaseModel, Field Role = Literal["system", "user", "assistant"] class ChatMessage(BaseModel): role: Role content: str class ChatRequest(BaseModel): messages: List[ChatMessage] = Field(min_length=1) model: Optional[str] = None temperature: Optional[float] = Field(default=None, ge=0, le=2) max_tokens: Optional[int] = Field(default=None, gt=0) class Usage(BaseModel): prompt_tokens: int completion_tokens: int total_tokens: int class ChatResponse(BaseModel): content: str model: Optional[str] = None usage: Optional[Usage] = None class TextToSpeechResponse(BaseModel): audio_url: str class TextToSpeechRequest(BaseModel): volume: int = 1 pitch: float = 1 rate: float = 1 filename: str text: str model: Optional[str] = None format: Optional[str] = None