Skip to content

Assistant: Support defaultThinkingEffort in custom model definitions (providers.json) #116

Description

@Liang-Psych

Problem Description:

When configuring custom language models in ~/.posit/ai/providers.json, users can declare available thinking levels via thinkingEffortLevels, for example:

"thinkingEffortLevels": [
  "low",
  "medium",
  "high",
  "max"
]

However, there is currently no way to declare a default thinking effort for a model (e.g. "defaultThinkingEffort": "high").

Impact:

  1. Initial conversation state defaults to null: When a new conversation begins, the session state initializes thinkingEffort: null.
  2. Missing reasoning payload: Unless the user manually clicks the thinking effort selector in the UI for every new conversation, the outgoing request to the model provider omits the reasoning parameter entirely (reasoningEffort is not included in the payload).
  3. Suboptimal performance for reasoning models: Controllable reasoning models (such as o-series, GPT-5/6, Gemini 2.5/3.x, Qwen, etc.) fall back to zero or minimal reasoning effort by default, defeating the purpose of configuring a reasoning model.

Proposed Solution:

Add support for an optional defaultThinkingEffort property in model definitions within providers.json:

{
  "id": "my-provider/my-reasoning-model",
  "name": "My Reasoning Model",
  "protocol": "openai-responses",
  "thinkingEffortLevels": ["low", "medium", "high", "max"],
  "defaultThinkingEffort": "high"
}

When a conversation selects this model, Positron Assistant should automatically initialize the conversation's thinkingEffort with the declared defaultThinkingEffort instead of null.

Activity

  1. juliasilge commented on Sep 14, 2026

    @juliasilge
    Member

    Thanks for the detailed write-up, especially the concrete providers.json example! I agree a per-model default thinking effort is worth supporting, and we'll track the work here.

    One refinement to the problem description before scoping is that on current builds, a new chat does not actually start with a null effort in Assistant state. The work needed here spans the ai-lib submodule and Assistant core. We'll need to decide a few things:

    • Should a defaultThinkingEffort that is not in the model's thinkingEffortLevels fail validation, normalize to the nearest level, or be ignored? Validation probably belongs at resolve time rather than schema time, because overrides can change a model's levels after the custom model definition.
    • Does a model-declared default apply when the user switches models mid-conversation, or only at conversation creation?
  2. added this to the 2026.12.0 Release milestone on Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions