feat(tts): add text-to-speech endpoint
Some checks failed
Build and Push Docker / build-and-push (push) Failing after 28s

This commit is contained in:
game-loader
2026-01-06 16:32:16 +08:00
parent f858576c02
commit d515d4456b

View File

@@ -12,7 +12,13 @@ import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from chat_service import ChatService
from config import OPENAI_API_BASE_URL_CONFIG, OPENAI_API_KEY_FROM_CONFIG, OPENAI_LLM_MODEL
from config import (
DEFAULT_USER_ID,
OPENAI_API_BASE_URL_CONFIG,
OPENAI_API_KEY_FROM_CONFIG,
OPENAI_LLM_MODEL,
)
from api.doubao_tts import text_to_speech
from logging_config import setup_logging, get_logger
# 设置日志
@@ -44,6 +50,19 @@ class ChatResponse(BaseModel):
audio_error: Optional[str] = None
class TTSRequest(BaseModel):
text: str
user_id: Optional[str] = None
class TTSResponse(BaseModel):
success: bool
audio_data: Optional[str] = None # base64 编码的音频数据
message: Optional[str] = None
user_id: Optional[str] = None
error: Optional[str] = None
# 全局聊天服务实例
chat_service = ChatService()
@@ -180,6 +199,38 @@ async def chat_stream_endpoint(request: Request):
)
@app.post("/tts", response_model=TTSResponse)
async def tts_endpoint(request: TTSRequest):
"""
文本转语音接口
仅负责将输入文本转为 base64 音频数据
"""
text = request.text.strip() if request.text else ""
if not text:
raise HTTPException(status_code=400, detail="text is required")
user_id = request.user_id or DEFAULT_USER_ID
try:
success, message, base64_audio = text_to_speech(text, user_id)
if success and base64_audio:
return TTSResponse(
success=True,
audio_data=base64_audio,
message=message,
user_id=user_id
)
return TTSResponse(
success=False,
message=message,
error=message or "TTS failed",
user_id=user_id
)
except Exception as e:
raise HTTPException(status_code=500, detail=f"TTS error: {str(e)}")
if __name__ == "__main__":
uvicorn.run(
"main:app",