What & why
Self-hosted / OpenAI-compatible models (custom OpenAI endpoint, LM Studio, Ollama, vLLM, SGLang, and similar) do not advertise supportsReasoningEffort in the model registry, so the Dynamic Thinking Effort (DTE) feature set is unavailable for them even when the underlying model supports reasoning effort control.
This enhancement adds a per-profile setting that lets the user declare the supported reasoning effort levels for an OpenAI-compatible provider, so the existing DTE surfaces (composer toggle, set_thinking_effort tool gating, new_task effort validation, task-header chip) become available for self-hosted models.
Scope
- New per-profile setting
supportedEffortLevels for OpenAI-compatible profiles (array of effort levels, multi-select in Settings UI).
- Validation + settings round-trip (storage → webview → runtime).
- Capability resolution: a declared list is treated as the model's
supportsReasoningEffort array (registry values win when both present); undeclared profiles keep today's behavior (no capability advertised).
- i18n for the new setting across all locales.
- e2e coverage for the declaration + validation flow.
Follow-up (tracked separately)
Wiring the declared / task-local effort into the actual provider request is a separate follow-up, because each server family needs a different wire shape: LM Studio accepts the object form reasoning: { effort } (flat reasoning_effort is ignored on /v1/chat/completions); vLLM and SGLang take a flat top-level reasoning_effort; Ollama uses its think parameter. A per-provider wire builder gated by the declared capability (undeclared → send nothing) is the design.
Part of the Dynamic Thinking Effort series (umbrella plan: DTE F7). Related: #1328, #1329, #1330, #1331, #1332.
What & why
Self-hosted / OpenAI-compatible models (custom OpenAI endpoint, LM Studio, Ollama, vLLM, SGLang, and similar) do not advertise
supportsReasoningEffortin the model registry, so the Dynamic Thinking Effort (DTE) feature set is unavailable for them even when the underlying model supports reasoning effort control.This enhancement adds a per-profile setting that lets the user declare the supported reasoning effort levels for an OpenAI-compatible provider, so the existing DTE surfaces (composer toggle,
set_thinking_efforttool gating,new_taskeffort validation, task-header chip) become available for self-hosted models.Scope
supportedEffortLevelsfor OpenAI-compatible profiles (array of effort levels, multi-select in Settings UI).supportsReasoningEffortarray (registry values win when both present); undeclared profiles keep today's behavior (no capability advertised).Follow-up (tracked separately)
Wiring the declared / task-local effort into the actual provider request is a separate follow-up, because each server family needs a different wire shape: LM Studio accepts the object form
reasoning: { effort }(flatreasoning_effortis ignored on/v1/chat/completions); vLLM and SGLang take a flat top-levelreasoning_effort; Ollama uses itsthinkparameter. A per-provider wire builder gated by the declared capability (undeclared → send nothing) is the design.Part of the Dynamic Thinking Effort series (umbrella plan: DTE F7). Related: #1328, #1329, #1330, #1331, #1332.