From 818742d1a3e2896e6d5e3957ab8b26ccc51c255c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20H=C3=A9ritier?= Date: Sun, 14 Jun 2026 04:03:09 +0000 Subject: [PATCH 1/3] docs: fix Shift+Tab thinking-level cycle description for per-model capabilities (#3097) --- docs/guides/thinking/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/thinking/index.md b/docs/guides/thinking/index.md index f51d2534f..ae137ac4b 100644 --- a/docs/guides/thinking/index.md +++ b/docs/guides/thinking/index.md @@ -332,7 +332,7 @@ models: While running in the TUI, press **Shift+Tab** to cycle the thinking effort level for the current model without editing your YAML config: -- The level steps through the model's supported range (provider-specific), wrapping around — for example `none → minimal → low → medium → high → xhigh → none` on OpenAI. +- The level steps through the model's supported range (model-specific), wrapping around — for example `none → minimal → low → medium → high → none` on OpenAI gpt-5/o-series, `none → minimal → low → medium → high → xhigh → none` on gpt-5.2+, `none → low → medium → high → none` on Anthropic Sonnet, `none → low → medium → high → max → none` on Anthropic Opus 4.6, and `none → low → medium → high → xhigh → none` on Anthropic Opus 4.7+. - The current level is shown in the sidebar next to the model name (e.g. `openai/gpt-5 • high`). - This applies as a session override — it is **not** saved to the config file. The next session starts from the level defined in your YAML. - For models that don't support reasoning, and for remote runtimes, Shift+Tab is a no-op and an informational message is displayed. From 9df2d597032f7a09eb5831a050910850d2fa6505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20H=C3=A9ritier?= Date: Sun, 14 Jun 2026 04:09:42 +0000 Subject: [PATCH 2/3] docs: address review feedback on Shift+Tab cycle description (#3111) --- docs/guides/thinking/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/guides/thinking/index.md b/docs/guides/thinking/index.md index ae137ac4b..c0cff0365 100644 --- a/docs/guides/thinking/index.md +++ b/docs/guides/thinking/index.md @@ -24,7 +24,7 @@ docker-agent exposes this through a single `thinking_budget` field on any named | Provider | Format | Values | Default | | ------------------- | ---------- | --------------------------------------------------------------------------------------- | ------------------ | -| OpenAI | string | `minimal`, `low`, `medium`, `high`, `xhigh`, `none` | `medium` (API default) | +| OpenAI | string | `minimal`, `low`, `medium`, `high`, `none`; `xhigh` on gpt-5.2+ only | `medium` (API default) | | Anthropic | int or str | 1024–32768 tokens, or `minimal`–`max`, `adaptive`, `adaptive/`, `none` | off | | Gemini 2.5 | int | `0` (off), `-1` (dynamic), or token count (max 24576 / 32768) | `-1` (dynamic) | | Gemini 3 | string | `minimal`, `low`, `medium`, `high` | API default (model-dependent) | @@ -37,7 +37,7 @@ String values are case-insensitive. The full set of accepted strings is `none`, ## OpenAI -OpenAI reasoning models (o-series, gpt-5, gpt-5-mini) use a string effort level that maps to their `reasoning_effort` API parameter. +OpenAI reasoning models (o-series, gpt-5, gpt-5-mini) use a string effort level that maps to their `reasoning_effort` API parameter. The `xhigh` level is only accepted by gpt-5.2 and later minor versions; o-series and earlier gpt-5 releases top out at `high`. ```yaml models: @@ -58,7 +58,7 @@ models: | `high` | More thorough; recommended for complex tasks. | | `xhigh` | Near-maximum effort; slower but most accurate. | -These five effort levels (`minimal`–`xhigh`) are the **only** values accepted for OpenAI. Token counts, `max`, `adaptive`, and `adaptive/` are rejected with a configuration error at request time. Older models (o1, o3-mini) only accept `low`/`medium`/`high` — sending an unsupported level returns an API error. +These effort levels (`minimal`–`xhigh`) are the **only** values accepted for OpenAI. Token counts, `max`, `adaptive`, and `adaptive/` are rejected with a configuration error at request time. The `xhigh` level is only supported by gpt-5.2 and later minor versions (e.g. gpt-5.2, gpt-5.4-mini); o-series and earlier gpt-5 releases top out at `high`. Older models (o1, o3-mini) only accept `low`/`medium`/`high` — sending an unsupported level returns an API error.
Tokens and max_tokens @@ -332,7 +332,7 @@ models: While running in the TUI, press **Shift+Tab** to cycle the thinking effort level for the current model without editing your YAML config: -- The level steps through the model's supported range (model-specific), wrapping around — for example `none → minimal → low → medium → high → none` on OpenAI gpt-5/o-series, `none → minimal → low → medium → high → xhigh → none` on gpt-5.2+, `none → low → medium → high → none` on Anthropic Sonnet, `none → low → medium → high → max → none` on Anthropic Opus 4.6, and `none → low → medium → high → xhigh → none` on Anthropic Opus 4.7+. +- The level steps through the model's supported range (model-specific), wrapping around — for example `none → minimal → low → medium → high → none` on OpenAI gpt-5/o-series, `none → minimal → low → medium → high → xhigh → none` on gpt-5.2+, `none → low → medium → high → none` on Anthropic Sonnet (levels are sent as adaptive effort strings and are only effective on Opus 4.6+; Sonnet 4.5 and earlier require an integer token budget set in YAML), `none → low → medium → high → max → none` on Anthropic Opus 4.6, and `none → low → medium → high → xhigh → none` on Anthropic Opus 4.7+. - The current level is shown in the sidebar next to the model name (e.g. `openai/gpt-5 • high`). - This applies as a session override — it is **not** saved to the config file. The next session starts from the level defined in your YAML. - For models that don't support reasoning, and for remote runtimes, Shift+Tab is a no-op and an informational message is displayed. From 92c42de7e7a2d36e844e867a95a980d641fb2510 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arnaud=20H=C3=A9ritier?= Date: Mon, 15 Jun 2026 04:03:43 +0000 Subject: [PATCH 3/3] fix(docs): clarify Shift+Tab cycle examples for Anthropic Sonnet and gpt-5.2+ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address two reviewer comments on PR #3111: 1. Remove the Anthropic Sonnet cycle example (none→low→medium→high→none) which implied effort-string cycling works on Sonnet 4.5. Per the warning at line 123 and the code in pkg/modelinfo/thinking_levels.go, effort strings are only accepted by Opus 4.6+ (adaptive thinking); Sonnet 4.5 and earlier require integer token budgets. Cycling through string levels on such models has no effect — clarify this instead. 2. Retain gpt-5.2+ in the example. The openAISupportsXHighEffort() function in thinking_levels.go explicitly gates xhigh on gpt-5.x with minor version ≥ 2, and lines 27, 40, and 61 of this same doc already document this per-version distinction — the example is consistent with the rest of the page. --- docs/guides/thinking/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/thinking/index.md b/docs/guides/thinking/index.md index c0cff0365..88308caab 100644 --- a/docs/guides/thinking/index.md +++ b/docs/guides/thinking/index.md @@ -332,7 +332,7 @@ models: While running in the TUI, press **Shift+Tab** to cycle the thinking effort level for the current model without editing your YAML config: -- The level steps through the model's supported range (model-specific), wrapping around — for example `none → minimal → low → medium → high → none` on OpenAI gpt-5/o-series, `none → minimal → low → medium → high → xhigh → none` on gpt-5.2+, `none → low → medium → high → none` on Anthropic Sonnet (levels are sent as adaptive effort strings and are only effective on Opus 4.6+; Sonnet 4.5 and earlier require an integer token budget set in YAML), `none → low → medium → high → max → none` on Anthropic Opus 4.6, and `none → low → medium → high → xhigh → none` on Anthropic Opus 4.7+. +- The level steps through the model's supported range (model-specific), wrapping around — for example `none → minimal → low → medium → high → none` on OpenAI gpt-5/o-series, `none → minimal → low → medium → high → xhigh → none` on gpt-5.2+, `none → low → medium → high → max → none` on Anthropic Opus 4.6, and `none → low → medium → high → xhigh → none` on Anthropic Opus 4.7+. For older Anthropic models (e.g. Sonnet 4.5) that only accept token budgets, effort-string cycling has no effect — use an integer `thinking_budget` in your YAML config instead. - The current level is shown in the sidebar next to the model name (e.g. `openai/gpt-5 • high`). - This applies as a session override — it is **not** saved to the config file. The next session starts from the level defined in your YAML. - For models that don't support reasoning, and for remote runtimes, Shift+Tab is a no-op and an informational message is displayed.