dsh-model-capabilities
一个DSH插件,为自定义模型配置输入类型(input)、推理模式(reasoningEfforts)
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 29, 2026
- Updated
- Aug 29, 2026
Introduction
dsh-model-capabilities
A DeepSeek Harness plugin that lets you edit each model's input modalities (input: ["text", "image"]) and per-model reasoningEfforts directly from the Settings UI — no hand-editing settings.yaml.
It works on DSH Web and DSH Desktop: Desktop runs the same web bundle in compatibility mode on the same profile, so no extra registration is needed.
How this relates to
WJZ-P/dsh-model-capabilities(dsh-model-capability): that plugin adds a single input-type selector into the native Models editor. This package is a complement, not a clone — it adds the two things that plugin (and the built-in Models page) leave out:
reasoningEfforts(per-level reasoning wiring:minimal|low|medium|high|xhigh|max+off, with custom wire values) — WJZ-P's plugin does not cover reasoning at all.- A whole-profile, batch view: it enumerates every configured model under both
providers.<route>.models[]andproviders.<route>.modelOverridesat once, so you can review and write to all of them from one place.If you only need the
input: text/imagepicker while adding a model, WJZ-P's inline field is the lighter choice; if you also need reasoning wiring and a full overview of configured models (incl. overrides), this package is what you want.
What it adds
A new Settings section ("Model Input & Reasoning" / 模型输入与推理) that:
- Lists every configured provider and its models (
providers.<route>.models[]andproviders.<route>.modelOverrides). - Lets you toggle
inputmodalities (text,image) per model. - Lets you set
reasoningEffortsper model:- Non-reasoning → writes
reasoningEfforts: false. - Reasoning → fill a wire value per level (
minimal|low|medium|high|xhigh|max);offmay be left empty (send no reasoning parameter). At least one non-offlevel must be filled.
- Non-reasoning → writes
- Writes straight through the existing
llm-pi-aisettings namespace (settings.mutate), so the runningllm-pi-aiadapter re-registers routes and the model picker shows the new reasoning levels immediately, and the change persists tosettings.yaml.
The existing built-in "Models" page intentionally does not expose these two per-model fields (reasoning is a per-model capability); this plugin fills exactly that gap with a dedicated page.
Install
dsh plugin --profile <name> add dsh-model-capabilities
# then restart DSH (web or desktop) to load the new bundle
dsh plugin add installs the package into the profile (profiles/<name>/node_modules), appends it to dsh.profile.bundles, and applies the package's cordis.patch.yml (which activates the minimal host entry that the client-modules node half needs to discover and serve the browser bundle).
Alternatively, for a local mount:
- Put the built package under
profiles/<name>/node_modules/dsh-model-capabilities/. - Add
"dsh-model-capabilities"todsh.profile.bundlesinprofiles/<name>/package.json. - Restart DSH.
Uninstall
dsh plugin --profile <name> remove dsh-model-capabilities
Or remove it from dsh.profile.bundles (and the following unneeded entry in your profile's own cordis.patch.yml):
- id: model-capabilities
disabled: true # or delete this block entirely
Build (from source)
pnpm install
pnpm build # tsdown → lib/client.js (client-modules format) ; lib/index.js is hand-written
Prerequisites: Node ^22.19 / >=24 and pnpm. tsdown must be >= 0.22 (older 0.7.x ships a rolldown that fails to expose transformPlugin).
Requirements & behavior notes
- The section reads/writes the
llm-pi-aisettings namespace. If no provider/model is configured yet (the section would be empty), add one under the built-in Models page first. - Validation mirrors the
llm-pi-aischema (MODALITIES = [text, image];THINKING_LEVELS = [off, minimal, low, medium, high, xhigh, max];reasoningEffortsisfalseor a{level → string|null}map with onlyoffallowed empty). Invalid values are rejected client-side, and the host schema re-validates as the final guard. - On a read-only connection the page shows a notice and disables saving.
- Write conflicts (stale revision) are surfaced and the page refreshes for a retry.