feat(bedrock): add Claude Opus 4.7 support (#12287)

This commit is contained in:
Andy Lemin 2026-05-08 13:46:25 +10:00
parent ad25634905
commit 36ac4d3e06
2 changed files with 63 additions and 8 deletions

View file

@ -167,6 +167,30 @@ export const bedrockModels = {
},
],
},
"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,
supportsPromptCache: true,
supportsReasoningBudget: true,
inputPrice: 5.0, // $5 per million input tokens (≤200K context)
outputPrice: 25.0, // $25 per million output tokens (≤200K context)
cacheWritesPrice: 6.25, // $6.25 per million tokens
cacheReadsPrice: 0.5, // $0.50 per million tokens
minTokensPerCachePoint: 1024,
maxCachePoints: 4,
cachableFields: ["system", "messages", "tools"],
// Tiered pricing for extended context (requires beta flag 'context-1m-2025-08-07')
tiers: [
{
contextWindow: 1_000_000, // 1M tokens with beta flag
inputPrice: 10.0, // $10 per million input tokens (>200K context)
outputPrice: 37.5, // $37.50 per million output tokens (>200K context)
cacheWritesPrice: 12.5, // $12.50 per million tokens (>200K context)
cacheReadsPrice: 1.0, // $1.00 per million tokens (>200K context)
},
],
},
"anthropic.claude-opus-4-5-20251101-v1:0": {
maxTokens: 8192,
contextWindow: 200_000,
@ -525,6 +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",
] as const
// Amazon Bedrock models that support Global Inference profiles
@ -535,6 +560,7 @@ export const BEDROCK_1M_CONTEXT_MODEL_IDS = [
// - Claude Haiku 4.5
// - Claude Opus 4.5
// - Claude Opus 4.6
// - Claude Opus 4.7
export const BEDROCK_GLOBAL_INFERENCE_MODEL_IDS = [
"anthropic.claude-sonnet-4-20250514-v1:0",
"anthropic.claude-sonnet-4-5-20250929-v1:0",
@ -542,6 +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",
] as const
// Amazon Bedrock Service Tier types

View file

@ -61,14 +61,26 @@ 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
@ -392,12 +404,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,