前言¶
在 DeepSeek Harness(DSH)里换模型,常见做法是依赖 listModels 或 resolveModelInfo 列出的清单。这些接口只能说明提供商的元数据通路是否正常,不能保证某个具体模型还能完成一次推理:上游下线、额度用尽或凭证失效时,名字仍会出现在选择器里,选中后才会失败。
下面介绍社区插件 dsh-model-avail(维护者 Shino113-1):对每个模型发一次最小真实请求,按「可用模型数」重排模型选择器中的提供商,并在 Web UI 里用颜色区分可用、不可用与待验证状态。
这是什么¶
dsh-model-avail 是 DSH 生态下的插件,分类为模型推理。它不做质量或速度评测,只回答「这条路由能不能跑完一次请求」。探测结果会缓存,并驱动选择器上的统计标签(例如 qwen-token-plan-cn · 16/20)与排序。
插件当前版本为 0.3.1(见仓库 package.json),采用 MIT 许可证。DSH 社区插件目录页:https://www.skillhub.cn/plugins/Shino113-1/dsh-model-avail;源码与说明:https://github.com/Shino113-1/dsh-model-avail。
核心功能¶
真实探测与三种判定¶
宿主侧对每个模型发送最小请求:一条 ping 消息,并要求 1 个输出 token,再根据终结 finish 块归类:
| 状态 | 含义 | 后续 |
|---|---|---|
available |
请求成功(有输出或正常结束) | 计入可用数 |
unavailable |
明确不可用(无凭证、模型不存在、被禁、额度耗尽等) | 沉到组尾并标注 (不可用) |
unknown |
限流、超时、网络抖动等途中失败 | 不判死,下一轮重试 |
设计原则是宁可少标不可用,也不把 transient 错误误标为永久不可用。
选择器展示¶
展开模型选择器时,提供商标题会带上 · 可用/总数,并按可用数降序排列(探测完成前保持原顺序,避免列表闪动)。点进某一提供商后,模型名按判定上色:可用 为绿色(#2ea043)、不可用 为红色(#d1242f)、待验证 为灰色。不可用项还会沉到组尾。
示例效果(来自 README):
qwen-token-plan-cn · 16/20
Our Free Model + 自动识图 · 12/32
Our Free Model · 11/32
…
opencode2dsh · 0/8
DeepSeek Account · 0/2
宿主与浏览器分工¶
- 宿主(
lib/index.js):启动约 4 秒后自动探测,监听llm/adapters-updated;结果写入$DSH_HOME/dsh-model-avail/state.json,TTL 6 小时。 - 浏览器(
lib/client.js):把选择器里实际看到的 roster POST 给宿主,再拉取状态、重排modelDirectories.catalog.store中的分组并写标签;约每 15 秒 复查。模型名上色依赖选择器 DOM(与dsh-reasoning-effort渲染的类名配合);若类名不匹配,排序与统计仍生效,只是不上色。
deepseek-account / deepseek-official 由 DSH 核心固定置顶,本插件不会把它们挤到下面。
安装与启用¶
要求:DSH 桌面版或 CLI(Web UI 形态)、Node.js ≥ 20。插件无运行时 npm 依赖,安装后必须重启 DeepSeek Harness(刷新页面不足以加载宿主路由与客户端 bundle)。
方式一:DSH 插件面板(推荐)¶
- 打开 DSH Web UI,左侧进入 插件 / Plugins;
- 点 安装,填入例如:
github:Shino113-1/dsh-model-avail
也可填本地目录绝对路径,或 npm 包名 dsh-model-avail(若已发布)。面板会在 profile 的 dsh.profile.bundles 中登记插件;该路径需能访问 GitHub 或 npm。
- 安装完成后重启 DSH。
方式二:安装脚本(适合离线、无需走面板 pnpm)¶
在已获取插件源码的目录中执行:
node scripts/install.mjs --list # 列出本机 profile
node scripts/install.mjs --dry-run # 预览变更
node scripts/install.mjs # 自动检测唯一 profile 并安装
指定 profile 示例:
node scripts/install.mjs --profile "C:\Users\<你>\.dsh\profiles\desktop"
也可用环境变量 DSH_PROFILE_DIR(完整路径)或 DSH_PROFILE(profile 名)。若 profile 由 pnpm 管理(存在 pnpm-lock.yaml),脚本会同步 file:./vendor/dsh-model-avail 依赖,避免下次 pnpm 清掉手工复制的 node_modules。
方式三:手动¶
- 将整个包目录复制到
<profile>/node_modules/dsh-model-avail; - 在
<profile>/package.json的dsh.profile.bundles末尾追加"dsh-model-avail"; - 若有
pnpm-lock.yaml,再复制到<profile>/vendor/dsh-model-avail并在dependencies中加入"dsh-model-avail": "file:./vendor/dsh-model-avail"; - 重启 DSH。
典型用法与确认¶
看选择器与控制台¶
- 第一次启动后,宿主会在数秒内开始探测;完成后提供商按可用数排序,标题带
· N/M。 - 控制台在快照变化时会输出类似
[model-avail] N providers decorated; top: …;展开提供商且模型名上色后,还会打印各色 RGB,便于确认样式是否生效。
HTTP 接口¶
端口与 Web UI 一致(随 DSH 启动参数)。常用路由:
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /dsh-model-avail/state |
当前快照(含 probing、progress、各模型 verdict) |
| GET | /dsh-model-avail/state?refresh=1&force=1 |
触发探测(force 忽略缓存) |
| POST | /dsh-model-avail/roster |
浏览器上报选择器 roster |
| POST | /dsh-model-avail/probe |
单点复测 {"provider":"…","model":"…"} |
本地查看状态示例:
curl http://127.0.0.1:<端口>/dsh-model-avail/state
若只有统计、未按可用数排序,多半是探测尚未结束(响应里 probing: true)。
探测预算(默认写死在 lib/index.js 顶部)¶
每 provider 最多 60 个模型;每轮最多 80 次探测;并发 3;单次超时 20s。一轮未结束且有进展时,约 30 秒 后续跑。计费敏感时可调小 MAX_PROBES_PER_CYCLE、拉长 TTL_MS,改后需重启 DSH。
适用场景与注意¶
适合:经常在不同提供商之间切换、希望优先看到「真能应答」的模型集合的 DSH 用户;需要在 Web UI 里一眼区分不可用模型的场景。
注意:
- 探测会真实发请求(每次约 1 个输出 token),可能消耗额度。
- 只验证「能不能跑」,不测上下文长度、工具调用或输出质量。
- 浏览器侧仅作用于 Web UI;TUI 选择器不受排序/上色影响。
- 插件以当前 DSH 进程权限运行;安装前建议阅读源码与 MIT 许可证,确认符合你的环境策略。
- 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 本身遵循「一切皆插件」的扩展方式。
卸载可在插件面板移除,或在插件目录执行:
node scripts/install.mjs --uninstall
之后同样需重启 DSH。
结尾¶
dsh-model-avail 用最小真实请求补齐「列表里有名字」与「真的能推理」之间的缺口,并把选择器按可用模型数重排,减少误选失效路由的时间。需要安装说明与实现细节时,以仓库 README 为准: