Skip to content

Conversation

@hannesrudolph
Copy link
Collaborator

@hannesrudolph hannesrudolph commented Nov 14, 2025

Reasoning effort is now capability‑driven with disable/none/minimal; removed GPT‑5 special‑casing

Description

  • Why

    • Eliminate brittle GPT‑5 “minimal” band‑aids.
    • Give models/providers precise control over which reasoning efforts are exposed and how they’re sent.
    • Clearly distinguish “disable” (omit param) vs “none” (send param=none).
  • What changed for users

    • The Reasoning Effort dropdown now reflects the model’s capability:
      • If the model advertises boolean support, you’ll see Low/Medium/High.
      • If the model advertises an explicit list, you’ll see exactly those values (any mix of Disable, None, Minimal, Low, Medium, High).
    • Selecting:
      • Disable: turns reasoning off and sends no reasoning parameter.
      • None: keeps reasoning enabled but explicitly sends “none”.
      • Minimal/Low/Medium/High: sends the selected effort.
    • Models that require reasoning effort won’t show a synthetic “None”; they use the model’s default if unset.
  • Why it matters

    • Removes hidden provider‑specific behavior.
    • Enables explicit opt‑out (Disable) versus explicit “no reasoning” configuration (None).
    • Reduces user confusion and mismatches between UI and actual provider capabilities.
  • Backward compatibility

    • Models with supportsReasoningEffort=true still show Low/Medium/High.
    • Existing settings continue to work; additional values are honored when supported.
  • Additional notes

    • OpenAI Native “minimal” no longer suppressed; reasoning fields and encrypted content only included when an effort is selected.
    • Temporary OpenAI Native request body logs removed.

Important

This PR refactors reasoning effort handling to be capability-driven, removing GPT-5 special-casing and updating models, API handlers, and UI components accordingly.

  • Behavior:
    • Introduces capability-driven reasoning effort handling with options: disable, none, minimal, low, medium, high.
    • Removes special-casing for GPT-5 models, allowing explicit control over reasoning efforts.
    • Updates SimpleThinkingBudget and ThinkingBudget components to reflect new reasoning effort logic.
  • Models:
    • Updates model.ts to include reasoningEffortsExtended and reasoningEffortSettingValues.
    • Modifies openai.ts to define new GPT-5.1 models with updated reasoning capabilities.
  • API Handlers:
    • Refactors OpenAiNativeHandler and RooHandler to utilize new reasoning effort logic.
    • Adjusts getModelParams and getOpenAiReasoning functions to handle extended reasoning efforts.
  • Tests:
    • Updates and adds tests in openai-native.spec.ts, roo.spec.ts, and model-params.spec.ts to cover new reasoning effort scenarios.
    • Ensures UI components handle reasoning effort changes correctly in SimpleThinkingBudget.spec.tsx.

This description was created by Ellipsis for f1aa7f7. You can customize this summary. It will automatically update as commits are pushed.

… GPT-5 minimal special-casing; document UI semantics; remove temporary logs
@dosubot dosubot bot added size:XL This PR changes 500-999 lines, ignoring generated files. Enhancement New feature or request labels Nov 14, 2025
@roomote
Copy link
Contributor

roomote bot commented Nov 14, 2025

Rooviewer Clock   See task on Roo Cloud

Re-reviewed changes since last commit. Three issues resolved, one remaining.

  • Logic bug in getRooReasoning: The function treats reasoningEffort === "disable" the same as enableReasoningEffort === false, both returning { enabled: false }. However, "disable" should return undefined to omit the reasoning parameter entirely, as expected by the test at line 889.
  • Dead code: The supportsReasoningNone field is added to the ModelInfo schema but never used anywhere in the codebase.
  • State inconsistency in SimpleThinkingBudget: When "disable" is selected, the UI sets both enableReasoningEffort = false and reasoningEffort = "disable". However, getRooReasoning checks enableReasoningEffort first (line 56), returning { enabled: false } instead of the intended undefined, contradicting the documented goal to "omit any reasoning parameter/body sections".
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

@dosubot dosubot bot added the lgtm This PR has been approved by a maintainer label Nov 14, 2025
@daniel-lxs daniel-lxs moved this from Triage to PR [Needs Review] in Roo Code Roadmap Nov 14, 2025
@roomote
Copy link
Contributor

roomote bot commented Nov 14, 2025

Oroocle Clock   See task on Roo Cloud

Posted 2 inline review comments addressing a logic bug and an unused schema field. Waiting on updates from the author.

  • getRooReasoning: map "disable" to omission (undefined) and keep { enabled: false } only when enableReasoningEffort === false. Adjust getRooReasoning() to omit the field for "disable".
  • Remove or document unused supportsReasoningNone in modelInfoSchema.

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
@mrubens mrubens merged commit 01cb12f into main Nov 14, 2025
10 checks passed
@mrubens mrubens deleted the feat/gpt5-1-reasoning-capability branch November 14, 2025 01:54
@github-project-automation github-project-automation bot moved this from New to Done in Roo Code Roadmap Nov 14, 2025
@github-project-automation github-project-automation bot moved this from PR [Needs Review] to Done in Roo Code Roadmap Nov 14, 2025
mrubens pushed a commit that referenced this pull request Nov 14, 2025
mini2s added a commit to zgsm-ai/costrict that referenced this pull request Nov 17, 2025