from config import settings from services.device_config import DeviceConfig, device_config_manager from services.role_manager import role_manager from utils.logger import session_logger async def update_device_config(device_id: str, new_role_key: str, language: str = None): current_config = await device_config_manager.get_config(device_id, force_refresh=True) preserved_language = language if language is None and current_config and hasattr(current_config, 'preferred_language') and current_config.preferred_language: preserved_language = current_config.preferred_language session_logger.info( device_id, "config", f"保留当前首选语言: {preserved_language}" ) device_config = DeviceConfig(selected_role_key=new_role_key, preferred_language=preserved_language) await device_config_manager.set_config(device_id, device_config) session_logger.info( device_id, "config", f"设备的角色已更新为 {new_role_key}" + (f",首选语言: {preserved_language}" if preserved_language else "") ) async def get_device_role(device_id: str, language: str = None) -> dict: device_config = await device_config_manager.get_config(device_id, force_refresh=True) preferred_language = None if device_config and hasattr(device_config, 'preferred_language') and device_config.preferred_language: preferred_language = device_config.preferred_language session_logger.info( device_id, "config", f"检测到设备首选语言配置: {preferred_language}" ) effective_language = language or preferred_language if device_config: selected_role_key = device_config.selected_role_key session_logger.info( device_id, "config", f"使用配置的角色: {selected_role_key}" + (f", 使用语言: {effective_language}" if effective_language else "") ) else: selected_role_key = settings.selected_role_key session_logger.info( device_id, "config", f"使用默认角色: {selected_role_key}" + (f", 使用语言: {effective_language}" if effective_language else "") ) selected_role = await role_manager.get_role_config_for_language(selected_role_key, effective_language) if not selected_role: all_roles = await role_manager.get_all_roles() if all_roles: first_role_key = next(iter(all_roles.keys())) selected_role = await role_manager.get_role_config_for_language(first_role_key, effective_language) session_logger.warning( device_id, "config", f"未找到角色 {selected_role_key},使用默认角色: {first_role_key}" ) else: selected_role = { "role_key": "default", "name": "默认助手", "content": "你是一个智能助手,请简洁回答问题。" } session_logger.warning( device_id, "config", "未找到任何可用的角色配置,使用内置默认角色" ) lang_info = effective_language or "默认" session_logger.info( device_id, "config", f"已选择角色配置: {selected_role.get('name', '未命名')}, 语言: {lang_info}" ) return selected_role