diff --git a/packages/ai/CHANGELOG.md b/packages/ai/CHANGELOG.md index ca22febb6..ecf7297f4 100644 --- a/packages/ai/CHANGELOG.md +++ b/packages/ai/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +### Fixed + +- Removed the `context-1m-2025-08-07` (1M long-context) beta from the Anthropic agent request headers, the OAuth model-discovery header, and the Claude usage-API header. Sending it caused subscription/OAuth requests without long-context credits to fail with `429 Usage credits are required for long context requests`, breaking Sonnet. The remaining betas are unchanged. + ## [15.9.0] - 2026-06-04 ### Fixed diff --git a/packages/ai/src/provider-models/openai-compat.ts b/packages/ai/src/provider-models/openai-compat.ts index c2b92702e..6111f001d 100644 --- a/packages/ai/src/provider-models/openai-compat.ts +++ b/packages/ai/src/provider-models/openai-compat.ts @@ -15,7 +15,7 @@ import { createBundledReferenceMap, createReferenceResolver } from "./bundled-re const MODELS_DEV_URL = "https://models.dev/api.json"; const ANTHROPIC_BASE_URL = "https://api.anthropic.com/v1"; const ANTHROPIC_OAUTH_BETA = - "claude-code-20250219,oauth-2025-04-20,context-1m-2025-08-07,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11"; + "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11"; export interface ModelsDevModel { id?: string; diff --git a/packages/ai/src/providers/anthropic.ts b/packages/ai/src/providers/anthropic.ts index 81d6404b2..52c0c901e 100644 --- a/packages/ai/src/providers/anthropic.ts +++ b/packages/ai/src/providers/anthropic.ts @@ -132,7 +132,6 @@ const claudeCodeUtilityBetaDefaults = [ const claudeCodeAgentBetaDefaults = [ "claude-code-20250219", "oauth-2025-04-20", - "context-1m-2025-08-07", "interleaved-thinking-2025-05-14", "context-management-2025-06-27", "prompt-caching-scope-2026-01-05", diff --git a/packages/ai/src/usage/claude.ts b/packages/ai/src/usage/claude.ts index b9e54c38a..1b4f389c1 100644 --- a/packages/ai/src/usage/claude.ts +++ b/packages/ai/src/usage/claude.ts @@ -22,7 +22,7 @@ const CLAUDE_HEADERS = { accept: "application/json, text/plain, */*", "accept-encoding": "gzip, compress, deflate, br", "anthropic-beta": - "claude-code-20250219,oauth-2025-04-20,context-1m-2025-08-07,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11", + "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11", "content-type": "application/json", "user-agent": "claude-cli/2.1.160 (external, cli)", connection: "keep-alive", diff --git a/packages/ai/test/anthropic-alignment.test.ts b/packages/ai/test/anthropic-alignment.test.ts index 8fa8bb3e1..b40a1b8b9 100644 --- a/packages/ai/test/anthropic-alignment.test.ts +++ b/packages/ai/test/anthropic-alignment.test.ts @@ -154,7 +154,7 @@ describe("Anthropic request fingerprint alignment", () => { expect(headers["X-Claude-Code-Session-Id"]).toBe(sessionId); expect(headers["x-client-request-id"]).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/); expect(headers["Anthropic-Beta"]).toBe( - "claude-code-20250219,oauth-2025-04-20,context-1m-2025-08-07,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11", + "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11", ); }); @@ -188,7 +188,7 @@ describe("Anthropic request fingerprint alignment", () => { const hidden = buildAnthropicClientOptions({ ...baseArgs, thinkingDisplay: "omitted" }); expect(hidden.defaultHeaders["Anthropic-Beta"]).toBe( - "claude-code-20250219,oauth-2025-04-20,context-1m-2025-08-07,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11", + "claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,redact-thinking-2026-02-12,context-management-2025-06-27,prompt-caching-scope-2026-01-05,mid-conversation-system-2026-04-07,advanced-tool-use-2025-11-20,effort-2025-11-24,extended-cache-ttl-2025-04-11", ); const hiddenUtility = buildAnthropicClientOptions({ diff --git a/packages/ai/test/claude-usage-headers.test.ts b/packages/ai/test/claude-usage-headers.test.ts index 1489726fd..a20dc6a1f 100644 --- a/packages/ai/test/claude-usage-headers.test.ts +++ b/packages/ai/test/claude-usage-headers.test.ts @@ -82,7 +82,6 @@ describe("claude usage request headers", () => { const betaTokens = beta?.split(",").map(tokenValue => tokenValue.trim()) ?? []; expect(betaTokens).toContain("claude-code-20250219"); expect(betaTokens).toContain("oauth-2025-04-20"); - expect(betaTokens).toContain("context-1m-2025-08-07"); expect(betaTokens).toContain("interleaved-thinking-2025-05-14"); expect(betaTokens).toContain("redact-thinking-2026-02-12"); expect(betaTokens).toContain("context-management-2025-06-27");