feat(tts): add text-to-speech endpoint
Some checks failed
Build and Push Docker / build-and-push (push) Failing after 28s
Some checks failed
Build and Push Docker / build-and-push (push) Failing after 28s
This commit is contained in:
53
api/main.py
53
api/main.py
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user