@ai-sdk/amazon-bedrock 5.0.127 → 5.0.129

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,42 @@
1
1
  # @ai-sdk/amazon-bedrock
2
2
 
3
+ ## 5.0.129
4
+
5
+ ### Patch Changes
6
+
7
+ - 7716e18: Support promises and synchronous or asynchronous callbacks in provider API key and token settings. Resolve credentials per authenticated request while preserving existing authentication behavior and synchronous credential serialization.
8
+
9
+ The experimental OpenAI Live `getServerWebSocketConfig()` method can now resolve asynchronously. Await its result before using the connection settings.
10
+
11
+ - Updated dependencies [7716e18]
12
+ - Updated dependencies [5c247e9]
13
+ - Updated dependencies [dcd2f8d]
14
+ - @ai-sdk/openai@4.0.106
15
+ - @ai-sdk/provider-utils@5.0.72
16
+ - @ai-sdk/provider@4.0.35
17
+ - @ai-sdk/anthropic@4.0.93
18
+
19
+ ## 5.0.128
20
+
21
+ ### Patch Changes
22
+
23
+ - 61a315e: fix: map the top-level `reasoning` option consistently across providers
24
+
25
+ Providers now resolve reasoning the same way:
26
+
27
+ 1. A provider-specific reasoning setting in `providerOptions` is sent unchanged. OpenAI no longer drops `providerOptions.openai.reasoningEffort` values that are not in its list for the model, and Fireworks no longer rewrites `providerOptions.fireworks.reasoningEffort`. Fireworks also sends top-level `reasoning` values directly instead of rounding them to `'high'` at most, except for model families known to reject `'none'` (GPT-OSS, GLM-5.3, Muse Spark) or `'minimal'` (Nemotron, Inkling).
28
+ 2. Otherwise, `reasoning` maps to the closest level the model supports, rounding down, and rounds up only when there is no lower level. For example, `'xhigh'` now maps to `'high'` instead of `'max'` on Anthropic and Bedrock models without `xhigh` effort, and `'medium'` maps to `'low'` instead of `'high'` on DeepSeek, Kimi K3, and Mistral GLM-5.3 models.
29
+ 3. `'none'` on a model that cannot disable reasoning maps to the model's lowest level with a compatibility warning, instead of being dropped or sending a request the API rejects. This affects GPT-6 models without `'none'`, xAI grok-4.5 and later, Groq GPT-OSS, Kimi K3, Perplexity, QuiverAI, Bedrock OpenAI `gpt-oss` models, and Gemini 2.5 Pro (minimum thinking budget). Gemini 3 and Anthropic and Bedrock `between_tools` mappings now emit the compatibility warning too.
30
+
31
+ `mapReasoningToProviderEffort` now accepts any `reasoning` value, returns an optional `providerOptionsEffort` unchanged, and rounds levels that are missing from the effort map to the closest supported level. `mapReasoningToProviderBudget` maps `'none'` to the minimum reasoning budget, always returns a budget, and uses the default percentage for levels missing from `budgetPercentages`. `OpenAICompatibleChatConfig` adds an optional `mapReasoning` function for mapping the top-level `reasoning` option.
32
+
33
+ - Updated dependencies [47b1d8b]
34
+ - Updated dependencies [d07b475]
35
+ - Updated dependencies [61a315e]
36
+ - @ai-sdk/openai@4.0.105
37
+ - @ai-sdk/provider-utils@5.0.71
38
+ - @ai-sdk/anthropic@4.0.92
39
+
3
40
  ## 5.0.127
4
41
 
5
42
  ### Patch Changes
@@ -39,10 +39,11 @@ interface AmazonBedrockAnthropicProviderSettings {
39
39
  region?: string;
40
40
  /**
41
41
  * API key for authenticating requests using Bearer token authentication.
42
+ * A callback is resolved before each request and must return a non-empty key.
42
43
  * When provided, this will be used instead of AWS SigV4 authentication.
43
44
  * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.
44
45
  */
45
- apiKey?: string;
46
+ apiKey?: Resolvable<string>;
46
47
  /**
47
48
  * The AWS access key ID to use for the Bedrock provider. Defaults to the value of the
48
49
  * `AWS_ACCESS_KEY_ID` environment variable.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/amazon-bedrock-sigv4-fetch.ts","../../src/anthropic/amazon-bedrock-anthropic-options.ts","../../src/anthropic/amazon-bedrock-anthropic-provider.ts"],"mappings":";;;;UAUiB;EACf;EACA;EACA;EACA;;;;KCdU;;;UC2DK,uCAAuC;;;;GAIrD,SAAS,gCAAgC;;;;EAK1C,cAAc,SAAS,gCAAgC;;;;EAKvD,cAAc;;;;EAKd,mBAAmB;;UAGJ;;;;;EAKf;;;;;;EAOA;;;;;EAMA;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;EAKA,UAAU,WAAW;;;;;EAMrB,QAAQ;;;;;;;EAQR,2BAA2B,YACzB,KAAK;;;;;;;wBASO,6BACd,UAAS,yCACR;;;;qBAiQU,wBAAsB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/amazon-bedrock-sigv4-fetch.ts","../../src/anthropic/amazon-bedrock-anthropic-options.ts","../../src/anthropic/amazon-bedrock-anthropic-provider.ts"],"mappings":";;;;UAaiB;EACf;EACA;EACA;EACA;;;;KCjBU;;;UC2DK,uCAAuC;;;;GAIrD,SAAS,gCAAgC;;;;EAK1C,cAAc,SAAS,gCAAgC;;;;EAKvD,cAAc;;;;EAKd,mBAAmB;;UAGJ;;;;;EAKf;;;;;;;EAQA,SAAS;;;;;EAMT;;;;;EAMA;;;;;EAMA;;;;EAKA;;;;EAKA,UAAU,WAAW;;;;;EAMrB,QAAQ;;;;;;;EAQR,2BAA2B,YACzB,KAAK;;;;;;;wBASO,6BACd,UAAS,yCACR;;;;qBAoQU,wBAAsB"}
@@ -1,4 +1,4 @@
1
- import { InvalidArgumentError, NoSuchModelError } from "@ai-sdk/provider";
1
+ import { InvalidArgumentError, LoadAPIKeyError, NoSuchModelError } from "@ai-sdk/provider";
2
2
  import { combineHeaders, convertBase64ToUint8Array, getRuntimeEnvironmentUserAgent, isValidHostnamePart, lazySchema, loadOptionalSetting, loadSetting, normalizeHeaders, resolve, safeParseJSON, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
3
3
  import { AnthropicLanguageModel, anthropicTools } from "@ai-sdk/anthropic/internal";
4
4
  import { AwsV4Signer } from "aws4fetch";
@@ -6,7 +6,7 @@ import { z } from "zod/v4";
6
6
  import { EventStreamCodec } from "@smithy/eventstream-codec";
7
7
  import { fromUtf8, toUtf8 } from "@smithy/util-utf8";
8
8
  //#region src/version.ts
9
- const VERSION = "5.0.127";
9
+ const VERSION = "5.0.129";
10
10
  //#endregion
11
11
  //#region src/amazon-bedrock-sigv4-fetch.ts
12
12
  /**
@@ -75,7 +75,9 @@ function createApiKeyFetchFunction(apiKey, fetch) {
75
75
  const effectiveFetch = fetch ?? globalThis.fetch;
76
76
  const originalHeaders = normalizeHeaders(init?.headers);
77
77
  const headersWithUserAgent = withUserAgentSuffix(originalHeaders, `ai-sdk-amazon-bedrock/${VERSION}`, getRuntimeEnvironmentUserAgent());
78
- const finalHeaders = combineHeaders(headersWithUserAgent, { Authorization: `Bearer ${apiKey}` });
78
+ const resolvedApiKey = await resolve(apiKey);
79
+ if (typeof apiKey !== "string" && (typeof resolvedApiKey !== "string" || !resolvedApiKey.trim())) throw new LoadAPIKeyError({ message: "Amazon Bedrock API key must be a non-empty string." });
80
+ const finalHeaders = combineHeaders(headersWithUserAgent, { Authorization: `Bearer ${typeof apiKey === "string" ? resolvedApiKey : resolvedApiKey.trim()}` });
79
81
  return effectiveFetch(input, {
80
82
  ...init,
81
83
  headers: finalHeaders
@@ -308,11 +310,11 @@ const BEDROCK_TOOL_BETA_MAP = {
308
310
  * bypassing the Converse API for better feature compatibility.
309
311
  */
310
312
  function createAmazonBedrockAnthropic(options = {}) {
311
- const rawApiKey = loadOptionalSetting({
313
+ const rawApiKey = typeof options.apiKey === "string" || options.apiKey == null ? loadOptionalSetting({
312
314
  settingValue: options.apiKey,
313
315
  environmentVariableName: "AWS_BEARER_TOKEN_BEDROCK"
314
- });
315
- const apiKey = rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : void 0;
316
+ }) : options.apiKey;
317
+ const apiKey = typeof rawApiKey === "string" ? rawApiKey.trim() || void 0 : rawApiKey;
316
318
  const fetchFunction = createAmazonBedrockAnthropicFetch(apiKey ? createApiKeyFetchFunction(apiKey, options.fetch) : createSigV4FetchFunction(async () => {
317
319
  const region = loadSetting({
318
320
  settingValue: options.region,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/version.ts","../../src/amazon-bedrock-sigv4-fetch.ts","../../src/amazon-bedrock-anthropic-model-support.ts","../../src/resolve-amazon-bedrock-base-url.ts","../../src/amazon-bedrock-event-stream-decoder.ts","../../src/amazon-bedrock-stream-error.ts","../../src/anthropic/amazon-bedrock-anthropic-fetch.ts","../../src/anthropic/amazon-bedrock-anthropic-provider.ts"],"sourcesContent":["// 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 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 AmazonBedrockCredentials {\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 * @param service - The AWS service name to use for SigV4 signing scope. Defaults to 'bedrock'.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nexport function createSigV4FetchFunction(\n getCredentials: () =>\n | AmazonBedrockCredentials\n | PromiseLike<AmazonBedrockCredentials>,\n fetch?: FetchFunction,\n service: string = 'bedrock',\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).filter(([, value]) =>\n isAscii(value),\n ),\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service,\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\nfunction isAscii(value: string): boolean {\n return !/[\\u0080-\\uffff]/.test(value);\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","import type { AmazonBedrockChatModelSettings } from './amazon-bedrock-chat-language-model-options';\n\nexport function isAnthropicModel({\n modelId,\n modelFamily,\n reasoningBudgetTokens,\n}: {\n modelId: string;\n modelFamily?: AmazonBedrockChatModelSettings['modelFamily'];\n reasoningBudgetTokens?: number;\n}): boolean {\n return (\n modelFamily === 'anthropic' ||\n modelId.includes('anthropic') ||\n (modelId.includes(':application-inference-profile/') &&\n reasoningBudgetTokens != null)\n );\n}\n\n// Bedrock validates its own Messages schema. New Claude generations currently\n// reject native structured output and strict tools, so only known supported\n// Claude models receive those fields. Non-Claude models and opaque inference\n// profile IDs retain their existing behavior.\nexport function supportsStrictTools(modelId: string): boolean {\n return (\n !modelId.includes('claude-') ||\n LEGACY_CLAUDE_PATTERN.test(modelId) ||\n MODELS_WITH_STRICT_TOOL_SUPPORT.some(pattern => pattern.test(modelId))\n );\n}\n\nexport function supportsNativeStructuredOutput(modelId: string): boolean {\n return (\n supportsStrictTools(modelId) &&\n !/claude-(?:sonnet-4-6|haiku-4-5)(?=[-.:]|$)/.test(modelId)\n );\n}\n\nconst LEGACY_CLAUDE_PATTERN = /claude-(?:instant|v?2|3)(?=[-.:]|$)/;\n\nconst MODELS_WITH_STRICT_TOOL_SUPPORT = [\n // Original Claude 4 IDs include a release date instead of a minor version.\n /claude-(?:opus|sonnet)-4(?:-\\d{8})?(?:-v\\d+)?(?=[:.]|$)/,\n /claude-opus-4-(?:1|5|6)(?=[-.:]|$)/,\n /claude-sonnet-4-(?:5|6)(?=[-.:]|$)/,\n /claude-haiku-4-5(?=[-.:]|$)/,\n];\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport {\n isValidHostnamePart,\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\n\nconst AWS_PARTITION_DNS_SUFFIXES = [\n { regionPrefix: 'cn-', dnsSuffix: 'amazonaws.com.cn' },\n { regionPrefix: 'us-iso-', dnsSuffix: 'c2s.ic.gov' },\n { regionPrefix: 'us-isob-', dnsSuffix: 'sc2s.sgov.gov' },\n { regionPrefix: 'eu-isoe-', dnsSuffix: 'cloud.adc-e.uk' },\n { regionPrefix: 'us-isof-', dnsSuffix: 'csp.hci.ic.gov' },\n { regionPrefix: 'eusc-', dnsSuffix: 'amazonaws.eu' },\n] as const;\n\nexport function resolveAmazonBedrockBaseURL({\n baseURL,\n getRegion,\n service,\n serviceEndpointUrlEnvironmentVariableName,\n}: {\n baseURL: string | undefined;\n getRegion: () => string;\n service: 'bedrock-runtime' | 'bedrock-agent-runtime';\n serviceEndpointUrlEnvironmentVariableName:\n | 'AWS_ENDPOINT_URL_BEDROCK_RUNTIME'\n | 'AWS_ENDPOINT_URL_BEDROCK_AGENT_RUNTIME';\n}): string {\n const resolvedBaseURL =\n baseURL ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: serviceEndpointUrlEnvironmentVariableName,\n }) ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ENDPOINT_URL',\n });\n\n if (resolvedBaseURL != null) {\n return withoutTrailingSlash(resolvedBaseURL) ?? resolvedBaseURL;\n }\n\n const region = getRegion();\n if (!isValidHostnamePart(region)) {\n throw new InvalidArgumentError({\n argument: 'region',\n message:\n 'Invalid AWS region. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',\n });\n }\n const dnsSuffix =\n AWS_PARTITION_DNS_SUFFIXES.find(({ regionPrefix }) =>\n region.startsWith(regionPrefix),\n )?.dnsSuffix ?? 'amazonaws.com';\n const generatedBaseURL = `https://${service}.${region}.${dnsSuffix}`;\n\n return withoutTrailingSlash(generatedBaseURL) ?? generatedBaseURL;\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 exceptionType?: string;\n data: string;\n}\n\nexport function createAmazonBedrockEventStreamDecoder<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 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']?.value as string;\n const eventType = decoded.headers[':event-type']?.value as\n | string\n | undefined;\n const exceptionType = decoded.headers[':exception-type']?.value as\n | string\n | undefined;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent(\n { messageType, eventType, exceptionType, data },\n controller,\n );\n }\n },\n flush() {\n if (buffer.length > 0) {\n throw new Error(\n `Incomplete Amazon Bedrock event-stream frame: ${buffer.length} buffered bytes remain at end of stream.`,\n );\n }\n },\n }),\n );\n}\n","export type AmazonBedrockStreamErrorType =\n | 'internalServerException'\n | 'modelStreamErrorException'\n | 'serviceUnavailableException'\n | 'throttlingException'\n | 'validationException';\n\nexport function getAmazonBedrockStreamErrorMetadata(type: string): {\n statusCode?: number;\n isRetryable?: boolean;\n} {\n switch (type) {\n case 'internalServerException':\n case 'InternalServerException':\n return { statusCode: 500, isRetryable: true };\n case 'modelStreamErrorException':\n case 'ModelStreamErrorException':\n return { statusCode: 424, isRetryable: true };\n case 'serviceUnavailableException':\n case 'ServiceUnavailableException':\n return { statusCode: 503, isRetryable: true };\n case 'throttlingException':\n case 'ThrottlingException':\n return { statusCode: 429, isRetryable: true };\n case 'validationException':\n case 'ValidationException':\n return { statusCode: 400, isRetryable: false };\n default:\n return {};\n }\n}\n","import {\n lazySchema,\n zodSchema,\n convertBase64ToUint8Array,\n safeParseJSON,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { createAmazonBedrockEventStreamDecoder } from '../amazon-bedrock-event-stream-decoder';\nimport { getAmazonBedrockStreamErrorMetadata } from '../amazon-bedrock-stream-error';\n\nconst amazonBedrockErrorSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n message: z.string().optional(),\n }),\n ),\n);\n\nexport function createAmazonBedrockAnthropicFetch(\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({\n text,\n schema: amazonBedrockErrorSchema,\n });\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 = transformAmazonBedrockEventStreamToSSE(\n response.body,\n );\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 transformAmazonBedrockEventStreamToSSE(\n body: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const textEncoder = new TextEncoder();\n\n return createAmazonBedrockEventStreamDecoder(\n body,\n 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(\n textEncoder.encode(`data: ${anthropicEvent}\\n\\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 const parsed = await safeParseJSON({ text: event.data });\n const data = parsed.success ? parsed.value : event.data;\n const message =\n typeof data === 'object' &&\n data != null &&\n typeof (data as Record<string, unknown>).message === 'string'\n ? (data as Record<string, unknown>).message\n : event.data;\n const type = event.eventType ?? event.exceptionType ?? 'error';\n const metadata = getAmazonBedrockStreamErrorMetadata(type);\n\n controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({\n type: 'error',\n error: {\n type,\n message,\n ...metadata,\n data,\n },\n })}\\n\\n`,\n ),\n );\n }\n },\n );\n}\n","import {\n NoSuchModelError,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n loadSetting,\n resolve,\n withUserAgentSuffix,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n anthropicTools,\n AnthropicLanguageModel,\n} from '@ai-sdk/anthropic/internal';\nimport {\n createApiKeyFetchFunction,\n createSigV4FetchFunction,\n type AmazonBedrockCredentials,\n} from '../amazon-bedrock-sigv4-fetch';\nimport {\n supportsNativeStructuredOutput,\n supportsStrictTools,\n} from '../amazon-bedrock-anthropic-model-support';\nimport { resolveAmazonBedrockBaseURL } from '../resolve-amazon-bedrock-base-url';\nimport { createAmazonBedrockAnthropicFetch } from './amazon-bedrock-anthropic-fetch';\nimport type { AmazonBedrockAnthropicModelId } from './amazon-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 AmazonBedrockAnthropicProvider extends ProviderV4 {\n /**\n * Creates a model for text generation.\n */\n (modelId: AmazonBedrockAnthropicModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AmazonBedrockAnthropicModelId): LanguageModelV4;\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 AmazonBedrockAnthropicProviderSettings {\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<\n Omit<AmazonBedrockCredentials, 'region'>\n >;\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 createAmazonBedrockAnthropic(\n options: AmazonBedrockAnthropicProviderSettings = {},\n): AmazonBedrockAnthropicProvider {\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 = createAmazonBedrockAnthropicFetch(baseFetchFunction);\n\n const getBaseURL = (): string =>\n resolveAmazonBedrockBaseURL({\n baseURL: options.baseURL,\n getRegion: () =>\n loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n }),\n service: 'bedrock-runtime',\n serviceEndpointUrlEnvironmentVariableName:\n 'AWS_ENDPOINT_URL_BEDROCK_RUNTIME',\n });\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: AmazonBedrockAnthropicModelId) =>\n new AnthropicLanguageModel(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 {\n model: _model,\n stream: _stream,\n tool_choice,\n thinking,\n tools,\n ...rest\n } = 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 // Bedrock names the thinking block binding field `mismatch_behavior`, while the\n // Anthropic Messages API names it `prefix_mismatch_behavior`\n // Some AWS regions (us-east-1) will automatically alias the field to `mismatch_behavior`,\n // but others (eu-central-1) fail.\n const transformedThinking =\n thinking?.block_binding != null\n ? {\n ...thinking,\n block_binding: {\n mismatch_behavior:\n thinking.block_binding.prefix_mismatch_behavior,\n },\n }\n : thinking;\n\n const requiredBetas = new Set<string>(betas);\n const transformedTools = tools?.map(\n (rawTool: Record<string, unknown>) => {\n // Bedrock rejects the per-tool eager_input_streaming field even when\n // the fine-grained-tool-streaming beta is declared, but the beta alone\n // enables the same behavior, so translate the field into the beta\n const { eager_input_streaming: eagerInputStreaming, ...tool } =\n rawTool;\n if (eagerInputStreaming === true) {\n requiredBetas.add('fine-grained-tool-streaming-2025-05-14');\n }\n\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\n return {\n ...rest,\n ...(thinking != null ? { thinking: transformedThinking } : {}),\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 supportsNativeStructuredOutput: supportsNativeStructuredOutput(modelId),\n supportsStrictTools: supportsStrictTools(modelId),\n });\n\n const provider = function (modelId: AmazonBedrockAnthropicModelId) {\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 = 'v4' 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 amazonBedrockAnthropic = createAmazonBedrockAnthropic();\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/version.ts","../../src/amazon-bedrock-sigv4-fetch.ts","../../src/amazon-bedrock-anthropic-model-support.ts","../../src/resolve-amazon-bedrock-base-url.ts","../../src/amazon-bedrock-event-stream-decoder.ts","../../src/amazon-bedrock-stream-error.ts","../../src/anthropic/amazon-bedrock-anthropic-fetch.ts","../../src/anthropic/amazon-bedrock-anthropic-provider.ts"],"sourcesContent":["// 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 { LoadAPIKeyError } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n resolve,\n type Resolvable,\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 AmazonBedrockCredentials {\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 * @param service - The AWS service name to use for SigV4 signing scope. Defaults to 'bedrock'.\n * @returns A FetchFunction that signs requests before passing them to the underlying fetch.\n */\nexport function createSigV4FetchFunction(\n getCredentials: () =>\n | AmazonBedrockCredentials\n | PromiseLike<AmazonBedrockCredentials>,\n fetch?: FetchFunction,\n service: string = 'bedrock',\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).filter(([, value]) =>\n isAscii(value),\n ),\n body,\n region: credentials.region,\n accessKeyId: credentials.accessKeyId,\n secretAccessKey: credentials.secretAccessKey,\n sessionToken: credentials.sessionToken,\n service,\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\nfunction isAscii(value: string): boolean {\n return !/[\\u0080-\\uffff]/.test(value);\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: Resolvable<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 resolvedApiKey = await resolve(apiKey);\n if (\n typeof apiKey !== 'string' &&\n (typeof resolvedApiKey !== 'string' || !resolvedApiKey.trim())\n ) {\n throw new LoadAPIKeyError({\n message: 'Amazon Bedrock API key must be a non-empty string.',\n });\n }\n\n const finalHeaders = combineHeaders(headersWithUserAgent, {\n Authorization: `Bearer ${typeof apiKey === 'string' ? resolvedApiKey : resolvedApiKey.trim()}`,\n });\n\n return effectiveFetch(input, {\n ...init,\n headers: finalHeaders as HeadersInit,\n });\n };\n}\n","import type { AmazonBedrockChatModelSettings } from './amazon-bedrock-chat-language-model-options';\n\nexport function isAnthropicModel({\n modelId,\n modelFamily,\n reasoningBudgetTokens,\n}: {\n modelId: string;\n modelFamily?: AmazonBedrockChatModelSettings['modelFamily'];\n reasoningBudgetTokens?: number;\n}): boolean {\n return (\n modelFamily === 'anthropic' ||\n modelId.includes('anthropic') ||\n (modelId.includes(':application-inference-profile/') &&\n reasoningBudgetTokens != null)\n );\n}\n\n// Bedrock validates its own Messages schema. New Claude generations currently\n// reject native structured output and strict tools, so only known supported\n// Claude models receive those fields. Non-Claude models and opaque inference\n// profile IDs retain their existing behavior.\nexport function supportsStrictTools(modelId: string): boolean {\n return (\n !modelId.includes('claude-') ||\n LEGACY_CLAUDE_PATTERN.test(modelId) ||\n MODELS_WITH_STRICT_TOOL_SUPPORT.some(pattern => pattern.test(modelId))\n );\n}\n\nexport function supportsNativeStructuredOutput(modelId: string): boolean {\n return (\n supportsStrictTools(modelId) &&\n !/claude-(?:sonnet-4-6|haiku-4-5)(?=[-.:]|$)/.test(modelId)\n );\n}\n\nconst LEGACY_CLAUDE_PATTERN = /claude-(?:instant|v?2|3)(?=[-.:]|$)/;\n\nconst MODELS_WITH_STRICT_TOOL_SUPPORT = [\n // Original Claude 4 IDs include a release date instead of a minor version.\n /claude-(?:opus|sonnet)-4(?:-\\d{8})?(?:-v\\d+)?(?=[:.]|$)/,\n /claude-opus-4-(?:1|5|6)(?=[-.:]|$)/,\n /claude-sonnet-4-(?:5|6)(?=[-.:]|$)/,\n /claude-haiku-4-5(?=[-.:]|$)/,\n];\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport {\n isValidHostnamePart,\n loadOptionalSetting,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\n\nconst AWS_PARTITION_DNS_SUFFIXES = [\n { regionPrefix: 'cn-', dnsSuffix: 'amazonaws.com.cn' },\n { regionPrefix: 'us-iso-', dnsSuffix: 'c2s.ic.gov' },\n { regionPrefix: 'us-isob-', dnsSuffix: 'sc2s.sgov.gov' },\n { regionPrefix: 'eu-isoe-', dnsSuffix: 'cloud.adc-e.uk' },\n { regionPrefix: 'us-isof-', dnsSuffix: 'csp.hci.ic.gov' },\n { regionPrefix: 'eusc-', dnsSuffix: 'amazonaws.eu' },\n] as const;\n\nexport function resolveAmazonBedrockBaseURL({\n baseURL,\n getRegion,\n service,\n serviceEndpointUrlEnvironmentVariableName,\n}: {\n baseURL: string | undefined;\n getRegion: () => string;\n service: 'bedrock-runtime' | 'bedrock-agent-runtime';\n serviceEndpointUrlEnvironmentVariableName:\n | 'AWS_ENDPOINT_URL_BEDROCK_RUNTIME'\n | 'AWS_ENDPOINT_URL_BEDROCK_AGENT_RUNTIME';\n}): string {\n const resolvedBaseURL =\n baseURL ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: serviceEndpointUrlEnvironmentVariableName,\n }) ??\n loadOptionalSetting({\n settingValue: undefined,\n environmentVariableName: 'AWS_ENDPOINT_URL',\n });\n\n if (resolvedBaseURL != null) {\n return withoutTrailingSlash(resolvedBaseURL) ?? resolvedBaseURL;\n }\n\n const region = getRegion();\n if (!isValidHostnamePart(region)) {\n throw new InvalidArgumentError({\n argument: 'region',\n message:\n 'Invalid AWS region. Expected a single DNS label (letters, digits, and hyphens). Use `baseURL` for custom endpoints.',\n });\n }\n const dnsSuffix =\n AWS_PARTITION_DNS_SUFFIXES.find(({ regionPrefix }) =>\n region.startsWith(regionPrefix),\n )?.dnsSuffix ?? 'amazonaws.com';\n const generatedBaseURL = `https://${service}.${region}.${dnsSuffix}`;\n\n return withoutTrailingSlash(generatedBaseURL) ?? generatedBaseURL;\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 exceptionType?: string;\n data: string;\n}\n\nexport function createAmazonBedrockEventStreamDecoder<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 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']?.value as string;\n const eventType = decoded.headers[':event-type']?.value as\n | string\n | undefined;\n const exceptionType = decoded.headers[':exception-type']?.value as\n | string\n | undefined;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent(\n { messageType, eventType, exceptionType, data },\n controller,\n );\n }\n },\n flush() {\n if (buffer.length > 0) {\n throw new Error(\n `Incomplete Amazon Bedrock event-stream frame: ${buffer.length} buffered bytes remain at end of stream.`,\n );\n }\n },\n }),\n );\n}\n","export type AmazonBedrockStreamErrorType =\n | 'internalServerException'\n | 'modelStreamErrorException'\n | 'serviceUnavailableException'\n | 'throttlingException'\n | 'validationException';\n\nexport function getAmazonBedrockStreamErrorMetadata(type: string): {\n statusCode?: number;\n isRetryable?: boolean;\n} {\n switch (type) {\n case 'internalServerException':\n case 'InternalServerException':\n return { statusCode: 500, isRetryable: true };\n case 'modelStreamErrorException':\n case 'ModelStreamErrorException':\n return { statusCode: 424, isRetryable: true };\n case 'serviceUnavailableException':\n case 'ServiceUnavailableException':\n return { statusCode: 503, isRetryable: true };\n case 'throttlingException':\n case 'ThrottlingException':\n return { statusCode: 429, isRetryable: true };\n case 'validationException':\n case 'ValidationException':\n return { statusCode: 400, isRetryable: false };\n default:\n return {};\n }\n}\n","import {\n lazySchema,\n zodSchema,\n convertBase64ToUint8Array,\n safeParseJSON,\n type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { createAmazonBedrockEventStreamDecoder } from '../amazon-bedrock-event-stream-decoder';\nimport { getAmazonBedrockStreamErrorMetadata } from '../amazon-bedrock-stream-error';\n\nconst amazonBedrockErrorSchema = lazySchema(() =>\n zodSchema(\n z.looseObject({\n message: z.string().optional(),\n }),\n ),\n);\n\nexport function createAmazonBedrockAnthropicFetch(\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({\n text,\n schema: amazonBedrockErrorSchema,\n });\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 = transformAmazonBedrockEventStreamToSSE(\n response.body,\n );\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 transformAmazonBedrockEventStreamToSSE(\n body: ReadableStream<Uint8Array>,\n): ReadableStream<Uint8Array> {\n const textEncoder = new TextEncoder();\n\n return createAmazonBedrockEventStreamDecoder(\n body,\n 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(\n textEncoder.encode(`data: ${anthropicEvent}\\n\\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 const parsed = await safeParseJSON({ text: event.data });\n const data = parsed.success ? parsed.value : event.data;\n const message =\n typeof data === 'object' &&\n data != null &&\n typeof (data as Record<string, unknown>).message === 'string'\n ? (data as Record<string, unknown>).message\n : event.data;\n const type = event.eventType ?? event.exceptionType ?? 'error';\n const metadata = getAmazonBedrockStreamErrorMetadata(type);\n\n controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({\n type: 'error',\n error: {\n type,\n message,\n ...metadata,\n data,\n },\n })}\\n\\n`,\n ),\n );\n }\n },\n );\n}\n","import {\n NoSuchModelError,\n type LanguageModelV4,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport {\n loadOptionalSetting,\n loadSetting,\n resolve,\n withUserAgentSuffix,\n type FetchFunction,\n type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport {\n anthropicTools,\n AnthropicLanguageModel,\n} from '@ai-sdk/anthropic/internal';\nimport {\n createApiKeyFetchFunction,\n createSigV4FetchFunction,\n type AmazonBedrockCredentials,\n} from '../amazon-bedrock-sigv4-fetch';\nimport {\n supportsNativeStructuredOutput,\n supportsStrictTools,\n} from '../amazon-bedrock-anthropic-model-support';\nimport { resolveAmazonBedrockBaseURL } from '../resolve-amazon-bedrock-base-url';\nimport { createAmazonBedrockAnthropicFetch } from './amazon-bedrock-anthropic-fetch';\nimport type { AmazonBedrockAnthropicModelId } from './amazon-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 AmazonBedrockAnthropicProvider extends ProviderV4 {\n /**\n * Creates a model for text generation.\n */\n (modelId: AmazonBedrockAnthropicModelId): LanguageModelV4;\n\n /**\n * Creates a model for text generation.\n */\n languageModel(modelId: AmazonBedrockAnthropicModelId): LanguageModelV4;\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 AmazonBedrockAnthropicProviderSettings {\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 * A callback is resolved before each request and must return a non-empty key.\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?: Resolvable<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<\n Omit<AmazonBedrockCredentials, 'region'>\n >;\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 createAmazonBedrockAnthropic(\n options: AmazonBedrockAnthropicProviderSettings = {},\n): AmazonBedrockAnthropicProvider {\n // Check for API key authentication first\n const rawApiKey =\n typeof options.apiKey === 'string' || options.apiKey == null\n ? loadOptionalSetting({\n settingValue: options.apiKey,\n environmentVariableName: 'AWS_BEARER_TOKEN_BEDROCK',\n })\n : options.apiKey;\n\n // Only use API key if it's a non-empty, non-whitespace string\n const apiKey =\n typeof rawApiKey === 'string' ? rawApiKey.trim() || undefined : rawApiKey;\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 = createAmazonBedrockAnthropicFetch(baseFetchFunction);\n\n const getBaseURL = (): string =>\n resolveAmazonBedrockBaseURL({\n baseURL: options.baseURL,\n getRegion: () =>\n loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n }),\n service: 'bedrock-runtime',\n serviceEndpointUrlEnvironmentVariableName:\n 'AWS_ENDPOINT_URL_BEDROCK_RUNTIME',\n });\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: AmazonBedrockAnthropicModelId) =>\n new AnthropicLanguageModel(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 {\n model: _model,\n stream: _stream,\n tool_choice,\n thinking,\n tools,\n ...rest\n } = 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 // Bedrock names the thinking block binding field `mismatch_behavior`, while the\n // Anthropic Messages API names it `prefix_mismatch_behavior`\n // Some AWS regions (us-east-1) will automatically alias the field to `mismatch_behavior`,\n // but others (eu-central-1) fail.\n const transformedThinking =\n thinking?.block_binding != null\n ? {\n ...thinking,\n block_binding: {\n mismatch_behavior:\n thinking.block_binding.prefix_mismatch_behavior,\n },\n }\n : thinking;\n\n const requiredBetas = new Set<string>(betas);\n const transformedTools = tools?.map(\n (rawTool: Record<string, unknown>) => {\n // Bedrock rejects the per-tool eager_input_streaming field even when\n // the fine-grained-tool-streaming beta is declared, but the beta alone\n // enables the same behavior, so translate the field into the beta\n const { eager_input_streaming: eagerInputStreaming, ...tool } =\n rawTool;\n if (eagerInputStreaming === true) {\n requiredBetas.add('fine-grained-tool-streaming-2025-05-14');\n }\n\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\n return {\n ...rest,\n ...(thinking != null ? { thinking: transformedThinking } : {}),\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 supportsNativeStructuredOutput: supportsNativeStructuredOutput(modelId),\n supportsStrictTools: supportsStrictTools(modelId),\n });\n\n const provider = function (modelId: AmazonBedrockAnthropicModelId) {\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 = 'v4' 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 amazonBedrockAnthropic = createAmazonBedrockAnthropic();\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { anthropicTools } from "@ai-sdk/anthropic/internal";
2
- import { FetchFunction, InferSchema } from "@ai-sdk/provider-utils";
2
+ import { FetchFunction, InferSchema, Resolvable } from "@ai-sdk/provider-utils";
3
3
  import { z } from "zod/v4";
4
4
  import { EmbeddingModelV4, ImageModelV4, LanguageModelV4, ProviderV4, RerankingModelV4 } from "@ai-sdk/provider";
5
5
  import { AnthropicProviderOptions } from "@ai-sdk/anthropic";
@@ -115,6 +115,7 @@ interface AmazonBedrockProviderSettings {
115
115
  region?: string;
116
116
  /**
117
117
  * API key for authenticating requests using Bearer token authentication.
118
+ * A callback is resolved before each request and must return a non-empty key.
118
119
  * When provided, this will be used instead of AWS SigV4 authentication.
119
120
  * Defaults to the value of the `AWS_BEARER_TOKEN_BEDROCK` environment variable.
120
121
  *
@@ -136,7 +137,7 @@ interface AmazonBedrockProviderSettings {
136
137
  * If neither `apiKey` nor `AWS_BEARER_TOKEN_BEDROCK` environment variable is set,
137
138
  * the provider will fall back to AWS SigV4 authentication using AWS credentials.
138
139
  */
139
- apiKey?: string;
140
+ apiKey?: Resolvable<string>;
140
141
  /**
141
142
  * The AWS access key ID to use for the Bedrock provider. Defaults to the value of the
142
143
  * `AWS_ACCESS_KEY_ID` environment variable.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/amazon-bedrock-embedding-model-options.ts","../src/amazon-bedrock-image-model-options.ts","../src/amazon-bedrock-chat-language-model-options.ts","../src/amazon-bedrock-image-settings.ts","../src/amazon-bedrock-sigv4-fetch.ts","../src/reranking/amazon-bedrock-reranking-model-options.ts","../src/amazon-bedrock-provider.ts","../src/version.ts"],"mappings":";;;;;;KAOY;KAOA;;;;;;;EAOV;;cAGW,2EAAwC;;;;;;;;;KAqFzC,qCAAqC,mBACxC;;;cCvGI,uEAAoC;;;;;;;;;;KAkCrC,iCAAiC,mBACpC;;;KClCG;KA6FA;;;;;;;EAOV;;cAiEW,uCAAqC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDhD,EAAA,KAAA;KAEU,wCAAwC,EAAE,aAC7C;;;KCtOG;;;UCUK;EACf;EACA;EACA;EACA;;;;KCVU;KAKA;;;;EAIV;;;;EAKA,+BAA+B;;;;UCmBhB;;;;;EAKf;;;;;;;;;;;;;;;;;;;;;;;;EAyBA;;;;;EAMA;;;;;EAMA;;;;;;;EAQA;;;;EAKA;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;;;;EAQR,2BAA2B,YACzB,KAAK;EAIP;;UAGe,8BAA8B;GAE3C,SAAS,0BACT,WAAW,iCACV;EAEH,cACE,SAAS,0BACT,WAAW,iCACV;;;;EAKH,UACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,eACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,cACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,mBACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,MAAM,SAAS,4BAA4B;;;;EAK3C,WAAW,SAAS,4BAA4B;;;;EAKhD,UAAU,SAAS,gCAAgC;;;;EAKnD,eAAe,SAAS,gCAAgC;;;;EAKxD,cAAc;;;;;wBAMA,oBACd,UAAS,gCACR;;;;qBA+MU,eAAa;;;qBC9Yb"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/amazon-bedrock-embedding-model-options.ts","../src/amazon-bedrock-image-model-options.ts","../src/amazon-bedrock-chat-language-model-options.ts","../src/amazon-bedrock-image-settings.ts","../src/amazon-bedrock-sigv4-fetch.ts","../src/reranking/amazon-bedrock-reranking-model-options.ts","../src/amazon-bedrock-provider.ts","../src/version.ts"],"mappings":";;;;;;KAOY;KAOA;;;;;;;EAOV;;cAGW,2EAAwC;;;;;;;;;KAqFzC,qCAAqC,mBACxC;;;cCvGI,uEAAoC;;;;;;;;;;KAkCrC,iCAAiC,mBACpC;;;KClCG;KA6FA;;;;;;;EAOV;;cAiEW,uCAAqC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDhD,EAAA,KAAA;KAEU,wCAAwC,EAAE,aAC7C;;;KCtOG;;;UCaK;EACf;EACA;EACA;EACA;;;;KCbU;KAKA;;;;EAIV;;;;EAKA,+BAA+B;;;;UCoBhB;;;;;EAKf;;;;;;;;;;;;;;;;;;;;;;;;;EA0BA,SAAS;;;;;EAMT;;;;;EAMA;;;;;;;EAQA;;;;EAKA;;;;EAKA,UAAU;;;;;EAMV,QAAQ;;;;;;;EAQR,2BAA2B,YACzB,KAAK;EAIP;;UAGe,8BAA8B;GAE3C,SAAS,0BACT,WAAW,iCACV;EAEH,cACE,SAAS,0BACT,WAAW,iCACV;;;;EAKH,UACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,eACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,cACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,mBACE,SAAS,+BACT,WAAW,sCACV;;;;EAKH,MAAM,SAAS,4BAA4B;;;;EAK3C,WAAW,SAAS,4BAA4B;;;;EAKhD,UAAU,SAAS,gCAAgC;;;;EAKnD,eAAe,SAAS,gCAAgC;;;;EAKxD,cAAc;;;;;wBAMA,oBACd,UAAS,gCACR;;;;qBAkNU,eAAa;;;qBCnZb"}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { anthropicTools, getModelCapabilities, prepareTools, sanitizeJsonSchema } from "@ai-sdk/anthropic/internal";
2
2
  import { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE, asSchema, combineHeaders, convertToBase64, convertUint8ArrayToBase64, createJsonErrorResponseHandler, createJsonResponseHandler, createNullLanguageModelUsage, createProviderStreamError, extractResponseHeaders, generateId, getRuntimeEnvironmentUserAgent, getTopLevelMediaType, injectJsonInstructionIntoMessages, isCustomReasoning, isFullMediaType, isValidHostnamePart, lazySchema, loadOptionalSetting, loadSetting, mapReasoningToProviderBudget, mapReasoningToProviderEffort, normalizeHeaders, parseProviderOptions, postJsonToApi, resolve, resolveFullMediaType, safeParseJSON, safeValidateTypes, serializeModelOptions, stripFileExtension, withUserAgentSuffix, withoutTrailingSlash, zodSchema } from "@ai-sdk/provider-utils";
3
3
  import { z } from "zod/v4";
4
- import { EmptyResponseBodyError, InvalidArgumentError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
4
+ import { EmptyResponseBodyError, InvalidArgumentError, LoadAPIKeyError, TooManyEmbeddingValuesForCallError, UnsupportedFunctionalityError } from "@ai-sdk/provider";
5
5
  import { EventStreamCodec } from "@smithy/eventstream-codec";
6
6
  import { fromUtf8, toUtf8 } from "@smithy/util-utf8";
7
7
  import { AwsV4Signer } from "aws4fetch";
@@ -1110,7 +1110,7 @@ var AmazonBedrockChatLanguageModel = class AmazonBedrockChatLanguageModel {
1110
1110
  maxReasoningEffort ??= explicitReasoningEffort;
1111
1111
  if (maxReasoningEffort == null && amazonBedrockOptions.additionalModelRequestFields?.output_config?.effort == null) maxReasoningEffort = "low";
1112
1112
  }
1113
- if (hasExplicitDisabledThinking || thinkingType === "adaptive") warnings.push({
1113
+ warnings.push({
1114
1114
  type: hasExplicitDisabledThinking ? "unsupported" : "compatibility",
1115
1115
  feature: hasExplicitDisabledThinking ? "providerOptions.amazonBedrock.reasoningConfig" : "reasoning",
1116
1116
  details: `thinking cannot be disabled for ${this.modelId}. Using '${thinkingType}' thinking instead.`
@@ -1910,20 +1910,29 @@ const AmazonBedrockStreamSchema = z.object({
1910
1910
  validationException: z.record(z.string(), z.unknown()).nullish()
1911
1911
  });
1912
1912
  const amazonBedrockReasoningEffortMap = {
1913
- minimal: "low",
1914
1913
  low: "low",
1915
1914
  medium: "medium",
1916
1915
  high: "high",
1917
- xhigh: "max",
1918
1916
  max: "max"
1919
1917
  };
1920
1918
  const amazonNovaReasoningEffortMap = {
1921
- minimal: "low",
1919
+ low: "low",
1920
+ medium: "medium",
1921
+ high: "high"
1922
+ };
1923
+ const openAIGptOssReasoningEffortMap = {
1924
+ low: "low",
1925
+ medium: "medium",
1926
+ high: "high"
1927
+ };
1928
+ const openAIReasoningEffortMap = {
1929
+ none: "none",
1930
+ minimal: "minimal",
1922
1931
  low: "low",
1923
1932
  medium: "medium",
1924
1933
  high: "high",
1925
- xhigh: "high",
1926
- max: "high"
1934
+ xhigh: "xhigh",
1935
+ max: "max"
1927
1936
  };
1928
1937
  function isNova2ReasoningModel(modelId) {
1929
1938
  return modelId.includes("amazon.nova-2-lite-v1:0");
@@ -1938,7 +1947,6 @@ function resolveAmazonBedrockReasoningConfig({ reasoning, amazonBedrockOptions,
1938
1947
  delete result.reasoningConfig.budgetTokens;
1939
1948
  return result;
1940
1949
  }
1941
- const hasPortableReasoning = reasoning !== "none";
1942
1950
  const isNovaReasoningModel = isNova2ReasoningModel(modelId);
1943
1951
  const supportsPortableReasoning = isOpenAIModel || isNovaReasoningModel || reasoningConfig != null;
1944
1952
  if (isAnthropicModel) {
@@ -1947,7 +1955,10 @@ function resolveAmazonBedrockReasoningConfig({ reasoning, amazonBedrockOptions,
1947
1955
  else if (capabilities.supportsAdaptiveThinking) {
1948
1956
  const effort = reasoningConfig?.maxReasoningEffort ?? mapReasoningToProviderEffort({
1949
1957
  reasoning,
1950
- effortMap: amazonBedrockReasoningEffortMap,
1958
+ effortMap: {
1959
+ ...amazonBedrockReasoningEffortMap,
1960
+ ...capabilities.supportsXhighEffort && { xhigh: "xhigh" }
1961
+ },
1951
1962
  warnings
1952
1963
  });
1953
1964
  result.reasoningConfig = {
@@ -1962,30 +1973,28 @@ function resolveAmazonBedrockReasoningConfig({ reasoning, amazonBedrockOptions,
1962
1973
  maxReasoningBudget: capabilities.maxOutputTokens,
1963
1974
  warnings
1964
1975
  });
1965
- if (budgetTokens != null) result.reasoningConfig = {
1976
+ result.reasoningConfig = {
1966
1977
  ...reasoningConfig,
1967
1978
  type: reasoningConfig?.type ?? "enabled",
1968
1979
  budgetTokens
1969
1980
  };
1970
1981
  }
1971
- } else if (hasPortableReasoning) {
1972
- if (supportsPortableReasoning) {
1973
- const effort = reasoningConfig?.maxReasoningEffort ?? mapReasoningToProviderEffort({
1974
- reasoning,
1975
- effortMap: isNovaReasoningModel ? amazonNovaReasoningEffortMap : amazonBedrockReasoningEffortMap,
1976
- warnings
1977
- });
1978
- result.reasoningConfig = {
1979
- ...reasoningConfig,
1980
- ...isNovaReasoningModel && { type: reasoningConfig?.type ?? "enabled" },
1981
- maxReasoningEffort: effort
1982
- };
1983
- } else warnings.push({
1984
- type: "unsupported",
1985
- feature: "reasoning",
1986
- details: "Portable reasoning is not supported for this model and will be ignored. If the model supports a provider-specific reasoning configuration, use providerOptions.amazonBedrock.reasoningConfig."
1982
+ } else if (reasoning === "none" && isNovaReasoningModel) {} else if (supportsPortableReasoning) {
1983
+ const effort = reasoningConfig?.maxReasoningEffort ?? mapReasoningToProviderEffort({
1984
+ reasoning,
1985
+ effortMap: isNovaReasoningModel ? amazonNovaReasoningEffortMap : isOpenAIModel ? modelId.includes("openai.gpt-oss-") ? openAIGptOssReasoningEffortMap : openAIReasoningEffortMap : amazonBedrockReasoningEffortMap,
1986
+ warnings
1987
1987
  });
1988
- }
1988
+ result.reasoningConfig = {
1989
+ ...reasoningConfig,
1990
+ ...isNovaReasoningModel && { type: reasoningConfig?.type ?? "enabled" },
1991
+ maxReasoningEffort: effort
1992
+ };
1993
+ } else warnings.push({
1994
+ type: "unsupported",
1995
+ feature: "reasoning",
1996
+ details: "Portable reasoning is not supported for this model and will be ignored. If the model supports a provider-specific reasoning configuration, use providerOptions.amazonBedrock.reasoningConfig."
1997
+ });
1989
1998
  return result;
1990
1999
  }
1991
2000
  //#endregion
@@ -2374,7 +2383,7 @@ const amazonBedrockImageResponseSchema = lazySchema(() => zodSchema(z.object({
2374
2383
  })));
2375
2384
  //#endregion
2376
2385
  //#region src/version.ts
2377
- const VERSION = "5.0.127";
2386
+ const VERSION = "5.0.129";
2378
2387
  //#endregion
2379
2388
  //#region src/amazon-bedrock-sigv4-fetch.ts
2380
2389
  /**
@@ -2443,7 +2452,9 @@ function createApiKeyFetchFunction(apiKey, fetch) {
2443
2452
  const effectiveFetch = fetch ?? globalThis.fetch;
2444
2453
  const originalHeaders = normalizeHeaders(init?.headers);
2445
2454
  const headersWithUserAgent = withUserAgentSuffix(originalHeaders, `ai-sdk-amazon-bedrock/${VERSION}`, getRuntimeEnvironmentUserAgent());
2446
- const finalHeaders = combineHeaders(headersWithUserAgent, { Authorization: `Bearer ${apiKey}` });
2455
+ const resolvedApiKey = await resolve(apiKey);
2456
+ if (typeof apiKey !== "string" && (typeof resolvedApiKey !== "string" || !resolvedApiKey.trim())) throw new LoadAPIKeyError({ message: "Amazon Bedrock API key must be a non-empty string." });
2457
+ const finalHeaders = combineHeaders(headersWithUserAgent, { Authorization: `Bearer ${typeof apiKey === "string" ? resolvedApiKey : resolvedApiKey.trim()}` });
2447
2458
  return effectiveFetch(input, {
2448
2459
  ...init,
2449
2460
  headers: finalHeaders
@@ -2585,11 +2596,11 @@ function resolveAmazonBedrockBaseURL({ baseURL, getRegion, service, serviceEndpo
2585
2596
  * Create an Amazon Bedrock provider instance.
2586
2597
  */
2587
2598
  function createAmazonBedrock(options = {}) {
2588
- const rawApiKey = loadOptionalSetting({
2599
+ const rawApiKey = typeof options.apiKey === "string" || options.apiKey == null ? loadOptionalSetting({
2589
2600
  settingValue: options.apiKey,
2590
2601
  environmentVariableName: "AWS_BEARER_TOKEN_BEDROCK"
2591
- });
2592
- const apiKey = rawApiKey && rawApiKey.trim().length > 0 ? rawApiKey.trim() : void 0;
2602
+ }) : options.apiKey;
2603
+ const apiKey = typeof rawApiKey === "string" ? rawApiKey.trim() || void 0 : rawApiKey;
2593
2604
  const fetchFunction = apiKey ? createApiKeyFetchFunction(apiKey, options.fetch) : createSigV4FetchFunction(async () => {
2594
2605
  const region = loadSetting({
2595
2606
  settingValue: options.region,