dsh-model-avail:用真實請求探測模型可用性並重排選擇器

前言

在 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 插件面板(推薦)

  1. 打開 DSH Web UI,左側進入 插件 / Plugins;
  2. 點 安裝,填入例如:
github:Shino113-1/dsh-model-avail

也可填本地目錄絕對路徑,或 npm 包名 dsh-model-avail(若已發佈)。面板會在 profile 的 dsh.profile.bundles 中登記插件;該路徑需能訪問 GitHub 或 npm。

  1. 安裝完成後重啓 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。

方式三:手動

  1. 將整個包目錄複製到 <profile>/node_modules/dsh-model-avail;
  2. 在 <profile>/package.json 的 dsh.profile.bundles 末尾追加 "dsh-model-avail";
  3. 若有 pnpm-lock.yaml,再複製到 <profile>/vendor/dsh-model-avail 並在 dependencies 中加入 "dsh-model-avail": "file:./vendor/dsh-model-avail";
  4. 重啓 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 爲準:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜