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:
DawnARC
2026-04-03 19:50:08 +08:00
parent eac5495d00
commit da95b06f96
18 changed files with 4045 additions and 299 deletions

View File

@@ -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:
"""将原始角色字符串转换为内部角色枚举。