From b68eeff325f368db0fdb8b376823b1336e483657 Mon Sep 17 00:00:00 2001 From: waleed Date: Thu, 2 Apr 2026 10:31:57 -0700 Subject: [PATCH 1/3] improvement(models): update default to claude-sonnet-4-6 and reorganize OpenAI models --- .../components/combobox/combobox.tsx | 2 +- apps/sim/blocks/blocks/agent.ts | 4 +- apps/sim/blocks/blocks/evaluator.ts | 2 +- apps/sim/blocks/blocks/router.ts | 4 +- apps/sim/executor/constants.ts | 6 +- apps/sim/providers/models.ts | 191 +++++++++--------- 6 files changed, 108 insertions(+), 101 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx index a1933049b01..f2a4aeae487 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx @@ -21,7 +21,7 @@ import { useWorkflowStore } from '@/stores/workflows/workflow/store' /** * Constants for ComboBox component behavior */ -const DEFAULT_MODEL = 'claude-sonnet-4-5' +const DEFAULT_MODEL = 'claude-sonnet-4-6' const ZOOM_FACTOR_BASE = 0.96 const MIN_ZOOM = 0.1 const MAX_ZOOM = 1 diff --git a/apps/sim/blocks/blocks/agent.ts b/apps/sim/blocks/blocks/agent.ts index caad30d9e2d..7f5a641576a 100644 --- a/apps/sim/blocks/blocks/agent.ts +++ b/apps/sim/blocks/blocks/agent.ts @@ -130,7 +130,7 @@ Return ONLY the JSON array.`, type: 'combobox', placeholder: 'Type or select a model...', required: true, - defaultValue: 'claude-sonnet-4-5', + defaultValue: 'claude-sonnet-4-6', options: getModelOptions, }, { @@ -458,7 +458,7 @@ Return ONLY the JSON array.`, ], config: { tool: (params: Record) => { - const model = params.model || 'claude-sonnet-4-5' + const model = params.model || 'claude-sonnet-4-6' if (!model) { throw new Error('No model selected') } diff --git a/apps/sim/blocks/blocks/evaluator.ts b/apps/sim/blocks/blocks/evaluator.ts index d3a78fa9574..bb53e6867b4 100644 --- a/apps/sim/blocks/blocks/evaluator.ts +++ b/apps/sim/blocks/blocks/evaluator.ts @@ -177,7 +177,7 @@ export const EvaluatorBlock: BlockConfig = { type: 'combobox', placeholder: 'Type or select a model...', required: true, - defaultValue: 'claude-sonnet-4-5', + defaultValue: 'claude-sonnet-4-6', options: getModelOptions, }, ...getProviderCredentialSubBlocks(), diff --git a/apps/sim/blocks/blocks/router.ts b/apps/sim/blocks/blocks/router.ts index c82c502c1c0..ee3e21ef80e 100644 --- a/apps/sim/blocks/blocks/router.ts +++ b/apps/sim/blocks/blocks/router.ts @@ -171,7 +171,7 @@ export const RouterBlock: BlockConfig = { type: 'combobox', placeholder: 'Type or select a model...', required: true, - defaultValue: 'claude-sonnet-4-5', + defaultValue: 'claude-sonnet-4-6', options: getModelOptions, }, ...getProviderCredentialSubBlocks(), @@ -298,7 +298,7 @@ export const RouterV2Block: BlockConfig = { type: 'combobox', placeholder: 'Type or select a model...', required: true, - defaultValue: 'claude-sonnet-4-5', + defaultValue: 'claude-sonnet-4-6', options: getModelOptions, }, ...getProviderCredentialSubBlocks(), diff --git a/apps/sim/executor/constants.ts b/apps/sim/executor/constants.ts index 1e05ce865b2..2c7fc5c35ca 100644 --- a/apps/sim/executor/constants.ts +++ b/apps/sim/executor/constants.ts @@ -190,7 +190,7 @@ export const HTTP = { } as const export const AGENT = { - DEFAULT_MODEL: 'claude-sonnet-4-5', + DEFAULT_MODEL: 'claude-sonnet-4-6', get DEFAULT_FUNCTION_TIMEOUT() { return getMaxExecutionTimeout() }, @@ -225,13 +225,13 @@ export const MEMORY = { } as const export const ROUTER = { - DEFAULT_MODEL: 'claude-sonnet-4-5', + DEFAULT_MODEL: 'claude-sonnet-4-6', DEFAULT_TEMPERATURE: 0, INFERENCE_TEMPERATURE: 0.1, } as const export const EVALUATOR = { - DEFAULT_MODEL: 'claude-sonnet-4-5', + DEFAULT_MODEL: 'claude-sonnet-4-6', DEFAULT_TEMPERATURE: 0.1, RESPONSE_SCHEMA_NAME: 'evaluation_response', JSON_INDENT: 2, diff --git a/apps/sim/providers/models.ts b/apps/sim/providers/models.ts index f29bc583e61..3465f223230 100644 --- a/apps/sim/providers/models.ts +++ b/apps/sim/providers/models.ts @@ -117,65 +117,62 @@ export const PROVIDER_DEFINITIONS: Record = { id: 'openai', name: 'OpenAI', description: "OpenAI's models", - defaultModel: 'gpt-4o', + defaultModel: 'gpt-4.1', modelPatterns: [/^gpt/, /^o\d/, /^text-embedding/], icon: OpenAIIcon, capabilities: { toolUsageControl: true, }, models: [ + // GPT-4.1 family { - id: 'gpt-4o', + id: 'gpt-4.1', pricing: { - input: 2.5, - cachedInput: 1.25, - output: 10.0, + input: 2.0, + cachedInput: 0.5, + output: 8.0, updatedAt: '2026-04-01', }, capabilities: { temperature: { min: 0, max: 2 }, + maxOutputTokens: 32768, }, - contextWindow: 128000, + contextWindow: 1047576, }, { - id: 'gpt-5.4', + id: 'gpt-4.1-mini', pricing: { - input: 2.5, - cachedInput: 0.25, - output: 15.0, + input: 0.4, + cachedInput: 0.1, + output: 1.6, updatedAt: '2026-04-01', }, capabilities: { - reasoningEffort: { - values: ['none', 'low', 'medium', 'high', 'xhigh'], - }, - verbosity: { - values: ['low', 'medium', 'high'], - }, - maxOutputTokens: 128000, + temperature: { min: 0, max: 2 }, + maxOutputTokens: 32768, }, - contextWindow: 1050000, + contextWindow: 1047576, }, { - id: 'gpt-5.4-pro', + id: 'gpt-4.1-nano', pricing: { - input: 30.0, - output: 180.0, + input: 0.1, + cachedInput: 0.025, + output: 0.4, updatedAt: '2026-04-01', }, capabilities: { - reasoningEffort: { - values: ['medium', 'high', 'xhigh'], - }, - maxOutputTokens: 128000, + temperature: { min: 0, max: 2 }, + maxOutputTokens: 32768, }, - contextWindow: 1050000, + contextWindow: 1047576, }, + // GPT-5.4 family { - id: 'gpt-5.2-pro', + id: 'gpt-5.4-pro', pricing: { - input: 21.0, - output: 168.0, + input: 30.0, + output: 180.0, updatedAt: '2026-04-01', }, capabilities: { @@ -184,22 +181,26 @@ export const PROVIDER_DEFINITIONS: Record = { }, maxOutputTokens: 128000, }, - contextWindow: 400000, + contextWindow: 1050000, }, { - id: 'gpt-5-pro', + id: 'gpt-5.4', pricing: { - input: 15.0, - output: 120.0, + input: 2.5, + cachedInput: 0.25, + output: 15.0, updatedAt: '2026-04-01', }, capabilities: { reasoningEffort: { - values: ['high'], + values: ['none', 'low', 'medium', 'high', 'xhigh'], }, - maxOutputTokens: 272000, + verbosity: { + values: ['low', 'medium', 'high'], + }, + maxOutputTokens: 128000, }, - contextWindow: 400000, + contextWindow: 1050000, }, { id: 'gpt-5.4-mini', @@ -239,6 +240,22 @@ export const PROVIDER_DEFINITIONS: Record = { }, contextWindow: 400000, }, + // GPT-5.2 family + { + id: 'gpt-5.2-pro', + pricing: { + input: 21.0, + output: 168.0, + updatedAt: '2026-04-01', + }, + capabilities: { + reasoningEffort: { + values: ['medium', 'high', 'xhigh'], + }, + maxOutputTokens: 128000, + }, + contextWindow: 400000, + }, { id: 'gpt-5.2', pricing: { @@ -257,6 +274,7 @@ export const PROVIDER_DEFINITIONS: Record = { }, contextWindow: 400000, }, + // GPT-5.1 family { id: 'gpt-5.1', pricing: { @@ -275,6 +293,22 @@ export const PROVIDER_DEFINITIONS: Record = { }, contextWindow: 400000, }, + // GPT-5 family + { + id: 'gpt-5-pro', + pricing: { + input: 15.0, + output: 120.0, + updatedAt: '2026-04-01', + }, + capabilities: { + reasoningEffort: { + values: ['high'], + }, + maxOutputTokens: 272000, + }, + contextWindow: 400000, + }, { id: 'gpt-5', pricing: { @@ -342,18 +376,32 @@ export const PROVIDER_DEFINITIONS: Record = { }, contextWindow: 128000, }, + // o-series reasoning models { - id: 'o1', + id: 'o4-mini', pricing: { - input: 15.0, - cachedInput: 7.5, - output: 60, + input: 1.1, + cachedInput: 0.275, + output: 4.4, updatedAt: '2026-04-01', }, capabilities: { reasoningEffort: { values: ['low', 'medium', 'high'], }, + maxOutputTokens: 100000, + }, + contextWindow: 200000, + }, + { + id: 'o3-pro', + pricing: { + input: 20.0, + output: 80.0, + updatedAt: '2026-04-01', + }, + capabilities: { + maxOutputTokens: 100000, }, contextWindow: 200000, }, @@ -390,74 +438,33 @@ export const PROVIDER_DEFINITIONS: Record = { contextWindow: 200000, }, { - id: 'o3-pro', - pricing: { - input: 20.0, - output: 80.0, - updatedAt: '2026-04-01', - }, - capabilities: { - maxOutputTokens: 100000, - }, - contextWindow: 200000, - }, - { - id: 'o4-mini', + id: 'o1', pricing: { - input: 1.1, - cachedInput: 0.275, - output: 4.4, + input: 15.0, + cachedInput: 7.5, + output: 60, updatedAt: '2026-04-01', }, capabilities: { reasoningEffort: { values: ['low', 'medium', 'high'], }, - maxOutputTokens: 100000, }, contextWindow: 200000, }, + // Legacy { - id: 'gpt-4.1', - pricing: { - input: 2.0, - cachedInput: 0.5, - output: 8.0, - updatedAt: '2026-04-01', - }, - capabilities: { - temperature: { min: 0, max: 2 }, - maxOutputTokens: 32768, - }, - contextWindow: 1047576, - }, - { - id: 'gpt-4.1-nano', - pricing: { - input: 0.1, - cachedInput: 0.025, - output: 0.4, - updatedAt: '2026-04-01', - }, - capabilities: { - temperature: { min: 0, max: 2 }, - maxOutputTokens: 32768, - }, - contextWindow: 1047576, - }, - { - id: 'gpt-4.1-mini', + id: 'gpt-4o', pricing: { - input: 0.4, - cachedInput: 0.1, - output: 1.6, + input: 2.5, + cachedInput: 1.25, + output: 10.0, updatedAt: '2026-04-01', }, capabilities: { temperature: { min: 0, max: 2 }, - maxOutputTokens: 32768, }, - contextWindow: 1047576, + contextWindow: 128000, }, ], }, @@ -465,7 +472,7 @@ export const PROVIDER_DEFINITIONS: Record = { id: 'anthropic', name: 'Anthropic', description: "Anthropic's Claude models", - defaultModel: 'claude-sonnet-4-5', + defaultModel: 'claude-sonnet-4-6', modelPatterns: [/^claude/], icon: AnthropicIcon, capabilities: { From 5a59174e3507240da3948b61dc1c7a1be55d55f8 Mon Sep 17 00:00:00 2001 From: waleed Date: Thu, 2 Apr 2026 10:41:05 -0700 Subject: [PATCH 2/3] fix(tests): update stale claude-sonnet-4-5 references to claude-sonnet-4-6 --- .../components/sub-block/components/combobox/combobox.tsx | 4 ++-- apps/sim/blocks/blocks.test.ts | 2 +- .../sim/executor/handlers/evaluator/evaluator-handler.test.ts | 4 ++-- apps/sim/executor/handlers/router/router-handler.test.ts | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx index f2a4aeae487..602f9bb562a 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx @@ -234,7 +234,7 @@ export const ComboBox = memo(function ComboBox({ /** * Determines the default option value to use. - * Priority: explicit defaultValue > claude-sonnet-4-5 for model field > first option + * Priority: explicit defaultValue > claude-sonnet-4-6 for model field > first option */ const defaultOptionValue = useMemo(() => { if (defaultValue !== undefined) { @@ -246,7 +246,7 @@ export const ComboBox = memo(function ComboBox({ // Default not available (e.g. provider disabled) — fall through to other fallbacks } - // For model field, default to claude-sonnet-4-5 if available + // For model field, default to claude-sonnet-4-6 if available if (subBlockId === 'model') { const claudeSonnet45 = evaluatedOptions.find((opt) => getOptionValue(opt) === DEFAULT_MODEL) if (claudeSonnet45) { diff --git a/apps/sim/blocks/blocks.test.ts b/apps/sim/blocks/blocks.test.ts index 0fd58168f78..1eec521a040 100644 --- a/apps/sim/blocks/blocks.test.ts +++ b/apps/sim/blocks/blocks.test.ts @@ -337,7 +337,7 @@ describe.concurrent('Blocks Module', () => { expect(modelSubBlock).toBeDefined() expect(modelSubBlock?.type).toBe('combobox') expect(modelSubBlock?.required).toBe(true) - expect(modelSubBlock?.defaultValue).toBe('claude-sonnet-4-5') + expect(modelSubBlock?.defaultValue).toBe('claude-sonnet-4-6') }) it('should have LLM tool access', () => { diff --git a/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts b/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts index f2520754a08..e70015a68bc 100644 --- a/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts +++ b/apps/sim/executor/handlers/evaluator/evaluator-handler.test.ts @@ -463,7 +463,7 @@ describe('EvaluatorBlockHandler', () => { json: () => Promise.resolve({ content: JSON.stringify({ score: 7 }), - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-4-6', tokens: {}, cost: 0, timing: {}, @@ -476,6 +476,6 @@ describe('EvaluatorBlockHandler', () => { const fetchCallArgs = mockFetch.mock.calls[0] const requestBody = JSON.parse(fetchCallArgs[1].body) - expect(requestBody.model).toBe('claude-sonnet-4-5') + expect(requestBody.model).toBe('claude-sonnet-4-6') }) }) diff --git a/apps/sim/executor/handlers/router/router-handler.test.ts b/apps/sim/executor/handlers/router/router-handler.test.ts index a778b33832e..5d4defa0a0b 100644 --- a/apps/sim/executor/handlers/router/router-handler.test.ts +++ b/apps/sim/executor/handlers/router/router-handler.test.ts @@ -220,12 +220,12 @@ describe('RouterBlockHandler', () => { await handler.execute(mockContext, mockBlock, inputs) - expect(mockGetProviderFromModel).toHaveBeenCalledWith('claude-sonnet-4-5') + expect(mockGetProviderFromModel).toHaveBeenCalledWith('claude-sonnet-4-6') const fetchCallArgs = mockFetch.mock.calls[0] const requestBody = JSON.parse(fetchCallArgs[1].body) expect(requestBody).toMatchObject({ - model: 'claude-sonnet-4-5', + model: 'claude-sonnet-4-6', temperature: 0.1, }) }) From d498e240891be11362321d8b01dce563aa3bf807 Mon Sep 17 00:00:00 2001 From: waleed Date: Thu, 2 Apr 2026 10:50:37 -0700 Subject: [PATCH 3/3] fix(combobox): rename misleading claudeSonnet45 variable to defaultModelOption --- .../components/sub-block/components/combobox/combobox.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx index 602f9bb562a..ade784ccab2 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/combobox/combobox.tsx @@ -248,9 +248,11 @@ export const ComboBox = memo(function ComboBox({ // For model field, default to claude-sonnet-4-6 if available if (subBlockId === 'model') { - const claudeSonnet45 = evaluatedOptions.find((opt) => getOptionValue(opt) === DEFAULT_MODEL) - if (claudeSonnet45) { - return getOptionValue(claudeSonnet45) + const defaultModelOption = evaluatedOptions.find( + (opt) => getOptionValue(opt) === DEFAULT_MODEL + ) + if (defaultModelOption) { + return getOptionValue(defaultModelOption) } }