GENIE / models.py
Tom1986's picture
feat: Implement Genie TTS API with text-to-speech and voice cloning functionalities
9bc318e
Raw History Blame Contribute Delete
2.65 kB
"""
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()
}