@ai-sdk/amazon-bedrock 4.0.106 → 4.0.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ai-sdk/amazon-bedrock
2
2
 
3
+ ## 4.0.107
4
+
5
+ ### Patch Changes
6
+
7
+ - 980c2ae: fix(amazon-bedrock): disable native structured output for claude-opus-4-7
8
+
3
9
  ## 4.0.106
4
10
 
5
11
  ### Patch Changes
@@ -35,7 +35,7 @@ var import_provider_utils = require("@ai-sdk/provider-utils");
35
35
  var import_aws4fetch = require("aws4fetch");
36
36
 
37
37
  // src/version.ts
38
- var VERSION = true ? "4.0.106" : "0.0.0-test";
38
+ var VERSION = true ? "4.0.107" : "0.0.0-test";
39
39
 
40
40
  // src/bedrock-sigv4-fetch.ts
41
41
  function createSigV4FetchFunction(getCredentials, fetch) {
@@ -397,7 +397,8 @@ Original error: ${errorMessage}`
397
397
  // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion
398
398
  supportedUrls: () => ({}),
399
399
  // native structured output via output_config.format is supported on Bedrock
400
- supportsNativeStructuredOutput: true
400
+ // Bedrock rejects `output_config.format` for `claude-opus-4-7`
401
+ supportsNativeStructuredOutput: !modelId.includes("claude-opus-4-7")
401
402
  });
402
403
  const provider = function(modelId) {
403
404
  if (new.target) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/anthropic/index.ts","../../src/anthropic/bedrock-anthropic-provider.ts","../../src/bedrock-sigv4-fetch.ts","../../src/version.ts","../../src/anthropic/bedrock-anthropic-fetch.ts","../../src/bedrock-event-stream-decoder.ts"],"sourcesContent":["export {\n bedrockAnthropic,\n createBedrockAnthropic,\n} from './bedrock-anthropic-provider';\nexport type {\n BedrockAnthropicProvider,\n BedrockAnthropicProviderSettings,\n} from './bedrock-anthropic-provider';\nexport type { BedrockAnthropicModelId } from './bedrock-anthropic-options';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n loadSetting,\n resolve,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n anthropicTools,\n AnthropicMessagesLanguageModel,\n} from '@ai-sdk/anthropic/internal';\nimport {\n createApiKeyFetchFunction,\n createSigV4FetchFunction,\n type BedrockCredentials,\n} from '../bedrock-sigv4-fetch';\nimport { createBedrockAnthropicFetch } from './bedrock-anthropic-fetch';\nimport type { BedrockAnthropicModelId } from './bedrock-anthropic-options';\nimport { VERSION } from '../version';\n\n// Bedrock requires newer tool versions than the default Anthropic SDK versions\nconst BEDROCK_TOOL_VERSION_MAP = {\n bash_20241022: 'bash_20250124',\n text_editor_20241022: 'text_editor_20250728',\n computer_20241022: 'computer_20250124',\n} as const;\n\n// Tool name mappings when upgrading versions (text_editor_20250728 requires different name)\nconst BEDROCK_TOOL_NAME_MAP: Record<string, string> = {\n text_editor_20250728: 'str_replace_based_edit_tool',\n};\n\n// Map tool types to required anthropic_beta values for Bedrock\nconst BEDROCK_TOOL_BETA_MAP: Record<string, string> = {\n bash_20250124: 'computer-use-2025-01-24',\n bash_20241022: 'computer-use-2024-10-22',\n text_editor_20250124: 'computer-use-2025-01-24',\n text_editor_20241022: 'computer-use-2024-10-22',\n text_editor_20250429: 'computer-use-2025-01-24',\n text_editor_20250728: 'computer-use-2025-01-24',\n computer_20250124: 'computer-use-2025-01-24',\n computer_20241022: 'computer-use-2024-10-22',\n tool_search_tool_regex_20251119: 'tool-search-tool-2025-10-19',\n // BM25 is not currently supported on Bedrock, but including the beta flag\n // so that Bedrock returns a more useful error message if it's used.\n tool_search_tool_bm25_20251119: 'tool-search-tool-2025-10-19',\n};\n\nexport interface BedrockAnthropicProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Anthropic-specific computer use tool.\n */\n tools: typeof anthropicTools;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface BedrockAnthropicProviderSettings {\n /**\n * The AWS region to use for the Bedrock provider. Defaults to the value of the\n * `AWS_REGION` environment variable.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * Base URL for the Bedrock API calls.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Resolvable<Record<string, string | undefined>>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<Omit<BedrockCredentials, 'region'>>;\n}\n\n/**\n * Create an Amazon Bedrock Anthropic provider instance.\n * This provider uses the native Anthropic API through Bedrock's InvokeModel endpoint,\n * bypassing the Converse API for better feature compatibility.\n */\nexport function createBedrockAnthropic(\n options: BedrockAnthropicProviderSettings = {},\n): BedrockAnthropicProvider {\n // Check for API key authentication first\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n const baseFetchFunction = apiKey\n ? createApiKeyFetchFunction(apiKey, options.fetch)\n : createSigV4FetchFunction(async () => {\n const region = loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n });\n\n // If a credential provider is provided, use it to get the credentials.\n if (options.credentialProvider) {\n try {\n return {\n ...(await options.credentialProvider()),\n region,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n throw new Error(\n `AWS credential provider failed: ${errorMessage}. ` +\n 'Please ensure your credential provider returns valid AWS credentials ' +\n 'with accessKeyId and secretAccessKey properties.',\n );\n }\n }\n\n try {\n return {\n region,\n accessKeyId: loadSetting({\n settingValue: options.accessKeyId,\n settingName: 'accessKeyId',\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n description: 'AWS access key ID',\n }),\n secretAccessKey: loadSetting({\n settingValue: options.secretAccessKey,\n settingName: 'secretAccessKey',\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n description: 'AWS secret access key',\n }),\n sessionToken: loadOptionalSetting({\n settingValue: options.sessionToken,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n }),\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n if (\n errorMessage.includes('AWS_ACCESS_KEY_ID') ||\n errorMessage.includes('accessKeyId')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires AWS credentials. Please provide either:\\n' +\n '1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\\n' +\n '2. Provide accessKeyId and secretAccessKey in options\\n' +\n '3. Use a credentialProvider function\\n' +\n '4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n if (\n errorMessage.includes('AWS_SECRET_ACCESS_KEY') ||\n errorMessage.includes('secretAccessKey')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. ' +\n 'Please ensure both credentials are provided.\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n throw error;\n }\n }, options.fetch);\n\n // Wrap with Bedrock event stream to SSE transformer for streaming support\n const fetchFunction = createBedrockAnthropicFetch(baseFetchFunction);\n\n const getBaseURL = (): string =>\n withoutTrailingSlash(\n options.baseURL ??\n `https://bedrock-runtime.${loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n })}.amazonaws.com`,\n ) ?? 'https://bedrock-runtime.us-east-1.amazonaws.com';\n\n const getHeaders = async () => {\n const baseHeaders = (await resolve(options.headers)) ?? {};\n return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION}`);\n };\n\n const createChatModel = (modelId: BedrockAnthropicModelId) =>\n new AnthropicMessagesLanguageModel(modelId, {\n provider: 'bedrock.anthropic.messages',\n baseURL: getBaseURL(),\n headers: getHeaders,\n fetch: fetchFunction,\n\n buildRequestUrl: (baseURL, isStreaming) =>\n `${baseURL}/model/${encodeURIComponent(modelId)}/${\n isStreaming ? 'invoke-with-response-stream' : 'invoke'\n }`,\n\n transformRequestBody: (args, betas) => {\n const { model, stream, tool_choice, tools, ...rest } = args;\n\n const transformedToolChoice =\n tool_choice != null\n ? {\n type: tool_choice.type,\n ...(tool_choice.name != null ? { name: tool_choice.name } : {}),\n }\n : undefined;\n\n const requiredBetas = new Set<string>(betas);\n const transformedTools = tools?.map((tool: Record<string, unknown>) => {\n const toolType = tool.type as string | undefined;\n\n if (toolType && toolType in BEDROCK_TOOL_VERSION_MAP) {\n const newType =\n BEDROCK_TOOL_VERSION_MAP[\n toolType as keyof typeof BEDROCK_TOOL_VERSION_MAP\n ];\n if (newType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[newType]);\n }\n const newName =\n newType in BEDROCK_TOOL_NAME_MAP\n ? BEDROCK_TOOL_NAME_MAP[newType]\n : tool.name;\n return {\n ...tool,\n type: newType,\n name: newName,\n };\n }\n\n if (toolType && toolType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[toolType]);\n }\n\n if (toolType && toolType in BEDROCK_TOOL_NAME_MAP) {\n return {\n ...tool,\n name: BEDROCK_TOOL_NAME_MAP[toolType],\n };\n }\n\n return tool;\n });\n\n return {\n ...rest,\n ...(transformedTools != null ? { tools: transformedTools } : {}),\n ...(transformedToolChoice != null\n ? { tool_choice: transformedToolChoice }\n : {}),\n ...(requiredBetas.size > 0\n ? { anthropic_beta: Array.from(requiredBetas) }\n : {}),\n anthropic_version: 'bedrock-2023-05-31',\n };\n },\n\n // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion\n supportedUrls: () => ({}),\n // native structured output via output_config.format is supported on Bedrock\n supportsNativeStructuredOutput: true,\n });\n\n const provider = function (modelId: BedrockAnthropicModelId) {\n if (new.target) {\n throw new Error(\n 'The Bedrock Anthropic model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.messages = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.tools = anthropicTools;\n\n return provider;\n}\n\n/**\n * Default Bedrock Anthropic provider instance.\n */\nexport const bedrockAnthropic = createBedrockAnthropic();\n","import {\n combineHeaders,\n normalizeHeaders,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { VERSION } from './version';\n\nexport interface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nexport function createSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const request = input instanceof Request ? input : undefined;\n const originalHeaders = combineHeaders(\n normalizeHeaders(request?.headers),\n normalizeHeaders(init?.headers),\n );\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n let effectiveBody: BodyInit | undefined = init?.body ?? undefined;\n if (effectiveBody === undefined && request && request.body !== null) {\n try {\n effectiveBody = await request.clone().text();\n } catch {}\n }\n\n const effectiveMethod = init?.method ?? request?.method;\n\n if (effectiveMethod?.toUpperCase() !== 'POST' || !effectiveBody) {\n return effectiveFetch(input, {\n ...init,\n headers: headersWithUserAgent as HeadersInit,\n });\n }\n\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body = prepareBodyString(effectiveBody);\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: 'POST',\n headers: Object.entries(headersWithUserAgent),\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock',\n });\n\n const signingResult = await signer.sign();\n const signedHeaders = normalizeHeaders(signingResult.headers);\n\n // Use the combined headers directly as HeadersInit\n const combinedHeaders = combineHeaders(headersWithUserAgent, signedHeaders);\n\n return effectiveFetch(input, {\n ...init,\n body,\n headers: combinedHeaders as HeadersInit,\n });\n };\n}\n\nfunction prepareBodyString(body: BodyInit | undefined): string {\n if (typeof body === 'string') {\n return body;\n } else if (body instanceof Uint8Array) {\n return new TextDecoder().decode(body);\n } else if (body instanceof ArrayBuffer) {\n return new TextDecoder().decode(new Uint8Array(body));\n } else {\n return JSON.stringify(body);\n }\n}\n\n/**\n * Creates a fetch function that applies Bearer token authentication.\n *\n * @param apiKey - The API key to use for Bearer token authentication.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that adds Authorization header with Bearer token to requests.\n */\nexport function createApiKeyFetchFunction(\n apiKey: string,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const originalHeaders = normalizeHeaders(init?.headers);\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n const finalHeaders = combineHeaders(headersWithUserAgent, {\n Authorization: `Bearer ${apiKey}`,\n });\n\n return effectiveFetch(input, {\n ...init,\n headers: finalHeaders as HeadersInit,\n });\n };\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n convertBase64ToUint8Array,\n safeParseJSON,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { createBedrockEventStreamDecoder } from '../bedrock-event-stream-decoder';\n\nconst bedrockErrorSchema = z.looseObject({\n message: z.string().optional(),\n});\n\nexport function createBedrockAnthropicFetch(\n baseFetch: FetchFunction,\n): FetchFunction {\n return async (url, options) => {\n const response = await baseFetch(url, options);\n\n // Transform Bedrock error responses into Anthropic error format\n // so that anthropicFailedResponseHandler can extract the message.\n if (!response.ok) {\n const text = await response.text();\n const parsed = await safeParseJSON({ text, schema: bedrockErrorSchema });\n\n const message =\n parsed.success && parsed.value.message ? parsed.value.message : text;\n\n const anthropicError = JSON.stringify({\n type: 'error',\n error: { type: 'error', message },\n });\n\n return new Response(anthropicError, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n const contentType = response.headers.get('content-type');\n if (\n contentType?.includes('application/vnd.amazon.eventstream') &&\n response.body != null\n ) {\n const transformedBody = transformBedrockEventStreamToSSE(response.body);\n\n return new Response(transformedBody, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers({\n ...Object.fromEntries(response.headers.entries()),\n 'content-type': 'text/event-stream',\n }),\n });\n }\n\n return response;\n };\n}\n\nfunction transformBedrockEventStreamToSSE(\n body: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const textEncoder = new TextEncoder();\n\n return createBedrockEventStreamDecoder(body, async (event, controller) => {\n if (event.messageType === 'event') {\n if (event.eventType === 'chunk') {\n const parsed = await safeParseJSON({ text: event.data });\n if (!parsed.success) {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n return;\n }\n const bytes = (parsed.value as { bytes?: string }).bytes;\n if (bytes) {\n const anthropicEvent = new TextDecoder().decode(\n convertBase64ToUint8Array(bytes),\n );\n controller.enqueue(textEncoder.encode(`data: ${anthropicEvent}\\n\\n`));\n } else {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n }\n } else if (event.eventType === 'messageStop') {\n controller.enqueue(textEncoder.encode('data: [DONE]\\n\\n'));\n }\n } else if (event.messageType === 'exception') {\n controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({ type: 'error', error: event.data })}\\n\\n`,\n ),\n );\n }\n });\n}\n","import { EventStreamCodec } from '@smithy/eventstream-codec';\nimport { toUtf8, fromUtf8 } from '@smithy/util-utf8';\n\nexport interface DecodedEvent {\n messageType: string;\n eventType: string;\n data: string;\n}\n\nexport function createBedrockEventStreamDecoder<T>(\n body: ReadableStream<Uint8Array>,\n processEvent: (\n event: DecodedEvent,\n controller: TransformStreamDefaultController<T>,\n ) => void | Promise<void>,\n): ReadableStream<T> {\n const codec = new EventStreamCodec(toUtf8, fromUtf8);\n let buffer = new Uint8Array(0);\n const textDecoder = new TextDecoder();\n\n return body.pipeThrough(\n new TransformStream<Uint8Array, T>({\n async transform(chunk, controller) {\n const newBuffer = new Uint8Array(buffer.length + chunk.length);\n newBuffer.set(buffer);\n newBuffer.set(chunk, buffer.length);\n buffer = newBuffer;\n\n while (buffer.length >= 4) {\n const totalLength = new DataView(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n ).getUint32(0, false);\n\n if (buffer.length < totalLength) {\n break;\n }\n\n try {\n const subView = buffer.subarray(0, totalLength);\n const decoded = codec.decode(subView);\n\n buffer = buffer.slice(totalLength);\n\n const messageType = decoded.headers[':message-type']\n ?.value as string;\n const eventType = decoded.headers[':event-type']?.value as string;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent({ messageType, eventType, data }, controller);\n } catch {\n break;\n }\n }\n },\n }),\n );\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils"]}
1
+ {"version":3,"sources":["../../src/anthropic/index.ts","../../src/anthropic/bedrock-anthropic-provider.ts","../../src/bedrock-sigv4-fetch.ts","../../src/version.ts","../../src/anthropic/bedrock-anthropic-fetch.ts","../../src/bedrock-event-stream-decoder.ts"],"sourcesContent":["export {\n bedrockAnthropic,\n createBedrockAnthropic,\n} from './bedrock-anthropic-provider';\nexport type {\n BedrockAnthropicProvider,\n BedrockAnthropicProviderSettings,\n} from './bedrock-anthropic-provider';\nexport type { BedrockAnthropicModelId } from './bedrock-anthropic-options';\n","import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n loadSetting,\n resolve,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n anthropicTools,\n AnthropicMessagesLanguageModel,\n} from '@ai-sdk/anthropic/internal';\nimport {\n createApiKeyFetchFunction,\n createSigV4FetchFunction,\n type BedrockCredentials,\n} from '../bedrock-sigv4-fetch';\nimport { createBedrockAnthropicFetch } from './bedrock-anthropic-fetch';\nimport type { BedrockAnthropicModelId } from './bedrock-anthropic-options';\nimport { VERSION } from '../version';\n\n// Bedrock requires newer tool versions than the default Anthropic SDK versions\nconst BEDROCK_TOOL_VERSION_MAP = {\n bash_20241022: 'bash_20250124',\n text_editor_20241022: 'text_editor_20250728',\n computer_20241022: 'computer_20250124',\n} as const;\n\n// Tool name mappings when upgrading versions (text_editor_20250728 requires different name)\nconst BEDROCK_TOOL_NAME_MAP: Record<string, string> = {\n text_editor_20250728: 'str_replace_based_edit_tool',\n};\n\n// Map tool types to required anthropic_beta values for Bedrock\nconst BEDROCK_TOOL_BETA_MAP: Record<string, string> = {\n bash_20250124: 'computer-use-2025-01-24',\n bash_20241022: 'computer-use-2024-10-22',\n text_editor_20250124: 'computer-use-2025-01-24',\n text_editor_20241022: 'computer-use-2024-10-22',\n text_editor_20250429: 'computer-use-2025-01-24',\n text_editor_20250728: 'computer-use-2025-01-24',\n computer_20250124: 'computer-use-2025-01-24',\n computer_20241022: 'computer-use-2024-10-22',\n tool_search_tool_regex_20251119: 'tool-search-tool-2025-10-19',\n // BM25 is not currently supported on Bedrock, but including the beta flag\n // so that Bedrock returns a more useful error message if it's used.\n tool_search_tool_bm25_20251119: 'tool-search-tool-2025-10-19',\n};\n\nexport interface BedrockAnthropicProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Anthropic-specific computer use tool.\n */\n tools: typeof anthropicTools;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface BedrockAnthropicProviderSettings {\n /**\n * The AWS region to use for the Bedrock provider. Defaults to the value of the\n * `AWS_REGION` environment variable.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * Base URL for the Bedrock API calls.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Resolvable<Record<string, string | undefined>>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<Omit<BedrockCredentials, 'region'>>;\n}\n\n/**\n * Create an Amazon Bedrock Anthropic provider instance.\n * This provider uses the native Anthropic API through Bedrock's InvokeModel endpoint,\n * bypassing the Converse API for better feature compatibility.\n */\nexport function createBedrockAnthropic(\n options: BedrockAnthropicProviderSettings = {},\n): BedrockAnthropicProvider {\n // Check for API key authentication first\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n const baseFetchFunction = apiKey\n ? createApiKeyFetchFunction(apiKey, options.fetch)\n : createSigV4FetchFunction(async () => {\n const region = loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n });\n\n // If a credential provider is provided, use it to get the credentials.\n if (options.credentialProvider) {\n try {\n return {\n ...(await options.credentialProvider()),\n region,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n throw new Error(\n `AWS credential provider failed: ${errorMessage}. ` +\n 'Please ensure your credential provider returns valid AWS credentials ' +\n 'with accessKeyId and secretAccessKey properties.',\n );\n }\n }\n\n try {\n return {\n region,\n accessKeyId: loadSetting({\n settingValue: options.accessKeyId,\n settingName: 'accessKeyId',\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n description: 'AWS access key ID',\n }),\n secretAccessKey: loadSetting({\n settingValue: options.secretAccessKey,\n settingName: 'secretAccessKey',\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n description: 'AWS secret access key',\n }),\n sessionToken: loadOptionalSetting({\n settingValue: options.sessionToken,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n }),\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n if (\n errorMessage.includes('AWS_ACCESS_KEY_ID') ||\n errorMessage.includes('accessKeyId')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires AWS credentials. Please provide either:\\n' +\n '1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\\n' +\n '2. Provide accessKeyId and secretAccessKey in options\\n' +\n '3. Use a credentialProvider function\\n' +\n '4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n if (\n errorMessage.includes('AWS_SECRET_ACCESS_KEY') ||\n errorMessage.includes('secretAccessKey')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. ' +\n 'Please ensure both credentials are provided.\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n throw error;\n }\n }, options.fetch);\n\n // Wrap with Bedrock event stream to SSE transformer for streaming support\n const fetchFunction = createBedrockAnthropicFetch(baseFetchFunction);\n\n const getBaseURL = (): string =>\n withoutTrailingSlash(\n options.baseURL ??\n `https://bedrock-runtime.${loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n })}.amazonaws.com`,\n ) ?? 'https://bedrock-runtime.us-east-1.amazonaws.com';\n\n const getHeaders = async () => {\n const baseHeaders = (await resolve(options.headers)) ?? {};\n return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION}`);\n };\n\n const createChatModel = (modelId: BedrockAnthropicModelId) =>\n new AnthropicMessagesLanguageModel(modelId, {\n provider: 'bedrock.anthropic.messages',\n baseURL: getBaseURL(),\n headers: getHeaders,\n fetch: fetchFunction,\n\n buildRequestUrl: (baseURL, isStreaming) =>\n `${baseURL}/model/${encodeURIComponent(modelId)}/${\n isStreaming ? 'invoke-with-response-stream' : 'invoke'\n }`,\n\n transformRequestBody: (args, betas) => {\n const { model, stream, tool_choice, tools, ...rest } = args;\n\n const transformedToolChoice =\n tool_choice != null\n ? {\n type: tool_choice.type,\n ...(tool_choice.name != null ? { name: tool_choice.name } : {}),\n }\n : undefined;\n\n const requiredBetas = new Set<string>(betas);\n const transformedTools = tools?.map((tool: Record<string, unknown>) => {\n const toolType = tool.type as string | undefined;\n\n if (toolType && toolType in BEDROCK_TOOL_VERSION_MAP) {\n const newType =\n BEDROCK_TOOL_VERSION_MAP[\n toolType as keyof typeof BEDROCK_TOOL_VERSION_MAP\n ];\n if (newType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[newType]);\n }\n const newName =\n newType in BEDROCK_TOOL_NAME_MAP\n ? BEDROCK_TOOL_NAME_MAP[newType]\n : tool.name;\n return {\n ...tool,\n type: newType,\n name: newName,\n };\n }\n\n if (toolType && toolType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[toolType]);\n }\n\n if (toolType && toolType in BEDROCK_TOOL_NAME_MAP) {\n return {\n ...tool,\n name: BEDROCK_TOOL_NAME_MAP[toolType],\n };\n }\n\n return tool;\n });\n\n return {\n ...rest,\n ...(transformedTools != null ? { tools: transformedTools } : {}),\n ...(transformedToolChoice != null\n ? { tool_choice: transformedToolChoice }\n : {}),\n ...(requiredBetas.size > 0\n ? { anthropic_beta: Array.from(requiredBetas) }\n : {}),\n anthropic_version: 'bedrock-2023-05-31',\n };\n },\n\n // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion\n supportedUrls: () => ({}),\n // native structured output via output_config.format is supported on Bedrock\n // Bedrock rejects `output_config.format` for `claude-opus-4-7`\n supportsNativeStructuredOutput: !modelId.includes('claude-opus-4-7'),\n });\n\n const provider = function (modelId: BedrockAnthropicModelId) {\n if (new.target) {\n throw new Error(\n 'The Bedrock Anthropic model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.messages = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.tools = anthropicTools;\n\n return provider;\n}\n\n/**\n * Default Bedrock Anthropic provider instance.\n */\nexport const bedrockAnthropic = createBedrockAnthropic();\n","import {\n combineHeaders,\n normalizeHeaders,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { VERSION } from './version';\n\nexport interface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nexport function createSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const request = input instanceof Request ? input : undefined;\n const originalHeaders = combineHeaders(\n normalizeHeaders(request?.headers),\n normalizeHeaders(init?.headers),\n );\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n let effectiveBody: BodyInit | undefined = init?.body ?? undefined;\n if (effectiveBody === undefined && request && request.body !== null) {\n try {\n effectiveBody = await request.clone().text();\n } catch {}\n }\n\n const effectiveMethod = init?.method ?? request?.method;\n\n if (effectiveMethod?.toUpperCase() !== 'POST' || !effectiveBody) {\n return effectiveFetch(input, {\n ...init,\n headers: headersWithUserAgent as HeadersInit,\n });\n }\n\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body = prepareBodyString(effectiveBody);\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: 'POST',\n headers: Object.entries(headersWithUserAgent),\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock',\n });\n\n const signingResult = await signer.sign();\n const signedHeaders = normalizeHeaders(signingResult.headers);\n\n // Use the combined headers directly as HeadersInit\n const combinedHeaders = combineHeaders(headersWithUserAgent, signedHeaders);\n\n return effectiveFetch(input, {\n ...init,\n body,\n headers: combinedHeaders as HeadersInit,\n });\n };\n}\n\nfunction prepareBodyString(body: BodyInit | undefined): string {\n if (typeof body === 'string') {\n return body;\n } else if (body instanceof Uint8Array) {\n return new TextDecoder().decode(body);\n } else if (body instanceof ArrayBuffer) {\n return new TextDecoder().decode(new Uint8Array(body));\n } else {\n return JSON.stringify(body);\n }\n}\n\n/**\n * Creates a fetch function that applies Bearer token authentication.\n *\n * @param apiKey - The API key to use for Bearer token authentication.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that adds Authorization header with Bearer token to requests.\n */\nexport function createApiKeyFetchFunction(\n apiKey: string,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const originalHeaders = normalizeHeaders(init?.headers);\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n const finalHeaders = combineHeaders(headersWithUserAgent, {\n Authorization: `Bearer ${apiKey}`,\n });\n\n return effectiveFetch(input, {\n ...init,\n headers: finalHeaders as HeadersInit,\n });\n };\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n convertBase64ToUint8Array,\n safeParseJSON,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { createBedrockEventStreamDecoder } from '../bedrock-event-stream-decoder';\n\nconst bedrockErrorSchema = z.looseObject({\n message: z.string().optional(),\n});\n\nexport function createBedrockAnthropicFetch(\n baseFetch: FetchFunction,\n): FetchFunction {\n return async (url, options) => {\n const response = await baseFetch(url, options);\n\n // Transform Bedrock error responses into Anthropic error format\n // so that anthropicFailedResponseHandler can extract the message.\n if (!response.ok) {\n const text = await response.text();\n const parsed = await safeParseJSON({ text, schema: bedrockErrorSchema });\n\n const message =\n parsed.success && parsed.value.message ? parsed.value.message : text;\n\n const anthropicError = JSON.stringify({\n type: 'error',\n error: { type: 'error', message },\n });\n\n return new Response(anthropicError, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n const contentType = response.headers.get('content-type');\n if (\n contentType?.includes('application/vnd.amazon.eventstream') &&\n response.body != null\n ) {\n const transformedBody = transformBedrockEventStreamToSSE(response.body);\n\n return new Response(transformedBody, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers({\n ...Object.fromEntries(response.headers.entries()),\n 'content-type': 'text/event-stream',\n }),\n });\n }\n\n return response;\n };\n}\n\nfunction transformBedrockEventStreamToSSE(\n body: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const textEncoder = new TextEncoder();\n\n return createBedrockEventStreamDecoder(body, async (event, controller) => {\n if (event.messageType === 'event') {\n if (event.eventType === 'chunk') {\n const parsed = await safeParseJSON({ text: event.data });\n if (!parsed.success) {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n return;\n }\n const bytes = (parsed.value as { bytes?: string }).bytes;\n if (bytes) {\n const anthropicEvent = new TextDecoder().decode(\n convertBase64ToUint8Array(bytes),\n );\n controller.enqueue(textEncoder.encode(`data: ${anthropicEvent}\\n\\n`));\n } else {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n }\n } else if (event.eventType === 'messageStop') {\n controller.enqueue(textEncoder.encode('data: [DONE]\\n\\n'));\n }\n } else if (event.messageType === 'exception') {\n controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({ type: 'error', error: event.data })}\\n\\n`,\n ),\n );\n }\n });\n}\n","import { EventStreamCodec } from '@smithy/eventstream-codec';\nimport { toUtf8, fromUtf8 } from '@smithy/util-utf8';\n\nexport interface DecodedEvent {\n messageType: string;\n eventType: string;\n data: string;\n}\n\nexport function createBedrockEventStreamDecoder<T>(\n body: ReadableStream<Uint8Array>,\n processEvent: (\n event: DecodedEvent,\n controller: TransformStreamDefaultController<T>,\n ) => void | Promise<void>,\n): ReadableStream<T> {\n const codec = new EventStreamCodec(toUtf8, fromUtf8);\n let buffer = new Uint8Array(0);\n const textDecoder = new TextDecoder();\n\n return body.pipeThrough(\n new TransformStream<Uint8Array, T>({\n async transform(chunk, controller) {\n const newBuffer = new Uint8Array(buffer.length + chunk.length);\n newBuffer.set(buffer);\n newBuffer.set(chunk, buffer.length);\n buffer = newBuffer;\n\n while (buffer.length >= 4) {\n const totalLength = new DataView(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n ).getUint32(0, false);\n\n if (buffer.length < totalLength) {\n break;\n }\n\n try {\n const subView = buffer.subarray(0, totalLength);\n const decoded = codec.decode(subView);\n\n buffer = buffer.slice(totalLength);\n\n const messageType = decoded.headers[':message-type']\n ?.value as string;\n const eventType = decoded.headers[':event-type']?.value as string;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent({ messageType, eventType, data }, controller);\n } catch {\n break;\n }\n }\n },\n }),\n );\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider_utils"]}
@@ -24,7 +24,7 @@ import {
24
24
  import { AwsV4Signer } from "aws4fetch";
25
25
 
26
26
  // src/version.ts
27
- var VERSION = true ? "4.0.106" : "0.0.0-test";
27
+ var VERSION = true ? "4.0.107" : "0.0.0-test";
28
28
 
29
29
  // src/bedrock-sigv4-fetch.ts
30
30
  function createSigV4FetchFunction(getCredentials, fetch) {
@@ -389,7 +389,8 @@ Original error: ${errorMessage}`
389
389
  // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion
390
390
  supportedUrls: () => ({}),
391
391
  // native structured output via output_config.format is supported on Bedrock
392
- supportsNativeStructuredOutput: true
392
+ // Bedrock rejects `output_config.format` for `claude-opus-4-7`
393
+ supportsNativeStructuredOutput: !modelId.includes("claude-opus-4-7")
393
394
  });
394
395
  const provider = function(modelId) {
395
396
  if (new.target) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/anthropic/bedrock-anthropic-provider.ts","../../src/bedrock-sigv4-fetch.ts","../../src/version.ts","../../src/anthropic/bedrock-anthropic-fetch.ts","../../src/bedrock-event-stream-decoder.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n loadSetting,\n resolve,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n anthropicTools,\n AnthropicMessagesLanguageModel,\n} from '@ai-sdk/anthropic/internal';\nimport {\n createApiKeyFetchFunction,\n createSigV4FetchFunction,\n type BedrockCredentials,\n} from '../bedrock-sigv4-fetch';\nimport { createBedrockAnthropicFetch } from './bedrock-anthropic-fetch';\nimport type { BedrockAnthropicModelId } from './bedrock-anthropic-options';\nimport { VERSION } from '../version';\n\n// Bedrock requires newer tool versions than the default Anthropic SDK versions\nconst BEDROCK_TOOL_VERSION_MAP = {\n bash_20241022: 'bash_20250124',\n text_editor_20241022: 'text_editor_20250728',\n computer_20241022: 'computer_20250124',\n} as const;\n\n// Tool name mappings when upgrading versions (text_editor_20250728 requires different name)\nconst BEDROCK_TOOL_NAME_MAP: Record<string, string> = {\n text_editor_20250728: 'str_replace_based_edit_tool',\n};\n\n// Map tool types to required anthropic_beta values for Bedrock\nconst BEDROCK_TOOL_BETA_MAP: Record<string, string> = {\n bash_20250124: 'computer-use-2025-01-24',\n bash_20241022: 'computer-use-2024-10-22',\n text_editor_20250124: 'computer-use-2025-01-24',\n text_editor_20241022: 'computer-use-2024-10-22',\n text_editor_20250429: 'computer-use-2025-01-24',\n text_editor_20250728: 'computer-use-2025-01-24',\n computer_20250124: 'computer-use-2025-01-24',\n computer_20241022: 'computer-use-2024-10-22',\n tool_search_tool_regex_20251119: 'tool-search-tool-2025-10-19',\n // BM25 is not currently supported on Bedrock, but including the beta flag\n // so that Bedrock returns a more useful error message if it's used.\n tool_search_tool_bm25_20251119: 'tool-search-tool-2025-10-19',\n};\n\nexport interface BedrockAnthropicProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Anthropic-specific computer use tool.\n */\n tools: typeof anthropicTools;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface BedrockAnthropicProviderSettings {\n /**\n * The AWS region to use for the Bedrock provider. Defaults to the value of the\n * `AWS_REGION` environment variable.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * Base URL for the Bedrock API calls.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Resolvable<Record<string, string | undefined>>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<Omit<BedrockCredentials, 'region'>>;\n}\n\n/**\n * Create an Amazon Bedrock Anthropic provider instance.\n * This provider uses the native Anthropic API through Bedrock's InvokeModel endpoint,\n * bypassing the Converse API for better feature compatibility.\n */\nexport function createBedrockAnthropic(\n options: BedrockAnthropicProviderSettings = {},\n): BedrockAnthropicProvider {\n // Check for API key authentication first\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n const baseFetchFunction = apiKey\n ? createApiKeyFetchFunction(apiKey, options.fetch)\n : createSigV4FetchFunction(async () => {\n const region = loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n });\n\n // If a credential provider is provided, use it to get the credentials.\n if (options.credentialProvider) {\n try {\n return {\n ...(await options.credentialProvider()),\n region,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n throw new Error(\n `AWS credential provider failed: ${errorMessage}. ` +\n 'Please ensure your credential provider returns valid AWS credentials ' +\n 'with accessKeyId and secretAccessKey properties.',\n );\n }\n }\n\n try {\n return {\n region,\n accessKeyId: loadSetting({\n settingValue: options.accessKeyId,\n settingName: 'accessKeyId',\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n description: 'AWS access key ID',\n }),\n secretAccessKey: loadSetting({\n settingValue: options.secretAccessKey,\n settingName: 'secretAccessKey',\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n description: 'AWS secret access key',\n }),\n sessionToken: loadOptionalSetting({\n settingValue: options.sessionToken,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n }),\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n if (\n errorMessage.includes('AWS_ACCESS_KEY_ID') ||\n errorMessage.includes('accessKeyId')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires AWS credentials. Please provide either:\\n' +\n '1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\\n' +\n '2. Provide accessKeyId and secretAccessKey in options\\n' +\n '3. Use a credentialProvider function\\n' +\n '4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n if (\n errorMessage.includes('AWS_SECRET_ACCESS_KEY') ||\n errorMessage.includes('secretAccessKey')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. ' +\n 'Please ensure both credentials are provided.\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n throw error;\n }\n }, options.fetch);\n\n // Wrap with Bedrock event stream to SSE transformer for streaming support\n const fetchFunction = createBedrockAnthropicFetch(baseFetchFunction);\n\n const getBaseURL = (): string =>\n withoutTrailingSlash(\n options.baseURL ??\n `https://bedrock-runtime.${loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n })}.amazonaws.com`,\n ) ?? 'https://bedrock-runtime.us-east-1.amazonaws.com';\n\n const getHeaders = async () => {\n const baseHeaders = (await resolve(options.headers)) ?? {};\n return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION}`);\n };\n\n const createChatModel = (modelId: BedrockAnthropicModelId) =>\n new AnthropicMessagesLanguageModel(modelId, {\n provider: 'bedrock.anthropic.messages',\n baseURL: getBaseURL(),\n headers: getHeaders,\n fetch: fetchFunction,\n\n buildRequestUrl: (baseURL, isStreaming) =>\n `${baseURL}/model/${encodeURIComponent(modelId)}/${\n isStreaming ? 'invoke-with-response-stream' : 'invoke'\n }`,\n\n transformRequestBody: (args, betas) => {\n const { model, stream, tool_choice, tools, ...rest } = args;\n\n const transformedToolChoice =\n tool_choice != null\n ? {\n type: tool_choice.type,\n ...(tool_choice.name != null ? { name: tool_choice.name } : {}),\n }\n : undefined;\n\n const requiredBetas = new Set<string>(betas);\n const transformedTools = tools?.map((tool: Record<string, unknown>) => {\n const toolType = tool.type as string | undefined;\n\n if (toolType && toolType in BEDROCK_TOOL_VERSION_MAP) {\n const newType =\n BEDROCK_TOOL_VERSION_MAP[\n toolType as keyof typeof BEDROCK_TOOL_VERSION_MAP\n ];\n if (newType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[newType]);\n }\n const newName =\n newType in BEDROCK_TOOL_NAME_MAP\n ? BEDROCK_TOOL_NAME_MAP[newType]\n : tool.name;\n return {\n ...tool,\n type: newType,\n name: newName,\n };\n }\n\n if (toolType && toolType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[toolType]);\n }\n\n if (toolType && toolType in BEDROCK_TOOL_NAME_MAP) {\n return {\n ...tool,\n name: BEDROCK_TOOL_NAME_MAP[toolType],\n };\n }\n\n return tool;\n });\n\n return {\n ...rest,\n ...(transformedTools != null ? { tools: transformedTools } : {}),\n ...(transformedToolChoice != null\n ? { tool_choice: transformedToolChoice }\n : {}),\n ...(requiredBetas.size > 0\n ? { anthropic_beta: Array.from(requiredBetas) }\n : {}),\n anthropic_version: 'bedrock-2023-05-31',\n };\n },\n\n // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion\n supportedUrls: () => ({}),\n // native structured output via output_config.format is supported on Bedrock\n supportsNativeStructuredOutput: true,\n });\n\n const provider = function (modelId: BedrockAnthropicModelId) {\n if (new.target) {\n throw new Error(\n 'The Bedrock Anthropic model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.messages = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.tools = anthropicTools;\n\n return provider;\n}\n\n/**\n * Default Bedrock Anthropic provider instance.\n */\nexport const bedrockAnthropic = createBedrockAnthropic();\n","import {\n combineHeaders,\n normalizeHeaders,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { VERSION } from './version';\n\nexport interface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nexport function createSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const request = input instanceof Request ? input : undefined;\n const originalHeaders = combineHeaders(\n normalizeHeaders(request?.headers),\n normalizeHeaders(init?.headers),\n );\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n let effectiveBody: BodyInit | undefined = init?.body ?? undefined;\n if (effectiveBody === undefined && request && request.body !== null) {\n try {\n effectiveBody = await request.clone().text();\n } catch {}\n }\n\n const effectiveMethod = init?.method ?? request?.method;\n\n if (effectiveMethod?.toUpperCase() !== 'POST' || !effectiveBody) {\n return effectiveFetch(input, {\n ...init,\n headers: headersWithUserAgent as HeadersInit,\n });\n }\n\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body = prepareBodyString(effectiveBody);\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: 'POST',\n headers: Object.entries(headersWithUserAgent),\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock',\n });\n\n const signingResult = await signer.sign();\n const signedHeaders = normalizeHeaders(signingResult.headers);\n\n // Use the combined headers directly as HeadersInit\n const combinedHeaders = combineHeaders(headersWithUserAgent, signedHeaders);\n\n return effectiveFetch(input, {\n ...init,\n body,\n headers: combinedHeaders as HeadersInit,\n });\n };\n}\n\nfunction prepareBodyString(body: BodyInit | undefined): string {\n if (typeof body === 'string') {\n return body;\n } else if (body instanceof Uint8Array) {\n return new TextDecoder().decode(body);\n } else if (body instanceof ArrayBuffer) {\n return new TextDecoder().decode(new Uint8Array(body));\n } else {\n return JSON.stringify(body);\n }\n}\n\n/**\n * Creates a fetch function that applies Bearer token authentication.\n *\n * @param apiKey - The API key to use for Bearer token authentication.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that adds Authorization header with Bearer token to requests.\n */\nexport function createApiKeyFetchFunction(\n apiKey: string,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const originalHeaders = normalizeHeaders(init?.headers);\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n const finalHeaders = combineHeaders(headersWithUserAgent, {\n Authorization: `Bearer ${apiKey}`,\n });\n\n return effectiveFetch(input, {\n ...init,\n headers: finalHeaders as HeadersInit,\n });\n };\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n convertBase64ToUint8Array,\n safeParseJSON,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { createBedrockEventStreamDecoder } from '../bedrock-event-stream-decoder';\n\nconst bedrockErrorSchema = z.looseObject({\n message: z.string().optional(),\n});\n\nexport function createBedrockAnthropicFetch(\n baseFetch: FetchFunction,\n): FetchFunction {\n return async (url, options) => {\n const response = await baseFetch(url, options);\n\n // Transform Bedrock error responses into Anthropic error format\n // so that anthropicFailedResponseHandler can extract the message.\n if (!response.ok) {\n const text = await response.text();\n const parsed = await safeParseJSON({ text, schema: bedrockErrorSchema });\n\n const message =\n parsed.success && parsed.value.message ? parsed.value.message : text;\n\n const anthropicError = JSON.stringify({\n type: 'error',\n error: { type: 'error', message },\n });\n\n return new Response(anthropicError, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n const contentType = response.headers.get('content-type');\n if (\n contentType?.includes('application/vnd.amazon.eventstream') &&\n response.body != null\n ) {\n const transformedBody = transformBedrockEventStreamToSSE(response.body);\n\n return new Response(transformedBody, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers({\n ...Object.fromEntries(response.headers.entries()),\n 'content-type': 'text/event-stream',\n }),\n });\n }\n\n return response;\n };\n}\n\nfunction transformBedrockEventStreamToSSE(\n body: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const textEncoder = new TextEncoder();\n\n return createBedrockEventStreamDecoder(body, async (event, controller) => {\n if (event.messageType === 'event') {\n if (event.eventType === 'chunk') {\n const parsed = await safeParseJSON({ text: event.data });\n if (!parsed.success) {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n return;\n }\n const bytes = (parsed.value as { bytes?: string }).bytes;\n if (bytes) {\n const anthropicEvent = new TextDecoder().decode(\n convertBase64ToUint8Array(bytes),\n );\n controller.enqueue(textEncoder.encode(`data: ${anthropicEvent}\\n\\n`));\n } else {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n }\n } else if (event.eventType === 'messageStop') {\n controller.enqueue(textEncoder.encode('data: [DONE]\\n\\n'));\n }\n } else if (event.messageType === 'exception') {\n controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({ type: 'error', error: event.data })}\\n\\n`,\n ),\n );\n }\n });\n}\n","import { EventStreamCodec } from '@smithy/eventstream-codec';\nimport { toUtf8, fromUtf8 } from '@smithy/util-utf8';\n\nexport interface DecodedEvent {\n messageType: string;\n eventType: string;\n data: string;\n}\n\nexport function createBedrockEventStreamDecoder<T>(\n body: ReadableStream<Uint8Array>,\n processEvent: (\n event: DecodedEvent,\n controller: TransformStreamDefaultController<T>,\n ) => void | Promise<void>,\n): ReadableStream<T> {\n const codec = new EventStreamCodec(toUtf8, fromUtf8);\n let buffer = new Uint8Array(0);\n const textDecoder = new TextDecoder();\n\n return body.pipeThrough(\n new TransformStream<Uint8Array, T>({\n async transform(chunk, controller) {\n const newBuffer = new Uint8Array(buffer.length + chunk.length);\n newBuffer.set(buffer);\n newBuffer.set(chunk, buffer.length);\n buffer = newBuffer;\n\n while (buffer.length >= 4) {\n const totalLength = new DataView(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n ).getUint32(0, false);\n\n if (buffer.length < totalLength) {\n break;\n }\n\n try {\n const subView = buffer.subarray(0, totalLength);\n const decoded = codec.decode(subView);\n\n buffer = buffer.slice(totalLength);\n\n const messageType = decoded.headers[':message-type']\n ?.value as string;\n const eventType = decoded.headers[':event-type']?.value as string;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent({ messageType, eventType, data }, controller);\n } catch {\n break;\n }\n }\n },\n }),\n );\n}\n"],"mappings":"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","names":["withUserAgentSuffix","withUserAgentSuffix"]}
1
+ {"version":3,"sources":["../../src/anthropic/bedrock-anthropic-provider.ts","../../src/bedrock-sigv4-fetch.ts","../../src/version.ts","../../src/anthropic/bedrock-anthropic-fetch.ts","../../src/bedrock-event-stream-decoder.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV3,\n type ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n loadSetting,\n resolve,\n withoutTrailingSlash,\n withUserAgentSuffix,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n anthropicTools,\n AnthropicMessagesLanguageModel,\n} from '@ai-sdk/anthropic/internal';\nimport {\n createApiKeyFetchFunction,\n createSigV4FetchFunction,\n type BedrockCredentials,\n} from '../bedrock-sigv4-fetch';\nimport { createBedrockAnthropicFetch } from './bedrock-anthropic-fetch';\nimport type { BedrockAnthropicModelId } from './bedrock-anthropic-options';\nimport { VERSION } from '../version';\n\n// Bedrock requires newer tool versions than the default Anthropic SDK versions\nconst BEDROCK_TOOL_VERSION_MAP = {\n bash_20241022: 'bash_20250124',\n text_editor_20241022: 'text_editor_20250728',\n computer_20241022: 'computer_20250124',\n} as const;\n\n// Tool name mappings when upgrading versions (text_editor_20250728 requires different name)\nconst BEDROCK_TOOL_NAME_MAP: Record<string, string> = {\n text_editor_20250728: 'str_replace_based_edit_tool',\n};\n\n// Map tool types to required anthropic_beta values for Bedrock\nconst BEDROCK_TOOL_BETA_MAP: Record<string, string> = {\n bash_20250124: 'computer-use-2025-01-24',\n bash_20241022: 'computer-use-2024-10-22',\n text_editor_20250124: 'computer-use-2025-01-24',\n text_editor_20241022: 'computer-use-2024-10-22',\n text_editor_20250429: 'computer-use-2025-01-24',\n text_editor_20250728: 'computer-use-2025-01-24',\n computer_20250124: 'computer-use-2025-01-24',\n computer_20241022: 'computer-use-2024-10-22',\n tool_search_tool_regex_20251119: 'tool-search-tool-2025-10-19',\n // BM25 is not currently supported on Bedrock, but including the beta flag\n // so that Bedrock returns a more useful error message if it's used.\n tool_search_tool_bm25_20251119: 'tool-search-tool-2025-10-19',\n};\n\nexport interface BedrockAnthropicProvider extends ProviderV3 {\n /**\n * Creates a model for text generation.\n */\n (modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: BedrockAnthropicModelId): LanguageModelV3;\n\n /**\n * Anthropic-specific computer use tool.\n */\n tools: typeof anthropicTools;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nexport interface BedrockAnthropicProviderSettings {\n /**\n * The AWS region to use for the Bedrock provider. Defaults to the value of the\n * `AWS_REGION` environment variable.\n */\n region?: string;\n\n /**\n * API key for authenticating requests using Bearer token authentication.\n * When provided, this will be used instead of AWS SigV4 authentication.\n * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.\n */\n apiKey?: string;\n\n /**\n * The AWS access key ID to use for the Bedrock provider. Defaults to the value of the\n * `AWS_ACCESS_KEY_ID` environment variable.\n */\n accessKeyId?: string;\n\n /**\n * The AWS secret access key to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SECRET_ACCESS_KEY` environment variable.\n */\n secretAccessKey?: string;\n\n /**\n * The AWS session token to use for the Bedrock provider. Defaults to the value of the\n * `AWS_SESSION_TOKEN` environment variable.\n */\n sessionToken?: string;\n\n /**\n * Base URL for the Bedrock API calls.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Resolvable<Record<string, string | undefined>>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept requests,\n * or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * The AWS credential provider to use for the Bedrock provider to get dynamic\n * credentials similar to the AWS SDK. Setting a provider here will cause its\n * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` settings.\n */\n credentialProvider?: () => PromiseLike<Omit<BedrockCredentials, 'region'>>;\n}\n\n/**\n * Create an Amazon Bedrock Anthropic provider instance.\n * This provider uses the native Anthropic API through Bedrock's InvokeModel endpoint,\n * bypassing the Converse API for better feature compatibility.\n */\nexport function createBedrockAnthropic(\n options: BedrockAnthropicProviderSettings = {},\n): BedrockAnthropicProvider {\n // Check for API key authentication first\n const rawApiKey = loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n });\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : undefined;\n\n // Use API key authentication if available, otherwise fall back to SigV4\n const baseFetchFunction = apiKey\n ? createApiKeyFetchFunction(apiKey, options.fetch)\n : createSigV4FetchFunction(async () => {\n const region = loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n });\n\n // If a credential provider is provided, use it to get the credentials.\n if (options.credentialProvider) {\n try {\n return {\n ...(await options.credentialProvider()),\n region,\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n throw new Error(\n `AWS credential provider failed: ${errorMessage}. ` +\n 'Please ensure your credential provider returns valid AWS credentials ' +\n 'with accessKeyId and secretAccessKey properties.',\n );\n }\n }\n\n try {\n return {\n region,\n accessKeyId: loadSetting({\n settingValue: options.accessKeyId,\n settingName: 'accessKeyId',\n environmentVariableName: 'AWS_ACCESS_KEY_ID',\n description: 'AWS access key ID',\n }),\n secretAccessKey: loadSetting({\n settingValue: options.secretAccessKey,\n settingName: 'secretAccessKey',\n environmentVariableName: 'AWS_SECRET_ACCESS_KEY',\n description: 'AWS secret access key',\n }),\n sessionToken: loadOptionalSetting({\n settingValue: options.sessionToken,\n environmentVariableName: 'AWS_SESSION_TOKEN',\n }),\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n if (\n errorMessage.includes('AWS_ACCESS_KEY_ID') ||\n errorMessage.includes('accessKeyId')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires AWS credentials. Please provide either:\\n' +\n '1. Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables\\n' +\n '2. Provide accessKeyId and secretAccessKey in options\\n' +\n '3. Use a credentialProvider function\\n' +\n '4. Use API key authentication with AWS_BEARER_TOKEN_BEDROCK or apiKey option\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n if (\n errorMessage.includes('AWS_SECRET_ACCESS_KEY') ||\n errorMessage.includes('secretAccessKey')\n ) {\n throw new Error(\n 'AWS SigV4 authentication requires both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY. ' +\n 'Please ensure both credentials are provided.\\n' +\n `Original error: ${errorMessage}`,\n );\n }\n throw error;\n }\n }, options.fetch);\n\n // Wrap with Bedrock event stream to SSE transformer for streaming support\n const fetchFunction = createBedrockAnthropicFetch(baseFetchFunction);\n\n const getBaseURL = (): string =>\n withoutTrailingSlash(\n options.baseURL ??\n `https://bedrock-runtime.${loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n })}.amazonaws.com`,\n ) ?? 'https://bedrock-runtime.us-east-1.amazonaws.com';\n\n const getHeaders = async () => {\n const baseHeaders = (await resolve(options.headers)) ?? {};\n return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION}`);\n };\n\n const createChatModel = (modelId: BedrockAnthropicModelId) =>\n new AnthropicMessagesLanguageModel(modelId, {\n provider: 'bedrock.anthropic.messages',\n baseURL: getBaseURL(),\n headers: getHeaders,\n fetch: fetchFunction,\n\n buildRequestUrl: (baseURL, isStreaming) =>\n `${baseURL}/model/${encodeURIComponent(modelId)}/${\n isStreaming ? 'invoke-with-response-stream' : 'invoke'\n }`,\n\n transformRequestBody: (args, betas) => {\n const { model, stream, tool_choice, tools, ...rest } = args;\n\n const transformedToolChoice =\n tool_choice != null\n ? {\n type: tool_choice.type,\n ...(tool_choice.name != null ? { name: tool_choice.name } : {}),\n }\n : undefined;\n\n const requiredBetas = new Set<string>(betas);\n const transformedTools = tools?.map((tool: Record<string, unknown>) => {\n const toolType = tool.type as string | undefined;\n\n if (toolType && toolType in BEDROCK_TOOL_VERSION_MAP) {\n const newType =\n BEDROCK_TOOL_VERSION_MAP[\n toolType as keyof typeof BEDROCK_TOOL_VERSION_MAP\n ];\n if (newType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[newType]);\n }\n const newName =\n newType in BEDROCK_TOOL_NAME_MAP\n ? BEDROCK_TOOL_NAME_MAP[newType]\n : tool.name;\n return {\n ...tool,\n type: newType,\n name: newName,\n };\n }\n\n if (toolType && toolType in BEDROCK_TOOL_BETA_MAP) {\n requiredBetas.add(BEDROCK_TOOL_BETA_MAP[toolType]);\n }\n\n if (toolType && toolType in BEDROCK_TOOL_NAME_MAP) {\n return {\n ...tool,\n name: BEDROCK_TOOL_NAME_MAP[toolType],\n };\n }\n\n return tool;\n });\n\n return {\n ...rest,\n ...(transformedTools != null ? { tools: transformedTools } : {}),\n ...(transformedToolChoice != null\n ? { tool_choice: transformedToolChoice }\n : {}),\n ...(requiredBetas.size > 0\n ? { anthropic_beta: Array.from(requiredBetas) }\n : {}),\n anthropic_version: 'bedrock-2023-05-31',\n };\n },\n\n // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion\n supportedUrls: () => ({}),\n // native structured output via output_config.format is supported on Bedrock\n // Bedrock rejects `output_config.format` for `claude-opus-4-7`\n supportsNativeStructuredOutput: !modelId.includes('claude-opus-4-7'),\n });\n\n const provider = function (modelId: BedrockAnthropicModelId) {\n if (new.target) {\n throw new Error(\n 'The Bedrock Anthropic model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId);\n };\n\n provider.specificationVersion = 'v3' as const;\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.messages = createChatModel;\n\n provider.embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'embeddingModel' });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n };\n\n provider.tools = anthropicTools;\n\n return provider;\n}\n\n/**\n * Default Bedrock Anthropic provider instance.\n */\nexport const bedrockAnthropic = createBedrockAnthropic();\n","import {\n combineHeaders,\n normalizeHeaders,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { AwsV4Signer } from 'aws4fetch';\nimport { VERSION } from './version';\n\nexport interface BedrockCredentials {\n region: string;\n accessKeyId: string;\n secretAccessKey: string;\n sessionToken?: string;\n}\n\n/**\n * Creates a fetch function that applies AWS Signature Version 4 signing.\n *\n * @param getCredentials - Function that returns the AWS credentials to use when signing.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nexport function createSigV4FetchFunction(\n getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const request = input instanceof Request ? input : undefined;\n const originalHeaders = combineHeaders(\n normalizeHeaders(request?.headers),\n normalizeHeaders(init?.headers),\n );\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n let effectiveBody: BodyInit | undefined = init?.body ?? undefined;\n if (effectiveBody === undefined && request && request.body !== null) {\n try {\n effectiveBody = await request.clone().text();\n } catch {}\n }\n\n const effectiveMethod = init?.method ?? request?.method;\n\n if (effectiveMethod?.toUpperCase() !== 'POST' || !effectiveBody) {\n return effectiveFetch(input, {\n ...init,\n headers: headersWithUserAgent as HeadersInit,\n });\n }\n\n const url =\n typeof input === 'string'\n ? input\n : input instanceof URL\n ? input.href\n : input.url;\n\n const body = prepareBodyString(effectiveBody);\n const credentials = await getCredentials();\n const signer = new AwsV4Signer({\n url,\n method: 'POST',\n headers: Object.entries(headersWithUserAgent),\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service: 'bedrock',\n });\n\n const signingResult = await signer.sign();\n const signedHeaders = normalizeHeaders(signingResult.headers);\n\n // Use the combined headers directly as HeadersInit\n const combinedHeaders = combineHeaders(headersWithUserAgent, signedHeaders);\n\n return effectiveFetch(input, {\n ...init,\n body,\n headers: combinedHeaders as HeadersInit,\n });\n };\n}\n\nfunction prepareBodyString(body: BodyInit | undefined): string {\n if (typeof body === 'string') {\n return body;\n } else if (body instanceof Uint8Array) {\n return new TextDecoder().decode(body);\n } else if (body instanceof ArrayBuffer) {\n return new TextDecoder().decode(new Uint8Array(body));\n } else {\n return JSON.stringify(body);\n }\n}\n\n/**\n * Creates a fetch function that applies Bearer token authentication.\n *\n * @param apiKey - The API key to use for Bearer token authentication.\n * @param fetch - Optional original fetch implementation to wrap. Defaults to global fetch.\n * @returns A FetchFunction that adds Authorization header with Bearer token to requests.\n */\nexport function createApiKeyFetchFunction(\n apiKey: string,\n fetch?: FetchFunction,\n): FetchFunction {\n return async (\n input: RequestInfo | URL,\n init?: RequestInit,\n ): Promise<Response> => {\n // avoid caching globalThis.fetch in case it is patched by other libraries\n const effectiveFetch = fetch ?? globalThis.fetch;\n const originalHeaders = normalizeHeaders(init?.headers);\n const headersWithUserAgent = withUserAgentSuffix(\n originalHeaders,\n `ai-sdk/amazon-bedrock/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n );\n\n const finalHeaders = combineHeaders(headersWithUserAgent, {\n Authorization: `Bearer ${apiKey}`,\n });\n\n return effectiveFetch(input, {\n ...init,\n headers: finalHeaders as HeadersInit,\n });\n };\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import {\n convertBase64ToUint8Array,\n safeParseJSON,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { createBedrockEventStreamDecoder } from '../bedrock-event-stream-decoder';\n\nconst bedrockErrorSchema = z.looseObject({\n message: z.string().optional(),\n});\n\nexport function createBedrockAnthropicFetch(\n baseFetch: FetchFunction,\n): FetchFunction {\n return async (url, options) => {\n const response = await baseFetch(url, options);\n\n // Transform Bedrock error responses into Anthropic error format\n // so that anthropicFailedResponseHandler can extract the message.\n if (!response.ok) {\n const text = await response.text();\n const parsed = await safeParseJSON({ text, schema: bedrockErrorSchema });\n\n const message =\n parsed.success && parsed.value.message ? parsed.value.message : text;\n\n const anthropicError = JSON.stringify({\n type: 'error',\n error: { type: 'error', message },\n });\n\n return new Response(anthropicError, {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n });\n }\n\n const contentType = response.headers.get('content-type');\n if (\n contentType?.includes('application/vnd.amazon.eventstream') &&\n response.body != null\n ) {\n const transformedBody = transformBedrockEventStreamToSSE(response.body);\n\n return new Response(transformedBody, {\n status: response.status,\n statusText: response.statusText,\n headers: new Headers({\n ...Object.fromEntries(response.headers.entries()),\n 'content-type': 'text/event-stream',\n }),\n });\n }\n\n return response;\n };\n}\n\nfunction transformBedrockEventStreamToSSE(\n body: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const textEncoder = new TextEncoder();\n\n return createBedrockEventStreamDecoder(body, async (event, controller) => {\n if (event.messageType === 'event') {\n if (event.eventType === 'chunk') {\n const parsed = await safeParseJSON({ text: event.data });\n if (!parsed.success) {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n return;\n }\n const bytes = (parsed.value as { bytes?: string }).bytes;\n if (bytes) {\n const anthropicEvent = new TextDecoder().decode(\n convertBase64ToUint8Array(bytes),\n );\n controller.enqueue(textEncoder.encode(`data: ${anthropicEvent}\\n\\n`));\n } else {\n controller.enqueue(textEncoder.encode(`data: ${event.data}\\n\\n`));\n }\n } else if (event.eventType === 'messageStop') {\n controller.enqueue(textEncoder.encode('data: [DONE]\\n\\n'));\n }\n } else if (event.messageType === 'exception') {\n controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({ type: 'error', error: event.data })}\\n\\n`,\n ),\n );\n }\n });\n}\n","import { EventStreamCodec } from '@smithy/eventstream-codec';\nimport { toUtf8, fromUtf8 } from '@smithy/util-utf8';\n\nexport interface DecodedEvent {\n messageType: string;\n eventType: string;\n data: string;\n}\n\nexport function createBedrockEventStreamDecoder<T>(\n body: ReadableStream<Uint8Array>,\n processEvent: (\n event: DecodedEvent,\n controller: TransformStreamDefaultController<T>,\n ) => void | Promise<void>,\n): ReadableStream<T> {\n const codec = new EventStreamCodec(toUtf8, fromUtf8);\n let buffer = new Uint8Array(0);\n const textDecoder = new TextDecoder();\n\n return body.pipeThrough(\n new TransformStream<Uint8Array, T>({\n async transform(chunk, controller) {\n const newBuffer = new Uint8Array(buffer.length + chunk.length);\n newBuffer.set(buffer);\n newBuffer.set(chunk, buffer.length);\n buffer = newBuffer;\n\n while (buffer.length >= 4) {\n const totalLength = new DataView(\n buffer.buffer,\n buffer.byteOffset,\n buffer.byteLength,\n ).getUint32(0, false);\n\n if (buffer.length < totalLength) {\n break;\n }\n\n try {\n const subView = buffer.subarray(0, totalLength);\n const decoded = codec.decode(subView);\n\n buffer = buffer.slice(totalLength);\n\n const messageType = decoded.headers[':message-type']\n ?.value as string;\n const eventType = decoded.headers[':event-type']?.value as string;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent({ messageType, eventType, data }, controller);\n } catch {\n break;\n }\n }\n },\n }),\n );\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,uBAAAA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OACK;;;ACjBP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,mBAAmB;;;ACLrB,IAAM,UACX,OACI,YACA;;;ADmBC,SAAS,yBACd,gBACA,OACe;AACf,SAAO,OACL,OACA,SACsB;AA/B1B;AAiCI,UAAM,iBAAiB,wBAAS,WAAW;AAC3C,UAAM,UAAU,iBAAiB,UAAU,QAAQ;AACnD,UAAM,kBAAkB;AAAA,MACtB,iBAAiB,mCAAS,OAAO;AAAA,MACjC,iBAAiB,6BAAM,OAAO;AAAA,IAChC;AACA,UAAM,uBAAuB;AAAA,MAC3B;AAAA,MACA,yBAAyB,OAAO;AAAA,MAChC,+BAA+B;AAAA,IACjC;AAEA,QAAI,iBAAsC,kCAAM,SAAN,YAAc;AACxD,QAAI,kBAAkB,UAAa,WAAW,QAAQ,SAAS,MAAM;AACnE,UAAI;AACF,wBAAgB,MAAM,QAAQ,MAAM,EAAE,KAAK;AAAA,MAC7C,SAAQ;AAAA,MAAC;AAAA,IACX;AAEA,UAAM,mBAAkB,kCAAM,WAAN,YAAgB,mCAAS;AAEjD,SAAI,mDAAiB,mBAAkB,UAAU,CAAC,eAAe;AAC/D,aAAO,eAAe,OAAO;AAAA,QAC3B,GAAG;AAAA,QACH,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,MACJ,OAAO,UAAU,WACb,QACA,iBAAiB,MACf,MAAM,OACN,MAAM;AAEd,UAAM,OAAO,kBAAkB,aAAa;AAC5C,UAAM,cAAc,MAAM,eAAe;AACzC,UAAM,SAAS,IAAI,YAAY;AAAA,MAC7B;AAAA,MACA,QAAQ;AAAA,MACR,SAAS,OAAO,QAAQ,oBAAoB;AAAA,MAC5C;AAAA,MACA,QAAQ,YAAY;AAAA,MACpB,aAAa,YAAY;AAAA,MACzB,iBAAiB,YAAY;AAAA,MAC7B,cAAc,YAAY;AAAA,MAC1B,SAAS;AAAA,IACX,CAAC;AAED,UAAM,gBAAgB,MAAM,OAAO,KAAK;AACxC,UAAM,gBAAgB,iBAAiB,cAAc,OAAO;AAG5D,UAAM,kBAAkB,eAAe,sBAAsB,aAAa;AAE1E,WAAO,eAAe,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH;AAAA,MACA,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,kBAAkB,MAAoC;AAC7D,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT,WAAW,gBAAgB,YAAY;AACrC,WAAO,IAAI,YAAY,EAAE,OAAO,IAAI;AAAA,EACtC,WAAW,gBAAgB,aAAa;AACtC,WAAO,IAAI,YAAY,EAAE,OAAO,IAAI,WAAW,IAAI,CAAC;AAAA,EACtD,OAAO;AACL,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AACF;AASO,SAAS,0BACd,QACA,OACe;AACf,SAAO,OACL,OACA,SACsB;AAEtB,UAAM,iBAAiB,wBAAS,WAAW;AAC3C,UAAM,kBAAkB,iBAAiB,6BAAM,OAAO;AACtD,UAAM,uBAAuB;AAAA,MAC3B;AAAA,MACA,yBAAyB,OAAO;AAAA,MAChC,+BAA+B;AAAA,IACjC;AAEA,UAAM,eAAe,eAAe,sBAAsB;AAAA,MACxD,eAAe,UAAU,MAAM;AAAA,IACjC,CAAC;AAED,WAAO,eAAe,OAAO;AAAA,MAC3B,GAAG;AAAA,MACH,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;;;AE7IA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,SAAS;;;ACLlB,SAAS,wBAAwB;AACjC,SAAS,QAAQ,gBAAgB;AAQ1B,SAAS,gCACd,MACA,cAImB;AACnB,QAAM,QAAQ,IAAI,iBAAiB,QAAQ,QAAQ;AACnD,MAAI,SAAS,IAAI,WAAW,CAAC;AAC7B,QAAM,cAAc,IAAI,YAAY;AAEpC,SAAO,KAAK;AAAA,IACV,IAAI,gBAA+B;AAAA,MACjC,MAAM,UAAU,OAAO,YAAY;AAtBzC;AAuBQ,cAAM,YAAY,IAAI,WAAW,OAAO,SAAS,MAAM,MAAM;AAC7D,kBAAU,IAAI,MAAM;AACpB,kBAAU,IAAI,OAAO,OAAO,MAAM;AAClC,iBAAS;AAET,eAAO,OAAO,UAAU,GAAG;AACzB,gBAAM,cAAc,IAAI;AAAA,YACtB,OAAO;AAAA,YACP,OAAO;AAAA,YACP,OAAO;AAAA,UACT,EAAE,UAAU,GAAG,KAAK;AAEpB,cAAI,OAAO,SAAS,aAAa;AAC/B;AAAA,UACF;AAEA,cAAI;AACF,kBAAM,UAAU,OAAO,SAAS,GAAG,WAAW;AAC9C,kBAAM,UAAU,MAAM,OAAO,OAAO;AAEpC,qBAAS,OAAO,MAAM,WAAW;AAEjC,kBAAM,eAAc,aAAQ,QAAQ,eAAe,MAA/B,mBAChB;AACJ,kBAAM,aAAY,aAAQ,QAAQ,aAAa,MAA7B,mBAAgC;AAClD,kBAAM,OAAO,YAAY,OAAO,QAAQ,IAAI;AAE5C,kBAAM,aAAa,EAAE,aAAa,WAAW,KAAK,GAAG,UAAU;AAAA,UACjE,SAAQ;AACN;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;ADlDA,IAAM,qBAAqB,EAAE,YAAY;AAAA,EACvC,SAAS,EAAE,OAAO,EAAE,SAAS;AAC/B,CAAC;AAEM,SAAS,4BACd,WACe;AACf,SAAO,OAAO,KAAK,YAAY;AAC7B,UAAM,WAAW,MAAM,UAAU,KAAK,OAAO;AAI7C,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,YAAM,SAAS,MAAM,cAAc,EAAE,MAAM,QAAQ,mBAAmB,CAAC;AAEvE,YAAM,UACJ,OAAO,WAAW,OAAO,MAAM,UAAU,OAAO,MAAM,UAAU;AAElE,YAAM,iBAAiB,KAAK,UAAU;AAAA,QACpC,MAAM;AAAA,QACN,OAAO,EAAE,MAAM,SAAS,QAAQ;AAAA,MAClC,CAAC;AAED,aAAO,IAAI,SAAS,gBAAgB;AAAA,QAClC,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,SAAS,SAAS;AAAA,MACpB,CAAC;AAAA,IACH;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,SACE,2CAAa,SAAS,0CACtB,SAAS,QAAQ,MACjB;AACA,YAAM,kBAAkB,iCAAiC,SAAS,IAAI;AAEtE,aAAO,IAAI,SAAS,iBAAiB;AAAA,QACnC,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,SAAS,IAAI,QAAQ;AAAA,UACnB,GAAG,OAAO,YAAY,SAAS,QAAQ,QAAQ,CAAC;AAAA,UAChD,gBAAgB;AAAA,QAClB,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iCACP,MAC4B;AAC5B,QAAM,cAAc,IAAI,YAAY;AAEpC,SAAO,gCAAgC,MAAM,OAAO,OAAO,eAAe;AACxE,QAAI,MAAM,gBAAgB,SAAS;AACjC,UAAI,MAAM,cAAc,SAAS;AAC/B,cAAM,SAAS,MAAM,cAAc,EAAE,MAAM,MAAM,KAAK,CAAC;AACvD,YAAI,CAAC,OAAO,SAAS;AACnB,qBAAW,QAAQ,YAAY,OAAO,SAAS,MAAM,IAAI;AAAA;AAAA,CAAM,CAAC;AAChE;AAAA,QACF;AACA,cAAM,QAAS,OAAO,MAA6B;AACnD,YAAI,OAAO;AACT,gBAAM,iBAAiB,IAAI,YAAY,EAAE;AAAA,YACvC,0BAA0B,KAAK;AAAA,UACjC;AACA,qBAAW,QAAQ,YAAY,OAAO,SAAS,cAAc;AAAA;AAAA,CAAM,CAAC;AAAA,QACtE,OAAO;AACL,qBAAW,QAAQ,YAAY,OAAO,SAAS,MAAM,IAAI;AAAA;AAAA,CAAM,CAAC;AAAA,QAClE;AAAA,MACF,WAAW,MAAM,cAAc,eAAe;AAC5C,mBAAW,QAAQ,YAAY,OAAO,kBAAkB,CAAC;AAAA,MAC3D;AAAA,IACF,WAAW,MAAM,gBAAgB,aAAa;AAC5C,iBAAW;AAAA,QACT,YAAY;AAAA,UACV,SAAS,KAAK,UAAU,EAAE,MAAM,SAAS,OAAO,MAAM,KAAK,CAAC,CAAC;AAAA;AAAA;AAAA,QAC/D;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;;;AHjEA,IAAM,2BAA2B;AAAA,EAC/B,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,mBAAmB;AACrB;AAGA,IAAM,wBAAgD;AAAA,EACpD,sBAAsB;AACxB;AAGA,IAAM,wBAAgD;AAAA,EACpD,eAAe;AAAA,EACf,eAAe;AAAA,EACf,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,sBAAsB;AAAA,EACtB,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,iCAAiC;AAAA;AAAA;AAAA,EAGjC,gCAAgC;AAClC;AAsFO,SAAS,uBACd,UAA4C,CAAC,GACnB;AAE1B,QAAM,YAAY,oBAAoB;AAAA,IACpC,cAAc,QAAQ;AAAA,IACtB,yBAAyB;AAAA,EAC3B,CAAC;AAGD,QAAM,SACJ,aAAa,UAAU,KAAK,EAAE,SAAS,IAAI,UAAU,KAAK,IAAI;AAGhE,QAAM,oBAAoB,SACtB,0BAA0B,QAAQ,QAAQ,KAAK,IAC/C,yBAAyB,YAAY;AACnC,UAAM,SAAS,YAAY;AAAA,MACzB,cAAc,QAAQ;AAAA,MACtB,aAAa;AAAA,MACb,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC;AAGD,QAAI,QAAQ,oBAAoB;AAC9B,UAAI;AACF,eAAO;AAAA,UACL,GAAI,MAAM,QAAQ,mBAAmB;AAAA,UACrC;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd,cAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,cAAM,IAAI;AAAA,UACR,mCAAmC,YAAY;AAAA,QAGjD;AAAA,MACF;AAAA,IACF;AAEA,QAAI;AACF,aAAO;AAAA,QACL;AAAA,QACA,aAAa,YAAY;AAAA,UACvB,cAAc,QAAQ;AAAA,UACtB,aAAa;AAAA,UACb,yBAAyB;AAAA,UACzB,aAAa;AAAA,QACf,CAAC;AAAA,QACD,iBAAiB,YAAY;AAAA,UAC3B,cAAc,QAAQ;AAAA,UACtB,aAAa;AAAA,UACb,yBAAyB;AAAA,UACzB,aAAa;AAAA,QACf,CAAC;AAAA,QACD,cAAc,oBAAoB;AAAA,UAChC,cAAc,QAAQ;AAAA,UACtB,yBAAyB;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACvD,UACE,aAAa,SAAS,mBAAmB,KACzC,aAAa,SAAS,aAAa,GACnC;AACA,cAAM,IAAI;AAAA,UACR;AAAA;AAAA;AAAA;AAAA;AAAA,kBAKqB,YAAY;AAAA,QACnC;AAAA,MACF;AACA,UACE,aAAa,SAAS,uBAAuB,KAC7C,aAAa,SAAS,iBAAiB,GACvC;AACA,cAAM,IAAI;AAAA,UACR;AAAA,kBAEqB,YAAY;AAAA,QACnC;AAAA,MACF;AACA,YAAM;AAAA,IACR;AAAA,EACF,GAAG,QAAQ,KAAK;AAGpB,QAAM,gBAAgB,4BAA4B,iBAAiB;AAEnE,QAAM,aAAa,MAAW;AA1OhC;AA2OI;AAAA,OACE,aAAQ,YAAR,YACE,2BAA2B,YAAY;AAAA,QACrC,cAAc,QAAQ;AAAA,QACtB,aAAa;AAAA,QACb,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC,CAAC;AAAA,IACN,MARA,YAQK;AAAA;AAEP,QAAM,aAAa,YAAY;AArPjC;AAsPI,UAAM,eAAe,WAAM,QAAQ,QAAQ,OAAO,MAA7B,YAAmC,CAAC;AACzD,WAAOC,qBAAoB,aAAa,yBAAyB,OAAO,EAAE;AAAA,EAC5E;AAEA,QAAM,kBAAkB,CAAC,YACvB,IAAI,+BAA+B,SAAS;AAAA,IAC1C,UAAU;AAAA,IACV,SAAS,WAAW;AAAA,IACpB,SAAS;AAAA,IACT,OAAO;AAAA,IAEP,iBAAiB,CAAC,SAAS,gBACzB,GAAG,OAAO,UAAU,mBAAmB,OAAO,CAAC,IAC7C,cAAc,gCAAgC,QAChD;AAAA,IAEF,sBAAsB,CAAC,MAAM,UAAU;AACrC,YAAM,EAAE,OAAO,QAAQ,aAAa,OAAO,GAAG,KAAK,IAAI;AAEvD,YAAM,wBACJ,eAAe,OACX;AAAA,QACE,MAAM,YAAY;AAAA,QAClB,GAAI,YAAY,QAAQ,OAAO,EAAE,MAAM,YAAY,KAAK,IAAI,CAAC;AAAA,MAC/D,IACA;AAEN,YAAM,gBAAgB,IAAI,IAAY,KAAK;AAC3C,YAAM,mBAAmB,+BAAO,IAAI,CAAC,SAAkC;AACrE,cAAM,WAAW,KAAK;AAEtB,YAAI,YAAY,YAAY,0BAA0B;AACpD,gBAAM,UACJ,yBACE,QACF;AACF,cAAI,WAAW,uBAAuB;AACpC,0BAAc,IAAI,sBAAsB,OAAO,CAAC;AAAA,UAClD;AACA,gBAAM,UACJ,WAAW,wBACP,sBAAsB,OAAO,IAC7B,KAAK;AACX,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,MAAM;AAAA,YACN,MAAM;AAAA,UACR;AAAA,QACF;AAEA,YAAI,YAAY,YAAY,uBAAuB;AACjD,wBAAc,IAAI,sBAAsB,QAAQ,CAAC;AAAA,QACnD;AAEA,YAAI,YAAY,YAAY,uBAAuB;AACjD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,MAAM,sBAAsB,QAAQ;AAAA,UACtC;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAI,oBAAoB,OAAO,EAAE,OAAO,iBAAiB,IAAI,CAAC;AAAA,QAC9D,GAAI,yBAAyB,OACzB,EAAE,aAAa,sBAAsB,IACrC,CAAC;AAAA,QACL,GAAI,cAAc,OAAO,IACrB,EAAE,gBAAgB,MAAM,KAAK,aAAa,EAAE,IAC5C,CAAC;AAAA,QACL,mBAAmB;AAAA,MACrB;AAAA,IACF;AAAA;AAAA,IAGA,eAAe,OAAO,CAAC;AAAA;AAAA;AAAA,IAGvB,gCAAgC,CAAC,QAAQ,SAAS,iBAAiB;AAAA,EACrE,CAAC;AAEH,QAAM,WAAW,SAAU,SAAkC;AAC3D,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,OAAO;AAAA,EAChC;AAEA,WAAS,uBAAuB;AAChC,WAAS,gBAAgB;AACzB,WAAS,OAAO;AAChB,WAAS,WAAW;AAEpB,WAAS,iBAAiB,CAAC,YAAoB;AAC7C,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,iBAAiB,CAAC;AAAA,EACrE;AACA,WAAS,qBAAqB,SAAS;AACvC,WAAS,aAAa,CAAC,YAAoB;AACzC,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,aAAa,CAAC;AAAA,EACjE;AAEA,WAAS,QAAQ;AAEjB,SAAO;AACT;AAKO,IAAM,mBAAmB,uBAAuB;","names":["withUserAgentSuffix","withUserAgentSuffix"]}
package/dist/index.js CHANGED
@@ -1981,7 +1981,7 @@ var import_provider_utils7 = require("@ai-sdk/provider-utils");
1981
1981
  var import_aws4fetch = require("aws4fetch");
1982
1982
 
1983
1983
  // src/version.ts
1984
- var VERSION = true ? "4.0.106" : "0.0.0-test";
1984
+ var VERSION = true ? "4.0.107" : "0.0.0-test";
1985
1985
 
1986
1986
  // src/bedrock-sigv4-fetch.ts
1987
1987
  function createSigV4FetchFunction(getCredentials, fetch) {
package/dist/index.mjs CHANGED
@@ -2002,7 +2002,7 @@ import {
2002
2002
  import { AwsV4Signer } from "aws4fetch";
2003
2003
 
2004
2004
  // src/version.ts
2005
- var VERSION = true ? "4.0.106" : "0.0.0-test";
2005
+ var VERSION = true ? "4.0.107" : "0.0.0-test";
2006
2006
 
2007
2007
  // src/bedrock-sigv4-fetch.ts
2008
2008
  function createSigV4FetchFunction(getCredentials, fetch) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/amazon-bedrock",
3
- "version": "4.0.106",
3
+ "version": "4.0.107",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -324,7 +324,8 @@ export function createBedrockAnthropic(
324
324
  // Bedrock Anthropic doesn't support URL sources, force download and base64 conversion
325
325
  supportedUrls: () => ({}),
326
326
  // native structured output via output_config.format is supported on Bedrock
327
- supportsNativeStructuredOutput: true,
327
+ // Bedrock rejects `output_config.format` for `claude-opus-4-7`
328
+ supportsNativeStructuredOutput: !modelId.includes('claude-opus-4-7'),
328
329
  });
329
330
 
330
331
  const provider = function (modelId: BedrockAnthropicModelId) {