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.
What it adds
A new Settings section ("Model Input & Reasoning" / 模型输入与推理) that:
- Lists every configured provider and its models (
providers.<route>.models[] and providers.<route>.modelOverrides).
- Lets you toggle
input modalities (text, image) per model.
- Lets you set
reasoningEfforts per model:
- Non-reasoning → writes
reasoningEfforts: false.
- Reasoning → fill a wire value per level (
minimal|low|medium|high|xhigh|max); off may be left empty (send no reasoning parameter). At least one non-off level must be filled.
- Writes straight through the existing
llm-pi-ai settings namespace (settings.mutate), so the running llm-pi-ai adapter re-registers routes and the model picker shows the new reasoning levels immediately, and the change persists to settings.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" to dsh.profile.bundles in profiles/<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-ai settings 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-ai schema (MODALITIES = [text, image]; THINKING_LEVELS = [off, minimal, low, medium, high, xhigh, max]; reasoningEfforts is false or a {level → string|null} map with only off allowed 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.