add banbanmini backend

This commit is contained in:
HycJack
2026-03-24 15:04:36 +08:00
parent 0d0f995dc2
commit 7510ca6df1
197 changed files with 13008 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
import asyncio
import time
from services.audio_session import AudioSession
from utils.logger import session_logger
from config import settings
from services.device_config import device_config_manager
from utils.language_detector import LanguageDetector
async def handle_transcription(session: AudioSession, device_id: str, session_id: str):
start_time = time.perf_counter()
transcript = session.transcript
if transcript:
session_logger.info(device_id, session_id, f"最终转录结果: {transcript}")
detected_language = await LanguageDetector.detect_language(transcript)
session_logger.info(device_id, session_id, f"检测到的语言: {detected_language}")
device_config = await device_config_manager.get_config(device_id)
preferred_language = None
if device_config and hasattr(device_config, 'preferred_language') and device_config.preferred_language:
preferred_language = device_config.preferred_language
effective_language = detected_language or preferred_language
if detected_language and (not preferred_language or detected_language != preferred_language):
session_logger.info(
device_id,
session_id,
f"使用检测到的语言: {detected_language}"
)
elif preferred_language and detected_language != preferred_language:
session_logger.info(
device_id,
session_id,
f"检测到语言 {detected_language},但使用首选语言: {preferred_language}"
)
from services.conversation_history import (
DeviceConversationHistory,
conversation_history_manager,
)
from handlers.command_handler import get_device_role
selected_role = await get_device_role(device_id, effective_language)
role_key = selected_role.get("role_key") or settings.selected_role_key
device_history = await conversation_history_manager.get_history(device_id, role_key)
if not device_history:
device_history = DeviceConversationHistory()
await conversation_history_manager.set_history(device_id, device_history, role_key)
device_history.last_interaction_time = asyncio.get_running_loop().time()
history = device_history.history[-settings.max_conversation_history :]
from handlers.response_processor import generate_and_process_response
resp_start_time = time.perf_counter()
await generate_and_process_response(
transcript,
history,
selected_role,
device_id,
session_id,
device_history,
session,
effective_language,
)
resp_end_time = time.perf_counter()
session_logger.info(
device_id,
session_id,
f"回复生成和处理 耗时: {resp_end_time - resp_start_time:.2f}",
)
else:
session_logger.error("unknown", "unknown", "未收到转录结果")
from handlers.prompt_sound_handler import handle_prompt_sound_request
await handle_prompt_sound_request(device_id, "tts_error")
from services.tts_error_manager import tts_error_manager
await tts_error_manager.end_tts_session(device_id, session_id)
end_time = time.perf_counter()
session_logger.info(
device_id, session_id, f"总处理 耗时: {end_time - start_time:.2f}"
)