Replies: 2 comments 2 replies
|
为什么不采用getModels的方式直接获取了,这样写死的配置不是以后还有问题 |
1 reply
|
你好有两个问题请教
|
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
DSH Issue 报告:llm-pi-ai 插件 opencode-go 模型目录不全且不随上游更新
TL;DR
DSH 当前架构下,opencode-go 路由的模型目录来自 pi-ai 包的内置静态目录
dist/providers/data/opencode-go.json。该文件由scripts/generate-models.ts在发包时生成,安装后永不更新。已安装的 v0.82.1(生成于 2026-07-25)只收录了 16 个模型,
而 live 端点
https://opencode.ai/zen/go/v1/models实际返回 29 个。由于该路由横跨 3 种协议,现有的
settings.yaml配置机制(models/modelOverrides)结构上无法补充新模型,用户侧无解,只能改包内数据文件。
本文档给出:根因分析、13 个缺失模型的完整目录条目(可直接并入官方生成器)、
协议归属的实测证据、验证方法,以及对官方的三个根治建议。
1. 环境信息
C:\Users\stone\AppData\Roaming\npm\node_modules\@deepseek-ai\dsh@deepseek-ai/dsh-llm-pi-ai@0.1.1-rc.2@earendil-works/pi-ai@0.82.1(最新 0.84.2 也仅 19 个模型,同样不全)~/.dsh/profiles/node_modules/@earendil-works/pi-ai→ Junction 指向全局安装(同一物理文件)settings.yaml中llm-pi-ai.providers.opencode-go.apiKeyEnv: OPENCODE_GO_API_KEYagent-default-model: { provider: opencode-go, model: ox-alpha-free }← 不在内置目录中2. 问题现象
ox-alpha-free、glm-5.3、gpt-5.6-luna、qwen3.8-max等);复现:
3. 根因分析
3.1 架构链路与数据流
flowchart LR A["settings.yaml<br/>llm-pi-ai.providers.opencode-go"] --> D["dsh-llm-pi-ai<br/>resolveRouteModels()"] B["pi-ai dist/providers/data/<br/>opencode-go.json (静态,发包时生成)"] --> C["flattenModelCatalog()<br/>= OPENCODE_GO_MODELS"] C --> E["provider 实例<br/>opencodeGoProvider().getModels()"] C --> F["models.generated.js MODELS<br/>getBuiltinModels('opencode-go')"] E --> G["请求分发(wire 协议实现)"] F --> D D --> H["最终暴露给用户的模型目录"]关键事实:
models.generated.js的MODELS都由同一个data/opencode-go.jsonflatten 而来,因此只需更新这一个文件。npm run generate-models从 models.dev 抓取后固化进 npm 包,运行时没有任何刷新机制(旧版
dsh-opencode-go-provider插件的动态刷新已被移除)。升级不能解决问题。
3.2 为什么 settings.yaml 配置无法补救
PiAiProviderProfile提供两种目录定制方式,对本路由均不可用:modelOverrides:只允许覆盖内置目录已有的 id,未知 id 直接报错modelOverrides names "X", which the installed catalog does not describe;models列表:整体替换目录,但PiAiModelProfile没有api字段。新增模型的协议回退链是
request.api ?? base?.api ?? routeApi,而 opencode-go 内置目录横跨
anthropic-messages/openai-completions/openai-responses三种协议,sharedCatalogApi()返回undefined→ 新模型一律报错model "X" needs an api; the installed catalog does not describe it...。结论:在多协议目录路由上,任何配置写法都无法新增模型,必须修改包内数据文件。
4. 修复内容(本地补丁)
向
dist/providers/data/opencode-go.json合并 13 个缺失模型(16 → 29),已有 16 条逐字节保留。补丁脚本:
~/.dsh/patches/repatch-dsh-opencode-go-catalog.ps1(幂等:已存在的 id 跳过,pi-ai 升级后重跑不会回退上游新增的模型)。原始文件备份于同目录
opencode-go.json.bak。4.1 新增条目完整数据(可直接并入官方生成器/数据文件)
条目来源与约定:
qwen3.8-max/glm-5.3/gpt-5.6-luna:逐字段取自上游 pi-ai 0.84.2 同名条目(官方生成器产物);deepseek-v4-flash-vision-exp:克隆同家族deepseek-v4-flash并开启 image 输入;hy3-preview:克隆hy3(该 id 仅存在于 live 端点,models.dev 尚未收录);取自 models.dev
api.json的opencode-goprovider(2026-08-24 版本);input一律收敛到 pi-ai 支持的["text"]/["text","image"](models.dev 的 video/audio/pdf 不受支持)。4.2 协议归属的实测证据
用存储的 API key 对 live 端点做了双协议探测(2026-08-24):
POST /zen/go/v1/chat/completions(openai-completions)POST /zen/go/v1/messages(anthropic-messages,需x-api-key头)注意:anthropic 端点用
Authorization: Bearer会返回 401,必须用x-api-key+anthropic-version头——排查时容易误判为"模型不存在"。与 models.dev 的映射规则一致:
provider.npm = @ai-sdk/anthropic→ anthropic-messages,@ai-sdk/openai→ openai-responses,缺省 → openai-completions。5. 验证方法
补丁后通过两条真实消费路径冒烟测试(脚本:
~/.dsh/patches/verify-opencode-go-catalog.cjs):预期:两者均为 29 个模型、id 集合一致、每条
api/baseUrl/contextWindow/maxTokens/input完整。实测结果:
SMOKE TEST PASSED。重启 dsh 后模型选择器即显示全部 29 个模型。6. 对官方的根治建议(按优先级)
@earendil-works/pi-ai的生成流程(或直接重跑 generator 刷新 models.dev 快照),随下一个 dsh/pin 版本发布。这是最小改动、立即生效的方案。
同时建议修正 generator 对 opencode-go 的抓取遗漏:live 端点的
hy3-preview未进 models.dev,说明纯 models.dev 来源会漏模型,宜以 live
/v1/models的 id 集合做并集校验。dsh-opencode-go-provider插件曾实现"models.dev + live
/v1/models合并、缓存于~/.dsh/cache/、定期刷新"的机制,移除后目录变成永久静态快照。建议在 dsh-llm-pi-ai 内重建等价能力:
利用 pi-ai 已有的
Provider.refreshModels()/ModelsStore接口(dist/models-store.d.ts),为 opencode-go 这类订阅制端点挂接刷新逻辑,失败时保留上次目录。
PiAiModelProfile增加api字段:当前多协议路由上配置无法新增模型的根因是条目缺少协议声明(见 §3.2)。允许条目级
api后,用户即可在settings.yaml里自行补充内置目录尚未收录的模型,而不必等待发包或改 node_modules。
7. 时间线与相关文件
All reactions