add banbanmini backend
This commit is contained in:
80
talkingq-url/handlers/command_handler.py
Normal file
80
talkingq-url/handlers/command_handler.py
Normal file
@@ -0,0 +1,80 @@
|
||||
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
|
||||
Reference in New Issue
Block a user