@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
@@ -33,38 +33,38 @@ import { getModelCapabilities } from '@ai-sdk/anthropic/internal';
33
33
  import { z } from 'zod/v4';
34
34
  import {
35
35
  BEDROCK_STOP_REASONS,
36
- type BedrockConverseInput,
37
- type BedrockStopReason,
38
- } from './bedrock-api-types';
36
+ type AmazonBedrockConverseInput,
37
+ type AmazonBedrockStopReason,
38
+ } from './amazon-bedrock-api-types';
39
39
  import {
40
- amazonBedrockLanguageModelOptions,
41
- type AmazonBedrockLanguageModelOptions,
42
- type BedrockChatModelId,
43
- } from './bedrock-chat-options';
44
- import { BedrockErrorSchema } from './bedrock-error';
45
- import { createBedrockEventStreamResponseHandler } from './bedrock-event-stream-response-handler';
46
- import { prepareTools } from './bedrock-prepare-tools';
40
+ amazonBedrockLanguageModelChatOptions,
41
+ type AmazonBedrockLanguageModelChatOptions,
42
+ type AmazonBedrockChatModelId,
43
+ } from './amazon-bedrock-chat-language-model-options';
44
+ import { AmazonBedrockErrorSchema } from './amazon-bedrock-error';
45
+ import { createAmazonBedrockEventStreamResponseHandler } from './amazon-bedrock-event-stream-response-handler';
46
+ import { prepareTools } from './amazon-bedrock-prepare-tools';
47
47
  import {
48
- convertBedrockUsage,
49
- type BedrockUsage,
50
- } from './convert-bedrock-usage';
51
- import { convertToBedrockChatMessages } from './convert-to-bedrock-chat-messages';
52
- import { mapBedrockFinishReason } from './map-bedrock-finish-reason';
48
+ convertAmazonBedrockUsage,
49
+ type AmazonBedrockUsage,
50
+ } from './convert-amazon-bedrock-usage';
51
+ import { convertToAmazonBedrockChatMessages } from './convert-to-amazon-bedrock-chat-messages';
52
+ import { mapAmazonBedrockFinishReason } from './map-amazon-bedrock-finish-reason';
53
53
  import { isMistralModel, normalizeToolCallId } from './normalize-tool-call-id';
54
- import type { BedrockReasoningMetadata } from './bedrock-reasoning-metadata';
54
+ import type { AmazonBedrockReasoningMetadata } from './amazon-bedrock-reasoning-metadata';
55
55
 
56
- type BedrockChatConfig = {
56
+ type AmazonBedrockChatConfig = {
57
57
  baseUrl: () => string;
58
58
  headers?: Resolvable<Record<string, string | undefined>>;
59
59
  fetch?: FetchFunction;
60
60
  generateId: () => string;
61
61
  };
62
62
 
63
- export class BedrockChatLanguageModel implements LanguageModelV4 {
63
+ export class AmazonBedrockChatLanguageModel implements LanguageModelV4 {
64
64
  readonly specificationVersion = 'v4';
65
65
  readonly provider = 'amazon-bedrock';
66
66
 
67
- static [WORKFLOW_SERIALIZE](model: BedrockChatLanguageModel) {
67
+ static [WORKFLOW_SERIALIZE](model: AmazonBedrockChatLanguageModel) {
68
68
  return serializeModelOptions({
69
69
  modelId: model.modelId,
70
70
  config: model.config,
@@ -73,14 +73,14 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
73
73
 
74
74
  static [WORKFLOW_DESERIALIZE](options: {
75
75
  modelId: string;
76
- config: BedrockChatConfig;
76
+ config: AmazonBedrockChatConfig;
77
77
  }) {
78
- return new BedrockChatLanguageModel(options.modelId, options.config);
78
+ return new AmazonBedrockChatLanguageModel(options.modelId, options.config);
79
79
  }
80
80
 
81
81
  constructor(
82
- readonly modelId: BedrockChatModelId,
83
- private readonly config: BedrockChatConfig,
82
+ readonly modelId: AmazonBedrockChatModelId,
83
+ private readonly config: AmazonBedrockChatConfig,
84
84
  ) {}
85
85
 
86
86
  private async getArgs({
@@ -99,18 +99,25 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
99
99
  reasoning,
100
100
  providerOptions,
101
101
  }: LanguageModelV4CallOptions): Promise<{
102
- command: BedrockConverseInput;
102
+ command: AmazonBedrockConverseInput;
103
103
  warnings: SharedV4Warning[];
104
104
  usesJsonResponseTool: boolean;
105
105
  betas: Set<string>;
106
106
  }> {
107
- // Parse provider options
108
- let bedrockOptions =
107
+ // Parse provider options. Prefer `amazonBedrock`; fall back to legacy
108
+ // `bedrock` key for backward compatibility.
109
+ let amazonBedrockOptions =
110
+ (await parseProviderOptions({
111
+ provider: 'amazonBedrock',
112
+ providerOptions,
113
+ schema: amazonBedrockLanguageModelChatOptions,
114
+ })) ??
109
115
  (await parseProviderOptions({
110
116
  provider: 'bedrock',
111
117
  providerOptions,
112
- schema: amazonBedrockLanguageModelOptions,
113
- })) ?? {};
118
+ schema: amazonBedrockLanguageModelChatOptions,
119
+ })) ??
120
+ {};
114
121
 
115
122
  const warnings: SharedV4Warning[] = [];
116
123
 
@@ -166,17 +173,17 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
166
173
  const isAnthropicModel = this.modelId.includes('anthropic');
167
174
  const isOpenAIModel = this.modelId.startsWith('openai.');
168
175
 
169
- bedrockOptions = resolveBedrockReasoningConfig({
176
+ amazonBedrockOptions = resolveAmazonBedrockReasoningConfig({
170
177
  reasoning,
171
- bedrockOptions,
178
+ amazonBedrockOptions,
172
179
  warnings,
173
180
  isAnthropicModel,
174
181
  modelId: this.modelId,
175
182
  });
176
183
 
177
184
  const isThinkingEnabled =
178
- bedrockOptions.reasoningConfig?.type === 'enabled' ||
179
- bedrockOptions.reasoningConfig?.type === 'adaptive';
185
+ amazonBedrockOptions.reasoningConfig?.type === 'enabled' ||
186
+ amazonBedrockOptions.reasoningConfig?.type === 'adaptive';
180
187
 
181
188
  const { supportsStructuredOutput: modelSupportsStructuredOutput } =
182
189
  getModelCapabilities(this.modelId);
@@ -210,33 +217,33 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
210
217
  warnings.push(...toolWarnings);
211
218
 
212
219
  if (additionalTools) {
213
- bedrockOptions.additionalModelRequestFields = {
214
- ...bedrockOptions.additionalModelRequestFields,
220
+ amazonBedrockOptions.additionalModelRequestFields = {
221
+ ...amazonBedrockOptions.additionalModelRequestFields,
215
222
  ...additionalTools,
216
223
  };
217
224
  }
218
225
 
219
- if (betas.size > 0 || bedrockOptions.anthropicBeta) {
220
- const existingBetas = bedrockOptions.anthropicBeta ?? [];
226
+ if (betas.size > 0 || amazonBedrockOptions.anthropicBeta) {
227
+ const existingBetas = amazonBedrockOptions.anthropicBeta ?? [];
221
228
  const mergedBetas =
222
229
  betas.size > 0
223
230
  ? [...existingBetas, ...Array.from(betas)]
224
231
  : existingBetas;
225
232
 
226
- bedrockOptions.additionalModelRequestFields = {
227
- ...bedrockOptions.additionalModelRequestFields,
233
+ amazonBedrockOptions.additionalModelRequestFields = {
234
+ ...amazonBedrockOptions.additionalModelRequestFields,
228
235
  anthropic_beta: mergedBetas,
229
236
  };
230
237
  }
231
238
 
232
- const thinkingType = bedrockOptions.reasoningConfig?.type;
239
+ const thinkingType = amazonBedrockOptions.reasoningConfig?.type;
233
240
  const thinkingBudget =
234
241
  thinkingType === 'enabled'
235
- ? bedrockOptions.reasoningConfig?.budgetTokens
242
+ ? amazonBedrockOptions.reasoningConfig?.budgetTokens
236
243
  : undefined;
237
244
  const thinkingDisplay =
238
245
  thinkingType === 'adaptive'
239
- ? bedrockOptions.reasoningConfig?.display
246
+ ? amazonBedrockOptions.reasoningConfig?.display
240
247
  : undefined;
241
248
  const isAnthropicThinkingEnabled = isAnthropicModel && isThinkingEnabled;
242
249
 
@@ -255,16 +262,16 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
255
262
  } else {
256
263
  inferenceConfig.maxTokens = thinkingBudget + 4096; // Default + thinking budget maxTokens = 4096, TODO update default in v5
257
264
  }
258
- bedrockOptions.additionalModelRequestFields = {
259
- ...bedrockOptions.additionalModelRequestFields,
265
+ amazonBedrockOptions.additionalModelRequestFields = {
266
+ ...amazonBedrockOptions.additionalModelRequestFields,
260
267
  thinking: {
261
268
  type: 'enabled',
262
269
  budget_tokens: thinkingBudget,
263
270
  },
264
271
  };
265
272
  } else if (thinkingType === 'adaptive') {
266
- bedrockOptions.additionalModelRequestFields = {
267
- ...bedrockOptions.additionalModelRequestFields,
273
+ amazonBedrockOptions.additionalModelRequestFields = {
274
+ ...amazonBedrockOptions.additionalModelRequestFields,
268
275
  thinking: {
269
276
  type: 'adaptive',
270
277
  ...(thinkingDisplay != null && { display: thinkingDisplay }),
@@ -272,7 +279,7 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
272
279
  };
273
280
  }
274
281
  } else if (!isAnthropicModel) {
275
- if (bedrockOptions.reasoningConfig?.budgetTokens != null) {
282
+ if (amazonBedrockOptions.reasoningConfig?.budgetTokens != null) {
276
283
  warnings.push({
277
284
  type: 'unsupported',
278
285
  feature: 'budgetTokens',
@@ -291,27 +298,27 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
291
298
  }
292
299
 
293
300
  const maxReasoningEffort =
294
- bedrockOptions.reasoningConfig?.maxReasoningEffort;
301
+ amazonBedrockOptions.reasoningConfig?.maxReasoningEffort;
295
302
 
296
303
  if (maxReasoningEffort != null) {
297
304
  if (isAnthropicModel) {
298
- bedrockOptions.additionalModelRequestFields = {
299
- ...bedrockOptions.additionalModelRequestFields,
305
+ amazonBedrockOptions.additionalModelRequestFields = {
306
+ ...amazonBedrockOptions.additionalModelRequestFields,
300
307
  output_config: {
301
- ...bedrockOptions.additionalModelRequestFields?.output_config,
308
+ ...amazonBedrockOptions.additionalModelRequestFields?.output_config,
302
309
  effort: maxReasoningEffort,
303
310
  },
304
311
  };
305
312
  } else if (isOpenAIModel) {
306
313
  // OpenAI models on Bedrock expect `reasoning_effort` as a flat value
307
- bedrockOptions.additionalModelRequestFields = {
308
- ...bedrockOptions.additionalModelRequestFields,
314
+ amazonBedrockOptions.additionalModelRequestFields = {
315
+ ...amazonBedrockOptions.additionalModelRequestFields,
309
316
  reasoning_effort: maxReasoningEffort,
310
317
  };
311
318
  } else {
312
319
  // other models (such as Nova 2) use reasoningConfig format
313
- bedrockOptions.additionalModelRequestFields = {
314
- ...bedrockOptions.additionalModelRequestFields,
320
+ amazonBedrockOptions.additionalModelRequestFields = {
321
+ ...amazonBedrockOptions.additionalModelRequestFields,
315
322
  reasoningConfig: {
316
323
  ...(thinkingType != null &&
317
324
  thinkingType !== 'adaptive' && { type: thinkingType }),
@@ -323,10 +330,10 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
323
330
  }
324
331
 
325
332
  if (useNativeStructuredOutput) {
326
- bedrockOptions.additionalModelRequestFields = {
327
- ...bedrockOptions.additionalModelRequestFields,
333
+ amazonBedrockOptions.additionalModelRequestFields = {
334
+ ...amazonBedrockOptions.additionalModelRequestFields,
328
335
  output_config: {
329
- ...bedrockOptions.additionalModelRequestFields?.output_config,
336
+ ...amazonBedrockOptions.additionalModelRequestFields?.output_config,
330
337
  format: {
331
338
  type: 'json_schema',
332
339
  schema: responseFormat!.schema,
@@ -403,18 +410,18 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
403
410
  }
404
411
 
405
412
  const isMistral = isMistralModel(this.modelId);
406
- const { system, messages } = await convertToBedrockChatMessages(
413
+ const { system, messages } = await convertToAmazonBedrockChatMessages(
407
414
  filteredPrompt,
408
415
  isMistral,
409
416
  );
410
417
 
411
- // Filter out reasoningConfig from providerOptions.bedrock to prevent sending it to Bedrock API
418
+ // Filter out reasoningConfig from amazonBedrock provider options to prevent sending it to Bedrock API
412
419
  const {
413
420
  reasoningConfig: _,
414
421
  additionalModelRequestFields: __,
415
422
  serviceTier: ___,
416
- ...filteredBedrockOptions
417
- } = providerOptions?.bedrock || {};
423
+ ...filteredAmazonBedrockOptions
424
+ } = providerOptions?.amazonBedrock ?? providerOptions?.bedrock ?? {};
418
425
 
419
426
  const additionalModelResponseFieldPaths = isAnthropicModel
420
427
  ? ['/delta/stop_sequence']
@@ -425,19 +432,19 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
425
432
  system,
426
433
  messages,
427
434
  additionalModelRequestFields:
428
- bedrockOptions.additionalModelRequestFields,
435
+ amazonBedrockOptions.additionalModelRequestFields,
429
436
  ...(additionalModelResponseFieldPaths && {
430
437
  additionalModelResponseFieldPaths,
431
438
  }),
432
439
  ...(Object.keys(inferenceConfig).length > 0 && {
433
440
  inferenceConfig,
434
441
  }),
435
- ...(bedrockOptions.serviceTier != null && {
442
+ ...(amazonBedrockOptions.serviceTier != null && {
436
443
  serviceTier: {
437
- type: bedrockOptions.serviceTier,
444
+ type: amazonBedrockOptions.serviceTier,
438
445
  },
439
446
  }),
440
- ...filteredBedrockOptions,
447
+ ...filteredAmazonBedrockOptions,
441
448
  ...(toolConfig.tools !== undefined && toolConfig.tools.length > 0
442
449
  ? { toolConfig }
443
450
  : {}),
@@ -478,11 +485,11 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
478
485
  headers: await this.getHeaders({ headers: options.headers }),
479
486
  body: args,
480
487
  failedResponseHandler: createJsonErrorResponseHandler({
481
- errorSchema: BedrockErrorSchema,
488
+ errorSchema: AmazonBedrockErrorSchema,
482
489
  errorToMessage: error => `${error.message ?? 'Unknown error'}`,
483
490
  }),
484
491
  successfulResponseHandler: createJsonResponseHandler(
485
- BedrockResponseSchema,
492
+ AmazonBedrockResponseSchema,
486
493
  ),
487
494
  abortSignal: options.abortSignal,
488
495
  fetch: this.config.fetch,
@@ -507,23 +514,26 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
507
514
  };
508
515
 
509
516
  if (part.reasoningContent.reasoningText.signature) {
517
+ const reasoningPayload: AmazonBedrockReasoningMetadata = {
518
+ signature: part.reasoningContent.reasoningText.signature,
519
+ };
510
520
  reasoning.providerMetadata = {
511
- bedrock: {
512
- signature: part.reasoningContent.reasoningText.signature,
513
- } satisfies BedrockReasoningMetadata,
521
+ amazonBedrock: reasoningPayload,
522
+ bedrock: reasoningPayload,
514
523
  };
515
524
  }
516
525
 
517
526
  content.push(reasoning);
518
527
  } else if ('redactedReasoning' in part.reasoningContent) {
528
+ const redactedPayload: AmazonBedrockReasoningMetadata = {
529
+ redactedData: part.reasoningContent.redactedReasoning.data ?? '',
530
+ };
519
531
  content.push({
520
532
  type: 'reasoning',
521
533
  text: '',
522
534
  providerMetadata: {
523
- bedrock: {
524
- redactedData:
525
- part.reasoningContent.redactedReasoning.data ?? '',
526
- } satisfies BedrockReasoningMetadata,
535
+ amazonBedrock: redactedPayload,
536
+ bedrock: redactedPayload,
527
537
  },
528
538
  });
529
539
  }
@@ -559,7 +569,7 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
559
569
  const stopSequence =
560
570
  response.additionalModelResponseFields?.delta?.stop_sequence ?? null;
561
571
 
562
- const providerMetadata =
572
+ const providerMetadataPayload =
563
573
  response.trace ||
564
574
  response.usage ||
565
575
  response.performanceConfig ||
@@ -567,43 +577,48 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
567
577
  isJsonResponseFromTool ||
568
578
  stopSequence
569
579
  ? {
570
- bedrock: {
571
- ...(response.trace && typeof response.trace === 'object'
572
- ? { trace: response.trace as JSONObject }
573
- : {}),
574
- ...(response.performanceConfig && {
575
- performanceConfig: response.performanceConfig,
576
- }),
577
- ...(response.serviceTier && {
578
- serviceTier: response.serviceTier,
579
- }),
580
- ...((response.usage?.cacheWriteInputTokens != null ||
581
- response.usage?.cacheDetails != null) && {
582
- usage: {
583
- ...(response.usage.cacheWriteInputTokens != null && {
584
- cacheWriteInputTokens: response.usage.cacheWriteInputTokens,
585
- }),
586
- ...(response.usage.cacheDetails != null && {
587
- cacheDetails: response.usage.cacheDetails,
588
- }),
589
- },
590
- }),
591
- ...(isJsonResponseFromTool && { isJsonResponseFromTool: true }),
592
- stopSequence,
593
- },
580
+ ...(response.trace && typeof response.trace === 'object'
581
+ ? { trace: response.trace as JSONObject }
582
+ : {}),
583
+ ...(response.performanceConfig && {
584
+ performanceConfig: response.performanceConfig,
585
+ }),
586
+ ...(response.serviceTier && {
587
+ serviceTier: response.serviceTier,
588
+ }),
589
+ ...((response.usage?.cacheWriteInputTokens != null ||
590
+ response.usage?.cacheDetails != null) && {
591
+ usage: {
592
+ ...(response.usage.cacheWriteInputTokens != null && {
593
+ cacheWriteInputTokens: response.usage.cacheWriteInputTokens,
594
+ }),
595
+ ...(response.usage.cacheDetails != null && {
596
+ cacheDetails: response.usage.cacheDetails,
597
+ }),
598
+ },
599
+ }),
600
+ ...(isJsonResponseFromTool && { isJsonResponseFromTool: true }),
601
+ stopSequence,
594
602
  }
595
603
  : undefined;
596
604
 
605
+ const providerMetadata = providerMetadataPayload
606
+ ? {
607
+ amazonBedrock: providerMetadataPayload,
608
+ bedrock: providerMetadataPayload,
609
+ }
610
+ : undefined;
611
+
597
612
  return {
598
613
  content,
599
614
  finishReason: {
600
- unified: mapBedrockFinishReason(
601
- response.stopReason as BedrockStopReason,
615
+ unified: mapAmazonBedrockFinishReason(
616
+ response.stopReason as AmazonBedrockStopReason,
602
617
  isJsonResponseFromTool,
603
618
  ),
604
619
  raw: response.stopReason ?? undefined,
605
620
  },
606
- usage: convertBedrockUsage(response.usage),
621
+ usage: convertAmazonBedrockUsage(response.usage),
607
622
  response: {
608
623
  id: responseHeaders?.['x-amzn-requestid'] ?? undefined,
609
624
  timestamp:
@@ -635,11 +650,12 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
635
650
  headers: await this.getHeaders({ headers: options.headers }),
636
651
  body: args,
637
652
  failedResponseHandler: createJsonErrorResponseHandler({
638
- errorSchema: BedrockErrorSchema,
653
+ errorSchema: AmazonBedrockErrorSchema,
639
654
  errorToMessage: error => `${error.type}: ${error.message}`,
640
655
  }),
641
- successfulResponseHandler:
642
- createBedrockEventStreamResponseHandler(BedrockStreamSchema),
656
+ successfulResponseHandler: createAmazonBedrockEventStreamResponseHandler(
657
+ AmazonBedrockStreamSchema,
658
+ ),
643
659
  abortSignal: options.abortSignal,
644
660
  fetch: this.config.fetch,
645
661
  });
@@ -648,7 +664,7 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
648
664
  unified: 'other',
649
665
  raw: undefined,
650
666
  };
651
- let usage: BedrockUsage | undefined = undefined;
667
+ let usage: AmazonBedrockUsage | undefined = undefined;
652
668
  let providerMetadata: SharedV4ProviderMetadata | undefined = undefined;
653
669
  let isJsonResponseFromTool = false;
654
670
  let stopSequence: string | null = null;
@@ -668,7 +684,7 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
668
684
  return {
669
685
  stream: response.pipeThrough(
670
686
  new TransformStream<
671
- ParseResult<z.infer<typeof BedrockStreamSchema>>,
687
+ ParseResult<z.infer<typeof AmazonBedrockStreamSchema>>,
672
688
  LanguageModelV4StreamPart
673
689
  >({
674
690
  start(controller) {
@@ -685,9 +701,9 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
685
701
  },
686
702
 
687
703
  transform(chunk, controller) {
688
- function enqueueError(bedrockError: Record<string, any>) {
704
+ function enqueueError(amazonBedrockError: Record<string, any>) {
689
705
  finishReason = { unified: 'error', raw: undefined };
690
- controller.enqueue({ type: 'error', error: bedrockError });
706
+ controller.enqueue({ type: 'error', error: amazonBedrockError });
691
707
  }
692
708
 
693
709
  // Emit raw chunk if requested (before anything else)
@@ -723,8 +739,8 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
723
739
 
724
740
  if (value.messageStop) {
725
741
  finishReason = {
726
- unified: mapBedrockFinishReason(
727
- value.messageStop.stopReason as BedrockStopReason,
742
+ unified: mapAmazonBedrockFinishReason(
743
+ value.messageStop.stopReason as AmazonBedrockStopReason,
728
744
  isJsonResponseFromTool,
729
745
  ),
730
746
  raw: value.messageStop.stopReason ?? undefined,
@@ -768,17 +784,19 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
768
784
  value.metadata.performanceConfig ||
769
785
  value.metadata.serviceTier
770
786
  ) {
787
+ const metadataPayload = {
788
+ ...cacheUsage,
789
+ ...trace,
790
+ ...(value.metadata.performanceConfig && {
791
+ performanceConfig: value.metadata.performanceConfig,
792
+ }),
793
+ ...(value.metadata.serviceTier && {
794
+ serviceTier: value.metadata.serviceTier,
795
+ }),
796
+ };
771
797
  providerMetadata = {
772
- bedrock: {
773
- ...cacheUsage,
774
- ...trace,
775
- ...(value.metadata.performanceConfig && {
776
- performanceConfig: value.metadata.performanceConfig,
777
- }),
778
- ...(value.metadata.serviceTier && {
779
- serviceTier: value.metadata.serviceTier,
780
- }),
781
- },
798
+ amazonBedrock: metadataPayload,
799
+ bedrock: metadataPayload,
782
800
  };
783
801
  }
784
802
  }
@@ -905,16 +923,20 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
905
923
  id: String(blockIndex),
906
924
  });
907
925
  }
908
- controller.enqueue({
909
- type: 'reasoning-delta',
910
- id: String(blockIndex),
911
- delta: '',
912
- providerMetadata: {
913
- bedrock: {
914
- signature: reasoningContent.signature,
915
- } satisfies BedrockReasoningMetadata,
916
- },
917
- });
926
+ {
927
+ const signaturePayload: AmazonBedrockReasoningMetadata = {
928
+ signature: reasoningContent.signature,
929
+ };
930
+ controller.enqueue({
931
+ type: 'reasoning-delta',
932
+ id: String(blockIndex),
933
+ delta: '',
934
+ providerMetadata: {
935
+ amazonBedrock: signaturePayload,
936
+ bedrock: signaturePayload,
937
+ },
938
+ });
939
+ }
918
940
  } else if ('data' in reasoningContent && reasoningContent.data) {
919
941
  if (contentBlocks[blockIndex] == null) {
920
942
  contentBlocks[blockIndex] = { type: 'reasoning' };
@@ -923,16 +945,20 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
923
945
  id: String(blockIndex),
924
946
  });
925
947
  }
926
- controller.enqueue({
927
- type: 'reasoning-delta',
928
- id: String(blockIndex),
929
- delta: '',
930
- providerMetadata: {
931
- bedrock: {
932
- redactedData: reasoningContent.data,
933
- } satisfies BedrockReasoningMetadata,
934
- },
935
- });
948
+ {
949
+ const redactedPayload: AmazonBedrockReasoningMetadata = {
950
+ redactedData: reasoningContent.data,
951
+ };
952
+ controller.enqueue({
953
+ type: 'reasoning-delta',
954
+ id: String(blockIndex),
955
+ delta: '',
956
+ providerMetadata: {
957
+ amazonBedrock: redactedPayload,
958
+ bedrock: redactedPayload,
959
+ },
960
+ });
961
+ }
936
962
  }
937
963
  }
938
964
 
@@ -993,30 +1019,25 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
993
1019
  flush(controller) {
994
1020
  // Update provider metadata with isJsonResponseFromTool and stopSequence if needed
995
1021
  if (isJsonResponseFromTool || stopSequence != null) {
996
- if (providerMetadata) {
997
- providerMetadata.bedrock = {
998
- ...providerMetadata.bedrock,
999
- ...(isJsonResponseFromTool && {
1000
- isJsonResponseFromTool: true,
1001
- }),
1002
- stopSequence,
1003
- };
1004
- } else {
1005
- providerMetadata = {
1006
- bedrock: {
1007
- ...(isJsonResponseFromTool && {
1008
- isJsonResponseFromTool: true,
1009
- }),
1010
- stopSequence,
1011
- },
1012
- };
1013
- }
1022
+ const updatePayload = {
1023
+ ...(providerMetadata?.amazonBedrock ??
1024
+ providerMetadata?.bedrock),
1025
+ ...(isJsonResponseFromTool && {
1026
+ isJsonResponseFromTool: true,
1027
+ }),
1028
+ stopSequence,
1029
+ };
1030
+ providerMetadata = {
1031
+ ...providerMetadata,
1032
+ amazonBedrock: updatePayload,
1033
+ bedrock: updatePayload,
1034
+ };
1014
1035
  }
1015
1036
 
1016
1037
  controller.enqueue({
1017
1038
  type: 'finish',
1018
1039
  finishReason,
1019
- usage: convertBedrockUsage(usage),
1040
+ usage: convertAmazonBedrockUsage(usage),
1020
1041
  ...(providerMetadata && { providerMetadata }),
1021
1042
  });
1022
1043
  },
@@ -1033,12 +1054,12 @@ export class BedrockChatLanguageModel implements LanguageModelV4 {
1033
1054
  }
1034
1055
  }
1035
1056
 
1036
- const BedrockStopReasonSchema = z.union([
1057
+ const AmazonBedrockStopReasonSchema = z.union([
1037
1058
  z.enum(BEDROCK_STOP_REASONS),
1038
1059
  z.string(),
1039
1060
  ]);
1040
1061
 
1041
- const BedrockAdditionalModelResponseFieldsSchema = z
1062
+ const AmazonBedrockAdditionalModelResponseFieldsSchema = z
1042
1063
  .object({
1043
1064
  delta: z
1044
1065
  .object({
@@ -1048,24 +1069,24 @@ const BedrockAdditionalModelResponseFieldsSchema = z
1048
1069
  })
1049
1070
  .catchall(z.unknown());
1050
1071
 
1051
- const BedrockToolUseSchema = z.object({
1072
+ const AmazonBedrockToolUseSchema = z.object({
1052
1073
  toolUseId: z.string(),
1053
1074
  name: z.string(),
1054
1075
  input: z.unknown(),
1055
1076
  });
1056
1077
 
1057
- const BedrockReasoningTextSchema = z.object({
1078
+ const AmazonBedrockReasoningTextSchema = z.object({
1058
1079
  signature: z.string().nullish(),
1059
1080
  text: z.string(),
1060
1081
  });
1061
1082
 
1062
- const BedrockRedactedReasoningSchema = z.object({
1083
+ const AmazonBedrockRedactedReasoningSchema = z.object({
1063
1084
  data: z.string(),
1064
1085
  });
1065
1086
 
1066
1087
  // limited version of the schema, focused on what is needed for the implementation
1067
1088
  // this approach limits breakages when the API changes and increases efficiency
1068
- const BedrockResponseSchema = z.object({
1089
+ const AmazonBedrockResponseSchema = z.object({
1069
1090
  metrics: z
1070
1091
  .object({
1071
1092
  latencyMs: z.number(),
@@ -1076,14 +1097,14 @@ const BedrockResponseSchema = z.object({
1076
1097
  content: z.array(
1077
1098
  z.object({
1078
1099
  text: z.string().nullish(),
1079
- toolUse: BedrockToolUseSchema.nullish(),
1100
+ toolUse: AmazonBedrockToolUseSchema.nullish(),
1080
1101
  reasoningContent: z
1081
1102
  .union([
1082
1103
  z.object({
1083
- reasoningText: BedrockReasoningTextSchema,
1104
+ reasoningText: AmazonBedrockReasoningTextSchema,
1084
1105
  }),
1085
1106
  z.object({
1086
- redactedReasoning: BedrockRedactedReasoningSchema,
1107
+ redactedReasoning: AmazonBedrockRedactedReasoningSchema,
1087
1108
  }),
1088
1109
  ])
1089
1110
  .nullish(),
@@ -1092,9 +1113,9 @@ const BedrockResponseSchema = z.object({
1092
1113
  role: z.string(),
1093
1114
  }),
1094
1115
  }),
1095
- stopReason: BedrockStopReasonSchema,
1116
+ stopReason: AmazonBedrockStopReasonSchema,
1096
1117
  additionalModelResponseFields:
1097
- BedrockAdditionalModelResponseFieldsSchema.nullish(),
1118
+ AmazonBedrockAdditionalModelResponseFieldsSchema.nullish(),
1098
1119
  trace: z.unknown().nullish(),
1099
1120
  performanceConfig: z.object({ latency: z.string() }).nullish(),
1100
1121
  serviceTier: z.object({ type: z.string() }).nullish(),
@@ -1112,7 +1133,7 @@ const BedrockResponseSchema = z.object({
1112
1133
 
1113
1134
  // limited version of the schema, focussed on what is needed for the implementation
1114
1135
  // this approach limits breakages when the API changes and increases efficiency
1115
- const BedrockStreamSchema = z.object({
1136
+ const AmazonBedrockStreamSchema = z.object({
1116
1137
  contentBlockDelta: z
1117
1138
  .object({
1118
1139
  contentBlockIndex: z.number(),
@@ -1140,7 +1161,7 @@ const BedrockStreamSchema = z.object({
1140
1161
  contentBlockIndex: z.number(),
1141
1162
  start: z
1142
1163
  .object({
1143
- toolUse: BedrockToolUseSchema.nullish(),
1164
+ toolUse: AmazonBedrockToolUseSchema.nullish(),
1144
1165
  })
1145
1166
  .nullish(),
1146
1167
  })
@@ -1154,8 +1175,8 @@ const BedrockStreamSchema = z.object({
1154
1175
  messageStop: z
1155
1176
  .object({
1156
1177
  additionalModelResponseFields:
1157
- BedrockAdditionalModelResponseFieldsSchema.nullish(),
1158
- stopReason: BedrockStopReasonSchema,
1178
+ AmazonBedrockAdditionalModelResponseFieldsSchema.nullish(),
1179
+ stopReason: AmazonBedrockStopReasonSchema,
1159
1180
  })
1160
1181
  .nullish(),
1161
1182
  metadata: z
@@ -1182,11 +1203,11 @@ const BedrockStreamSchema = z.object({
1182
1203
  });
1183
1204
 
1184
1205
  export {
1185
- bedrockReasoningMetadataSchema,
1186
- type BedrockReasoningMetadata,
1187
- } from './bedrock-reasoning-metadata';
1206
+ amazonBedrockReasoningMetadataSchema,
1207
+ type AmazonBedrockReasoningMetadata,
1208
+ } from './amazon-bedrock-reasoning-metadata';
1188
1209
 
1189
- const bedrockReasoningEffortMap: Partial<
1210
+ const amazonBedrockReasoningEffortMap: Partial<
1190
1211
  Record<string, 'low' | 'medium' | 'high' | 'max'>
1191
1212
  > = {
1192
1213
  minimal: 'low',
@@ -1196,24 +1217,24 @@ const bedrockReasoningEffortMap: Partial<
1196
1217
  xhigh: 'max',
1197
1218
  };
1198
1219
 
1199
- function resolveBedrockReasoningConfig({
1220
+ function resolveAmazonBedrockReasoningConfig({
1200
1221
  reasoning,
1201
- bedrockOptions,
1222
+ amazonBedrockOptions,
1202
1223
  warnings,
1203
1224
  isAnthropicModel,
1204
1225
  modelId,
1205
1226
  }: {
1206
1227
  reasoning: LanguageModelV4CallOptions['reasoning'];
1207
- bedrockOptions: AmazonBedrockLanguageModelOptions;
1228
+ amazonBedrockOptions: AmazonBedrockLanguageModelChatOptions;
1208
1229
  warnings: SharedV4Warning[];
1209
1230
  isAnthropicModel: boolean;
1210
1231
  modelId: string;
1211
- }): AmazonBedrockLanguageModelOptions {
1232
+ }): AmazonBedrockLanguageModelChatOptions {
1212
1233
  if (!isCustomReasoning(reasoning)) {
1213
- return bedrockOptions;
1234
+ return amazonBedrockOptions;
1214
1235
  }
1215
1236
 
1216
- const result = { ...bedrockOptions };
1237
+ const result = { ...amazonBedrockOptions };
1217
1238
 
1218
1239
  if (isAnthropicModel) {
1219
1240
  const capabilities = getModelCapabilities(modelId);
@@ -1223,13 +1244,13 @@ function resolveBedrockReasoningConfig({
1223
1244
  } else if (capabilities.supportsAdaptiveThinking) {
1224
1245
  const effort = mapReasoningToProviderEffort({
1225
1246
  reasoning,
1226
- effortMap: bedrockReasoningEffortMap,
1247
+ effortMap: amazonBedrockReasoningEffortMap,
1227
1248
  warnings,
1228
1249
  });
1229
1250
  result.reasoningConfig = {
1230
1251
  type: 'adaptive',
1231
1252
  maxReasoningEffort: effort,
1232
- ...bedrockOptions.reasoningConfig,
1253
+ ...amazonBedrockOptions.reasoningConfig,
1233
1254
  };
1234
1255
  } else {
1235
1256
  const budgetTokens = mapReasoningToProviderBudget({
@@ -1242,19 +1263,19 @@ function resolveBedrockReasoningConfig({
1242
1263
  result.reasoningConfig = {
1243
1264
  type: 'enabled',
1244
1265
  budgetTokens,
1245
- ...bedrockOptions.reasoningConfig,
1266
+ ...amazonBedrockOptions.reasoningConfig,
1246
1267
  };
1247
1268
  }
1248
1269
  }
1249
1270
  } else if (reasoning !== 'none') {
1250
1271
  const effort = mapReasoningToProviderEffort({
1251
1272
  reasoning,
1252
- effortMap: bedrockReasoningEffortMap,
1273
+ effortMap: amazonBedrockReasoningEffortMap,
1253
1274
  warnings,
1254
1275
  });
1255
1276
  result.reasoningConfig = {
1256
1277
  maxReasoningEffort: effort,
1257
- ...bedrockOptions.reasoningConfig,
1278
+ ...amazonBedrockOptions.reasoningConfig,
1258
1279
  };
1259
1280
  }
1260
1281