diff --git a/apps/docs/content/docs/workflows/blocks/agent.mdx b/apps/docs/content/docs/workflows/blocks/agent.mdx index d6c270a289b..e4d466a3217 100644 --- a/apps/docs/content/docs/workflows/blocks/agent.mdx +++ b/apps/docs/content/docs/workflows/blocks/agent.mdx @@ -135,7 +135,7 @@ Live tool-call chips stream for **OpenAI, Anthropic, Azure Anthropic, Google, Ve | Provider | Streamed thinking | Models | |----------|-------------------|--------| | OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `gpt-6-astra`, `gpt-5.6-sol`, `gpt-5.6-terra`, `gpt-5.6-luna`, `gpt-5.5-pro`, `gpt-5.5`, `gpt-5.4-pro`, `gpt-5.4`, `gpt-5.4-mini`, `gpt-5.4-nano`, `gpt-5.3-codex`, `gpt-5.2-pro`, `gpt-5.2`, `gpt-5.1`, `gpt-5-pro`, `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, `o4-mini`, `o3`, `o3-mini`, `o1` | -| Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `claude-fable-5-1`, `claude-fable-5`, `claude-sonnet-5`, `claude-opus-5`, `claude-opus-4-8`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` | +| Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `claude-fable-5-1`, `claude-fable-5`, `claude-sonnet-5`, `claude-opus-5-5`, `claude-opus-5`, `claude-opus-4-8`, `claude-opus-4-7`, `claude-opus-4-6`, `claude-sonnet-4-6`, `claude-opus-4-5`, `claude-sonnet-4-5`, `claude-haiku-4-5` | | Azure OpenAI | Summaries only — Requires OpenAI organization verification; falls back to no summaries. | `azure/gpt-6-astra`, `azure/gpt-5.6-sol`, `azure/gpt-5.6-terra`, `azure/gpt-5.6-luna`, `azure/gpt-5.5`, `azure/gpt-5.4-pro`, `azure/gpt-5.4`, `azure/gpt-5.4-mini`, `azure/gpt-5.4-nano`, `azure/gpt-5.2`, `azure/gpt-5.1`, `azure/gpt-5.1-codex`, `azure/gpt-5`, `azure/gpt-5-mini`, `azure/gpt-5-nano`, `azure/o3`, `azure/o4-mini` | | Azure Anthropic | Summaries only — These generations omit full thinking; Sim requests summarized thinking on streaming runs. | `azure-anthropic/claude-fable-5-1`, `azure-anthropic/claude-opus-5`, `azure-anthropic/claude-opus-4-8`, `azure-anthropic/claude-opus-4-7`, `azure-anthropic/claude-opus-4-6`, `azure-anthropic/claude-opus-4-5`, `azure-anthropic/claude-sonnet-5`, `azure-anthropic/claude-sonnet-4-6`, `azure-anthropic/claude-sonnet-4-5`, `azure-anthropic/claude-opus-4-1`, `azure-anthropic/claude-haiku-4-5` | | Google | Summaries only | `gemini-3.8-flash`, `gemini-3.7-flash`, `gemini-3.6-flash`, `gemini-3.5-flash-lite`, `gemini-3.5-flash`, `gemini-3.1-pro-preview`, `gemini-3.1-flash-lite`, `gemini-3-flash-preview`, `gemini-2.5-pro`, `gemini-2.5-flash`, `gemini-2.5-flash-lite` | diff --git a/apps/sim/providers/anthropic/core.request.test.ts b/apps/sim/providers/anthropic/core.request.test.ts index 95376030b2a..bc1ba9f5341 100644 --- a/apps/sim/providers/anthropic/core.request.test.ts +++ b/apps/sim/providers/anthropic/core.request.test.ts @@ -296,12 +296,15 @@ describe('executeAnthropicProviderRequest forced tool use', () => { expect(payload.tool_choice).toEqual({ type: 'tool', name: 'publish' }) }) - it('drops forced tool_choice when the catalog model disables Force', async () => { - const { payload, warn } = await runWithForcedTool('claude-fable-5-1') - expect(payload.tools?.map((tool) => tool.name)).toEqual(['publish']) - expect(payload).not.toHaveProperty('tool_choice') - expect(warn).toHaveBeenCalledWith(expect.stringContaining('rejects forced tool_choice')) - }) + it.each(['claude-fable-5-1', 'claude-opus-5-5'])( + 'drops forced tool_choice when the catalog model disables Force (%s)', + async (model) => { + const { payload, warn } = await runWithForcedTool(model) + expect(payload.tools?.map((tool) => tool.name)).toEqual(['publish']) + expect(payload).not.toHaveProperty('tool_choice') + expect(warn).toHaveBeenCalledWith(expect.stringContaining('rejects forced tool_choice')) + } + ) }) describe('executeAnthropicProviderRequest native structured outputs', () => { diff --git a/apps/sim/providers/anthropic/core.thinking.test.ts b/apps/sim/providers/anthropic/core.thinking.test.ts index 38375a5929e..2dc1aebe5a7 100644 --- a/apps/sim/providers/anthropic/core.thinking.test.ts +++ b/apps/sim/providers/anthropic/core.thinking.test.ts @@ -16,6 +16,7 @@ describe('buildThinkingConfig', () => { 'claude-fable-5-1', 'claude-fable-5', 'claude-sonnet-5', + 'claude-opus-5-5', 'claude-opus-5', 'claude-opus-4-8', 'claude-opus-4-7', @@ -31,6 +32,7 @@ describe('buildThinkingConfig', () => { 'claude-fable-5-1', 'claude-fable-5', 'claude-sonnet-5', + 'claude-opus-5-5', 'claude-opus-5', 'claude-opus-4-8', 'claude-opus-4-7', diff --git a/apps/sim/providers/anthropic/core.ts b/apps/sim/providers/anthropic/core.ts index 625cb5dfd8d..0f84ef8c615 100644 --- a/apps/sim/providers/anthropic/core.ts +++ b/apps/sim/providers/anthropic/core.ts @@ -143,7 +143,7 @@ const ANTHROPIC_THINKING_OUTPUT_HEADROOM = 4096 /** * Checks if a model supports adaptive thinking (thinking.type: "adaptive"). - * Fable 5 and Fable 5.1 support ONLY adaptive thinking (always on; type: "disabled" is rejected). + * Fable 5, Fable 5.1, and Opus 5.5 support ONLY adaptive thinking (always on; type: "disabled" is rejected). * Sonnet 5 supports ONLY adaptive thinking (manual budget_tokens returns a 400 error). * Opus 5, Opus 4.8, and Opus 4.7 support ONLY adaptive thinking (no extended thinking / budget_tokens). * Opus 4.6 and Sonnet 4.6 support both extended and adaptive thinking — use adaptive. @@ -169,7 +169,7 @@ function supportsAdaptiveThinking(modelId: string): boolean { /** * Builds the thinking configuration for the Anthropic API based on model capabilities and level. * - * - Fable 5.1, Fable 5, Sonnet 5, Opus 5, Opus 4.8, Opus 4.7: Uses adaptive thinking only (no extended thinking support) + * - Fable 5.1, Fable 5, Sonnet 5, Opus 5.5, Opus 5, Opus 4.8, Opus 4.7: Uses adaptive thinking only (no extended thinking support) * - Opus 4.6, Sonnet 4.6: Uses adaptive thinking with effort parameter * - Other models: Uses budget_tokens-based extended thinking * diff --git a/apps/sim/providers/models.test.ts b/apps/sim/providers/models.test.ts index b638b56a7cc..490952fddc9 100644 --- a/apps/sim/providers/models.test.ts +++ b/apps/sim/providers/models.test.ts @@ -165,7 +165,7 @@ describe('catalog featured model metadata', () => { }) describe('forced tool use capability', () => { - it.each(['claude-fable-5-1', 'CLAUDE-FABLE-5-1'])( + it.each(['claude-fable-5-1', 'CLAUDE-FABLE-5-1', 'claude-opus-5-5'])( 'disables Force while keeping Auto and None support for %s', (model) => { expect(getModelCapabilities(model)).toMatchObject({ @@ -209,6 +209,7 @@ describe('Anthropic provider definition', () => { anthropic.models.filter((model) => model.sunset?.status === 'legacy').map((model) => model.id) ).toEqual([ 'claude-fable-5', + 'claude-opus-5', 'claude-opus-4-8', 'claude-opus-4-7', 'claude-opus-4-6', diff --git a/apps/sim/providers/models.ts b/apps/sim/providers/models.ts index 21d4203639d..465f50e2999 100644 --- a/apps/sim/providers/models.ts +++ b/apps/sim/providers/models.ts @@ -1004,6 +1004,29 @@ export const PROVIDER_DEFINITIONS: Record = { releaseDate: '2026-06-30', recommended: true, }, + { + id: 'claude-opus-5-5', + pricing: { + input: 4.0, + cachedInput: 0.2, + output: 20.0, + updatedAt: '2026-09-22', + }, + capabilities: { + forcedToolUse: false, + nativeStructuredOutputs: true, + maxOutputTokens: 128000, + promptCaching: { minimumCacheableTokens: 512 }, + thinking: { + levels: ['low', 'medium', 'high', 'xhigh', 'max'], + default: 'medium', + streamed: 'summary', + }, + }, + contextWindow: 1000000, + releaseDate: '2026-09-22', + recommended: true, + }, { id: 'claude-opus-5', pricing: { @@ -1024,7 +1047,7 @@ export const PROVIDER_DEFINITIONS: Record = { }, contextWindow: 1000000, releaseDate: '2026-07-24', - recommended: true, + sunset: { status: 'legacy' }, }, { id: 'claude-opus-4-8',