There is a “Reasoning Effort” selector in the DeepSeek Harness (DSH) chat box, which appears only when a model reports the reasoning.efforts capability. The official DeepSeek channel includes this capability by default, but third-party relay models manually declared through llm-pi-ai (such as various community/free endpoints) do not have it by default, so the selector does not appear. The Web settings page also does not expose a reasoningEfforts field, leaving no place to configure it.
This plugin adds a “Reasoning Effort” selector for third-party relay models in DeepSeek Harness (dsh). It is maintained by chuling-lingling and is licensed under the MIT License.
Core Features¶
- Monitors the
llm-pi-aisettings section and automatically fills in missing capability declarations. - Provides six reasoning effort levels by default.
- Supports customizing dialects by model family (
thinkingFormat). - Intelligently writes route-level default effort levels.
- Allows independent session-level effort settings.
Installation and Enablement¶
- Make sure
pnpmis installed. - Confirm that the
dshversion is 0.1.x. - Run the installation command.
dsh plugin --profile web add github:chuling-lingling/dsh-plugin-reasoning-efforts
After installation, restart dsh web for the changes to take effect. No additional configuration is required.
Typical Usage¶
- Start
dsh weband open any conversation. - Click the “Select Model” button at the bottom of the chat box.
- In the model list, select a model under the relay group.
- Click “Reasoning Effort” and choose the desired level.
- Send a message. The level takes effect with each request (session-level).
The level selection is session-level, so each conversation can be configured independently.
Configuration (Optional)¶
By default, the plugin provides a unified six-level scale for all models (off / low / medium / high / xhigh / max), with high as the default level. Rules are stored in the reasoning-efforts section of ~/.dsh/settings.yaml. All fields have default values.
reasoning-efforts:
# Base rules: match all models by default (.), with a unified six-level scale and the common reasoning_effort dialect
patterns: ['.'] # Model ID matching (case-insensitive regex)
levels: [off, low, medium, high, xhigh, max]
default: high
thinkingFormat: openai
setCompat: true # Whether to add thinkingFormat to matching models
providers: [] # Process only these routes; empty = all
# Additional rules: array order determines priority; the first matching rule wins; if no rule matches, fall back to the base rules
rules: # Built-in default: the DeepSeek family uses a dedicated dialect
- patterns: [deepseek, reasoner]
levels: [off, low, medium, high, xhigh, max]
default: high
thinkingFormat: deepseek
Example of customizing dialects/levels by model family (by default all models are already covered; this is only needed if you want to change the dialect for a family or narrow its level set):
reasoning-efforts:
rules:
# Keep the built-in DeepSeek rules (if omitted, the true off state of Off is lost)
- patterns: [deepseek, reasoner]
levels: [off, low, medium, high, xhigh, max]
default: high
thinkingFormat: deepseek
# GLM models from Zhipu use the zai dialect (thinking: {type: enabled/disabled} + reasoning_effort)
- patterns: [glm]
levels: [off, low, high]
default: high
thinkingFormat: zai
Note on route default levels: The plugin writes a route-level reasoning only when every model on that route that has obtained levels supports the default value (because models that do not support the default value will cause request errors). For mixed routes (for example, Grok and GLM hosted on the same relay), if no common default level can be derived, configure a mutually supported default for each rule, or manually set reasoning: on the route.
Known Limitations¶
- Only handles models that are manually declared in the route (
models:list); catalog routes (models included by pi-ai’s built-in model catalog) already have complete capability metadata and do not require handling. - The plugin only fills in missing fields and does not override existing declarations: to change the level set for a model, edit
settings.yamldirectly (or remove that model’sreasoningEffortsentry so the plugin can regenerate it according to the current rules). - Extended levels (Medium / Xhigh, etc.) are sent to the backend as
reasoning_effort: "<level>"unchanged; if the relay does not support a value, selecting it will cause a request error, so switch to another level. - For custom rules, confirm that the level set is actually supported by the relay; the plugin cannot validate this in advance.
Conclusion¶
By monitoring the configuration section and adding capability declarations according to the rules, this plugin resolves the issue of third-party relay models being unable to use the reasoning effort selector in DSH. For users who need to fine-tune reasoning intensity in the chat interface, it is an essential tool.
- Plugin directory: https://www.skillhub.cn/plugins/chuling-lingling/dsh-plugin-reasoning-efforts
- Code repository: https://github.com/chuling-lingling/dsh-plugin-reasoning-efforts