前言¶
在 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 爲準: