Skip to content

MultiRouter 模型匹配语义缺陷:include 反选被前缀放行 / 无匹配 fallback 官方 / mode=all 无前缀路由模型误判不可路由 #34

Description

@zhushihao

背景

MultiRouter 模型选择的语义与运行时路由不一致,共三个相互关联的缺陷(v3.19.2-16 实测)。前两个与本仓库 #29 相关但属于补充语义;第三个是取消 fallback 后暴露的既有缺陷。

问题

1. include 反选被前缀匹配放行

官方 route 是 include 模式(精确白名单 ["gpt-5.6-sol","gpt-5.6-terra","gpt-5.6-luna"]),但向导生成的 matchPrefixes=["gpt","o"] 使前缀匹配独立于 include("或"关系而非"与"关系)。被反选的 gpt-5.4/5.5 仍可通过 startsWith("gpt") 命中官方 route:

  • 前端 routeCanMatchVisibleCatalogModel、后端 codex_route_matches_modelcodex_catalog_route_matches_model、database route_matches_model 四处 exact OR prefix 同一缺陷;
  • 表现:排序界面/子 agent 界面仍能选到反选模型,运行时仍路由到官方。

2. 无匹配模型 fallback 到默认路由(官方)

未勾选源(如 Qwen/Bitto)没有 route,其模型(qwen3.8/glm-5.3)在 exact/prefix 均不匹配后 fallback 到 defaultRouteId/第一条 enabled route(官方)

  • 真实请求打到 OpenAI 官方(404);
  • 子 agent 分组误判"官方"。
  • 代码注释自述为 historical behavior,但语义上"反选/未勾选 = 明确排除"与之冲突。

3. mode=all 且 matchPrefixes 为空的路由,其模型误判不可路由

Kimi route 为 mode=allmatchPrefixes=[](向导 inferWizardRoutePrefixes 不识别 "Kimi",未生成前缀)。raw settings 匹配(exact OR prefix)无法命中 k3/k3-256k:

  • 修复 chore(deps): bump actions/checkout from 6 to 7 #2 取消 fallback 后,k3 从"错误归官方"变为"unroutable";
  • 子 agent 角色编辑器里 k3/k3-256k 角色消失;
  • 编译层 collect_candidatesCodexModelSelection::All => None 本就正确收集 target 全部模型,raw settings 分类层缺这一语义(两层不一致)。

建议修复

  1. include 模式下前缀匹配必须同时命中 include 列表("与"语义,统一 4 处);
  2. 无匹配模型一律 fail-closed(不可路由),不 fallback 默认路由;
  3. mode=all 路由按 target provider catalog 匹配其全部模型(与编译层对齐)。

对应 PR:#(待 PR 创建后回填)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions