From ee53b5368901953cf841982284741fbb575fd70f Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 5 Feb 2026 22:57:43 +0100 Subject: [PATCH] fix(ai): enable xhigh for anthropic opus 4.6 --- packages/ai/CHANGELOG.md | 4 ++++ packages/ai/src/models.ts | 15 +++++++++++++-- packages/ai/test/supports-xhigh.test.ts | 22 ++++++++++++++++++++++ packages/coding-agent/CHANGELOG.md | 4 ++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 packages/ai/test/supports-xhigh.test.ts diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index fba26193..346f1c14 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed `supportsXhigh()` to treat Anthropic Messages Opus 4.6 models as xhigh-capable so `streamSimple` can map `xhigh` to adaptive effort `max` + ## [0.52.4] - 2026-02-05 ## [0.52.3] - 2026-02-05 diff --git a/packages/ai/src/models.ts b/packages/ai/src/models.ts index 2c96062f..459b1be2 100644 --- a/packages/ai/src/models.ts +++ b/packages/ai/src/models.ts @@ -47,10 +47,21 @@ export function calculateCost(model: Model, usage: Usage /** * Check if a model supports xhigh thinking level. - * Currently only certain OpenAI Codex models support this. + * + * Supported today: + * - GPT-5.2 / GPT-5.3 model families + * - Anthropic Messages API Opus 4.6 models (xhigh maps to adaptive effort "max") */ export function supportsXhigh(model: Model): boolean { - return model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3"); + if (model.id.includes("gpt-5.2") || model.id.includes("gpt-5.3")) { + return true; + } + + if (model.api === "anthropic-messages") { + return model.id.includes("opus-4-6") || model.id.includes("opus-4.6"); + } + + return false; } /** diff --git a/packages/ai/test/supports-xhigh.test.ts b/packages/ai/test/supports-xhigh.test.ts new file mode 100644 index 00000000..d740e778 --- /dev/null +++ b/packages/ai/test/supports-xhigh.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest"; +import { getModel, supportsXhigh } from "../src/models.js"; + +describe("supportsXhigh", () => { + it("returns true for Anthropic Opus 4.6 on anthropic-messages API", () => { + const model = getModel("anthropic", "claude-opus-4-6"); + expect(model).toBeDefined(); + expect(supportsXhigh(model!)).toBe(true); + }); + + it("returns false for non-Opus Anthropic models", () => { + const model = getModel("anthropic", "claude-sonnet-4-5"); + expect(model).toBeDefined(); + expect(supportsXhigh(model!)).toBe(false); + }); + + it("returns false for OpenRouter Opus 4.6 (openai-completions API)", () => { + const model = getModel("openrouter", "anthropic/claude-opus-4.6"); + expect(model).toBeDefined(); + expect(supportsXhigh(model!)).toBe(false); + }); +}); diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index 2883ce36..b986641e 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Fixed thinking level capability detection so Anthropic Opus 4.6 models expose `xhigh` in selectors and cycling + ## [0.52.4] - 2026-02-05 ### Fixed