Back to home@lylarcher

dsh-model-capabilities

一个DSH插件,为自定义模型配置输入类型(input)、推理模式(reasoningEfforts)

Stars
0
Language
TypeScript
Created
Aug 29, 2026
Updated
Aug 29, 2026
GitHub repo

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[] and providers.<route>.modelOverrides at once, so you can review and write to all of them from one place.

If you only need the input: text/image picker 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[] 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:

  1. Put the built package under profiles/<name>/node_modules/dsh-model-capabilities/.
  2. Add "dsh-model-capabilities" to dsh.profile.bundles in profiles/<name>/package.json.
  3. 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.