@ai-sdk/amazon-bedrock 5.0.0-beta.45 → 5.0.0-beta.46

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.
Files changed (37) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/anthropic/index.d.ts +10 -10
  3. package/dist/anthropic/index.js +58 -46
  4. package/dist/anthropic/index.js.map +1 -1
  5. package/dist/index.d.ts +21 -21
  6. package/dist/index.js +328 -292
  7. package/dist/index.js.map +1 -1
  8. package/docs/08-amazon-bedrock.mdx +66 -66
  9. package/package.json +3 -3
  10. package/src/{bedrock-api-types.ts → amazon-bedrock-api-types.ts} +60 -55
  11. package/src/{bedrock-chat-options.ts → amazon-bedrock-chat-language-model-options.ts} +7 -7
  12. package/src/{bedrock-chat-language-model.ts → amazon-bedrock-chat-language-model.ts} +211 -190
  13. package/src/{bedrock-embedding-options.ts → amazon-bedrock-embedding-model-options.ts} +1 -1
  14. package/src/{bedrock-embedding-model.ts → amazon-bedrock-embedding-model.ts} +31 -24
  15. package/src/{bedrock-error.ts → amazon-bedrock-error.ts} +1 -1
  16. package/src/{bedrock-event-stream-decoder.ts → amazon-bedrock-event-stream-decoder.ts} +1 -1
  17. package/src/{bedrock-event-stream-response-handler.ts → amazon-bedrock-event-stream-response-handler.ts} +3 -3
  18. package/src/{bedrock-image-model.ts → amazon-bedrock-image-model.ts} +40 -36
  19. package/src/amazon-bedrock-image-settings.ts +9 -0
  20. package/src/{bedrock-prepare-tools.ts → amazon-bedrock-prepare-tools.ts} +18 -17
  21. package/src/{bedrock-provider.ts → amazon-bedrock-provider.ts} +40 -38
  22. package/src/amazon-bedrock-reasoning-metadata.ts +10 -0
  23. package/src/{bedrock-sigv4-fetch.ts → amazon-bedrock-sigv4-fetch.ts} +4 -2
  24. package/src/anthropic/amazon-bedrock-anthropic-fetch.ts +104 -0
  25. package/src/anthropic/{bedrock-anthropic-options.ts → amazon-bedrock-anthropic-options.ts} +1 -1
  26. package/src/anthropic/{bedrock-anthropic-provider.ts → amazon-bedrock-anthropic-provider.ts} +18 -16
  27. package/src/anthropic/index.ts +19 -7
  28. package/src/{convert-bedrock-usage.ts → convert-amazon-bedrock-usage.ts} +3 -3
  29. package/src/{convert-to-bedrock-chat-messages.ts → convert-to-amazon-bedrock-chat-messages.ts} +78 -56
  30. package/src/index.ts +15 -8
  31. package/src/{map-bedrock-finish-reason.ts → map-amazon-bedrock-finish-reason.ts} +3 -3
  32. package/src/reranking/{bedrock-reranking-api.ts → amazon-bedrock-reranking-api.ts} +3 -3
  33. package/src/reranking/{bedrock-reranking-options.ts → amazon-bedrock-reranking-model-options.ts} +1 -1
  34. package/src/reranking/{bedrock-reranking-model.ts → amazon-bedrock-reranking-model.ts} +29 -21
  35. package/src/anthropic/bedrock-anthropic-fetch.ts +0 -94
  36. package/src/bedrock-image-settings.ts +0 -6
  37. package/src/bedrock-reasoning-metadata.ts +0 -10
@@ -8,7 +8,7 @@ import {
8
8
  import { AwsV4Signer } from 'aws4fetch';
9
9
  import { VERSION } from './version';
10
10
 
11
- export interface BedrockCredentials {
11
+ export interface AmazonBedrockCredentials {
12
12
  region: string;
13
13
  accessKeyId: string;
14
14
  secretAccessKey: string;
@@ -23,7 +23,9 @@ export interface BedrockCredentials {
23
23
  * @returns A FetchFunction that signs requests before passing them to the underlying fetch.
24
24
  */
25
25
  export function createSigV4FetchFunction(
26
- getCredentials: () => BedrockCredentials | PromiseLike<BedrockCredentials>,
26
+ getCredentials: () =>
27
+ | AmazonBedrockCredentials
28
+ | PromiseLike<AmazonBedrockCredentials>,
27
29
  fetch: FetchFunction = globalThis.fetch,
28
30
  ): FetchFunction {
29
31
  return async (
@@ -0,0 +1,104 @@
1
+ import {
2
+ convertBase64ToUint8Array,
3
+ safeParseJSON,
4
+ type FetchFunction,
5
+ } from '@ai-sdk/provider-utils';
6
+ import { z } from 'zod/v4';
7
+ import { createAmazonBedrockEventStreamDecoder } from '../amazon-bedrock-event-stream-decoder';
8
+
9
+ const amazonBedrockErrorSchema = z.looseObject({
10
+ message: z.string().optional(),
11
+ });
12
+
13
+ export function createAmazonBedrockAnthropicFetch(
14
+ baseFetch: FetchFunction,
15
+ ): FetchFunction {
16
+ return async (url, options) => {
17
+ const response = await baseFetch(url, options);
18
+
19
+ // Transform Bedrock error responses into Anthropic error format
20
+ // so that anthropicFailedResponseHandler can extract the message.
21
+ if (!response.ok) {
22
+ const text = await response.text();
23
+ const parsed = await safeParseJSON({
24
+ text,
25
+ schema: amazonBedrockErrorSchema,
26
+ });
27
+
28
+ const message =
29
+ parsed.success && parsed.value.message ? parsed.value.message : text;
30
+
31
+ const anthropicError = JSON.stringify({
32
+ type: 'error',
33
+ error: { type: 'error', message },
34
+ });
35
+
36
+ return new Response(anthropicError, {
37
+ status: response.status,
38
+ statusText: response.statusText,
39
+ headers: response.headers,
40
+ });
41
+ }
42
+
43
+ const contentType = response.headers.get('content-type');
44
+ if (
45
+ contentType?.includes('application/vnd.amazon.eventstream') &&
46
+ response.body != null
47
+ ) {
48
+ const transformedBody = transformAmazonBedrockEventStreamToSSE(
49
+ response.body,
50
+ );
51
+
52
+ return new Response(transformedBody, {
53
+ status: response.status,
54
+ statusText: response.statusText,
55
+ headers: new Headers({
56
+ ...Object.fromEntries(response.headers.entries()),
57
+ 'content-type': 'text/event-stream',
58
+ }),
59
+ });
60
+ }
61
+
62
+ return response;
63
+ };
64
+ }
65
+
66
+ function transformAmazonBedrockEventStreamToSSE(
67
+ body: ReadableStream<Uint8Array>,
68
+ ): ReadableStream<Uint8Array> {
69
+ const textEncoder = new TextEncoder();
70
+
71
+ return createAmazonBedrockEventStreamDecoder(
72
+ body,
73
+ async (event, controller) => {
74
+ if (event.messageType === 'event') {
75
+ if (event.eventType === 'chunk') {
76
+ const parsed = await safeParseJSON({ text: event.data });
77
+ if (!parsed.success) {
78
+ controller.enqueue(textEncoder.encode(`data: ${event.data}\n\n`));
79
+ return;
80
+ }
81
+ const bytes = (parsed.value as { bytes?: string }).bytes;
82
+ if (bytes) {
83
+ const anthropicEvent = new TextDecoder().decode(
84
+ convertBase64ToUint8Array(bytes),
85
+ );
86
+ controller.enqueue(
87
+ textEncoder.encode(`data: ${anthropicEvent}\n\n`),
88
+ );
89
+ } else {
90
+ controller.enqueue(textEncoder.encode(`data: ${event.data}\n\n`));
91
+ }
92
+ } else if (event.eventType === 'messageStop') {
93
+ controller.enqueue(textEncoder.encode('data: [DONE]\n\n'));
94
+ }
95
+ } else if (event.messageType === 'exception') {
96
+ controller.enqueue(
97
+ textEncoder.encode(
98
+ `data: ${JSON.stringify({ type: 'error', error: event.data })}\n\n`,
99
+ ),
100
+ );
101
+ }
102
+ },
103
+ );
104
+ }
@@ -1,4 +1,4 @@
1
- export type BedrockAnthropicModelId =
1
+ export type AmazonBedrockAnthropicModelId =
2
2
  | 'anthropic.claude-opus-4-7'
3
3
  | 'anthropic.claude-opus-4-6-v1'
4
4
  | 'anthropic.claude-sonnet-4-6-v1'
@@ -19,10 +19,10 @@ import {
19
19
  import {
20
20
  createApiKeyFetchFunction,
21
21
  createSigV4FetchFunction,
22
- type BedrockCredentials,
23
- } from '../bedrock-sigv4-fetch';
24
- import { createBedrockAnthropicFetch } from './bedrock-anthropic-fetch';
25
- import type { BedrockAnthropicModelId } from './bedrock-anthropic-options';
22
+ type AmazonBedrockCredentials,
23
+ } from '../amazon-bedrock-sigv4-fetch';
24
+ import { createAmazonBedrockAnthropicFetch } from './amazon-bedrock-anthropic-fetch';
25
+ import type { AmazonBedrockAnthropicModelId } from './amazon-bedrock-anthropic-options';
26
26
  import { VERSION } from '../version';
27
27
 
28
28
  // Bedrock requires newer tool versions than the default Anthropic SDK versions
@@ -53,16 +53,16 @@ const BEDROCK_TOOL_BETA_MAP: Record<string, string> = {
53
53
  tool_search_tool_bm25_20251119: 'tool-search-tool-2025-10-19',
54
54
  };
55
55
 
56
- export interface BedrockAnthropicProvider extends ProviderV4 {
56
+ export interface AmazonBedrockAnthropicProvider extends ProviderV4 {
57
57
  /**
58
58
  * Creates a model for text generation.
59
59
  */
60
- (modelId: BedrockAnthropicModelId): LanguageModelV4;
60
+ (modelId: AmazonBedrockAnthropicModelId): LanguageModelV4;
61
61
 
62
62
  /**
63
63
  * Creates a model for text generation.
64
64
  */
65
- languageModel(modelId: BedrockAnthropicModelId): LanguageModelV4;
65
+ languageModel(modelId: AmazonBedrockAnthropicModelId): LanguageModelV4;
66
66
 
67
67
  /**
68
68
  * Anthropic-specific computer use tool.
@@ -75,7 +75,7 @@ export interface BedrockAnthropicProvider extends ProviderV4 {
75
75
  textEmbeddingModel(modelId: string): never;
76
76
  }
77
77
 
78
- export interface BedrockAnthropicProviderSettings {
78
+ export interface AmazonBedrockAnthropicProviderSettings {
79
79
  /**
80
80
  * The AWS region to use for the Bedrock provider. Defaults to the value of the
81
81
  * `AWS_REGION` environment variable.
@@ -129,7 +129,9 @@ export interface BedrockAnthropicProviderSettings {
129
129
  * credential values to be used instead of the `accessKeyId`, `secretAccessKey`,
130
130
  * and `sessionToken` settings.
131
131
  */
132
- credentialProvider?: () => PromiseLike<Omit<BedrockCredentials, 'region'>>;
132
+ credentialProvider?: () => PromiseLike<
133
+ Omit<AmazonBedrockCredentials, 'region'>
134
+ >;
133
135
  }
134
136
 
135
137
  /**
@@ -137,9 +139,9 @@ export interface BedrockAnthropicProviderSettings {
137
139
  * This provider uses the native Anthropic API through Bedrock's InvokeModel endpoint,
138
140
  * bypassing the Converse API for better feature compatibility.
139
141
  */
140
- export function createBedrockAnthropic(
141
- options: BedrockAnthropicProviderSettings = {},
142
- ): BedrockAnthropicProvider {
142
+ export function createAmazonBedrockAnthropic(
143
+ options: AmazonBedrockAnthropicProviderSettings = {},
144
+ ): AmazonBedrockAnthropicProvider {
143
145
  // Check for API key authentication first
144
146
  const rawApiKey = loadOptionalSetting({
145
147
  settingValue: options.apiKey,
@@ -230,7 +232,7 @@ export function createBedrockAnthropic(
230
232
  }, options.fetch);
231
233
 
232
234
  // Wrap with Bedrock event stream to SSE transformer for streaming support
233
- const fetchFunction = createBedrockAnthropicFetch(baseFetchFunction);
235
+ const fetchFunction = createAmazonBedrockAnthropicFetch(baseFetchFunction);
234
236
 
235
237
  const getBaseURL = (): string =>
236
238
  withoutTrailingSlash(
@@ -248,7 +250,7 @@ export function createBedrockAnthropic(
248
250
  return withUserAgentSuffix(baseHeaders, `ai-sdk/amazon-bedrock/${VERSION}`);
249
251
  };
250
252
 
251
- const createChatModel = (modelId: BedrockAnthropicModelId) =>
253
+ const createChatModel = (modelId: AmazonBedrockAnthropicModelId) =>
252
254
  new AnthropicLanguageModel(modelId, {
253
255
  provider: 'bedrock.anthropic.messages',
254
256
  baseURL: getBaseURL(),
@@ -333,7 +335,7 @@ export function createBedrockAnthropic(
333
335
  supportsNativeStructuredOutput: true,
334
336
  });
335
337
 
336
- const provider = function (modelId: BedrockAnthropicModelId) {
338
+ const provider = function (modelId: AmazonBedrockAnthropicModelId) {
337
339
  if (new.target) {
338
340
  throw new Error(
339
341
  'The Bedrock Anthropic model function cannot be called with the new keyword.',
@@ -364,4 +366,4 @@ export function createBedrockAnthropic(
364
366
  /**
365
367
  * Default Bedrock Anthropic provider instance.
366
368
  */
367
- export const bedrockAnthropic = createBedrockAnthropic();
369
+ export const amazonBedrockAnthropic = createAmazonBedrockAnthropic();
@@ -1,9 +1,21 @@
1
1
  export {
2
- bedrockAnthropic,
3
- createBedrockAnthropic,
4
- } from './bedrock-anthropic-provider';
2
+ amazonBedrockAnthropic,
3
+ /** @deprecated Use `amazonBedrockAnthropic` instead. */
4
+ amazonBedrockAnthropic as bedrockAnthropic,
5
+ createAmazonBedrockAnthropic,
6
+ /** @deprecated Use `createAmazonBedrockAnthropic` instead. */
7
+ createAmazonBedrockAnthropic as createBedrockAnthropic,
8
+ } from './amazon-bedrock-anthropic-provider';
5
9
  export type {
6
- BedrockAnthropicProvider,
7
- BedrockAnthropicProviderSettings,
8
- } from './bedrock-anthropic-provider';
9
- export type { BedrockAnthropicModelId } from './bedrock-anthropic-options';
10
+ AmazonBedrockAnthropicProvider,
11
+ /** @deprecated Use `AmazonBedrockAnthropicProvider` instead. */
12
+ AmazonBedrockAnthropicProvider as BedrockAnthropicProvider,
13
+ AmazonBedrockAnthropicProviderSettings,
14
+ /** @deprecated Use `AmazonBedrockAnthropicProviderSettings` instead. */
15
+ AmazonBedrockAnthropicProviderSettings as BedrockAnthropicProviderSettings,
16
+ } from './amazon-bedrock-anthropic-provider';
17
+ export type {
18
+ AmazonBedrockAnthropicModelId,
19
+ /** @deprecated Use `AmazonBedrockAnthropicModelId` instead. */
20
+ AmazonBedrockAnthropicModelId as BedrockAnthropicModelId,
21
+ } from './amazon-bedrock-anthropic-options';
@@ -1,6 +1,6 @@
1
1
  import type { LanguageModelV4Usage } from '@ai-sdk/provider';
2
2
 
3
- export type BedrockUsage = {
3
+ export type AmazonBedrockUsage = {
4
4
  inputTokens: number;
5
5
  outputTokens: number;
6
6
  totalTokens?: number;
@@ -8,8 +8,8 @@ export type BedrockUsage = {
8
8
  cacheWriteInputTokens?: number | null;
9
9
  };
10
10
 
11
- export function convertBedrockUsage(
12
- usage: BedrockUsage | undefined | null,
11
+ export function convertAmazonBedrockUsage(
12
+ usage: AmazonBedrockUsage | undefined | null,
13
13
  ): LanguageModelV4Usage {
14
14
  if (usage == null) {
15
15
  return {
@@ -16,25 +16,26 @@ import {
16
16
  import {
17
17
  BEDROCK_DOCUMENT_MIME_TYPES,
18
18
  BEDROCK_IMAGE_MIME_TYPES,
19
- type BedrockAssistantMessage,
20
- type BedrockCachePoint,
21
- type BedrockDocumentFormat,
22
- type BedrockDocumentMimeType,
23
- type BedrockImageFormat,
24
- type BedrockImageMimeType,
25
- type BedrockMessages,
26
- type BedrockSystemMessages,
27
- type BedrockUserMessage,
28
- } from './bedrock-api-types';
29
- import { bedrockFilePartProviderOptions } from './bedrock-chat-options';
30
- import { bedrockReasoningMetadataSchema } from './bedrock-reasoning-metadata';
19
+ type AmazonBedrockAssistantMessage,
20
+ type AmazonBedrockCachePoint,
21
+ type AmazonBedrockDocumentFormat,
22
+ type AmazonBedrockDocumentMimeType,
23
+ type AmazonBedrockImageFormat,
24
+ type AmazonBedrockImageMimeType,
25
+ type AmazonBedrockMessages,
26
+ type AmazonBedrockSystemMessages,
27
+ type AmazonBedrockUserMessage,
28
+ } from './amazon-bedrock-api-types';
29
+ import { amazonBedrockFilePartProviderOptions } from './amazon-bedrock-chat-language-model-options';
30
+ import { amazonBedrockReasoningMetadataSchema } from './amazon-bedrock-reasoning-metadata';
31
31
  import { normalizeToolCallId } from './normalize-tool-call-id';
32
32
 
33
33
  function getCachePoint(
34
34
  providerMetadata: SharedV4ProviderMetadata | undefined,
35
- ): BedrockCachePoint | undefined {
36
- const cachePointConfig = providerMetadata?.bedrock?.cachePoint as
37
- | BedrockCachePoint['cachePoint']
35
+ ): AmazonBedrockCachePoint | undefined {
36
+ const cachePointConfig = (providerMetadata?.amazonBedrock?.cachePoint ??
37
+ providerMetadata?.bedrock?.cachePoint) as
38
+ | AmazonBedrockCachePoint['cachePoint']
38
39
  | undefined;
39
40
 
40
41
  if (!cachePointConfig) {
@@ -47,26 +48,32 @@ function getCachePoint(
47
48
  async function shouldEnableCitations(
48
49
  providerMetadata: SharedV4ProviderMetadata | undefined,
49
50
  ): Promise<boolean> {
50
- const bedrockOptions = await parseProviderOptions({
51
- provider: 'bedrock',
52
- providerOptions: providerMetadata,
53
- schema: bedrockFilePartProviderOptions,
54
- });
55
-
56
- return bedrockOptions?.citations?.enabled ?? false;
51
+ const amazonBedrockOptions =
52
+ (await parseProviderOptions({
53
+ provider: 'amazonBedrock',
54
+ providerOptions: providerMetadata,
55
+ schema: amazonBedrockFilePartProviderOptions,
56
+ })) ??
57
+ (await parseProviderOptions({
58
+ provider: 'bedrock',
59
+ providerOptions: providerMetadata,
60
+ schema: amazonBedrockFilePartProviderOptions,
61
+ }));
62
+
63
+ return amazonBedrockOptions?.citations?.enabled ?? false;
57
64
  }
58
65
 
59
- export async function convertToBedrockChatMessages(
66
+ export async function convertToAmazonBedrockChatMessages(
60
67
  prompt: LanguageModelV4Prompt,
61
68
  isMistral: boolean = false,
62
69
  ): Promise<{
63
- system: BedrockSystemMessages;
64
- messages: BedrockMessages;
70
+ system: AmazonBedrockSystemMessages;
71
+ messages: AmazonBedrockMessages;
65
72
  }> {
66
73
  const blocks = groupIntoBlocks(prompt);
67
74
 
68
- let system: BedrockSystemMessages = [];
69
- const messages: BedrockMessages = [];
75
+ let system: AmazonBedrockSystemMessages = [];
76
+ const messages: AmazonBedrockMessages = [];
70
77
 
71
78
  let documentCounter = 0;
72
79
  const generateDocumentName = () => `document-${++documentCounter}`;
@@ -97,7 +104,7 @@ export async function convertToBedrockChatMessages(
97
104
 
98
105
  case 'user': {
99
106
  // combines all user and tool messages in this block into a single message:
100
- const bedrockContent: BedrockUserMessage['content'] = [];
107
+ const amazonBedrockContent: AmazonBedrockUserMessage['content'] = [];
101
108
 
102
109
  for (const message of block.messages) {
103
110
  const { role, content, providerOptions } = message;
@@ -108,7 +115,7 @@ export async function convertToBedrockChatMessages(
108
115
 
109
116
  switch (part.type) {
110
117
  case 'text': {
111
- bedrockContent.push({
118
+ amazonBedrockContent.push({
112
119
  text: part.text,
113
120
  });
114
121
  break;
@@ -134,9 +141,10 @@ export async function convertToBedrockChatMessages(
134
141
  part.providerOptions,
135
142
  );
136
143
 
137
- bedrockContent.push({
144
+ amazonBedrockContent.push({
138
145
  document: {
139
- format: getBedrockDocumentFormat(textMediaType),
146
+ format:
147
+ getAmazonBedrockDocumentFormat(textMediaType),
140
148
  name: part.filename
141
149
  ? stripFileExtension(part.filename)
142
150
  : generateDocumentName(),
@@ -156,9 +164,10 @@ export async function convertToBedrockChatMessages(
156
164
  const fullMediaType = resolveFullMediaType({ part });
157
165
 
158
166
  if (getTopLevelMediaType(fullMediaType) === 'image') {
159
- bedrockContent.push({
167
+ amazonBedrockContent.push({
160
168
  image: {
161
- format: getBedrockImageFormat(fullMediaType),
169
+ format:
170
+ getAmazonBedrockImageFormat(fullMediaType),
162
171
  source: {
163
172
  bytes: convertToBase64(part.data.data),
164
173
  },
@@ -169,9 +178,10 @@ export async function convertToBedrockChatMessages(
169
178
  part.providerOptions,
170
179
  );
171
180
 
172
- bedrockContent.push({
181
+ amazonBedrockContent.push({
173
182
  document: {
174
- format: getBedrockDocumentFormat(fullMediaType),
183
+ format:
184
+ getAmazonBedrockDocumentFormat(fullMediaType),
175
185
  name: part.filename
176
186
  ? stripFileExtension(part.filename)
177
187
  : generateDocumentName(),
@@ -216,7 +226,7 @@ export async function convertToBedrockChatMessages(
216
226
  });
217
227
  }
218
228
 
219
- const format = getBedrockImageFormat(
229
+ const format = getAmazonBedrockImageFormat(
220
230
  contentPart.mediaType,
221
231
  );
222
232
 
@@ -253,7 +263,7 @@ export async function convertToBedrockChatMessages(
253
263
  break;
254
264
  }
255
265
 
256
- bedrockContent.push({
266
+ amazonBedrockContent.push({
257
267
  toolResult: {
258
268
  toolUseId: normalizeToolCallId(part.toolCallId, isMistral),
259
269
  content: toolResultContent,
@@ -271,18 +281,19 @@ export async function convertToBedrockChatMessages(
271
281
 
272
282
  const cachePoint = getCachePoint(providerOptions);
273
283
  if (cachePoint) {
274
- bedrockContent.push(cachePoint);
284
+ amazonBedrockContent.push(cachePoint);
275
285
  }
276
286
  }
277
287
 
278
- messages.push({ role: 'user', content: bedrockContent });
288
+ messages.push({ role: 'user', content: amazonBedrockContent });
279
289
 
280
290
  break;
281
291
  }
282
292
 
283
293
  case 'assistant': {
284
294
  // combines multiple assistant messages in this block into a single message:
285
- const bedrockContent: BedrockAssistantMessage['content'] = [];
295
+ const amazonBedrockContent: AmazonBedrockAssistantMessage['content'] =
296
+ [];
286
297
 
287
298
  for (let j = 0; j < block.messages.length; j++) {
288
299
  const message = block.messages[j];
@@ -303,7 +314,7 @@ export async function convertToBedrockChatMessages(
303
314
  break;
304
315
  }
305
316
 
306
- bedrockContent.push({
317
+ amazonBedrockContent.push({
307
318
  text:
308
319
  // trim the last text part if it's the last message in the block
309
320
  // because Bedrock does not allow trailing whitespace
@@ -319,16 +330,22 @@ export async function convertToBedrockChatMessages(
319
330
  }
320
331
 
321
332
  case 'reasoning': {
322
- const reasoningMetadata = await parseProviderOptions({
323
- provider: 'bedrock',
324
- providerOptions: part.providerOptions,
325
- schema: bedrockReasoningMetadataSchema,
326
- });
333
+ const reasoningMetadata =
334
+ (await parseProviderOptions({
335
+ provider: 'amazonBedrock',
336
+ providerOptions: part.providerOptions,
337
+ schema: amazonBedrockReasoningMetadataSchema,
338
+ })) ??
339
+ (await parseProviderOptions({
340
+ provider: 'bedrock',
341
+ providerOptions: part.providerOptions,
342
+ schema: amazonBedrockReasoningMetadataSchema,
343
+ }));
327
344
 
328
345
  if (reasoningMetadata?.signature != null) {
329
346
  // do not trim reasoning text when a signature is present:
330
347
  // the signature validates the exact original bytes
331
- bedrockContent.push({
348
+ amazonBedrockContent.push({
332
349
  reasoningContent: {
333
350
  reasoningText: {
334
351
  text: part.text,
@@ -337,7 +354,7 @@ export async function convertToBedrockChatMessages(
337
354
  },
338
355
  });
339
356
  } else if (reasoningMetadata?.redactedData != null) {
340
- bedrockContent.push({
357
+ amazonBedrockContent.push({
341
358
  reasoningContent: {
342
359
  redactedReasoning: {
343
360
  data: reasoningMetadata.redactedData,
@@ -348,7 +365,7 @@ export async function convertToBedrockChatMessages(
348
365
  // trim the last text part if it's the last message in the block
349
366
  // because Bedrock does not allow trailing whitespace
350
367
  // in pre-filled assistant responses
351
- bedrockContent.push({
368
+ amazonBedrockContent.push({
352
369
  reasoningContent: {
353
370
  reasoningText: {
354
371
  text: trimIfLast(
@@ -366,7 +383,7 @@ export async function convertToBedrockChatMessages(
366
383
  }
367
384
 
368
385
  case 'tool-call': {
369
- bedrockContent.push({
386
+ amazonBedrockContent.push({
370
387
  toolUse: {
371
388
  toolUseId: normalizeToolCallId(part.toolCallId, isMistral),
372
389
  name: part.toolName,
@@ -379,11 +396,11 @@ export async function convertToBedrockChatMessages(
379
396
  }
380
397
  const cachePoint = getCachePoint(message.providerOptions);
381
398
  if (cachePoint) {
382
- bedrockContent.push(cachePoint);
399
+ amazonBedrockContent.push(cachePoint);
383
400
  }
384
401
  }
385
402
 
386
- messages.push({ role: 'assistant', content: bedrockContent });
403
+ messages.push({ role: 'assistant', content: amazonBedrockContent });
387
404
 
388
405
  break;
389
406
  }
@@ -398,8 +415,11 @@ export async function convertToBedrockChatMessages(
398
415
  return { system, messages };
399
416
  }
400
417
 
401
- function getBedrockImageFormat(mimeType: string): BedrockImageFormat {
402
- const format = BEDROCK_IMAGE_MIME_TYPES[mimeType as BedrockImageMimeType];
418
+ function getAmazonBedrockImageFormat(
419
+ mimeType: string,
420
+ ): AmazonBedrockImageFormat {
421
+ const format =
422
+ BEDROCK_IMAGE_MIME_TYPES[mimeType as AmazonBedrockImageMimeType];
403
423
  if (!format) {
404
424
  throw new UnsupportedFunctionalityError({
405
425
  functionality: `image mime type: ${mimeType}`,
@@ -410,9 +430,11 @@ function getBedrockImageFormat(mimeType: string): BedrockImageFormat {
410
430
  return format;
411
431
  }
412
432
 
413
- function getBedrockDocumentFormat(mimeType: string): BedrockDocumentFormat {
433
+ function getAmazonBedrockDocumentFormat(
434
+ mimeType: string,
435
+ ): AmazonBedrockDocumentFormat {
414
436
  const format =
415
- BEDROCK_DOCUMENT_MIME_TYPES[mimeType as BedrockDocumentMimeType];
437
+ BEDROCK_DOCUMENT_MIME_TYPES[mimeType as AmazonBedrockDocumentMimeType];
416
438
  if (!format) {
417
439
  throw new UnsupportedFunctionalityError({
418
440
  functionality: `file mime type: ${mimeType}`,
package/src/index.ts CHANGED
@@ -1,19 +1,26 @@
1
1
  export type { AnthropicProviderOptions } from '@ai-sdk/anthropic';
2
2
 
3
- export type { AmazonBedrockEmbeddingModelOptions } from './bedrock-embedding-options';
3
+ export type { AmazonBedrockEmbeddingModelOptions } from './amazon-bedrock-embedding-model-options';
4
4
  export type {
5
- AmazonBedrockLanguageModelOptions,
6
- /** @deprecated Use `AmazonBedrockLanguageModelOptions` instead. */
7
- AmazonBedrockLanguageModelOptions as BedrockProviderOptions,
8
- } from './bedrock-chat-options';
9
- export { bedrock, createAmazonBedrock } from './bedrock-provider';
5
+ AmazonBedrockLanguageModelChatOptions,
6
+ /** @deprecated Use `AmazonBedrockLanguageModelChatOptions` instead. */
7
+ AmazonBedrockLanguageModelChatOptions as AmazonBedrockLanguageModelOptions,
8
+ /** @deprecated Use `AmazonBedrockLanguageModelChatOptions` instead. */
9
+ AmazonBedrockLanguageModelChatOptions as BedrockProviderOptions,
10
+ } from './amazon-bedrock-chat-language-model-options';
11
+ export {
12
+ amazonBedrock,
13
+ /** @deprecated Use `amazonBedrock` instead. */
14
+ amazonBedrock as bedrock,
15
+ createAmazonBedrock,
16
+ } from './amazon-bedrock-provider';
10
17
  export type {
11
18
  AmazonBedrockProvider,
12
19
  AmazonBedrockProviderSettings,
13
- } from './bedrock-provider';
20
+ } from './amazon-bedrock-provider';
14
21
  export type {
15
22
  AmazonBedrockRerankingModelOptions,
16
23
  /** @deprecated Use `AmazonBedrockRerankingModelOptions` instead. */
17
24
  AmazonBedrockRerankingModelOptions as BedrockRerankingOptions,
18
- } from './reranking/bedrock-reranking-options';
25
+ } from './reranking/amazon-bedrock-reranking-model-options';
19
26
  export { VERSION } from './version';
@@ -1,8 +1,8 @@
1
1
  import type { LanguageModelV4FinishReason } from '@ai-sdk/provider';
2
- import type { BedrockStopReason } from './bedrock-api-types';
2
+ import type { AmazonBedrockStopReason } from './amazon-bedrock-api-types';
3
3
 
4
- export function mapBedrockFinishReason(
5
- finishReason: BedrockStopReason,
4
+ export function mapAmazonBedrockFinishReason(
5
+ finishReason: AmazonBedrockStopReason,
6
6
  isJsonResponseFromTool?: boolean,
7
7
  ): LanguageModelV4FinishReason['unified'] {
8
8
  switch (finishReason) {
@@ -2,12 +2,12 @@ import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';
2
2
  import { z } from 'zod/v4';
3
3
 
4
4
  // https://docs.aws.amazon.com/bedrock/latest/APIReference/API_agent-runtime_Rerank.html
5
- export type BedrockRerankingInput = {
5
+ export type AmazonBedrockRerankingInput = {
6
6
  nextToken?: string;
7
7
  queries: [{ type: 'TEXT'; textQuery: { text: string } }];
8
8
  rerankingConfiguration: {
9
9
  type: 'BEDROCK_RERANKING_MODEL';
10
- bedrockRerankingConfiguration: {
10
+ amazonBedrockRerankingConfiguration: {
11
11
  modelConfiguration: {
12
12
  modelArn: string;
13
13
  additionalModelRequestFields?: Record<string, unknown>;
@@ -29,7 +29,7 @@ export type BedrockRerankingInput = {
29
29
  }[];
30
30
  };
31
31
 
32
- export const bedrockRerankingResponseSchema = lazySchema(() =>
32
+ export const amazonBedrockRerankingResponseSchema = lazySchema(() =>
33
33
  zodSchema(
34
34
  z.object({
35
35
  results: z.array(
@@ -2,7 +2,7 @@ import { lazySchema, zodSchema } from '@ai-sdk/provider-utils';
2
2
  import { z } from 'zod/v4';
3
3
 
4
4
  // https://docs.aws.amazon.com/bedrock/latest/userguide/rerank-supported.html
5
- export type BedrockRerankingModelId =
5
+ export type AmazonBedrockRerankingModelId =
6
6
  | 'amazon.rerank-v1:0'
7
7
  | 'cohere.rerank-v3-5:0'
8
8
  | (string & {});