Skip to content

DeepSeek V4 Pro: /think command UI omits "xhigh" and "max" levels despite plugin registering all 7 (2026.5.2) #76482

Description

@suifatt7799-oss

Summary

DeepSeek V4 Pro (deepseek-v4-pro) officially supports reasoning_effort: "max", and OpenClaw's bundled DeepSeek plugin defines a 7-level V4_THINKING_LEVEL_IDS array including "xhigh" and "max". However, the TUI / Control UI /think command only exposes 5 levels — xhigh and max are invisible and unselectable.

Environment

  • OpenClaw: v2026.5.2 (8b2a6e5)
  • Model: deepseek/deepseek-v4-pro
  • Agent config: thinkingDefault: "max"
  • OS: Darwin 25.4.0 (arm64)
  • Node.js: v22.22.2

Expected Behavior

/think should display all 7 levels for DeepSeek V4 Pro:

off, minimal, low, medium, high, xhigh, max

Actual Behavior

/think only shows 5 levels:

off, minimal, low, medium, high

xhigh and max are not visible and not selectable.

Inconsistent state

  • session_status reports Think: max ✅ (the API layer works correctly)
  • The /think selector in the UI cannot see max
  • Manually attempting to set max in an old session reverts to high

Technical Analysis

1. DeepSeek API officially supports max

DeepSeek's Thinking Mode docs state:

Thinking Effort Control: reasoning_effort: "high/max"

In thinking mode, for compatibility, low and medium are mapped to high, and xhigh is mapped to max

2. OpenClaw's DeepSeek plugin already defines all 7 levels

File: dist/extensions/deepseek/index.js

const V4_THINKING_LEVEL_IDS = [
    "off",
    "minimal",
    "low",
    "medium",
    "high",
    "xhigh",   // ← defined but not surfaced in UI
    "max"      // ← defined but not surfaced in UI
];

const DEEPSEEK_V4_THINKING_PROFILE = {
    levels: V4_THINKING_LEVEL_IDS.map(buildDeepSeekV4ThinkingLevel),
    defaultLevel: "high"
};

function resolveDeepSeekV4ThinkingProfile(modelId) {
    return isDeepSeekV4ModelId(modelId) ? DEEPSEEK_V4_THINKING_PROFILE : void 0;
}

The plugin entry registers it correctly:

resolveThinkingProfile: ({ modelId }) => resolveDeepSeekV4ThinkingProfile(modelId),

3. The API mapping layer works correctly

File: dist/provider-stream-shared-BF5MzTUo.js

function resolveDeepSeekV4ReasoningEffort(thinkingLevel) {
    return thinkingLevel === "xhigh" || thinkingLevel === "max" ? "max" : "high";
}

When thinkingLevel is "max", the API request correctly sends reasoning_effort: "max"

4. Suspected root cause: thinking profile resolution chain

File: dist/thinking-Bi9AZdtM.js

const BASE_THINKING_LEVELS = ["off", "minimal", "low", "medium", "high"];
// ← "xhigh" and "max" are NOT in the base list

function resolveThinkingProfile(params) {
    const context = resolveThinkingPolicyContext(params);
    // ...
    const pluginProfile = resolveProviderThinkingProfile({...});
    if (pluginProfile) {
        const normalized = normalizeThinkingProfile(pluginProfile);
        if (normalized.levels.length > 0) return normalized;  // ← should return all 7 levels here
    }
    // fallback: returns BASE_THINKING_LEVELS (5 levels)
    const profile = buildBaseThinkingProfile(defaultLevel);
    if (catalogSupportsXHigh(context.compat)) appendProfileLevel(profile, "xhigh");
    return profile;
}

Call chain:

  1. resolveProviderThinkingProfile()resolveProviderRuntimePlugin() → looks up DeepSeek plugin
  2. If plugin found → calls plugin.resolveThinkingProfile(context)resolveDeepSeekV4ThinkingProfile(modelId)
  3. If modelId matches → returns DEEPSEEK_V4_THINKING_PROFILE (7 levels)
  4. If modelId doesn't match → returns undefined → falls back to BASE_THINKING_LEVELS (5 levels)

Suspicion:

  • resolveProviderRuntimePlugin may fail to match the DeepSeek plugin (provider ID mismatch, plugin registration failure, etc.)
  • Or the modelId passed in doesn't match isDeepSeekV4ModelId's check (which only matches "deepseek-v4-flash" and "deepseek-v4-pro")

5. Session cache (secondary issue)

The thinkingLevel in old sessions' sessions.json is hardcoded to "high", even when the global thinkingDefault: "max" is set. Manually editing sessions.json works around this, but the UI-level problem still remains.

Reproduction Steps

  1. Configure agent main to use deepseek/deepseek-v4-pro
  2. Run /think in TUI or Control UI
  3. Observe the available thinking-level options
  4. Expected: off, minimal, low, medium, high, xhigh, max
  5. Actual: only off, minimal, low, medium, high

Impact

  • Users cannot select max reasoning effort through the UI (workaround: set via thinkingDefault)
  • The xhigh tier is completely unusable (invisible in UI and no thinkingDefault workaround for it specifically)
  • Inconsistent with DeepSeek's officially documented capabilities
  • Old session thinkingLevel cache prevents config changes from taking effect

Workarounds

  1. New sessions: setting thinkingDefault: "max" globally works at the API level
  2. Old sessions: manually edit ~/.openclaw/agents/main/sessions/sessions.json and change the session's thinkingLevel to "max"

Neither workaround addresses the UI invisibility of xhigh/max.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions