dsh-plugin-model-provider:給模型名補上所屬平臺

前言

DSH 的對話界面裏,模型選擇器只顯示模型名。同時接了多個平臺(例如 DeepSeek 賬號、Trae 企業版)時,DeepSeek-V4-Flash 這類同名模型很難一眼分辨來自哪個平臺,調用錯了也只能回溯會話記錄。

下面介紹 Menpengpeng 維護的 dsh-plugin-model-provider。它在模型選擇彈層的「模型」行和輸入框上方的模型按鈕裏,把模型所屬平臺名追加在模型名後面。它是純界面裝飾:下拉候選列表保持原樣,也不改變實際請求。

這是什麼

一句話定位:一個 DSH 客戶端插件,把「模型 → 平臺」映射渲染到界面上,不參與模型路由。

  • 倉庫:https://github.com/Menpengpeng/dsh-plugin-model-provider
  • 目錄頁:https://www.skillhub.cn/plugins/Menpengpeng/dsh-plugin-model-provider
  • 維護者:Menpengpeng
  • 分類:模型推理
  • 許可證:MIT

核心功能

README 給出的生效範圍有三處:

位置 效果
輸入框上方的模型按鈕 DeepSeek-V4.1-Flash(DeepSeek 賬號)
彈層「模型」行 DeepSeek-V4.1-Flash(DeepSeek 賬號)
下拉候選列表每一項 保持原樣,不帶平臺名

平臺名用次要文字色、略小字號顯示,不影響模型名本身的主視覺。

README 還說明:0.0.2 起改爲純 DOM 裝飾,不再復刻官方 1017 徽標邏輯,該徽標已在較新的 DSH 宿主中移除。

實現方式

README 描述的幾個要點:

  • 不註冊任何插槽。原因:dsh-codex-subscription 等插件會搶佔 conversation.input.model 這個 single 插槽卻不聲明 conversation.input.model.label 子插槽,導致基於 slots.inject 的註冊根本不執行;且該子插槽是 single,多個連接器會互相競爭。
  • 包裝 Response.prototype.json/text,從宿主自身的 /api/session/modelCatalog 響應裏學習「模型 → 平臺」映射。宿主連接層會緩存 fetch 引用,所以包裝 fetch 無效。
  • 打開模型菜單時,從分組標題與候選項文本補充學習,作爲兜底。
  • 用 CSS ::after + data-mp-platform 屬性追加平臺名,不改 React 子節點,因此不會被 re-render 清掉。
  • 平臺名自動去除尾部括號限定詞以避免雙層括號;匹配時兼容 Hy4 · x0.29 這類倍率後綴。

代價:依賴 .codexModelSelect* 這組 DOM 類名,宿主大改版時需同步調整選擇器。

安裝與啓用

README 給出兩種方式。方式一是 file 依賴,適合本地開發:

  1. 將本目錄放到工作區或任意位置。
  2. 在 profile 目錄(通常 ~/.dsh/profiles/desktop/)下編輯 package.json:
{
  "dependencies": {
    "dsh-plugin-model-provider": "file:/path/to/dsh-plugin-model-provider"
  },
  "dsh": {
    "profile": {
      "bundles": ["dsh-plugin-model-provider"]
    }
  }
}
  1. 在 profile 的 cordis.patch.yml 末尾追加:
# 本地插件:在「模型」行與輸入框上方的模型按鈕裏,模型名後追加平臺名。
- insert:
    - id: ui-model-provider-label
      name: 'dsh-plugin-model-provider'
  1. 將插件複製到 ~/.dsh/profiles/desktop/node_modules/dsh-plugin-model-provider/。
  2. 重啓 DeepSeek Harness。

方式二是 dsh plugin add:

dsh plugin add /path/to/dsh-plugin-model-provider

README 提示:某些 DSH 版本的 dsh plugin add 存在文件鎖問題(報 EPERM on package.json.lock),此時請改用方式一手動安裝。

典型效果

README 給出的截圖示例:

彈層:
  模型    DeepSeek-V4-Flash(Trae 企業版) ›
  推理等級  high ›

輸入框上方按鈕:
  [DeepSeek-V4-Flash(Trae 企業版) ▾]

下拉候選列表:
  DeepSeek-V4-Flash          ← 不帶平臺名
  gpt-6-sol
  kimi-k3

兼容性

  • DeepSeek Harness >= 0.2.1-rc.3
  • React ^18.2.0
  • 僅 Web 平臺(dsh.client.platform: "web")

package.json 中 version 爲 0.0.2,private: true。文件結構爲 package.json(插件清單)、cordis.patch.yml(bundle patch 聲明)、lib/index.js(服務端入口,空 apply)、lib/client.js(瀏覽器側組件)。

README 還提到編碼約束:所有文件使用無 BOM 的 UTF-8。DSH 的 resolveMeta() 使用 JSON.parse(readFileSync(path, "utf8")) 讀取 package.json,不去 BOM,帶 BOM 會報 SyntaxError: Unexpected token '\uFEFF'。這與官方所有插件保持一致。

回退

刪除 node_modules/dsh-plugin-model-provider/,從 profile package.json 的 dependencies 和 dsh.profile.bundles 移除本插件,刪掉 cordis.patch.yml 末尾的 insert 段,重啓即可恢復。

適用場景與注意

適合:同時接了多個模型平臺、希望當前模型所屬平臺在界面上直接可見的 DSH 用戶;以及想參考「繞開插槽搶佔、改用 DOM 裝飾」這種實現路徑的插件開發者。

注意:插件以當前 DSH 進程權限運行,安裝前應自行檢查源碼與許可證(MIT)。它隻影響界面顯示,不改變模型路由;平臺名的準確性取決於宿主 /api/session/modelCatalog 的返回內容。另外它依賴 .codexModelSelect* 類名,宿主結構大改版時需要跟進調整。

DSH 的理念是「一切皆插件」。上面提到的目錄頁是獨立的社區站點,與 DeepSeek / 幻方無官方從屬關係。

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

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

小夜