openclaw - ✅(Solved) Fix [Bug]: Control UI: thinking dropdown shows Default (low) even when effective/configured default is adaptive [1 pull requests, 1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#66607Fetched 2026-04-15 06:25:26
View on GitHub
Comments
1
Participants
2
Timeline
6
Reactions
0
Author
Participants
Timeline (top)
commented ×1cross-referenced ×1labeled ×1mentioned ×1

In the OpenClaw Control UI WebChat, the thinking-level dropdown can show Default (low) even though the actual configured default and effective runtime thinking level are adaptive.

This appears to be a frontend display bug, not a backend/session-default bug.

Root Cause

Root cause

Fix Action

Fix / Workaround

Local proof / workaround

A local UI-only patch fixed the display by making the dropdown prefer the effective/current thinking state instead of the model heuristic.

After this local patch, the dropdown correctly displayed: "Default (adaptive)"

PR fix notes

PR #66655: fix(control-ui): show configured thinkingDefault in dropdown

Description (problem / solution / changelog)

## Summary

The WebChat thinking dropdown always showed Default (low) for reasoning models, even when the user configured agents.defaults.thinkingDefault to something else (e.g. adaptive).

This change reads agents.defaults.thinkingDefault from the loaded config snapshot (when present) and uses it for the default label.

Fixes #66607.

Test plan

  • Manual: set agents.defaults.thinkingDefault=adaptive, open Control UI WebChat, verify dropdown shows Default (adaptive) when no per-session override is set.

Changed files

  • ui/src/ui/app-render.helpers.ts (modified, +20/-2)

Code Example

{
  "agents": {
    "defaults": {
      "thinkingDefault": "adaptive"
    }
  }
}

---

Confirmed backend/runtime state

Verified separately via runtime/config inspection:

    configured default: agents.defaults.thinkingDefault = adaptive
    current session runtime: Think: adaptive
    UI still showed: Default (low)

So the backend/session state is correct, but the Control UI label is misleading.

---

function ET(e) {
  let t = e.sessionsResult?.sessions?.find(t => t.key === e.sessionKey)?.thinkingLevel,
      n = typeof t === 'string' && t.trim() ? ta(t) ?? t.trim() : '',
      { provider: r, model: i } = wT(e),
      a =
        typeof e.chatThinkingLevel === 'string' && e.chatThinkingLevel.trim()
          ? ta(e.chatThinkingLevel) ?? e.chatThinkingLevel.trim()
          : r && i
            ? ia({ provider: r, model: i, catalog: e.chatModelCatalog ?? [] })
            : 'off';

  return {
    currentOverride: n,
    defaultLabel: `Default (${a})`,
    options: TT(r, i, n),
  };
}
RAW_BUFFERClick to expand / collapse

Bug type

Regression (worked before, now fails)

Beta release blocker

No

Summary

In the OpenClaw Control UI WebChat, the thinking-level dropdown can show Default (low) even though the actual configured default and effective runtime thinking level are adaptive.

This appears to be a frontend display bug, not a backend/session-default bug.

Steps to reproduce

Configure:

{
  "agents": {
    "defaults": {
      "thinkingDefault": "adaptive"
    }
  }
}

Use a reasoning-capable model, for example: "openai-codex/gpt-5.4"

Open Control UI WebChat Leave the session without an explicit thinking override Check the thinking dropdown

Expected behavior

It should show the actual effective/configured default, e.g.: "Default (adaptive)"

Actual behavior

The dropdown shows: "Default (low)"

OpenClaw version

2026.4.10 (and later)

Operating system

Linux

Install method

No response

Model

openai-codex/gpt-5.4

Provider / routing chain

openai / oauth

Additional provider/model setup details

No response

Logs, screenshots, and evidence

Confirmed backend/runtime state

Verified separately via runtime/config inspection:

    configured default: agents.defaults.thinkingDefault = adaptive
    current session runtime: Think: adaptive
    UI still showed: Default (low)

So the backend/session state is correct, but the Control UI label is misleading.

Impact and severity

This does not appear to affect actual backend behavior. It appears to be a Control UI labeling bug only.

Additional information

Root cause

The issue appears to be in the Control UI frontend logic for the thinking dropdown.

The thinking dropdown label in ET(e) was built from: ia({ provider, model, catalog })

In the built frontend bundle, the dropdown label is computed in ET(e) using model-based fallback logic: defaultLabel: Default (${r && i ? ia({ provider: r, model: i, catalog: e.chatModelCatalog ?? [] }) : 'off'})

That means the UI derives the label from the model/provider heuristic via ia(...), which can return low for reasoning-capable models, instead of using the actual configured/effective default thinking level.

So the dropdown is effectively showing: model-derived fallback, instead of actual configured/effective default

Local proof / workaround

A local UI-only patch fixed the display by making the dropdown prefer the effective/current thinking state instead of the model heuristic.

function ET(e) {
  let t = e.sessionsResult?.sessions?.find(t => t.key === e.sessionKey)?.thinkingLevel,
      n = typeof t === 'string' && t.trim() ? ta(t) ?? t.trim() : '',
      { provider: r, model: i } = wT(e),
      a =
        typeof e.chatThinkingLevel === 'string' && e.chatThinkingLevel.trim()
          ? ta(e.chatThinkingLevel) ?? e.chatThinkingLevel.trim()
          : r && i
            ? ia({ provider: r, model: i, catalog: e.chatModelCatalog ?? [] })
            : 'off';

  return {
    currentOverride: n,
    defaultLabel: `Default (${a})`,
    options: TT(r, i, n),
  };
}

After this local patch, the dropdown correctly displayed: "Default (adaptive)"

Suggested fix

The dropdown should use a resolved/default thinking value coming from actual session/config state, not infer the label from model capability heuristics.

Best source would be one of:

  • resolved default thinking from server/session state
  • explicit surfaced thinkingDefault
  • effective current thinking default already known by the chat/session state

Notes

  • UI-only fix
  • no backend behavior change
  • no sessions.patch behavior change

extent analysis

TL;DR

The issue can be fixed by modifying the Control UI frontend logic to use the actual configured or effective default thinking level instead of the model-derived fallback for the thinking dropdown label.

Guidance

  • Verify that the thinkingDefault is correctly configured in the session settings and that the effective runtime thinking level is indeed "adaptive".
  • Update the ET function in the Control UI frontend to prefer the effective/current thinking state over the model heuristic for the dropdown label.
  • Use the e.chatThinkingLevel or t (thinkingLevel from session) value to determine the default label, instead of relying on the ia function's model-based fallback logic.
  • Ensure that the UI-only patch does not introduce any unintended side effects on the backend or session behavior.

Example

function ET(e) {
  let t = e.sessionsResult?.sessions?.find(t => t.key === e.sessionKey)?.thinkingLevel,
      n = typeof t === 'string' && t.trim() ? ta(t) ?? t.trim() : '',
      { provider: r, model: i } = wT(e),
      a = e.chatThinkingLevel || t; // prefer chatThinkingLevel or thinkingLevel from session

  return {
    currentOverride: n,
    defaultLabel: `Default (${a})`,
    options: TT(r, i, n),
  };
}

Notes

The suggested fix is a UI-only change and does not affect the backend behavior. The patch should be thoroughly tested to ensure it does not introduce any unintended side effects.

Recommendation

Apply the suggested UI-only patch to update the Control UI frontend logic, as it correctly addresses the issue without modifying the backend behavior.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

It should show the actual effective/configured default, e.g.: "Default (adaptive)"

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING