Fills missing context window, max tokens, thinking levels, and image input on custom DSH models from models.dev, and lists unmatched models for manual edits.
Install
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:11zld22/dsh-model-info-fill
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
This plugin publishes its README in Chinese only.
DeepSeek Harness 插件。按模型名从 models.dev 查出客观参数,补进自定义供应商的模型行:
- 上下文窗口
contextWindow - 输出上限
maxTokens - 图片能力
input - 显示名
name(仅在本地为空时)
不写思考档位。 DSH 0.2 起,宿主的模型编辑里已经有「推理等级」:一个开关加每个档位对应的 API 值,并且会校验档位与写入值。插件只把百科对该模型的说法显示成一行只读提示(「会思考:low / medium / high」或「不思考」),不写 reasoningEfforts,也不写供应商的 reasoning。
也不写占位默认值。 留空的上下文 / 输出上限本来就由宿主的 defaultContextWindow / defaultMaxTokens 回退,插件只写百科真正给出的值 —— 写 262144 进去和留空效果一样,只会把「不知道」伪装成「知道」。
安装
dsh plugin --profile web add github:11zld22/dsh-model-info-fill
装完重启 DSH。桌面版把 --profile web 换成 --profile desktop。打开 设置 → 模型 即可使用。
本机开发用 link 安装:dsh plugin --profile desktop add link:F:\path\to\dsh-models-dev-catalog,改完代码重启 DSH 生效。
怎么用
底部「模型信息补全」一行显示百科同步时间与模型数量,右侧三个按钮:
| 按钮 | 作用 |
|---|---|
| 更新 | 重新拉取 models.dev |
| 补全全部缺失 | 把所有能补的字段一次写进配置 |
| 详情 | 展开面板:供应商的百科身份、可补数量,以及下面各分区 |
芯片按需展开对应分区:
| 芯片 | 含义 |
|---|---|
| 可补全 N | 百科命中,且该模型有缺失字段;逐条列出「将写入 …」,可单独补一条 |
| 有分歧 N | 百科里同名记录对不上,冲突字段不会被填;列出候选来源,点「用这条」指定其中一个 |
| 未匹配 N | 百科里查不到;可搜索条目手动指定,或忽略 |
| 已忽略 N | 被忽略的模型,可恢复 |
每个自定义供应商卡片底部还有 补全缺失字段 · N,只补这一个供应商。
匹配规则
按顺序,命中即停(大小写不敏感):
- 你的指定:面板里手动指定的百科条目(别名)。它永远优先。
- 供应商身份:用配置的
baseURL主机的可注册域(token.sensenova.cn→sensenova.cn)去比对 models.dev 每个供应商的api地址;再退到apiKeyEnv与供应商的env、以及路由名 /displayName与该供应商的id/name。 - 精确 id:本地模型 id 与百科 id 完全相同。
- 网关命名空间:本地 id 形如
opencode-zen-free/beam-free时,把首段当上游网关名去找对应供应商(opencode)里的beam-free。 - 模型名:去掉
provider/前缀与:变体后缀后比对(google/gemma-4-31b-it:free→gemma-4-31b-it)。
为什么先认供应商:models.dev 里 9000 多条模型中有 1200 多个 id 重复出现(同一个模型被几十家转售),其中约 900 个的上下文档位互相冲突(glm-5.3 有 32 条记录、5 种上下文)。只按名字全局比对时,常用模型要么永远「参数不一致」补不上,要么抄了别家网关的数字。认准自己那条供应商记录后,冲突基本消失。
同一组候选里有多条记录时,逐字段求值:只有所有记录都一样的字段才会被写;对不上的字段跳过,并在「有分歧」里列出候选。
填什么
| 字段 | 条件 | 写入 |
|---|---|---|
contextWindow |
本地缺失(不是正整数),命中的记录无分歧 | 百科值 |
maxTokens |
同上 | 百科值 |
input |
百科标注支持图片,本地未声明 image | [text, image];百科只写 text 时不写 |
name |
本地为空 | 百科名 |
reasoningEfforts / 供应商 reasoning |
—— | 永不写 |
其它字段(compat、modelOverrides、headers …) |
—— | 原样保留 |
不会覆盖任何你手填的值;只 set providers.<供应商>.models,值为空或没有可补字段时不发写入。
未匹配怎么办
本地网关(http://127.0.0.1:…)或转售商自造的 id(workbuddy/…、zcode/…)通常查不到。在「未匹配」里:
- 搜索指定:输入关键词(默认填当前 id),从结果里选一条作为依据。这条映射存进缓存(
aliases),下次自动用它。 - 忽略:这条不再出现在未匹配里(存进
ignored),可随时恢复。
指定的条目之后如果从百科消失,这条会回到未匹配并标注「之前指定的百科条目已不存在」。
数据
| 路径 | 内容 |
|---|---|
~/.dsh/models-dev.json |
百科缓存(供应商身份 + 模型事实)、别名、忽略列表 |
llm-pi-ai 的 providers.*.models |
被补全的模型字段 |
若设置了 DSH_HOME,缓存写到 $DSH_HOME/models-dev.json。
无缓存或超过 7 天会在启动后后台刷新;缓存结构版本变更时旧缓存自动视为过期并重拉。拉取失败沿用旧缓存;没有缓存时面板显示「尚未更新」并禁用补全,不阻断任何操作。写入会带当前 settings 修订号,冲突时按最新配置重算一次再写;仍冲突则提示「配置刚被改动,请重试」。
从 0.2.x 升级
- 旧缓存会因结构版本变更自动重拉,不需要手点「更新」。
- 旧版本写进配置的
reasoningEfforts和供应商reasoning不会被改动。 想清理请到宿主的模型编辑里改(那是你的数据,插件不擅自删)。 - 面板里的「档位未写明」「疑似旧版本代填,请确认」两个分区随档位逻辑一起删除;供应商默认档位只在「不支持」时以一行红字提示(只读)。
- 不再有任何后台写入:补全只在你点按钮时发生,因此不会让宿主的模型编辑弹窗保存时报「配置已过期」。建议在编辑弹窗关闭时点补全。
更新日志
0.3.0 · 只补百科事实,不再写思考档位
重写了匹配与写入范围,净删约 2500 行。
- 不写思考档位:不写
reasoningEfforts,也不写供应商的reasoning。DSH 0.2 起宿主自己就有推理等级编辑(开关 + 每档 API 值 + 校验),插件只把百科对该模型的说法显示成一行只读提示。 - 不写占位默认值:未匹配的模型不再被填上 262144 / 32768 这类数字。留空本来就由宿主的
defaultContextWindow/defaultMaxTokens回退,写死只会把「不知道」伪装成「知道」。 - 先认供应商,再认名字:用
baseURL可注册域、apiKeyEnv、路由名先锁定 models.dev 里对应的那家,再做精确 id、网关命名空间(opencode-zen-free/beam-free→opencode的beam-free)、裸名比对。本机 49 个模型里「参数不一致」从遍地降到 0,「未匹配」从 9 条降到 6 条。 - 只能在面板里手动触发:删掉设置变更时的后台自动补全,所以不会再让宿主的模型编辑弹窗保存时报「配置已过期」。写入带修订号,冲突时按最新配置重算一次。
- 未匹配有出口:搜索百科条目手动指定(存成别名,失效会回到未匹配)或直接忽略,不再往下塞默认值。
- 卡片按钮挪位:「补全缺失字段 · N」移到「编辑」前面,并借用宿主的按钮样式;没有可补字段的供应商不再显示按钮;点击后按钮原地显示结果 4 秒。
- 面板删掉「档位未写明」与「疑似旧版本代填,请确认」两个分区。供应商默认档若不被某些模型支持,仍以一行红字提示(只读)。
0.2.4 · 保持未声明不再被写回
「保持未声明」的模型不再被自动补全写回档位;参数对不上的字段留空,不再抄第一条记录。
0.2.2 / 0.2.3 · 按模型名匹配,不再被 :free 变体后缀带偏
摘要不再挤成一行;待确认项可以确认保留。
开发
npm test # 63 项,纯 Node,不联网
npm install # 额外装 react / react-dom / jsdom,解锁卡片布局测试
npm test # 64 项
服务端测试覆盖百科解析(含 reasoning_options 的 null 档位、供应商 api 地址、旧缓存判过期)、匹配级联(供应商身份、命名空间、别名与失效别名、逐字段一致/分歧)、填充规则(只写缺失且信息量增加的字段、永不写思考、未匹配不写默认值、未知字段原样保留),以及路由(/status /refresh /fill /alias /ignore /search)、方法与来源校验、修订冲突重试。
test/card.test.mjs 在 jsdom 里用真实 React 挂载卡片、套上宿主卡片的结构,验证那颗按钮确实落在「编辑」前面的动作行里、点击后原地显示结果、卸载时不留下孤儿节点。缺 devDependencies 时它跳过而不是失败。
License
MIT
Links
More in this category
Ebony-Vinyl/dsh-our-free-model★ 47046
Adds free model lanes to DeepSeek Harness — DeepSeek V4.1 Flash, Kimi K3 and others — with no login, sign-up or API key, plus a local OpenAI-compatible gateway, fallback routing and a usage dashboard.
dingminhua/dsh-connect-workbuddy★ 721
Connects locally signed-in WorkBuddy models to DSH, supports per-model image input opt-in, account switching, and a read-only credits overview with daily check-in.
V1ki/dsh-plugin-subscriptions★ 521
Use ChatGPT (Codex), Claude, and Grok subscriptions as DeepSeek Harness LLM providers, with Settings login, model catalogs, usage, plus image_generate, video_generate, and x_search tools.
Mars-Sea/dsh-commandcode-provider★ 441
Unofficial Command Code LLM provider: registers a `commandcode` route with a live model catalog and reasoning-effort support.
Alice-Marx/dsh-model-router★ 405
Routes DeepSeek Harness work across configured model APIs and supported vendor CLIs with dependency-aware packages and cost previews.
FishBottle7/opencode2dsh★ 365
Exposes OpenCode Zen free models to DeepSeek Harness, with no API key.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.