Skip to content

feat(models): 内置 15 家供应商模型元数据并接入 catalog 查找链 - #2280

Open
dongyu23 wants to merge 1 commit into
BigPizzaV3:mainfrom
dongyu23:codex/vendor-model-metadata
Open

dongyu23 wants to merge 1 commit into
BigPizzaV3:mainfrom
dongyu23:codex/vendor-model-metadata

Conversation

@dongyu23

Copy link
Copy Markdown
Contributor

Fixes #2279

问题详解

现状:内置元数据只覆盖官方模型

main 分支参与 catalog 生成的元数据共 4 个文件、12 条:codex-models.json(gpt-5.5/5.4/5.4-mini/5.3-codex/5.2/codex-auto-review)、gpt56 compat(sol/terra/luna)、astra compat、deepseek(v4-flash/v4-pro)。

除此之外的所有主流模型——Kimi、Qwen、GLM、豆包、MiniMax、小米 MiMo、Grok、Gemini、StepFun、Mistral、NVIDIA、Meta Muse、Thinking Machines、gpt-oss——没有任何内置元数据。用户把这些模型名填进 model / 模型列表时走 gpt-5.5 兜底模板克隆,产生四类问题:

1. 上下文窗口被系统性写低。 兜底模板窗口 272000,而 kimi-k3 / qwen3.8-max / MiniMax-M3 / doubao-seed-evolving / mimo-v2.6 / glm-5.3 等主流模型真实窗口均为 1M。用户只能逐个手填 [1M] 后缀或每模型窗口补救,且不知道要补的仍然会漏。

2. Codex UI 降级为裸 slug。 无 display_name / description / 思考档位,界面显示 kimi-k3 而非 "Kimi K3";model_ui_metadata 无数据,renderer-inject.js 的 displayName/档位覆盖全部失效。

3. 供应商事实字段缺失。 max_output_tokens(如 kimi-k2.7-code 仅 32K、deepseek 384K)、input_modalities(多模态标记)等全部没有。

4. 社区配置存在静默致命坑(最严重)。 元数据缺失迫使用户粘贴社区流传的 model.js / JSON。经 openai/codex 源码核验(0.144+ 的 ApplyPatchToolType 枚举仅剩 Freeform),Kimi/Qwen/MiniMax 系社区配置广泛使用的 apply_patch_tool_type: "function" 会导致 codex 整份 model_catalog_json 反序列化失败、静默回落官方模型列表——用户自定义的窗口与元数据全部失效,且无任何报错提示。codex 的 catalog 解析是文件级的,一条坏值废掉整份文件。

附带问题

方案

1. 统一精调层 VENDOR_METADATA_JSONS

把 gpt56/astra compat 与新增的 15 家供应商元数据(56 条)合并为单一 include_str! 数组,compatibility_metadata_entry 一次 find_map 完成查找(各文件 slug 两两不相交,已脚本验证;顺序仅表达优先级:产品级精调在前)。deepseek 文件同时在官方 DeepSeek Responses 专用路径优先处理,数组内覆盖经中转使用 deepseek 模型的场景。

2. 与官方自动更新机制的协同(字段级裁决)

精调/供应商层命中(gpt56 → astra → deepseek → 14 家)
   基座 = 运行时官方 models_cache.json → 静态资产 → gpt-5.5 首条
   结果 = 基座字段 + 精调字段覆盖
→ 运行时官方缓存(官方 slug 且无精调时,#2141 原语义)
→ 静态资产 codex-models.json(sync_official_models.py 维护)
→ gpt-5.5 兜底

精调覆盖冲突字段(窗口/Fast 档/展示名),未被精调覆盖的字段从官方缓存流入——官方 App 热更新不再被精调层屏蔽,产品特性也不被官方数据冲掉。

3. 大小写不敏感匹配

新增 find_catalog_entry:先精确、后 eq_ignore_ascii_case 回退,统一接管静态资产与运行时缓存查找;前端 model-metadata.ts 的文档导入/同步同步改为忽略大小写(同文档内多个大小写变体视为歧义报错)。

4. 完全向后兼容

粘贴导入的 metadata 仍在 catalog 生成后覆盖(优先级更高,apply_model_metadata_overrides 原语义);窗口四字段保护(#2191)、sync_official_models.py 的只增不删语义、deepseek 专用路径均不变。

数据来源

56 条供应商元数据逐家按官方文档/平台核实:DeepSeek 官方价格页与更新日志、MiniMax 开放平台模型表、MiMo 官方发布、智谱官方价目(FlashX)、阶跃 Step 5 Preview 发布、Qwen3.8 全量开源报道、Gemini 3.1 Pro 规格、xAI Grok 4.7 发布等;其中 20 条 apply_patch_tool_type: function → freeform 修复即针对上述第 4 类问题。

测试

单元测试(+5)vendor_metadata_chain_matches_all_providers(5 家代表 slug 的窗口/展示/档位逐字段断言)、vendor_metadata_chain_matches_case_insensitivelycompat_overlay_composes_with_runtime_cache_base(字段级裁决双向断言)、catalog_metadata_matches_slug_case_insensitivelypasted_metadata_overrides_embedded_vendor_metadata(粘贴覆盖优先级)。

E2E(新增 tests/e2e_codex_real_cli.rs#[ignore] 手动跑)

  • 真实 apply 管线生成 20 条 catalog(kimi/minimax/qwen),真实 codex(0.147)debug models 全部加载;阴性对照:注入一条 function 后 codex 整份解析失败(坐实问题 4)
  • 精调×官方缓存组合:确定性冲突缓存(精调窗口/Fast 档胜出、官方截断策略流入)+ 本机真实官方缓存(gpt-5.6-terra/luna 实际重叠,未覆盖字段与官方逐字段一致)+ 真实 codex 解析

全量cargo test --workspace 1466 passed / 0 failed;npm run check(tsc)干净;本 PR 触碰文件 fmt/clippy 清洁。

行为变化

场景 之前 之后
供应商 slug 未配窗口 回落 272000 供应商真实窗口(#2191 语义保留)
Codex UI 展示 裸 slug 无档位 供应商 display_name/档位
deepseek slug 经中转 gpt-5.5 兜底 deepseek 元数据
粘贴社区 function 配置 整份 catalog 静默失效 —(本 PR 内置数据全 freeform;导入坏值仍会失败,生成侧清洗另议)
大小写变体 slug 漏配 命中
官方热更新 vs 精调 精调完全屏蔽 未覆盖字段流入官方最新值

- 修复 kimi/minimax/qwen 共 20 条 apply_patch_tool_type: function→freeform
  (codex 0.144+ 的枚举仅剩 Freeform,function 会致整份 catalog 解析失败)
- 补充近期发布模型:deepseek-v4.1-flash 及官方别名、grok-4.7、mimo-v2.6
  系列、glm-5.3-flashx、MiniMax-M2.7、qwen3-coder 系/3.8-27b、
  gemini-3.1-pro;修正 minimax M3 窗口与 mimo v2.5 输出上限
- slug 匹配大小写不敏感:内置查找链(find_catalog_entry)与前端文档
  导入/同步(slugMatchesIgnoreCase),供应商 Model Key 大小写不统一
- VENDOR_METADATA_JSONS 接入 compatibility 查找链:60 条供应商元数据
  填名即生效,未配窗口时采用供应商真实窗口(BigPizzaV3#2191 语义),粘贴导入
  优先级不变(pasted_metadata_overrides_embedded_vendor_metadata)
- 新增 e2e_codex_real_cli:真实 codex 加载生成的 catalog + 阴性对照

重构:gpt56/astra/vendor 合并为单一 VENDOR_METADATA_JSONS 查找数组;
精调层基座优先取运行时官方 models_cache(官方热更新流入未被精调
覆盖的字段),新增 compat_overlay_composes_with_runtime_cache_base。
dongyu23 added a commit to dongyu23/CodexPlusPlus that referenced this pull request Sep 22, 2026
内置元数据(PR BigPizzaV3#2280 的 60 条精调/供应商 + 官方静态资产)对用户不可见、
只能靠记忆判断是否命中。本提交让内置数据在管理器可见、可基于其编辑:

- model_suffix: VENDOR_METADATA_SOURCES 升级为 (来源名, JSON) 数组;新增
  builtin_model_metadata(slug)(剥后缀/大小写不敏感,精调→供应商→官方
  bundled 逐层,未命中即回退 gpt-5.5)与 builtin_model_metadata_index()
  (全量索引,官方 sync 增量自动纳入)
- commands: query_builtin_model_metadata / builtin_model_metadata_index
- 导入区打开时:顶部状态行显示匹配结果(命中带来源,未命中说明回退模板
  与 272000 窗口);无已导入配置且命中时把内置条目预填为可编辑底稿
  (预填 ≠ 导入:不保存则不落盘,生成时本就用内置;保存后成为用户配置
  覆盖内置,优先级语义不变)
- 模型列表行级 badge:内置(带来源 title)/自定义/回退 三态
- i18n 英文对照 + 样式;Rust +2 测试、前端 +2 测试

基于 BigPizzaV3#2280,建议先合 BigPizzaV3#2280 再评审本提交。

来源徽标收纳进导入区展开体(slug 展示行内,水平同行),模型列表
折叠态不再溢出显示。
dongyu23 added a commit to dongyu23/CodexPlusPlus that referenced this pull request Sep 22, 2026
内置元数据(PR BigPizzaV3#2280 的 60 条精调/供应商 + 官方静态资产)对用户不可见、
只能靠记忆判断是否命中。本提交让内置数据在管理器可见、可基于其编辑:

- model_suffix: VENDOR_METADATA_SOURCES 升级为 (来源名, JSON) 数组;新增
  builtin_model_metadata(slug)(剥后缀/大小写不敏感,精调→供应商→官方
  bundled 逐层,未命中即回退 gpt-5.5)与 builtin_model_metadata_index()
  (全量索引,官方 sync 增量自动纳入)
- commands: query_builtin_model_metadata / builtin_model_metadata_index
- 导入区打开时:顶部状态行显示匹配结果(命中带来源,未命中说明回退模板
  与 272000 窗口);无已导入配置且命中时把内置条目预填为可编辑底稿
  (预填 ≠ 导入:不保存则不落盘,生成时本就用内置;保存后成为用户配置
  覆盖内置,优先级语义不变)
- 模型列表行级 badge:内置(带来源 title)/自定义/回退 三态
- i18n 英文对照 + 样式;Rust +2 测试、前端 +2 测试

基于 BigPizzaV3#2280,建议先合 BigPizzaV3#2280 再评审本提交。

来源徽标收纳进导入区展开体(slug 展示行内,水平同行),模型列表
折叠态不再溢出显示。

交互重构(评审反馈):顶部状态行取消,全部收纳到底部操作行——
slug + [匹配:来源|回退:gpt-5.5] + [自定义] 标签 + 重新匹配/清除
按钮(按匹配态切换);JSON 粘贴实时写回模型行的窗口/压缩比输入框;
导入按钮去掉 imported 高亮(元数据自动匹配后无需强调)。
dongyu23 added a commit to dongyu23/CodexPlusPlus that referenced this pull request Sep 22, 2026
内置元数据(PR BigPizzaV3#2280 的 60 条精调/供应商 + 官方静态资产)对用户不可见、
只能靠记忆判断是否命中。本提交让内置数据在管理器可见、可基于其编辑:

- model_suffix: VENDOR_METADATA_SOURCES 升级为 (来源名, JSON) 数组;新增
  builtin_model_metadata(slug)(剥后缀/大小写不敏感,精调→供应商→官方
  bundled 逐层,未命中即回退 gpt-5.5)与 builtin_model_metadata_index()
  (全量索引,官方 sync 增量自动纳入)
- commands: query_builtin_model_metadata / builtin_model_metadata_index
- 导入区打开时:顶部状态行显示匹配结果(命中带来源,未命中说明回退模板
  与 272000 窗口);无已导入配置且命中时把内置条目预填为可编辑底稿
  (预填 ≠ 导入:不保存则不落盘,生成时本就用内置;保存后成为用户配置
  覆盖内置,优先级语义不变)
- 模型列表行级 badge:内置(带来源 title)/自定义/回退 三态
- i18n 英文对照 + 样式;Rust +2 测试、前端 +2 测试

基于 BigPizzaV3#2280,建议先合 BigPizzaV3#2280 再评审本提交。

来源徽标收纳进导入区展开体(slug 展示行内,水平同行),模型列表
折叠态不再溢出显示。

交互重构(评审反馈):顶部状态行取消,全部收纳到底部操作行——
slug + [匹配:来源|回退:gpt-5.5] + [自定义] 标签 + 重新匹配/清除
按钮(按匹配态切换);JSON 粘贴实时写回模型行的窗口/压缩比输入框;
导入按钮去掉 imported 高亮(元数据自动匹配后无需强调)。

逻辑修正(评审反馈):重新匹配=放弃自定义回到内置(清除该 slug 的
自定义配置,自定义标签随之消失);builtin 查询补运行时官方缓存层
与生成链一致;标签描边加深;行内导入按钮边框按状态着色(命中绿/
自定义蓝/回退无色)。
dongyu23 added a commit to dongyu23/CodexPlusPlus that referenced this pull request Sep 22, 2026
内置元数据(PR BigPizzaV3#2280 的 60 条精调/供应商 + 官方静态资产)对用户不可见、
只能靠记忆判断是否命中。本提交让内置数据在管理器可见、可基于其编辑:

- model_suffix: VENDOR_METADATA_SOURCES 升级为 (来源名, JSON) 数组;新增
  builtin_model_metadata(slug)(剥后缀/大小写不敏感,精调→供应商→官方
  bundled 逐层,未命中即回退 gpt-5.5)与 builtin_model_metadata_index()
  (全量索引,官方 sync 增量自动纳入)
- commands: query_builtin_model_metadata / builtin_model_metadata_index
- 导入区打开时:顶部状态行显示匹配结果(命中带来源,未命中说明回退模板
  与 272000 窗口);无已导入配置且命中时把内置条目预填为可编辑底稿
  (预填 ≠ 导入:不保存则不落盘,生成时本就用内置;保存后成为用户配置
  覆盖内置,优先级语义不变)
- 模型列表行级 badge:内置(带来源 title)/自定义/回退 三态
- i18n 英文对照 + 样式;Rust +2 测试、前端 +2 测试

基于 BigPizzaV3#2280,建议先合 BigPizzaV3#2280 再评审本提交。

来源徽标收纳进导入区展开体(slug 展示行内,水平同行),模型列表
折叠态不再溢出显示。

交互重构(评审反馈):顶部状态行取消,全部收纳到底部操作行——
slug + [匹配:来源|回退:gpt-5.5] + [自定义] 标签 + 重新匹配/清除
按钮(按匹配态切换);JSON 粘贴实时写回模型行的窗口/压缩比输入框;
导入按钮去掉 imported 高亮(元数据自动匹配后无需强调)。

逻辑修正(评审反馈):重新匹配=放弃自定义回到内置(清除该 slug 的
自定义配置,自定义标签随之消失);builtin 查询补运行时官方缓存层
与生成链一致;标签描边加深;行内导入按钮边框按状态着色(命中绿/
自定义蓝/回退无色)。

场景覆盖(评审反馈):导入区按行索引跟随(模型改名后保持打开,标签
与内置预填实时跟随新名字,未编辑的内置底稿自动重预填);来源标签抽
为纯函数 metadataSourceTags 并覆盖场景矩阵——自定义已覆盖时不再显示
「回退」(避免误导为仍在用 gpt-5.5),命中+自定义并列显示。
@dongyu23

Copy link
Copy Markdown
Contributor Author

暂勿合并,还需要修改部分内容

dongyu23 added a commit to dongyu23/CodexPlusPlus that referenced this pull request Sep 22, 2026
内置元数据(PR BigPizzaV3#2280 的 60 条精调/供应商 + 官方静态资产)对用户不可见、
只能靠记忆判断是否命中。本提交让内置数据在管理器可见、可基于其编辑:

- model_suffix: VENDOR_METADATA_SOURCES 升级为 (来源名, JSON) 数组;新增
  builtin_model_metadata(slug)(剥后缀/大小写不敏感,精调→供应商→官方
  bundled 逐层,未命中即回退 gpt-5.5)与 builtin_model_metadata_index()
  (全量索引,官方 sync 增量自动纳入)
- commands: query_builtin_model_metadata / builtin_model_metadata_index
- 导入区打开时:顶部状态行显示匹配结果(命中带来源,未命中说明回退模板
  与 272000 窗口);无已导入配置且命中时把内置条目预填为可编辑底稿
  (预填 ≠ 导入:不保存则不落盘,生成时本就用内置;保存后成为用户配置
  覆盖内置,优先级语义不变)
- 模型列表行级 badge:内置(带来源 title)/自定义/回退 三态
- i18n 英文对照 + 样式;Rust +2 测试、前端 +2 测试

基于 BigPizzaV3#2280,建议先合 BigPizzaV3#2280 再评审本提交。

来源徽标收纳进导入区展开体(slug 展示行内,水平同行),模型列表
折叠态不再溢出显示。

交互重构(评审反馈):顶部状态行取消,全部收纳到底部操作行——
slug + [匹配:来源|回退:gpt-5.5] + [自定义] 标签 + 重新匹配/清除
按钮(按匹配态切换);JSON 粘贴实时写回模型行的窗口/压缩比输入框;
导入按钮去掉 imported 高亮(元数据自动匹配后无需强调)。

逻辑修正(评审反馈):重新匹配=放弃自定义回到内置(清除该 slug 的
自定义配置,自定义标签随之消失);builtin 查询补运行时官方缓存层
与生成链一致;标签描边加深;行内导入按钮边框按状态着色(命中绿/
自定义蓝/回退无色)。

场景覆盖(评审反馈):导入区按行索引跟随(模型改名后保持打开,标签
与内置预填实时跟随新名字,未编辑的内置底稿自动重预填);来源标签抽
为纯函数 metadataSourceTags 并覆盖场景矩阵——自定义已覆盖时不再显示
「回退」(避免误导为仍在用 gpt-5.5),命中+自定义并列显示。

修正(评审反馈):清除自定义后按实际内置命中恢复标签(命中→重新
匹配可用,不再硬编码回退);内置预填窗口改 context_window 优先——
官方 gpt 系预填 codex 默认运行窗口 272000 而非能力上限 872000,
导入不再改变默认行为;索引字段同步。
dongyu23 added a commit to dongyu23/CodexPlusPlus that referenced this pull request Sep 23, 2026
内置元数据(PR BigPizzaV3#2280 的 60 条精调/供应商 + 官方静态资产)对用户不可见、
只能靠记忆判断是否命中。本提交让内置数据在管理器可见、可基于其编辑:

- model_suffix: VENDOR_METADATA_SOURCES 升级为 (来源名, JSON) 数组;新增
  builtin_model_metadata(slug)(剥后缀/大小写不敏感,精调→供应商→官方
  bundled 逐层,未命中即回退 gpt-5.5)与 builtin_model_metadata_index()
  (全量索引,官方 sync 增量自动纳入)
- commands: query_builtin_model_metadata / builtin_model_metadata_index
- 导入区打开时:顶部状态行显示匹配结果(命中带来源,未命中说明回退模板
  与 272000 窗口);无已导入配置且命中时把内置条目预填为可编辑底稿
  (预填 ≠ 导入:不保存则不落盘,生成时本就用内置;保存后成为用户配置
  覆盖内置,优先级语义不变)
- 模型列表行级 badge:内置(带来源 title)/自定义/回退 三态
- i18n 英文对照 + 样式;Rust +2 测试、前端 +2 测试

基于 BigPizzaV3#2280,建议先合 BigPizzaV3#2280 再评审本提交。

来源徽标收纳进导入区展开体(slug 展示行内,水平同行),模型列表
折叠态不再溢出显示。

交互重构(评审反馈):顶部状态行取消,全部收纳到底部操作行——
slug + [匹配:来源|回退:gpt-5.5] + [自定义] 标签 + 重新匹配/清除
按钮(按匹配态切换);JSON 粘贴实时写回模型行的窗口/压缩比输入框;
导入按钮去掉 imported 高亮(元数据自动匹配后无需强调)。

逻辑修正(评审反馈):重新匹配=放弃自定义回到内置(清除该 slug 的
自定义配置,自定义标签随之消失);builtin 查询补运行时官方缓存层
与生成链一致;标签描边加深;行内导入按钮边框按状态着色(命中绿/
自定义蓝/回退无色)。

场景覆盖(评审反馈):导入区按行索引跟随(模型改名后保持打开,标签
与内置预填实时跟随新名字,未编辑的内置底稿自动重预填);来源标签抽
为纯函数 metadataSourceTags 并覆盖场景矩阵——自定义已覆盖时不再显示
「回退」(避免误导为仍在用 gpt-5.5),命中+自定义并列显示。

修正(评审反馈):清除自定义后按实际内置命中恢复标签(命中→重新
匹配可用,不再硬编码回退);内置预填窗口改 context_window 优先——
官方 gpt 系预填 codex 默认运行窗口 272000 而非能力上限 872000,
导入不再改变默认行为;索引字段同步。

补充场景覆盖:JSON→行写回规则抽为纯函数 importDocumentSyncPatch
(相同值不写/null 不动行/空预览 no-op)并测试;来源标签补脏数据
防御(matched 无 entry、自定义 fallback 文案);Rust 补运行时缓存
命中与大小写变体去重测试。workspace 1470 全过。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

模型元数据严重缺失:主流第三方模型全部回落 gpt-5.5 兜底模板,建议内置供应商元数据

1 participant