Skip to content

Support max effort tier for Anthropic models (Opus 4.6+/4.8, Sonnet 4.6) — effort scale currently caps at xhigh #2985

Description

@hahnpierre

Description

OMP's internal reasoning/effort scale tops out at xhigh — the levels are off | minimal | low | medium | high | xhigh (the :thinkingLevel suffix and defaultThinkingLevel enum both stop at xhigh). There is no max tier.

Anthropic, however, now exposes a dedicated output_config.effort parameter whose highest value is max, available on Opus 4.6 / 4.7 / 4.8, Sonnet 4.6, Fable 5, Mythos 5 (per the API docs; not Opus 4.5). This effort knob is separate from thinking.budget_tokens — the two combine, controlling different dimensions.

Per the provider-endpoint docs, for the anthropic-messages format OMP maps reasoning only to "Anthropic thinking enablement and thinking-budget tokens, not OpenAI-style fields." So today there is:

  1. no max level anywhere in the internal effort scale, and
  2. no code path that emits Anthropic's output_config.effort at all.

Net effect: a user on Claude Code can run claude --model claude-opus-4-8 --effort max, but from OMP there is no way to request the model's highest effort. The closest knob (xhigh + raising thinkingBudgets.xhigh) only scales the thinking-budget dimension — it is not the same as Anthropic's effort: max.

Refs (Anthropic): output_config.effort levels and per-model availability — https://platform.claude.com/docs/en/build-with-claude/effort

Use Case

I run Opus 4.8 (and other max-capable Anthropic models) from OMP and want the model's highest reasoning effort — parity with Claude Code's --effort max / CLAUDE_CODE_EFFORT_LEVEL=max.

Right now the only available ceiling is xhigh. Increasing thinkingBudgets.xhigh raises the thinking-token budget but does not set output_config.effort, so OMP cannot reach the effort level these models actually support. This blocks getting maximum quality out of newer Anthropic models from within OMP.

Area

Provider / Model support

Proposed Solution

  1. Add a max effort tier above xhigh in the internal effort scale, gated by per-model capability metadata so it only surfaces for models that advertise it (Opus 4.6/4.7/4.8, Sonnet 4.6, Fable 5, Mythos 5, …). Models without max keep xhigh as their ceiling.
  2. Wire anthropic-messages to output_config.effort. When the selected level is max (and the model supports it), emit output_config: { effort: "max" } alongside the existing thinking budget, instead of only translating reasoning into budget tokens. Ideally expose the effort dimension and the thinking-budget dimension independently.
  3. Extend reasoningEffortMap so effort-string providers benefit from a real max tier (e.g. DeepSeek already maps xhigh -> "max"); this also addresses the conflation in deepseek-v4-pro no max effort option #2727 where a provider's true max effort is unreachable.
  4. Surface it in the UI/flags: model browser, the requested /effort command (/effort command #2694), --effort/--thinking, and a :max thinking suffix — all guarded by capability detection so it is hidden for models that reject it.
  5. Capability detection via model metadata / modelOverrides so unsupported models (e.g. Opus 4.5) don't get an invalid effort: "max" and 400.

Alternatives Considered

  • models.yml modelOverrides[].compat.extraBody to manually inject output_config: { effort: max }. It's unclear/unverified whether extraBody is merged into the anthropic-messages request body (the documented extraBody examples are OpenAI-style payloads). Even if it works, it's a per-user manual hack, has no capability gating, and never appears in the model browser or /effort.
  • Raising thinkingBudgets.xhigh — only scales the thinking-budget dimension, not Anthropic's effort knob; not equivalent to effort: max.

Related issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions