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