# 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.