Skip to content

fix: 修复 custom-openai 模型扫描与模型状态丢失#56

Open
lizhelang wants to merge 3 commits intoqiuzhi2046:mainfrom
lizhelang:codex/fix-custom-openai-model-discovery-models-page
Open

fix: 修复 custom-openai 模型扫描与模型状态丢失#56
lizhelang wants to merge 3 commits intoqiuzhi2046:mainfrom
lizhelang:codex/fix-custom-openai-model-discovery-models-page

Conversation

@lizhelang
Copy link
Copy Markdown
Contributor

@lizhelang lizhelang commented Apr 1, 2026

变更说明

修复 custom-openai 本地兼容端点在 Qclaw 中的三个相关表现:

  1. “获取本地模型”页在 HTTP 连通正常、/v1/models 有返回时,仍可能显示 发现 0 个模型
  2. 完成配置并选中模型后,进入“模型与 API”页时,已配置的 custom-openai provider 和模型又显示为 0
  3. Dashboard / 面板侧与模型页未完全共用同一套模型状态聚合逻辑,导致本地兼容端点更容易出现状态不一致

根因

  • 本地模型扫描对 custom-openai 完全依赖 openclaw models list,当 CLI 返回空结果时没有 fallback 到真实 OpenAI-compatible /models 接口
  • “模型与 API”页需要把本地兼容 provider 的已保存模型和运行态模型一起并入目录状态,否则重新进入页面时 provider / model 会消失
  • custom-openai 快照进入 models.providers 后,还需要避免被误当成手动 custom-provider 鉴权成功的证据
  • HTTP fallback 也必须遵守调用方传入的 timeoutMs

变更类型

  • Bug 修复
  • 新功能
  • 重构 / 优化
  • 依赖更新
  • CI / 构建配置
  • 文档

影响范围

  • Electron 主进程 (electron/main/)
  • Preload / IPC 桥接 (electron/preload/)
  • React 渲染层 (src/)
  • 构建与打包配置
  • 文档

测试

  • 已在本地运行定向测试验证功能

已验证的测试文件:

  • electron/main/__tests__/openclaw-model-config.test.ts
  • electron/main/__tests__/openclaw-model-config.local-env.test.ts
  • src/pages/__tests__/model-center.test.tsx
  • src/pages/__tests__/models-page-state.test.ts

补充说明

已根据 review 补充两点收尾修复:

  • custom-provider 匹配时忽略 custom-openai / ollama / vllm 这类本地兼容快照
  • custom-openai/models HTTP fallback 现在使用 AbortController,遵守 timeoutMs

Copy link
Copy Markdown
Owner

@qiuzhi2046 qiuzhi2046 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • 问题:[P2] 在 src/pages/ModelCenter.tsx 中,持久化到 models.providers 里的 custom-openai 快照现在可能错误地满足无关的自定义 provider 校验。如果用户之后对同一个 base URL 和 model 走手动 custom-provider 鉴权流程,当前匹配逻辑可能会把旧的 custom-openai 快照误当成新 provider 写入成功的证据。

  • 问题:[P3] electron/main/openclaw-model-config.ts 里的新 /models HTTP fallback 没有遵守调用方传入的 timeoutMs。CLI 路径会吃超时,但 fallback 里的 fetch() 没有 AbortController,因此一旦 endpoint 部分卡死,模型发现流程可能比 UI 预期的 API 合约挂得更久。

  • 总结:这个功能方向本身是对的,happy path 的持久化测试也有价值,但新引入的持久化路径和 fallback 路径分别带来了一个“误判鉴权成功”和一个“超时回归”的边缘问题。

  • 测试:已有覆盖包括配置快照持久化、模型页状态合并、HTTP fallback 模型发现;但仍缺少 custom-provider 校验与 custom-openai 存量快照冲突,以及 HTTP fallback 超时约束的测试。

  • 感谢铁铁为Qclaw的做出贡献,欢迎优化后提交PR🤗

@lizhelang
Copy link
Copy Markdown
Contributor Author

已按 review 修复两点:

  1. custom-provider 匹配时忽略 custom-openai / ollama / vllm 这类本地兼容快照,避免误判为手动 custom-provider 写入成功
  2. custom-openai/models HTTP fallback 现在使用 AbortController,遵守调用方传入的 timeoutMs

并补了对应测试:

  • findConfiguredCustomProviderId 忽略 custom-openai 快照
  • scanLocalModels 的 HTTP fallback 超时约束

本地定向测试已通过。

@lizhelang lizhelang changed the title fix: keep custom-openai models visible across setup and models page fix: 修复 custom-openai 模型扫描与模型状态丢失 Apr 1, 2026
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.

2 participants