From a498f28d144567c561eafeff1b6715391e8ee2a5 Mon Sep 17 00:00:00 2001 From: Enrico Ros Date: Fri, 6 Feb 2026 14:59:08 -0800 Subject: [PATCH] LLMs: Anthropic: support for max effort. #962 --- src/common/stores/llms/llms.parameters.ts | 8 ++++++++ src/modules/aix/client/aix.client.ts | 4 ++-- src/modules/aix/server/api/aix.wiretypes.ts | 2 +- .../aix/server/dispatch/wiretypes/anthropic.wiretypes.ts | 2 +- src/modules/llms/server/anthropic/anthropic.models.ts | 4 ++-- src/modules/llms/server/llm.server.types.ts | 1 + 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/common/stores/llms/llms.parameters.ts b/src/common/stores/llms/llms.parameters.ts index cb6484b1d..1cabb6a31 100644 --- a/src/common/stores/llms/llms.parameters.ts +++ b/src/common/stores/llms/llms.parameters.ts @@ -136,6 +136,14 @@ export const DModelParameterRegistry = { // No initialValue - undefined means off (e.g. default 200K context window) }, + llmVndAntEffortMax: { // introduced with Claude Opus 4.6; this adds the 'max' level on top of llmVndAntEffort + label: 'Effort', + type: 'enum' as const, + description: 'Controls thinking depth. max = deepest reasoning with no constraints, high = default.', + values: ['low', 'medium', 'high', 'max'] as const, + // No initialValue - undefined means high effort (default) + } as const, + llmVndAntEffort: { label: 'Effort', type: 'enum' as const, diff --git a/src/modules/aix/client/aix.client.ts b/src/modules/aix/client/aix.client.ts index c3bfdd800..4004e46b8 100644 --- a/src/modules/aix/client/aix.client.ts +++ b/src/modules/aix/client/aix.client.ts @@ -49,7 +49,7 @@ export function aixCreateModelFromLLMOptions( // destructure input with the overrides const { llmRef, llmTemperature, llmResponseTokens, llmTopP, llmForceNoStream, - llmVndAnt1MContext, llmVndAntSkills, llmVndAntThinkingBudget, llmVndAntWebFetch, llmVndAntWebSearch, llmVndAntEffort, + llmVndAnt1MContext, llmVndAntSkills, llmVndAntThinkingBudget, llmVndAntWebFetch, llmVndAntWebSearch, llmVndAntEffort, llmVndAntEffortMax, llmVndGeminiAspectRatio, llmVndGeminiImageSize, llmVndGeminiCodeExecution, llmVndGeminiComputerUse, llmVndGeminiGoogleSearch, llmVndGeminiMediaResolution, llmVndGeminiShowThoughts, llmVndGeminiThinkingBudget, llmVndGeminiThinkingLevel, llmVndGeminiThinkingLevel4, llmVndMoonReasoningEffort, // -> mapped to vndOaiReasoningEffort below // llmVndMoonshotWebSearch, @@ -110,7 +110,7 @@ export function aixCreateModelFromLLMOptions( ...(llmVndAntSkills ? { vndAntSkills: llmVndAntSkills } : {}), ...(llmVndAntWebFetch === 'auto' ? { vndAntWebFetch: llmVndAntWebFetch } : {}), ...(llmVndAntWebSearch === 'auto' ? { vndAntWebSearch: llmVndAntWebSearch } : {}), - ...(llmVndAntEffort ? { vndAntEffort: llmVndAntEffort } : {}), + ...((llmVndAntEffortMax || llmVndAntEffort) ? { vndAntEffort: llmVndAntEffortMax || llmVndAntEffort } : {}), ...(llmVndGeminiAspectRatio ? { vndGeminiAspectRatio: llmVndGeminiAspectRatio } : {}), ...(llmVndGeminiCodeExecution === 'auto' ? { vndGeminiCodeExecution: llmVndGeminiCodeExecution } : {}), ...(llmVndGeminiComputerUse ? { vndGeminiComputerUse: llmVndGeminiComputerUse } : {}), diff --git a/src/modules/aix/server/api/aix.wiretypes.ts b/src/modules/aix/server/api/aix.wiretypes.ts index accff9d6a..310ebe0da 100644 --- a/src/modules/aix/server/api/aix.wiretypes.ts +++ b/src/modules/aix/server/api/aix.wiretypes.ts @@ -451,7 +451,7 @@ export namespace AixWire_API { // Anthropic vndAnt1MContext: z.boolean().optional(), - vndAntEffort: z.enum(['low', 'medium', 'high']).optional(), + vndAntEffort: z.enum(['low', 'medium', 'high', 'max']).optional(), vndAntSkills: z.string().optional(), vndAntThinkingBudget: z.number().or(z.literal('adaptive')).nullable().optional(), vndAntToolSearch: z.enum(['regex', 'bm25']).optional(), // Tool Search Tool variant diff --git a/src/modules/aix/server/dispatch/wiretypes/anthropic.wiretypes.ts b/src/modules/aix/server/dispatch/wiretypes/anthropic.wiretypes.ts index c48eef7a4..e30f59216 100644 --- a/src/modules/aix/server/dispatch/wiretypes/anthropic.wiretypes.ts +++ b/src/modules/aix/server/dispatch/wiretypes/anthropic.wiretypes.ts @@ -847,7 +847,7 @@ export namespace AnthropicWire_API_Message_Create { * Allows trading off response thoroughness for efficiency (Claude Opus 4.5+ only). */ output_config: z.object({ - effort: z.enum(['low', 'medium', 'high']).optional(), + effort: z.enum(['low', 'medium', 'high', 'max']).optional(), }).optional(), /** diff --git a/src/modules/llms/server/anthropic/anthropic.models.ts b/src/modules/llms/server/anthropic/anthropic.models.ts index 677a24bb4..98ce32041 100644 --- a/src/modules/llms/server/anthropic/anthropic.models.ts +++ b/src/modules/llms/server/anthropic/anthropic.models.ts @@ -40,7 +40,7 @@ const _hardcodedAnthropicVariants: ModelVariantMap = { label: 'Claude Opus 4.6 (Thinking)', description: 'Claude Opus 4.6 with adaptive thinking mode for the most complex reasoning and agentic workflows', interfaces: [...IF_4_R, LLM_IF_ANT_ToolsSearch], - parameterSpecs: [...ANT_TOOLS, { paramId: 'llmVndAntThinkingBudget', hidden: true, initialValue: -1 /* adaptive */ }, { paramId: 'llmVndAntEffort' }, { paramId: 'llmVndAnt1MContext' }], + parameterSpecs: [...ANT_TOOLS, { paramId: 'llmVndAntThinkingBudget', hidden: true, initialValue: -1 /* adaptive */ }, { paramId: 'llmVndAntEffortMax' }, { paramId: 'llmVndAnt1MContext' }], // benchmark: { cbaElo: ... }, // TBD maxCompletionTokens: 32000, }, @@ -136,7 +136,7 @@ export const hardcodedAnthropicModels: (ModelDescriptionSchema & { isLegacy?: bo contextWindow: 200000, maxCompletionTokens: 128000, interfaces: [...IF_4, LLM_IF_ANT_ToolsSearch], - parameterSpecs: [...ANT_TOOLS, { paramId: 'llmVndAntEffort' }, { paramId: 'llmVndAnt1MContext' }], + parameterSpecs: [...ANT_TOOLS, { paramId: 'llmVndAntEffortMax' }, { paramId: 'llmVndAnt1MContext' }], // Note: Tiered pricing - ≤200K: $5/$25, >200K: $10/$37.50 (with 1M context enabled) // Cache pricing also tiered: write 1.25× input, read 0.10× input chatPrice: { diff --git a/src/modules/llms/server/llm.server.types.ts b/src/modules/llms/server/llm.server.types.ts index 8dce721e5..88ced8f68 100644 --- a/src/modules/llms/server/llm.server.types.ts +++ b/src/modules/llms/server/llm.server.types.ts @@ -79,6 +79,7 @@ const ModelParameterSpec_schema = z.object({ // Anthropic 'llmVndAnt1MContext', 'llmVndAntEffort', + 'llmVndAntEffortMax', 'llmVndAntSkills', 'llmVndAntThinkingBudget', 'llmVndAntWebFetch',