From ba20c0d3d4e705e03b603aa3785c32cde3892000 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Sun, 10 May 2026 12:11:58 +0000 Subject: [PATCH] fix(bedrock): correct Opus 4.7 model ID and add adaptive thinking support - Rename model ID from "anthropic.claude-opus-4-7-v1" to "anthropic.claude-opus-4-7" to match the correct Bedrock model identifier (per PR #12288) - Update BedrockAdditionalModelFields to support adaptive thinking type - Add BEDROCK_ADAPTIVE_THINKING_ONLY_MODEL_IDS for Opus 4.7 - Opus 4.7 uses thinking.type: "adaptive" with output_config.effort instead of "enabled" with budget_tokens (which returns 400 error) --- packages/types/src/providers/bedrock.ts | 6 ++-- src/api/providers/bedrock.ts | 42 ++++++++++++++++++++----- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/packages/types/src/providers/bedrock.ts b/packages/types/src/providers/bedrock.ts index 19610c5150..62e180ad30 100644 --- a/packages/types/src/providers/bedrock.ts +++ b/packages/types/src/providers/bedrock.ts @@ -167,7 +167,7 @@ export const bedrockModels = { }, ], }, - "anthropic.claude-opus-4-7-v1": { + "anthropic.claude-opus-4-7": { maxTokens: 8192, contextWindow: 200_000, // Default 200K, extendable to 1M with beta flag 'context-1m-2025-08-07' supportsImages: true, @@ -549,7 +549,7 @@ export const BEDROCK_1M_CONTEXT_MODEL_IDS = [ "anthropic.claude-sonnet-4-5-20250929-v1:0", "anthropic.claude-sonnet-4-6", "anthropic.claude-opus-4-6-v1", - "anthropic.claude-opus-4-7-v1", + "anthropic.claude-opus-4-7", ] as const // Amazon Bedrock models that support Global Inference profiles @@ -568,7 +568,7 @@ export const BEDROCK_GLOBAL_INFERENCE_MODEL_IDS = [ "anthropic.claude-haiku-4-5-20251001-v1:0", "anthropic.claude-opus-4-5-20251101-v1:0", "anthropic.claude-opus-4-6-v1", - "anthropic.claude-opus-4-7-v1", + "anthropic.claude-opus-4-7", ] as const // Amazon Bedrock Service Tier types diff --git a/src/api/providers/bedrock.ts b/src/api/providers/bedrock.ts index 2116dff08a..9283fe0ec1 100644 --- a/src/api/providers/bedrock.ts +++ b/src/api/providers/bedrock.ts @@ -59,14 +59,24 @@ interface BedrockInferenceConfig { // Define interface for Bedrock additional model request fields // This includes thinking configuration, 1M context beta, and other model-specific parameters interface BedrockAdditionalModelFields { - thinking?: { - type: "enabled" - budget_tokens: number + thinking?: + | { + type: "enabled" + budget_tokens: number + } + | { + type: "adaptive" + } + output_config?: { + effort?: "low" | "medium" | "high" } anthropic_beta?: string[] [key: string]: any // Add index signature to be compatible with DocumentType } +// Models that only support thinking.type: "adaptive" (not "enabled" with budget_tokens) +const BEDROCK_ADAPTIVE_THINKING_ONLY_MODEL_IDS = ["anthropic.claude-opus-4-7"] as const + // Define interface for Bedrock payload interface BedrockPayload { modelId: BedrockModelId | string @@ -390,12 +400,28 @@ export class AwsBedrockHandler extends BaseProvider implements SingleCompletionH if ((isThinkingExplicitlyEnabled || isThinkingEnabledBySettings) && modelConfig.info.supportsReasoningBudget) { thinkingEnabled = true - additionalModelRequestFields = { - thinking: { - type: "enabled", - budget_tokens: metadata?.thinking?.maxThinkingTokens || modelConfig.reasoningBudget || 4096, - }, + + // Opus 4.7 only supports thinking.type: "adaptive" with output_config.effort + // (NOT "enabled" with budget_tokens which returns a 400 error) + const baseId = this.parseBaseModelId(modelConfig.id) + if (BEDROCK_ADAPTIVE_THINKING_ONLY_MODEL_IDS.includes(baseId as any)) { + additionalModelRequestFields = { + thinking: { + type: "adaptive", + }, + output_config: { + effort: "high", + }, + } + } else { + additionalModelRequestFields = { + thinking: { + type: "enabled", + budget_tokens: metadata?.thinking?.maxThinkingTokens || modelConfig.reasoningBudget || 4096, + }, + } } + logger.info("Extended thinking enabled for Bedrock request", { ctx: "bedrock", modelId: modelConfig.id,