add banbanmini backend
This commit is contained in:
64
talkingq-url/handlers/response_processor.py
Normal file
64
talkingq-url/handlers/response_processor.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import asyncio
|
||||
from typing import List, Dict
|
||||
from services.audio_session import AudioSession
|
||||
from handlers.prompt_sound_handler import handle_prompt_sound_request
|
||||
from handlers.response_coordinator import process_response
|
||||
from interfaces.llm import LLM
|
||||
from interfaces.tts import TTS
|
||||
from utils.logger import session_logger
|
||||
from services.tts_error_manager import tts_error_manager
|
||||
from implementations.minimax_tts import MiniMaxTTS
|
||||
|
||||
async def generate_and_process_response(
|
||||
transcript: str,
|
||||
history: List[Dict[str, str]],
|
||||
selected_role: dict,
|
||||
device_id: str,
|
||||
session_id: str,
|
||||
device_history,
|
||||
session: AudioSession,
|
||||
language: str = None, # 默认为None
|
||||
):
|
||||
llm_service: LLM = session.llm_service
|
||||
if hasattr(llm_service, "device_id"):
|
||||
llm_service.device_id = device_id
|
||||
if hasattr(llm_service, "session_id"):
|
||||
llm_service.session_id = session_id
|
||||
|
||||
tts_service: TTS = session.tts_service
|
||||
if not isinstance(tts_service, MiniMaxTTS):
|
||||
session_logger.warning(
|
||||
device_id, session_id, "检测到TTS服务不是MiniMaxTTS,正在切换到MiniMaxTTS"
|
||||
)
|
||||
tts_service = MiniMaxTTS(selected_role=selected_role)
|
||||
session.tts_service = tts_service
|
||||
|
||||
try:
|
||||
if isinstance(language, (int, float)) or (isinstance(language, str) and not language.isalpha()):
|
||||
session_logger.warning(
|
||||
device_id, session_id, f"检测到无效的语言代码: {language},将使用默认语言"
|
||||
)
|
||||
language = "zh" # 使用默认语言
|
||||
|
||||
await process_response(
|
||||
transcript,
|
||||
history,
|
||||
selected_role,
|
||||
device_id,
|
||||
session_id,
|
||||
device_history,
|
||||
session,
|
||||
language, # 传递合法化后的语言参数
|
||||
)
|
||||
except Exception as e:
|
||||
session_logger.error(
|
||||
device_id, session_id, f"生成或处理回复时出错: {e}", exc_info=True
|
||||
)
|
||||
if session.websocket and session.websocket.client_state.name == "CONNECTED":
|
||||
try:
|
||||
await session.websocket.send_text("TTS_ERROR")
|
||||
except Exception as ws_error:
|
||||
session_logger.error(device_id, session_id, f"发送TTS错误通知失败: {ws_error}")
|
||||
await handle_prompt_sound_request(device_id, "tts_error")
|
||||
finally:
|
||||
await tts_error_manager.end_tts_session(device_id, session_id)
|
||||
Reference in New Issue
Block a user