DSH Plugin Store
Back to home

sanshanya

better-model-provider

Per-model capability declaration for DeepSeek Harness: reasoning-effort levels (wire spellings) + request modalities (vision) for OpenAI-compatible providers. Settings section, zero runtime harness deps, no YAML.

Stars
1
Language
TypeScript
Created
Aug 14, 2026
Updated
Aug 14, 2026
VisionRuntime
GitHub repo

Introduction

better-model-provider

Better custom-provider model onboarding for DeepSeek Harness (dsh), with per-model declaration of native vision input and reasoning-effort levels.

English | 中文

Editing one model row with the plugin

Why you may need it

The official Models page manages providers and model rows, but two per-model capability fields stayed YAML-only: reasoningEfforts (which reasoning levels the model accepts, plus each level's wire spelling) and input (which request modalities the model admits). Until they are declared:

  • the composer's model picker shows no reasoning-effort control for your model;
  • image sessions refuse to switch to it (Model ... does not accept image input), because a hand-declared model defaults to text-only.

Install

# From GitHub:
dsh plugin --profile web add github:sanshanya/better-model-provider

# Local checkout:
dsh plugin --profile web add link:<absolute path to this repo>

Restart dsh web, hard-refresh the browser, and the settings sidebar gains Model capabilities. Uninstall:

dsh plugin --profile web rm better-model-provider

Use

  1. Configure the provider on the official Models page first (that's where the API key lives; this page never touches credentials).
  2. Open Settings → Model capabilities.
  3. Expand a model row: pick Custom under reasoning effort and check the levels; for vision models check image under input modalities.
  4. Apply. The picker immediately offers exactly the declared levels, and the host's image admission admits the model.

Small note: declaring { high } alone gives the picker only High; also check off (blank wire → null) if Off should be available.

Development

npm install
npm run build           # lib/index.js + lib/client.js (module-loader bundle)
npm test            # unit + interaction flows + bundle smoke
npm test:coverage   # v8, 100% per-file gates
npm run lint; npm run typecheck

# real-Harness gate (needs a local harness checkout):
BMP_DSH_DIR=/path/to/deepseek-harness npm test:live

Compatibility

Tested against DeepSeek Harness 0.1.0-rc.5 family (verified at commit 47f9438, 2026-08-13). Minimum-known-good Harness: 0.1.0-rc.5 — the plugin's wire contract (settings.describe/mutate, llm.providers/models, the { rpcId, result } envelope, and the model row schema) is the one that release line serves. Internal-only surfaces (settings.section registration shape) are treated as experimental compatibility: a newer harness that doesn't serve them degrades silently instead of breaking the page.

License

MIT