add banbanmini backend
This commit is contained in:
50
talkingq-url/services/device_service.py
Normal file
50
talkingq-url/services/device_service.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from typing import Optional, Dict
|
||||
from services.device_config import device_config_manager, DeviceConfig
|
||||
from services.role_manager import role_manager
|
||||
from services.conversation_history import conversation_history_manager, DeviceConversationHistory
|
||||
from handlers.prompt_sound_handler import send_welcome_sound
|
||||
from utils.logger import session_logger
|
||||
|
||||
class DeviceService:
|
||||
async def get_device_role(self, device_id: str) -> Dict:
|
||||
"""获取设备当前使用的角色"""
|
||||
from handlers.command_handler import get_device_role as handler_get_device_role
|
||||
device_config = await device_config_manager.get_config(device_id, force_refresh=True)
|
||||
selected_role = await handler_get_device_role(device_id)
|
||||
result = {
|
||||
"role_key": selected_role.get("role_key", ""),
|
||||
"name": selected_role.get("name", "未命名角色"),
|
||||
"description": selected_role.get("description", ""),
|
||||
"preferred_language": device_config.preferred_language if device_config else None
|
||||
}
|
||||
if "multilingual" in selected_role:
|
||||
result["languages"] = list(selected_role["multilingual"].keys())
|
||||
return result
|
||||
|
||||
async def update_device_role(self, device_id: str, role_key: str, language: Optional[str] = None) -> Dict:
|
||||
"""更新设备角色配置"""
|
||||
role = await role_manager.get_role(role_key)
|
||||
if not role:
|
||||
raise ValueError(f"角色 {role_key} 不存在")
|
||||
|
||||
try:
|
||||
current_config = await device_config_manager.get_config(device_id, force_refresh=True)
|
||||
preserved_language = language or (current_config.preferred_language if current_config else None)
|
||||
device_config = DeviceConfig(selected_role_key=role_key, preferred_language=preserved_language)
|
||||
await device_config_manager.set_config(device_id, device_config)
|
||||
|
||||
await conversation_history_manager.set_history(device_id, DeviceConversationHistory())
|
||||
await send_welcome_sound(device_id, role_key, preserved_language)
|
||||
|
||||
session_logger.info(device_id, "config", f"设备的角色已通过API更新为 {role_key}, 语言: {preserved_language or '默认'}")
|
||||
return {
|
||||
"status": "success",
|
||||
"device_id": device_id,
|
||||
"role_key": role_key,
|
||||
"language": preserved_language
|
||||
}
|
||||
except Exception as e:
|
||||
session_logger.error(device_id, "config", f"通过API更新角色时出错: {str(e)}")
|
||||
raise
|
||||
|
||||
device_service = DeviceService()
|
||||
Reference in New Issue
Block a user