81 lines
3.4 KiB
Python
81 lines
3.4 KiB
Python
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
|