dsh-reasoning-options
GitHub: Scorp1o117/dsh-reasoning-options · npm: dsh-reasoning-options · 中文
A small DeepSeek Harness plugin that automatically adds a reasoning-effort picker to every pi-ai (third-party gateway) model.
Why
dsh's built-in DeepSeek models show a reasoning-effort selector in the Web UI because the DeepSeek adapter declares reasoning capability for them. Models configured through llm-pi-ai (OpenCode Go, GOAT, Volcengine Ark, ...) don't — pi-ai only offers effort levels for models that explicitly declare reasoningEfforts, and hand-declared gateway models never do.
This plugin closes the gap by writing the declaration itself: it scans the llm-pi-ai namespace and, for every model without reasoningEfforts, applies a settings mutation that adds the full level set (off / minimal / low / medium / high / xhigh / max, OpenAI-compatible wire spellings) and sets a route-level reasoning: high default where missing. Writes go through dsh's native settings pipeline (schema-validated → persisted to settings.yaml → hot-applied), so the Web UI picker appears and the chosen effort really reaches the request — no manual file editing.
The plugin only gives users a convenient way to pick. Which level a model actually supports is the user's call; the plugin does not judge model fitness.
Install
dsh plugin --profile web add dsh-reasoning-options
Or mount manually in a profile patch:
- insert:
- id: reasoning-efforts
name: 'dsh-reasoning-options'
config:
enabled: true
How it works
- On boot, read the resolved
llm-pi-ainamespace (registered by the pi-ai plugin). - For each model without
reasoningEfforts, generate asettings.mutateop writing the full seven-level declaration at the exact path. - For provider routes without a
reasoningdefault, addreasoning: high. - Writes are schema-validated by pi-ai, persisted, and hot-committed; dsh's native UI/request path takes over.
- Idempotent: models that already declare efforts are untouched; a second scan is a no-op. Listens to
settings/updated, so models added later are covered automatically.
Config
| Field | Default | Meaning |
|---|---|---|
enabled |
true |
Set false to stop auto-patching |
Want different defaults or wire values? After the patch they live in the
llm-pi-aisection ofsettings.yaml— edit them freely; the plugin never overwrites existing declarations.
Notes
- The plugin reads and mutates the
llm-pi-ainamespace but does not own it (pi-ai registers it exclusively). All writes use the publicsettings.mutateAPI — equivalent to editing via the Web UI. - Wire spellings are OpenAI-compatible (
low/medium/high/...). Most OpenAI-compatible gateways accept them; if one expects its own spelling, adjust the values in settings.yaml.
No comments yet. Be the first to write one.