Bundle
dsh-auto-model
Auto model selection for DeepSeek Harness: routes each turn to V4 Flash or V4 Pro through a classifier call
- Source
- AL-spiritphoenix
- stars
- 2 stars
- License
- MIT
- Updated
- Updated 21 hours ago
Readme
# dsh-auto-model
English | [中文](README.zh.md)
A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) bundle that adds an **Auto** model option. When a session selects `auto`, the plugin classifies each turn with a small Flash call and routes it to `deepseek-v4-flash` (SIMPLE) or `deepseek-v4-pro` (COMPLEX).
It is a plain-JavaScript bundle, so it installs straight from a git host with no build step. It uses only shipped core APIs and runs against an unmodified harness.
## Install
Install into the `web` profile (the profile the `dsh web` command boots):
From a local checkout:
```sh
dsh plugin --profile web add ./dsh-auto-model
```
From GitHub:
```sh
dsh plugin --profile web add github:AL-spiritphoenix/dsh-auto-model
```
Then boot it:
```sh
dsh web
```
`dsh web` is the `web` profile's alias, so no `--profile` flag is needed. The model selector now lists **Auto** alongside Flash and Pro. The concrete model the router chooses is what the session log records in each request header.
## How it works
- The plugin registers its own `deepseek-auto` provider route, whose `listModels()` returns the `auto` entry at runtime. The directory entry is therefore independent of `llm-deepseek`'s `models` config, so a `settings.yaml` override cannot hide it.
- The plugin listens on the root `agent/request` waterfall (outside `installModelSelection`) and rewrites `auto` — whichever provider carried it — to a concrete `provider`/`model` before dispatch.
- Each turn's first step sends one auxiliary classifier call to `classifierModel` (defaults to the fast model); later steps of the same turn reuse the decision. A failed call falls back to `onClassifierError` (default `slow`).
## Configuration
All fields are optional and default to the DeepSeek V4 pair:
| Key | Default | Meaning |
| --- | --- | --- |
| `provider` | `deepseek-official` | Provider route the concrete requests are routed to. |
| `model` | `auto` | Virtual model id shown and submitted; never dispatched. |
| `providerName` | `DeepSeek(Auto)` | Selector group label. |
| `name` | `Auto` | Selector model label. |
| `description` | (built-in) | Selector detail. |
| `fastModel` | `deepseek-v4-flash` | Model for SIMPLE tasks. |
| `slowModel` | `deepseek-v4-pro` | Model for COMPLEX tasks. |
| `classifierModel` | `fastModel` | Model serving the classifier call. |
| `classifierPrompt` | (built-in) | Classifier system prompt. |
| `classifierMaxTokens` | `16` | Classifier output-token cap. |
| `classifierTimeoutMs` | `10000` | Classifier call deadline. |
| `contextBudgetChars` | `4000` | Maximum task characters fed to the classifier. |
| `onClassifierError` | `slow` | Target when classification fails or returns an unknown token. |
Override them in the `web` profile's `cordis.patch.yml`:
```yaml
- id: auto-model
config:
fastModel: deepseek-v4-flash
slowModel: deepseek-v4-pro
onClassifierError: slow
```
## Limitations
- `auto` is advertised as a text model, so an image-containing session cannot select it.
- The classifier call is an auxiliary dispatch and is not counted by the token meter.
- `auto` is session-local: after a restart, a non-blank session resumes from the logged concrete model rather than re-classifying.
Install
dsh plugin --profile web add github:AL-spiritphoenix/dsh-auto-model
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-auto-model from the hub
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.