fix(settings): 模型目录拼写对齐底座规范并兼容存量配置大小写 - #293
Conversation
合并顺序依赖(fast-gate 预期失败说明)fast-gate 的「公开底座 gitlink 可达性」步骤( CodeWhale#14 的全部 required checks 已通过(check / gate / link / DCO / Gitleaks)。 合并步骤(需 CodeWhale 写权限的管理员执行)
其余检查(rust-lint / frontend-test / version-consistency / DCO / commit-message / changes / Gitleaks / CodeQL)均已通过;windows-rust-test 跑完后如有失败会跟进。 |
f7f4356 to
fe556e0
Compare
约定:凡底座(CodeWhale)route 目录收录的模型,设置页目录项 model 一律 使用底座目录规范拼写——z.ai 直连(GLM Coding Plan 国际版)目录行是 GLM-5.2/GLM-5-Turbo(glm-5.1 底座即小写);bigmodel.cn Coding Plan 是 底座 zai kind 的自定义端点,模型名原样透传,保持厂商小写 wire id (glm-5.2),开放平台与 modelstudio 目录同理保持小写。 z.ai 直连为严格路由,小写 glm-5.2 在底座精确比较匹配不到自身行, 会撞上 modelstudio 裸 wire id 被误拒(底座侧大小写回退修复另行走 Pinvou/CodeWhale#14 + gitlink PR 配套);本提交让新保存配置直接以 规范拼写进入底座,不再依赖回退路径。 目录命中比较(isPresetModel/findCloudProviderForModel)改为大小写 不敏感:存量配置保存的旧小写 glm-5.2 仍识别为预设行,不被误判为 自定义。 Signed-off-by: asto <asto18089@users.noreply.github.com>
PR 正文声称存量小写配置不误判为自定义,但该兼容只在选择器分组 (isPresetModel/findCloudProviderForModel)成立;SettingsView 编辑/ 添加弹窗仍有 3 处精确比较(initialCatalogMatch、renderProviderModelField 的 known/selectedItem、picker 高亮 active)是大小写敏感的——存量保存的 小写 glm-5.2(z.ai 直连)在目录行改大写 GLM-5.2 后,打开编辑弹窗会被 误判为自定义模型。 修复:导出 catalogItemMatchesModel 并在上述 3 处复用,保持与目录命中 比较同一大小写不敏感语义;补 node 测试覆盖编辑弹窗存量命中场景。 Signed-off-by: asto <asto18089@users.noreply.github.com>
fe556e0 to
94ef0d0
Compare
审阅结论:有意义 + 根因属实,已帮修 1 处存量兼容缺口根因核实(均在底座源码逐项验证)
质量核查(全过)
帮修:编辑弹窗存量兼容缺口(MINOR~中)PR 正文声称「存量小写配置仍识别为预设行,不误判为自定义」,但这只在选择器分组(
后果:存量保存了小写 修复(94ef0d0):导出 |
JensenChen28
left a comment
There was a problem hiding this comment.
审核结论:方向正确,有一处同类遗漏,建议修复后合入
已验证通过
- 拼写对齐与底座一致:底座 bundled zai 目录确为
GLM-5.2 / GLM-5.3 / glm-5.1 / GLM-5-Turbo(CodeWhale/crates/config/assets/models_dev.bundled.json),本 PR 将 z.ai 直连组改为GLM-5.2/GLM-5-Turbo正确;bigmodel 为自定义端点不在底座 zai 目录,保持小写透传的约定合理。 - 放宽匹配无回归:
catalogItemMatchesModel只放宽不收紧,存量精确匹配行为不变;reasoningEffortTiersForModel等本就大小写不敏感。 - 测试:实际 36 个全部通过(PR 描述写 35 = 34 + 1,实际新增 2 个 test 块,计数小误差);
architecture-guard.py通过。 - gitlink:分支带 r6、origin/main 已是 r7,但分支未改 gitlink,合并自然取 main 的 r7,无冲突,符合公约「仅真实冲突才 rebase」。
问题
1.(中)同类遗漏 — SettingsView.jsx:1741
const active = preset === group.preset && model === item.model && !item.custom;renderCatalogPicker(同一编辑弹窗内点「更换」展开的目录列表,SettingsView.jsx:1894)的 active 高亮仍是严格相等。存量小写 glm-5.2 配置在该列表中不会显示选中标记,而同一弹窗的 initialCatalogMatch(1269)与 renderProviderModelField(1619-1620)都已改为大小写不敏感——这正是本 PR 声称要兼容的「存量小写」场景。建议改为 catalogItemMatchesModel(item, model),一行改动。
2.(低)注释依据不准确
代码注释与 PR 描述称「glm-5.1 底座即小写」,这只对 bundled json 成立;Rust ModelInfo 目录行是 GLM-5.1(CodeWhale/crates/agent/src/lib.rs:441,两处大小写不一致是底座自身问题)。app 的 z.ai 组未列 glm-5.1,无功能影响,但作为「拼写约定」的注释依据有误导性:未来 z.ai 组若新增 glm-5.1,按该注释会保存小写,可能复现同类问题。建议修正注释表述。
3.(提示,非缺陷)
存量小写配置只有用户重新选择模型才会覆写为大写;打开弹窗不动字段直接保存仍是小写,运行时仍依赖 #295 的底座回退。PR 已如实声明此依赖关系,可接受。
建议
修复问题 1(必须)并修正问题 2 的注释表述(建议)后即可批准。问题 3 对 #295 的依赖属预期。
- renderCatalogPicker 的 active 判断改用 catalogItemMatchesModel(大小写 不敏感),与同一编辑弹窗其余 3 处目录命中比较保持一致;存量小写 glm-5.2(z.ai 直连)在「更换模型」目录列表中恢复选中标记。 - 修正模型拼写约定注释:底座 bundled 资产 zai 行大小写不统一 (glm-5.1 为小写,agent 层 ModelInfo 目录行则统一大写),新增条目须 逐行核对资产拼写而非套用规律;原「底座 resolver 已做大小写回退」 的表述已失实——该修复(Pinvou/CodeWhale#14)已关闭并回馈上游 (Hmbown/Codewhale#5475)审核,未随当前 gitlink 发布。 Signed-off-by: asto <asto@users.noreply.github.com>
回复 @JensenChen28 的审计建议:2 条有效已修,1 条同意非缺陷逐条在底座源码(当前 r6 与 main 的 r7 gitlink 均核对过)核实如下,建议 1、建议 2 属实,已在 0d9414c 修复并推送;建议 3 同意属预期依赖。 建议 1(中)renderCatalogPicker 高亮严格相等 — ✅ 属实,已修核实:编辑存量配置时 建议 2(低)注释依据不准确 — ✅ 属实,已重写注释核实细节,比审计描述再深一层:
原注释「( 顺带发现并修正一处已失实的表述:原注释称「底座 resolver 对严格直连 provider 已做大小写不敏感回退」——所指的 Pinvou/CodeWhale#14 已于 8-17 被维护者关闭(通用修复优先回馈上游,收敛为 Hmbown/CodeWhale#5475),当前 r6 与 main 的 r7(a36e6cd5)均不含该回退( 建议 3(提示)— 同意非缺陷,依赖对象已更新依赖关系声明本身可接受,但依赖链在评审后发生了变化:存量小写配置的运行时恢复原走 CodeWhale#14,现改为待上游 Hmbown/Codewhale#5475 合入 → fork 同步 → gitlink 升级(配套 PR #295 需相应重定 gitlink 目标,其现指向的 CodeWhale 分支已关闭)。在回退随 gitlink 发布前,存量小写用户在编辑弹窗重新选择模型(保存大写 验证
另更正一处计数笔误:审计指出 PR 描述「35 = 34+1」应为 36,属实,此前帮修实际新增了 2 个 test 块。 |
JensenChen28
left a comment
There was a problem hiding this comment.
复核通过:两项意见均已修复
新提交 0d9414c8 核验:
- 目录选择器高亮(1741):改为
catalogItemMatchesModel,!item.custom短路在前,与 1619/1620/1655 三处复用一致,存量小写配置在「更换」目录列表中可正确高亮。 - 拼写约定注释:改为以
models_dev.bundled.json目录行原样拼写为准,明确底座资产自身大小写不统一(agent 层 ModelInfo 统一大写)、新增条目须逐行核对,并说明回退未随当前 gitlink 发布、新保存必须用原样拼写的理由——表述准确。
验证:node --test tests/model_catalog_grouping.test.js 36 个子测试全过;architecture-guard.py 通过。
CHANGES_REQUESTED 的阻塞项全部解除,可合入。
zhuowp
left a comment
There was a problem hiding this comment.
复审结论:请求修改
先前评审指出的目录选择器高亮遗漏和注释依据均已修复;36 个 model catalog 测试、architecture guard、cargo fmt 与线上 required gate 均通过。
不过全量复审发现大小写兼容的作用域过宽:它同时改变了本地和所有云 provider 的自定义模型分类,详见行内评论。请将兼容限定到有已知历史拼写迁移的 z.ai 目录项,或提供能证明其余 provider(尤其 local_vllm)模型 ID 均大小写不敏感的契约,并补反向测试。
| // 旧拼写(如 z.ai 直连的 glm-5.2 vs 目录行 GLM-5.2),不得因此误判为自定义。 | ||
| function catalogItemMatchesModel(item, model) { | ||
| return typeof item.model === 'string' && typeof model === 'string' | ||
| && item.model.toLowerCase() === model.toLowerCase(); |
There was a problem hiding this comment.
[P2] 这个通用比较器现在被 isPresetModel 的 local_vllm 分支和所有云 provider 复用,超出了本 PR 需要兼容的 z.ai 存量 glm-5.2。本地 OpenAI-compatible 服务暴露的模型 ID 是不透明字符串,可能区分大小写;例如目录有 qwen36_35b_256k 时,用户配置的自定义 ID QWEN36_35B_256K 在本 PR 后会被误分为预设,目录选择器也会错误高亮默认项。云端同 provider 的 case-only 自定义 ID 也有同类问题。请把 case-insensitive alias 限定到明确的 z.ai 迁移项/provider,其他目录继续精确比较,并补“本地 case-only ID 仍为自定义”的反向测试。
|
复审意见核实与修复(39abd7ec): 意见成立,已按建议的第一种方案修复。 核实过程:
修复(39abd7ec):
验证: |
main 自 merge base 后合入 8 个 PR(#299 连接器 CLI 与官方技能全量升级、 #310 测试清理、#306 初始语言跟随系统、#220/#293/#303/#309/#311), 与 main 出现真实冲突(GitHub mergeable=dirty),按「main 结构 + PR 行为」 逐冲突调和: - 111 个 lark-skills 资源冲突:104 个 UA 取 main 升级/新增内容落到 PR 的 新布局(lark-skills/),7 个 UD 接受 main 侧删除(#299 内容合并重排); 抽查确认重命名与 main 内容修改合并正确(SKILL.md 与 main 逐字节一致) - skill_marketplace.rs:两侧新增函数全部保留(PR 的 dir_fingerprint 组 + main 的 is_python_cache_path,共享 collect_* 收集器) - tool-common.jsx:四连接器卡片取 main 版本号(lark-cli v1.0.87 / tmeet v1.0.15 / wecom v0.1.9 / dws v1.0.58) - access-policy.json:恢复 feishu/dingtalk/wecom_status 三项——main #306 的 web_access_contract 断言其为 web 白名单的刻意保留项,PR 此前按 「前端无调用方」误删 实测:cargo test --lib marketplace 117/117、fmt 干净、前端 tool-store 40 项/import/grouping/web_access/bridge 协议全过。 Signed-off-by: luzeyang <1461574375@qq.com> Signed-off-by: luzeyang (INT) <lu.zeyang@h3c.com>
* fix(settings): 模型目录拼写对齐底座规范并兼容存量配置大小写 约定:凡底座(CodeWhale)route 目录收录的模型,设置页目录项 model 一律 使用底座目录规范拼写——z.ai 直连(GLM Coding Plan 国际版)目录行是 GLM-5.2/GLM-5-Turbo(glm-5.1 底座即小写);bigmodel.cn Coding Plan 是 底座 zai kind 的自定义端点,模型名原样透传,保持厂商小写 wire id (glm-5.2),开放平台与 modelstudio 目录同理保持小写。 z.ai 直连为严格路由,小写 glm-5.2 在底座精确比较匹配不到自身行, 会撞上 modelstudio 裸 wire id 被误拒(底座侧大小写回退修复另行走 Pinvou/CodeWhale#14 + gitlink PR 配套);本提交让新保存配置直接以 规范拼写进入底座,不再依赖回退路径。 目录命中比较(isPresetModel/findCloudProviderForModel)改为大小写 不敏感:存量配置保存的旧小写 glm-5.2 仍识别为预设行,不被误判为 自定义。 Signed-off-by: asto <asto18089@users.noreply.github.com> * fix(settings): 编辑弹窗目录命中大小写不敏感,兼容存量小写配置 PR 正文声称存量小写配置不误判为自定义,但该兼容只在选择器分组 (isPresetModel/findCloudProviderForModel)成立;SettingsView 编辑/ 添加弹窗仍有 3 处精确比较(initialCatalogMatch、renderProviderModelField 的 known/selectedItem、picker 高亮 active)是大小写敏感的——存量保存的 小写 glm-5.2(z.ai 直连)在目录行改大写 GLM-5.2 后,打开编辑弹窗会被 误判为自定义模型。 修复:导出 catalogItemMatchesModel 并在上述 3 处复用,保持与目录命中 比较同一大小写不敏感语义;补 node 测试覆盖编辑弹窗存量命中场景。 Signed-off-by: asto <asto18089@users.noreply.github.com> * fix(settings): 目录选择器高亮兼容存量小写配置并修正拼写约定注释 - renderCatalogPicker 的 active 判断改用 catalogItemMatchesModel(大小写 不敏感),与同一编辑弹窗其余 3 处目录命中比较保持一致;存量小写 glm-5.2(z.ai 直连)在「更换模型」目录列表中恢复选中标记。 - 修正模型拼写约定注释:底座 bundled 资产 zai 行大小写不统一 (glm-5.1 为小写,agent 层 ModelInfo 目录行则统一大写),新增条目须 逐行核对资产拼写而非套用规律;原「底座 resolver 已做大小写回退」 的表述已失实——该修复(Pinvou/CodeWhale#14)已关闭并回馈上游 (Hmbown/Codewhale#5475)审核,未随当前 gitlink 发布。 Signed-off-by: asto <asto@users.noreply.github.com> --------- Signed-off-by: asto <asto18089@users.noreply.github.com> Signed-off-by: asto <asto@users.noreply.github.com> Co-authored-by: asto <asto@users.noreply.github.com>
背景
0.8.1 macOS 版用 GLM Coding Plan 国际版,选了列表里的
glm-5.2,访问时报:自定义模型名
glm-5.3正常(且上游实际把 glm-5.2 路由到 glm-5.3,服务端本可接受)。根因(保存侧)
设置页目录项拼写与底座(CodeWhale)route 目录不一致:z.ai 直连的底座目录行是市场拼写
GLM-5.2/GLM-5-Turbo,而目录列表保存的是小写glm-5.2。用户从列表选择后,小写选择器进入底座严格路由,精确比较匹配不到自身目录行。底座侧的大小写不敏感回退修复(resolver)走Pinvou/CodeWhale#14+ 配套 gitlink PR(#295);本 PR 让新保存配置直接以规范拼写进入底座,不依赖回退路径。拼写约定(本 PR 确立)
凡底座(CodeWhale)route 目录收录的模型,设置页目录项一律以底座目录拼写为准;自定义端点按厂商 wire id:
GLM-5.2/GLM-5-Turbo(glm-5.1底座即小写)glm-5.2等)变更
model-catalog.js:仅 z.ai 直连两组列表改规范拼写 + 约定注释;bigmodel 组补防回归注释说明不得对齐大写isPresetModel/findCloudProviderForModel目录命中改大小写不敏感(catalogItemMatchesModel),存量小写配置仍识别为预设行,不误判为自定义验证
node --test tests/model_catalog_grouping.test.js:35 全通过(main 基线 34 + 新增 1)python3 scripts/architecture-guard.py通过fork-guard.sh不受影响已知风险
GLM-5.2在当前底座上本就精确匹配成功,可独立生效