from pydantic import BaseModel, Field class FishAudioProsody(BaseModel): speed: float = Field(1.0, description="Speaking rate multiplier, 0.5-2.0") volume: float = Field(0.0, description="Volume adjustment in decibels") class FishAudioTTSRequest(BaseModel): text: str = Field(..., description="Text to synthesize") reference_id: str | list[str] | None = Field(None, description="Voice model ID or list of IDs") temperature: float = Field(0.7, description="Expressiveness, 0-1") top_p: float = Field(0.7, description="Nucleus sampling diversity, (0, 1]") prosody: FishAudioProsody = Field(..., description="Speed and volume adjustments") normalize: bool = Field(True, description="Normalize numbers and text for English and Chinese") format: str = Field("wav", description="Output audio format") class FishAudioASRRequest(BaseModel): language: str | None = Field(None, description="Optional ISO 639-1 language hint") ignore_timestamps: bool = Field(True, description="Skip precise timestamp computation") class FishAudioASRSegment(BaseModel): text: str | None = Field(None, description="Segment text") start: float | None = Field(None, description="Segment start time in seconds") end: float | None = Field(None, description="Segment end time in seconds") class FishAudioASRResponse(BaseModel): text: str | None = Field(None, description="Transcribed text") duration: float | None = Field(None, description="Audio duration in seconds") segments: list[FishAudioASRSegment] | None = Field(None, description="Timestamped transcript segments") language_code: str | None = Field(None, description="Detected language as ISO 639-1 code") language: str | None = Field(None, description="Detected language display name") class FishAudioCreateModelRequest(BaseModel): type: str = Field("tts", description="Model type") title: str = Field(..., description="Voice model name") train_mode: str = Field("fast", description="Training mode; fast is instantly available") visibility: str = Field("private", description="Model visibility") enhance_audio_quality: bool = Field(..., description="Enhance reference audio quality") class FishAudioCreateModelResponse(BaseModel): id: str = Field(..., alias="_id", description="Voice model ID for use as reference_id") state: str | None = Field(None, description="Training state") visibility: str | None = Field(None, description="Model visibility")