Files
banban/talkingq-url/services/factory.py
2026-03-24 15:04:36 +08:00

51 lines
2.0 KiB
Python

from interfaces.asr import ASR
from interfaces.llm import LLM
from interfaces.tts import TTS
from services.registry import get_service
from config import settings
from utils.logger import session_logger
from services.config_manager import config_manager
from implementations.aliyun_asr import AliyunASR
from implementations.volcano_llm import VolcanoLLM
from implementations.minimax_tts import MiniMaxTTS
async def get_asr(selected_role: dict = None) -> ASR:
"""获取ASR服务实例 - 固定使用阿里云"""
session_logger.info(
"system",
"factory",
f"ASR提供商: Aliyun (固定)"
)
return AliyunASR(selected_role=selected_role)
async def get_llm(selected_role: dict = None) -> LLM:
"""获取LLM服务实例 - 固定使用火山引擎"""
role_selected_language = selected_role.get('_selected_language') if selected_role else None
session_logger.info(
"system",
"factory",
f"LLM提供商: Volcano (固定)" +
(f", 语言: {role_selected_language}" if role_selected_language else "")
)
instance = VolcanoLLM(selected_role=selected_role)
if selected_role and "role_key" not in selected_role:
selected_role["role_key"] = "Volcano" # 使用provider作为默认值
if hasattr(instance, "current_language"):
instance.current_language = role_selected_language
return instance
async def get_tts(selected_role: dict = None, language: str = None) -> TTS:
"""获取TTS服务实例 - 固定使用MiniMax"""
role_selected_language = selected_role.get('_selected_language') if selected_role else None
effective_language = language or role_selected_language
session_logger.info(
"system",
"factory",
f"TTS提供商: MiniMax (固定)" +
(f", 语言: {effective_language}" if effective_language else "")
)
instance = MiniMaxTTS(selected_role=selected_role)
if hasattr(instance, "current_language"):
instance.current_language = effective_language
return instance