| """ | |
| API数据模型定义 | |
| 包含所有API请求和响应的数据模型 | |
| """ | |
| from pydantic import BaseModel, Field | |
| from typing import Optional, List | |
| from datetime import datetime | |
| class TTSRequest(BaseModel): | |
| """TTS请求模型""" | |
| text: str = Field(..., description="要转换的文本", min_length=1, max_length=1000) | |
| character: str = Field(default="misono_mika", description="角色模型名称") | |
| speed: float = Field(default=1.0, description="语速倍率", ge=0.5, le=2.0) | |
| format: str = Field(default="wav", description="输出格式", pattern="^(wav|mp3)$") | |
| class TTSResponse(BaseModel): | |
| """TTS响应模型""" | |
| success: bool | |
| message: str | |
| audio_url: Optional[str] = None | |
| duration: Optional[float] = None | |
| character: str | |
| timestamp: str | |
| class VoiceCloneRequest(BaseModel): | |
| """语音克隆请求模型""" | |
| voice_name: str = Field(..., description="克隆声音名称", min_length=1, max_length=50) | |
| reference_audio_url: str = Field(..., description="参考音频文件URL或路径") | |
| reference_text: str = Field(..., description="参考音频对应的文本", min_length=3, max_length=500) | |
| description: Optional[str] = Field("", description="声音描述") | |
| class AudioAnalysisResponse(BaseModel): | |
| """音频分析响应模型""" | |
| duration: float | |
| sample_rate: int | |
| quality_score: float | |
| recommendations: List[str] | |
| class CharacterInfo(BaseModel): | |
| """角色信息模型""" | |
| name: str | |
| description: str | |
| type: str | |
| language: str | |
| model_size_mb: Optional[int] = None | |
| class HealthResponse(BaseModel): | |
| """健康检查响应模型""" | |
| status: str | |
| version: str | |
| engine_status: str | |
| available_characters: List[str] | |
| predefined_characters: int | |
| custom_characters: int | |
| cloned_voices: int | |
| timestamp: str | |
| class ErrorResponse(BaseModel): | |
| """错误响应模型""" | |
| success: bool = False | |
| error: str | |
| code: int | |
| timestamp: str | |
| class BatchTTSResponse(BaseModel): | |
| """批量TTS响应模型""" | |
| success: bool | |
| results: List[dict] | |
| total: int | |
| completed: int | |
| timestamp: str | |
| def create_success_response(message: str, data: dict = None) -> dict: | |
| """创建成功响应""" | |
| response = { | |
| "success": True, | |
| "message": message, | |
| "timestamp": datetime.now().isoformat() | |
| } | |
| if data: | |
| response.update(data) | |
| return response | |
| def create_error_response(error: str, code: int = 500) -> dict: | |
| """创建错误响应""" | |
| return { | |
| "success": False, | |
| "error": error, | |
| "code": code, | |
| "timestamp": datetime.now().isoformat() | |
| } |