feat:完善长期记忆控制台导入链路与联调测试
summary:\n- 扩展长期记忆控制台导入、调优与删除相关 UI/接口,补充中文化展示与任务细粒度状态管理\n- 强化 memory API 与后端路由能力,补齐导入任务、图谱检索、配置与运行态相关字段\n- 新增与增强前后端测试,覆盖导入多文件类型、检索、调优、删除及图谱查询关键路径 description:\n- dashboard: 重构 knowledge-base 页面与 memory-api,统一任务队列、分块分页、来源删除恢复、调优闭环交互\n- backend: 扩展 webui memory 路由与 A_Memorix 内核检索逻辑,完善服务侧能力与配置 schema\n- tests: 增加 webui 集成测试和 kernel 单测,提升导入/检索/调优/删除全流程回归保障
This commit is contained in:
@@ -230,6 +230,61 @@ def resolve_task_name(task_name: str = "") -> str:
|
||||
return normalized_task_name
|
||||
|
||||
|
||||
def resolve_task_name_from_model_config(model_config: Any, preferred_task_name: str = "") -> str:
|
||||
"""根据旧版 `TaskConfig` 风格参数解析可用任务名。
|
||||
|
||||
该方法用于兼容仍以 `model_config` 传参的调用方:
|
||||
1. 优先使用显式给出的 `preferred_task_name`;
|
||||
2. 其次匹配对象同一性;
|
||||
3. 再尝试按 `model_list` 精确匹配;
|
||||
4. 最后按 `model_list` 中首个命中的模型进行近似映射。
|
||||
|
||||
Args:
|
||||
model_config: 旧调用方持有的任务配置对象。
|
||||
preferred_task_name: 候选任务名(可选)。
|
||||
|
||||
Returns:
|
||||
str: 可用于 `LLMServiceRequest.task_name` 的任务名。
|
||||
|
||||
Raises:
|
||||
RuntimeError: 当前没有可用模型配置。
|
||||
ValueError: 无法解析任何可用任务名时抛出。
|
||||
"""
|
||||
models = get_available_models()
|
||||
if not models:
|
||||
raise RuntimeError("没有可用的模型配置")
|
||||
|
||||
normalized_preferred = str(preferred_task_name or "").strip()
|
||||
if normalized_preferred and normalized_preferred in models:
|
||||
return normalized_preferred
|
||||
|
||||
for task_name, task_cfg in models.items():
|
||||
if task_cfg is model_config:
|
||||
return task_name
|
||||
|
||||
requested_model_list_raw = getattr(model_config, "model_list", [])
|
||||
requested_model_list = [str(item).strip() for item in (requested_model_list_raw or []) if str(item).strip()]
|
||||
if requested_model_list:
|
||||
for task_name, task_cfg in models.items():
|
||||
candidate_list = [str(item).strip() for item in getattr(task_cfg, "model_list", []) if str(item).strip()]
|
||||
if candidate_list == requested_model_list:
|
||||
return task_name
|
||||
|
||||
for requested_model in requested_model_list:
|
||||
for task_name, task_cfg in models.items():
|
||||
candidate_list = [str(item).strip() for item in getattr(task_cfg, "model_list", []) if str(item).strip()]
|
||||
if requested_model in candidate_list:
|
||||
logger.info(
|
||||
"[LLMService] 旧版 model_config 未命中任务配置,"
|
||||
f"按模型 `{requested_model}` 近似映射到任务 `{task_name}`"
|
||||
)
|
||||
return task_name
|
||||
|
||||
if normalized_preferred:
|
||||
logger.warning(f"[LLMService] 无法映射旧版 model_config,回退默认任务: preferred={normalized_preferred}")
|
||||
return resolve_task_name("")
|
||||
|
||||
|
||||
def _normalize_role(role_name: str) -> RoleType:
|
||||
"""将原始角色字符串转换为内部角色枚举。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user