@ai-sdk/amazon-bedrock 5.0.58 → 5.0.60
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 +19 -0
- package/dist/anthropic/index.js +7 -3
- package/dist/anthropic/index.js.map +1 -1
- package/dist/index.js +100 -38
- package/dist/index.js.map +1 -1
- package/dist/mantle/index.cjs +1 -1
- package/dist/mantle/index.js +1 -1
- package/package.json +4 -4
- package/src/amazon-bedrock-api-types.ts +7 -0
- package/src/amazon-bedrock-chat-language-model.ts +66 -2
- package/src/amazon-bedrock-event-stream-decoder.ts +12 -3
- package/src/amazon-bedrock-event-stream-response-handler.ts +31 -22
- package/src/amazon-bedrock-reasoning-metadata.ts +1 -0
- package/src/convert-to-amazon-bedrock-chat-messages.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @ai-sdk/amazon-bedrock
|
|
2
2
|
|
|
3
|
+
## 5.0.60
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 8ca1352: fix(amazon-bedrock): surface modeled event-stream exceptions
|
|
8
|
+
- Updated dependencies [6be0f51]
|
|
9
|
+
- @ai-sdk/openai@4.0.45
|
|
10
|
+
|
|
11
|
+
## 5.0.59
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- e6087c9: fix: handle empty string tool call IDs
|
|
16
|
+
- aabc617: fix (provider/amazon-bedrock): support `reasoningContent.redactedContent` from the Converse API and replay it on subsequent turns
|
|
17
|
+
- Updated dependencies [e6087c9]
|
|
18
|
+
- @ai-sdk/provider-utils@5.0.28
|
|
19
|
+
- @ai-sdk/openai@4.0.44
|
|
20
|
+
- @ai-sdk/anthropic@4.0.40
|
|
21
|
+
|
|
3
22
|
## 5.0.58
|
|
4
23
|
|
|
5
24
|
### Patch Changes
|
package/dist/anthropic/index.js
CHANGED
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
import { AwsV4Signer } from "aws4fetch";
|
|
25
25
|
|
|
26
26
|
// src/version.ts
|
|
27
|
-
var VERSION = true ? "5.0.
|
|
27
|
+
var VERSION = true ? "5.0.60" : "0.0.0-test";
|
|
28
28
|
|
|
29
29
|
// src/amazon-bedrock-sigv4-fetch.ts
|
|
30
30
|
function createSigV4FetchFunction(getCredentials, fetch, service = "bedrock") {
|
|
@@ -146,7 +146,7 @@ function createAmazonBedrockEventStreamDecoder(body, processEvent) {
|
|
|
146
146
|
return body.pipeThrough(
|
|
147
147
|
new TransformStream({
|
|
148
148
|
async transform(chunk, controller) {
|
|
149
|
-
var _a, _b;
|
|
149
|
+
var _a, _b, _c;
|
|
150
150
|
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
151
151
|
newBuffer.set(buffer);
|
|
152
152
|
newBuffer.set(chunk, buffer.length);
|
|
@@ -165,8 +165,12 @@ function createAmazonBedrockEventStreamDecoder(body, processEvent) {
|
|
|
165
165
|
buffer = buffer.slice(totalLength);
|
|
166
166
|
const messageType = (_a = decoded.headers[":message-type"]) == null ? void 0 : _a.value;
|
|
167
167
|
const eventType = (_b = decoded.headers[":event-type"]) == null ? void 0 : _b.value;
|
|
168
|
+
const exceptionType = (_c = decoded.headers[":exception-type"]) == null ? void 0 : _c.value;
|
|
168
169
|
const data = textDecoder.decode(decoded.body);
|
|
169
|
-
await processEvent(
|
|
170
|
+
await processEvent(
|
|
171
|
+
{ messageType, eventType, exceptionType, data },
|
|
172
|
+
controller
|
|
173
|
+
);
|
|
170
174
|
}
|
|
171
175
|
},
|
|
172
176
|
flush() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/anthropic/amazon-bedrock-anthropic-provider.ts","../../src/amazon-bedrock-sigv4-fetch.ts","../../src/version.ts","../../src/amazon-bedrock-anthropic-model-support.ts","../../src/anthropic/amazon-bedrock-anthropic-fetch.ts","../../src/amazon-bedrock-event-stream-decoder.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV4,\n type ProviderV4,\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 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 { 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 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: 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 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 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 ...(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","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),\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\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","export function supportsStrictTools(modelId: string): boolean {\n return !rejectsNewerSchemaFields(modelId);\n}\n\nexport function supportsNativeStructuredOutput(modelId: string): boolean {\n return !rejectsNewerSchemaFields(modelId);\n}\n\n// Bedrock validates against its own copy of the Messages schema, which rejects\n// `output_config.format` and tool `strict` for the newest Claude models\nconst MODELS_REJECTING_NEWER_SCHEMA_FIELDS = [\n 'claude-opus-4-7',\n 'claude-opus-4-8',\n 'claude-opus-5',\n 'claude-fable-5',\n 'claude-sonnet-5',\n];\n\nfunction rejectsNewerSchemaFields(modelId: string): boolean {\n return MODELS_REJECTING_NEWER_SCHEMA_FIELDS.some(model =>\n modelId.includes(model),\n );\n}\n","import {\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';\n\nconst amazonBedrockErrorSchema = z.looseObject({\n message: z.string().optional(),\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 controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({ type: 'error', error: event.data })}\\n\\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 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 string;\n const data = textDecoder.decode(decoded.body);\n\n await processEvent({ messageType, eventType, data }, controller);\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"],"mappings":"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","names":["withUserAgentSuffix","withUserAgentSuffix"]}
|
|
1
|
+
{"version":3,"sources":["../../src/anthropic/amazon-bedrock-anthropic-provider.ts","../../src/amazon-bedrock-sigv4-fetch.ts","../../src/version.ts","../../src/amazon-bedrock-anthropic-model-support.ts","../../src/anthropic/amazon-bedrock-anthropic-fetch.ts","../../src/amazon-bedrock-event-stream-decoder.ts"],"sourcesContent":["import {\n NoSuchModelError,\n type LanguageModelV4,\n type ProviderV4,\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 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 { 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 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: 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 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 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 ...(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","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),\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\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","export function supportsStrictTools(modelId: string): boolean {\n return !rejectsNewerSchemaFields(modelId);\n}\n\nexport function supportsNativeStructuredOutput(modelId: string): boolean {\n return !rejectsNewerSchemaFields(modelId);\n}\n\n// Bedrock validates against its own copy of the Messages schema, which rejects\n// `output_config.format` and tool `strict` for the newest Claude models\nconst MODELS_REJECTING_NEWER_SCHEMA_FIELDS = [\n 'claude-opus-4-7',\n 'claude-opus-4-8',\n 'claude-opus-5',\n 'claude-fable-5',\n 'claude-sonnet-5',\n];\n\nfunction rejectsNewerSchemaFields(modelId: string): boolean {\n return MODELS_REJECTING_NEWER_SCHEMA_FIELDS.some(model =>\n modelId.includes(model),\n );\n}\n","import {\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';\n\nconst amazonBedrockErrorSchema = z.looseObject({\n message: z.string().optional(),\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 controller.enqueue(\n textEncoder.encode(\n `data: ${JSON.stringify({ type: 'error', error: event.data })}\\n\\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 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"],"mappings":"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","names":["withUserAgentSuffix","withUserAgentSuffix"]}
|
package/dist/index.js
CHANGED
|
@@ -165,7 +165,7 @@ function createAmazonBedrockEventStreamDecoder(body, processEvent) {
|
|
|
165
165
|
return body.pipeThrough(
|
|
166
166
|
new TransformStream({
|
|
167
167
|
async transform(chunk, controller) {
|
|
168
|
-
var _a, _b;
|
|
168
|
+
var _a, _b, _c;
|
|
169
169
|
const newBuffer = new Uint8Array(buffer.length + chunk.length);
|
|
170
170
|
newBuffer.set(buffer);
|
|
171
171
|
newBuffer.set(chunk, buffer.length);
|
|
@@ -184,8 +184,12 @@ function createAmazonBedrockEventStreamDecoder(body, processEvent) {
|
|
|
184
184
|
buffer = buffer.slice(totalLength);
|
|
185
185
|
const messageType = (_a = decoded.headers[":message-type"]) == null ? void 0 : _a.value;
|
|
186
186
|
const eventType = (_b = decoded.headers[":event-type"]) == null ? void 0 : _b.value;
|
|
187
|
+
const exceptionType = (_c = decoded.headers[":exception-type"]) == null ? void 0 : _c.value;
|
|
187
188
|
const data = textDecoder.decode(decoded.body);
|
|
188
|
-
await processEvent(
|
|
189
|
+
await processEvent(
|
|
190
|
+
{ messageType, eventType, exceptionType, data },
|
|
191
|
+
controller
|
|
192
|
+
);
|
|
189
193
|
}
|
|
190
194
|
},
|
|
191
195
|
flush() {
|
|
@@ -210,29 +214,31 @@ var createAmazonBedrockEventStreamResponseHandler = (chunkSchema) => async ({ re
|
|
|
210
214
|
value: createAmazonBedrockEventStreamDecoder(
|
|
211
215
|
response.body,
|
|
212
216
|
async (event, controller) => {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
217
|
+
const payloadType = event.messageType === "event" ? event.eventType : event.messageType === "exception" ? event.exceptionType : void 0;
|
|
218
|
+
if (payloadType == null) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const parsedDataResult = await safeParseJSON({ text: event.data });
|
|
222
|
+
if (!parsedDataResult.success) {
|
|
223
|
+
controller.enqueue(parsedDataResult);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
delete parsedDataResult.value.p;
|
|
227
|
+
const wrappedData = {
|
|
228
|
+
[payloadType]: parsedDataResult.value
|
|
229
|
+
};
|
|
230
|
+
const validatedWrappedData = await safeValidateTypes({
|
|
231
|
+
value: wrappedData,
|
|
232
|
+
schema: chunkSchema
|
|
233
|
+
});
|
|
234
|
+
if (!validatedWrappedData.success) {
|
|
235
|
+
controller.enqueue(validatedWrappedData);
|
|
236
|
+
} else {
|
|
237
|
+
controller.enqueue({
|
|
238
|
+
success: true,
|
|
239
|
+
value: validatedWrappedData.value,
|
|
240
|
+
rawValue: wrappedData
|
|
226
241
|
});
|
|
227
|
-
if (!validatedWrappedData.success) {
|
|
228
|
-
controller.enqueue(validatedWrappedData);
|
|
229
|
-
} else {
|
|
230
|
-
controller.enqueue({
|
|
231
|
-
success: true,
|
|
232
|
-
value: validatedWrappedData.value,
|
|
233
|
-
rawValue: wrappedData
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
242
|
}
|
|
237
243
|
}
|
|
238
244
|
)
|
|
@@ -430,7 +436,8 @@ import {
|
|
|
430
436
|
import { z as z3 } from "zod/v4";
|
|
431
437
|
var amazonBedrockReasoningMetadataSchema = z3.object({
|
|
432
438
|
signature: z3.string().optional(),
|
|
433
|
-
redactedData: z3.string().optional()
|
|
439
|
+
redactedData: z3.string().optional(),
|
|
440
|
+
redactedContent: z3.string().optional()
|
|
434
441
|
});
|
|
435
442
|
|
|
436
443
|
// src/normalize-tool-call-id.ts
|
|
@@ -835,6 +842,12 @@ async function convertToAmazonBedrockChatMessages(prompt, isMistral = false) {
|
|
|
835
842
|
}
|
|
836
843
|
}
|
|
837
844
|
});
|
|
845
|
+
} else if ((reasoningMetadata == null ? void 0 : reasoningMetadata.redactedContent) != null) {
|
|
846
|
+
amazonBedrockContent.push({
|
|
847
|
+
reasoningContent: {
|
|
848
|
+
redactedContent: reasoningMetadata.redactedContent
|
|
849
|
+
}
|
|
850
|
+
});
|
|
838
851
|
} else if ((reasoningMetadata == null ? void 0 : reasoningMetadata.redactedData) != null) {
|
|
839
852
|
amazonBedrockContent.push({
|
|
840
853
|
reasoningContent: {
|
|
@@ -1293,7 +1306,7 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1293
1306
|
);
|
|
1294
1307
|
}
|
|
1295
1308
|
async doGenerate(options) {
|
|
1296
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n
|
|
1309
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
1297
1310
|
const {
|
|
1298
1311
|
command: args,
|
|
1299
1312
|
warnings,
|
|
@@ -1356,6 +1369,18 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1356
1369
|
bedrock: redactedPayload
|
|
1357
1370
|
}
|
|
1358
1371
|
});
|
|
1372
|
+
} else if ("redactedContent" in part.reasoningContent) {
|
|
1373
|
+
const redactedPayload = {
|
|
1374
|
+
redactedContent: part.reasoningContent.redactedContent
|
|
1375
|
+
};
|
|
1376
|
+
content.push({
|
|
1377
|
+
type: "reasoning",
|
|
1378
|
+
text: "",
|
|
1379
|
+
providerMetadata: {
|
|
1380
|
+
amazonBedrock: redactedPayload,
|
|
1381
|
+
bedrock: redactedPayload
|
|
1382
|
+
}
|
|
1383
|
+
});
|
|
1359
1384
|
}
|
|
1360
1385
|
}
|
|
1361
1386
|
if (part.toolUse) {
|
|
@@ -1368,17 +1393,17 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1368
1393
|
});
|
|
1369
1394
|
} else {
|
|
1370
1395
|
const isMistral = isMistralModel(this.modelId);
|
|
1371
|
-
const rawToolCallId = (
|
|
1396
|
+
const rawToolCallId = ((_c = part.toolUse) == null ? void 0 : _c.toolUseId) || this.config.generateId();
|
|
1372
1397
|
content.push({
|
|
1373
1398
|
type: "tool-call",
|
|
1374
1399
|
toolCallId: normalizeToolCallId(rawToolCallId, isMistral),
|
|
1375
|
-
toolName: (
|
|
1376
|
-
input: JSON.stringify((
|
|
1400
|
+
toolName: (_e = (_d = part.toolUse) == null ? void 0 : _d.name) != null ? _e : `tool-${this.config.generateId()}`,
|
|
1401
|
+
input: JSON.stringify((_g = (_f = part.toolUse) == null ? void 0 : _f.input) != null ? _g : {})
|
|
1377
1402
|
});
|
|
1378
1403
|
}
|
|
1379
1404
|
}
|
|
1380
1405
|
}
|
|
1381
|
-
const stopSequence = (
|
|
1406
|
+
const stopSequence = (_j = (_i = (_h = response.additionalModelResponseFields) == null ? void 0 : _h.delta) == null ? void 0 : _i.stop_sequence) != null ? _j : null;
|
|
1382
1407
|
const providerMetadataPayload = response.trace || response.usage || response.performanceConfig || response.serviceTier || isJsonResponseFromTool || stopSequence ? {
|
|
1383
1408
|
...response.trace && typeof response.trace === "object" ? { trace: response.trace } : {},
|
|
1384
1409
|
...response.performanceConfig && {
|
|
@@ -1387,7 +1412,7 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1387
1412
|
...response.serviceTier && {
|
|
1388
1413
|
serviceTier: response.serviceTier
|
|
1389
1414
|
},
|
|
1390
|
-
...(((
|
|
1415
|
+
...(((_k = response.usage) == null ? void 0 : _k.cacheWriteInputTokens) != null || ((_l = response.usage) == null ? void 0 : _l.cacheDetails) != null) && {
|
|
1391
1416
|
usage: {
|
|
1392
1417
|
...response.usage.cacheWriteInputTokens != null && {
|
|
1393
1418
|
cacheWriteInputTokens: response.usage.cacheWriteInputTokens
|
|
@@ -1411,11 +1436,11 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1411
1436
|
response.stopReason,
|
|
1412
1437
|
isJsonResponseFromTool
|
|
1413
1438
|
),
|
|
1414
|
-
raw: (
|
|
1439
|
+
raw: (_m = response.stopReason) != null ? _m : void 0
|
|
1415
1440
|
},
|
|
1416
1441
|
usage: convertAmazonBedrockUsage(response.usage),
|
|
1417
1442
|
response: {
|
|
1418
|
-
id: (
|
|
1443
|
+
id: (_n = responseHeaders == null ? void 0 : responseHeaders["x-amzn-requestid"]) != null ? _n : void 0,
|
|
1419
1444
|
timestamp: (responseHeaders == null ? void 0 : responseHeaders["date"]) != null ? new Date(responseHeaders["date"]) : void 0,
|
|
1420
1445
|
modelId: this.modelId,
|
|
1421
1446
|
headers: responseHeaders
|
|
@@ -1473,7 +1498,7 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1473
1498
|
});
|
|
1474
1499
|
},
|
|
1475
1500
|
transform(chunk, controller) {
|
|
1476
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;
|
|
1501
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r;
|
|
1477
1502
|
function enqueueError(amazonBedrockError) {
|
|
1478
1503
|
finishReason = { unified: "error", raw: void 0 };
|
|
1479
1504
|
controller.enqueue({ type: "error", error: amazonBedrockError });
|
|
@@ -1494,6 +1519,10 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1494
1519
|
enqueueError(value.modelStreamErrorException);
|
|
1495
1520
|
return;
|
|
1496
1521
|
}
|
|
1522
|
+
if (value.serviceUnavailableException) {
|
|
1523
|
+
enqueueError(value.serviceUnavailableException);
|
|
1524
|
+
return;
|
|
1525
|
+
}
|
|
1497
1526
|
if (value.throttlingException) {
|
|
1498
1527
|
enqueueError(value.throttlingException);
|
|
1499
1528
|
return;
|
|
@@ -1579,9 +1608,16 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1579
1608
|
const contentBlock = contentBlocks[blockIndex];
|
|
1580
1609
|
if (contentBlock != null) {
|
|
1581
1610
|
if (contentBlock.type === "reasoning") {
|
|
1611
|
+
const redactedPayload = contentBlock.redactedContent != null ? { redactedContent: contentBlock.redactedContent } : null;
|
|
1582
1612
|
controller.enqueue({
|
|
1583
1613
|
type: "reasoning-end",
|
|
1584
|
-
id: String(blockIndex)
|
|
1614
|
+
id: String(blockIndex),
|
|
1615
|
+
...redactedPayload != null ? {
|
|
1616
|
+
providerMetadata: {
|
|
1617
|
+
amazonBedrock: redactedPayload,
|
|
1618
|
+
bedrock: redactedPayload
|
|
1619
|
+
}
|
|
1620
|
+
} : {}
|
|
1585
1621
|
});
|
|
1586
1622
|
} else if (contentBlock.type === "text") {
|
|
1587
1623
|
controller.enqueue({
|
|
@@ -1680,10 +1716,22 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1680
1716
|
}
|
|
1681
1717
|
});
|
|
1682
1718
|
}
|
|
1719
|
+
} else if ("redactedContent" in reasoningContent && reasoningContent.redactedContent) {
|
|
1720
|
+
if (contentBlocks[blockIndex] == null) {
|
|
1721
|
+
contentBlocks[blockIndex] = { type: "reasoning" };
|
|
1722
|
+
controller.enqueue({
|
|
1723
|
+
type: "reasoning-start",
|
|
1724
|
+
id: String(blockIndex)
|
|
1725
|
+
});
|
|
1726
|
+
}
|
|
1727
|
+
const contentBlock = contentBlocks[blockIndex];
|
|
1728
|
+
if (contentBlock.type === "reasoning") {
|
|
1729
|
+
contentBlock.redactedContent = ((_p = contentBlock.redactedContent) != null ? _p : "") + reasoningContent.redactedContent;
|
|
1730
|
+
}
|
|
1683
1731
|
}
|
|
1684
1732
|
}
|
|
1685
1733
|
const contentBlockStart = value.contentBlockStart;
|
|
1686
|
-
if (((
|
|
1734
|
+
if (((_q = contentBlockStart == null ? void 0 : contentBlockStart.start) == null ? void 0 : _q.toolUse) != null) {
|
|
1687
1735
|
const toolUse = contentBlockStart.start.toolUse;
|
|
1688
1736
|
const blockIndex = contentBlockStart.contentBlockIndex;
|
|
1689
1737
|
const isJsonResponseTool = usesJsonResponseTool && toolUse.name === "json";
|
|
@@ -1711,7 +1759,7 @@ var AmazonBedrockChatLanguageModel = class _AmazonBedrockChatLanguageModel {
|
|
|
1711
1759
|
const blockIndex = contentBlockDelta.contentBlockIndex;
|
|
1712
1760
|
const contentBlock = contentBlocks[blockIndex];
|
|
1713
1761
|
if ((contentBlock == null ? void 0 : contentBlock.type) === "tool-call") {
|
|
1714
|
-
const delta = (
|
|
1762
|
+
const delta = (_r = contentBlockDelta.delta.toolUse.input) != null ? _r : "";
|
|
1715
1763
|
if (!contentBlock.isJsonResponseTool) {
|
|
1716
1764
|
controller.enqueue({
|
|
1717
1765
|
type: "tool-input-delta",
|
|
@@ -1844,6 +1892,13 @@ var AmazonBedrockResponseSchema = z4.object({
|
|
|
1844
1892
|
}),
|
|
1845
1893
|
z4.object({
|
|
1846
1894
|
redactedReasoning: AmazonBedrockRedactedReasoningSchema
|
|
1895
|
+
}),
|
|
1896
|
+
// `redactedContent` is a member of the documented
|
|
1897
|
+
// ReasoningContentBlock union. OpenAI models on Bedrock
|
|
1898
|
+
// (e.g. `us.openai.gpt-5.6-luna`) return their encrypted
|
|
1899
|
+
// reasoning in this shape.
|
|
1900
|
+
z4.object({
|
|
1901
|
+
redactedContent: z4.string()
|
|
1847
1902
|
})
|
|
1848
1903
|
]).nullish()
|
|
1849
1904
|
})
|
|
@@ -1881,6 +1936,12 @@ var AmazonBedrockStreamSchema = z4.object({
|
|
|
1881
1936
|
}),
|
|
1882
1937
|
z4.object({
|
|
1883
1938
|
reasoningContent: z4.object({ data: z4.string() })
|
|
1939
|
+
}),
|
|
1940
|
+
// `redactedContent` is a member of the documented
|
|
1941
|
+
// ReasoningContentBlockDelta union. OpenAI models on Bedrock stream
|
|
1942
|
+
// their encrypted reasoning in this shape.
|
|
1943
|
+
z4.object({
|
|
1944
|
+
reasoningContent: z4.object({ redactedContent: z4.string() })
|
|
1884
1945
|
})
|
|
1885
1946
|
]).nullish()
|
|
1886
1947
|
}).nullish(),
|
|
@@ -1911,6 +1972,7 @@ var AmazonBedrockStreamSchema = z4.object({
|
|
|
1911
1972
|
}).nullish()
|
|
1912
1973
|
}).nullish(),
|
|
1913
1974
|
modelStreamErrorException: z4.record(z4.string(), z4.unknown()).nullish(),
|
|
1975
|
+
serviceUnavailableException: z4.record(z4.string(), z4.unknown()).nullish(),
|
|
1914
1976
|
throttlingException: z4.record(z4.string(), z4.unknown()).nullish(),
|
|
1915
1977
|
validationException: z4.record(z4.string(), z4.unknown()).nullish()
|
|
1916
1978
|
});
|
|
@@ -2486,7 +2548,7 @@ import {
|
|
|
2486
2548
|
import { AwsV4Signer } from "aws4fetch";
|
|
2487
2549
|
|
|
2488
2550
|
// src/version.ts
|
|
2489
|
-
var VERSION = true ? "5.0.
|
|
2551
|
+
var VERSION = true ? "5.0.60" : "0.0.0-test";
|
|
2490
2552
|
|
|
2491
2553
|
// src/amazon-bedrock-sigv4-fetch.ts
|
|
2492
2554
|
function createSigV4FetchFunction(getCredentials, fetch, service = "bedrock") {
|