@ai-sdk/amazon-bedrock 0.0.28 → 0.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ai-sdk/amazon-bedrock
2
2
 
3
+ ## 0.0.30
4
+
5
+ ### Patch Changes
6
+
7
+ - 59d1abf: feat (provider/bedrock): support Bedrock amazon.titan-embed-text-v1 and amazon.titan-embed-text-v2:0 embeddings
8
+
9
+ ## 0.0.29
10
+
11
+ ### Patch Changes
12
+
13
+ - 8c3847e: fix (provider/bedrock): update amazon bedrock package to use safe version of aws sdk
14
+
3
15
  ## 0.0.28
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { ProviderV1, LanguageModelV1 } from '@ai-sdk/provider';
1
+ import { ProviderV1, LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
2
2
  import { BedrockRuntimeClientConfig } from '@aws-sdk/client-bedrock-runtime';
3
3
 
4
4
  type BedrockChatModelId = 'amazon.titan-tg1-large' | 'amazon.titan-text-express-v1' | 'anthropic.claude-v2:1' | 'anthropic.claude-3-sonnet-20240229-v1:0' | 'anthropic.claude-3-5-sonnet-20240620-v1:0' | 'anthropic.claude-3-haiku-20240307-v1:0' | 'anthropic.claude-3-opus-20240229-v1:0' | 'cohere.command-r-v1:0' | 'cohere.command-r-plus-v1:0' | 'meta.llama2-13b-chat-v1' | 'meta.llama2-70b-chat-v1' | 'meta.llama3-8b-instruct-v1:0' | 'meta.llama3-70b-instruct-v1:0' | 'mistral.mistral-7b-instruct-v0:2' | 'mistral.mixtral-8x7b-instruct-v0:1' | 'mistral.mistral-large-2402-v1:0' | 'mistral.mistral-small-2402-v1:0' | (string & {});
@@ -11,6 +11,20 @@ interface BedrockChatSettings {
11
11
  additionalModelRequestFields?: Record<string, any>;
12
12
  }
13
13
 
14
+ type BedrockEmbeddingModelId = 'amazon.titan-embed-text-v1' | 'amazon.titan-embed-text-v2:0' | (string & {});
15
+ interface BedrockEmbeddingSettings {
16
+ /**
17
+ The number of dimensions the resulting output embeddings should have (defaults to 1024).
18
+ Only supported in amazon.titan-embed-text-v2:0.
19
+ */
20
+ dimensions?: 1024 | 512 | 256;
21
+ /**
22
+ Flag indicating whether or not to normalize the output embeddings. Defaults to true
23
+ Only supported in amazon.titan-embed-text-v2:0.
24
+ */
25
+ normalize?: boolean;
26
+ }
27
+
14
28
  interface AmazonBedrockProviderSettings {
15
29
  region?: string;
16
30
  accessKeyId?: string;
@@ -27,6 +41,7 @@ interface AmazonBedrockProviderSettings {
27
41
  interface AmazonBedrockProvider extends ProviderV1 {
28
42
  (modelId: BedrockChatModelId, settings?: BedrockChatSettings): LanguageModelV1;
29
43
  languageModel(modelId: BedrockChatModelId, settings?: BedrockChatSettings): LanguageModelV1;
44
+ embedding(modelId: BedrockEmbeddingModelId, settings?: BedrockEmbeddingSettings): EmbeddingModelV1<string>;
30
45
  }
31
46
  /**
32
47
  Create an Amazon Bedrock provider instance.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ProviderV1, LanguageModelV1 } from '@ai-sdk/provider';
1
+ import { ProviderV1, LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
2
2
  import { BedrockRuntimeClientConfig } from '@aws-sdk/client-bedrock-runtime';
3
3
 
4
4
  type BedrockChatModelId = 'amazon.titan-tg1-large' | 'amazon.titan-text-express-v1' | 'anthropic.claude-v2:1' | 'anthropic.claude-3-sonnet-20240229-v1:0' | 'anthropic.claude-3-5-sonnet-20240620-v1:0' | 'anthropic.claude-3-haiku-20240307-v1:0' | 'anthropic.claude-3-opus-20240229-v1:0' | 'cohere.command-r-v1:0' | 'cohere.command-r-plus-v1:0' | 'meta.llama2-13b-chat-v1' | 'meta.llama2-70b-chat-v1' | 'meta.llama3-8b-instruct-v1:0' | 'meta.llama3-70b-instruct-v1:0' | 'mistral.mistral-7b-instruct-v0:2' | 'mistral.mixtral-8x7b-instruct-v0:1' | 'mistral.mistral-large-2402-v1:0' | 'mistral.mistral-small-2402-v1:0' | (string & {});
@@ -11,6 +11,20 @@ interface BedrockChatSettings {
11
11
  additionalModelRequestFields?: Record<string, any>;
12
12
  }
13
13
 
14
+ type BedrockEmbeddingModelId = 'amazon.titan-embed-text-v1' | 'amazon.titan-embed-text-v2:0' | (string & {});
15
+ interface BedrockEmbeddingSettings {
16
+ /**
17
+ The number of dimensions the resulting output embeddings should have (defaults to 1024).
18
+ Only supported in amazon.titan-embed-text-v2:0.
19
+ */
20
+ dimensions?: 1024 | 512 | 256;
21
+ /**
22
+ Flag indicating whether or not to normalize the output embeddings. Defaults to true
23
+ Only supported in amazon.titan-embed-text-v2:0.
24
+ */
25
+ normalize?: boolean;
26
+ }
27
+
14
28
  interface AmazonBedrockProviderSettings {
15
29
  region?: string;
16
30
  accessKeyId?: string;
@@ -27,6 +41,7 @@ interface AmazonBedrockProviderSettings {
27
41
  interface AmazonBedrockProvider extends ProviderV1 {
28
42
  (modelId: BedrockChatModelId, settings?: BedrockChatSettings): LanguageModelV1;
29
43
  languageModel(modelId: BedrockChatModelId, settings?: BedrockChatSettings): LanguageModelV1;
44
+ embedding(modelId: BedrockEmbeddingModelId, settings?: BedrockEmbeddingSettings): EmbeddingModelV1<string>;
30
45
  }
31
46
  /**
32
47
  Create an Amazon Bedrock provider instance.
package/dist/index.js CHANGED
@@ -26,9 +26,8 @@ __export(src_exports, {
26
26
  module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/bedrock-provider.ts
29
- var import_provider3 = require("@ai-sdk/provider");
30
29
  var import_provider_utils = require("@ai-sdk/provider-utils");
31
- var import_client_bedrock_runtime2 = require("@aws-sdk/client-bedrock-runtime");
30
+ var import_client_bedrock_runtime3 = require("@aws-sdk/client-bedrock-runtime");
32
31
 
33
32
  // src/bedrock-chat-language-model.ts
34
33
  var import_provider2 = require("@ai-sdk/provider");
@@ -538,11 +537,54 @@ function prepareToolsAndToolChoice(mode) {
538
537
  }
539
538
  }
540
539
 
540
+ // src/bedrock-embedding-model.ts
541
+ var import_client_bedrock_runtime2 = require("@aws-sdk/client-bedrock-runtime");
542
+ var BedrockEmbeddingModel = class {
543
+ constructor(modelId, settings, config) {
544
+ this.specificationVersion = "v1";
545
+ this.provider = "amazon-bedrock";
546
+ this.maxEmbeddingsPerCall = void 0;
547
+ this.supportsParallelCalls = true;
548
+ this.modelId = modelId;
549
+ this.config = config;
550
+ this.settings = settings;
551
+ }
552
+ async doEmbed({
553
+ values
554
+ }) {
555
+ const fn = async (inputText) => {
556
+ const payload = {
557
+ inputText,
558
+ dimensions: this.settings.dimensions,
559
+ normalize: this.settings.normalize
560
+ };
561
+ const command = new import_client_bedrock_runtime2.InvokeModelCommand({
562
+ contentType: "application/json",
563
+ body: JSON.stringify(payload),
564
+ modelId: this.modelId
565
+ });
566
+ const rawResponse = await this.config.client.send(command);
567
+ const parsed = JSON.parse(new TextDecoder().decode(rawResponse.body));
568
+ return parsed;
569
+ };
570
+ const responses = await Promise.all(values.map(fn));
571
+ const response = responses.reduce(
572
+ (acc, r) => {
573
+ acc.embeddings.push(r.embedding);
574
+ acc.usage.tokens += r.inputTextTokenCount;
575
+ return acc;
576
+ },
577
+ { embeddings: [], usage: { tokens: 0 } }
578
+ );
579
+ return response;
580
+ }
581
+ };
582
+
541
583
  // src/bedrock-provider.ts
542
584
  function createAmazonBedrock(options = {}) {
543
585
  const createBedrockRuntimeClient = () => {
544
586
  var _a;
545
- return new import_client_bedrock_runtime2.BedrockRuntimeClient(
587
+ return new import_client_bedrock_runtime3.BedrockRuntimeClient(
546
588
  (_a = options.bedrockOptions) != null ? _a : {
547
589
  region: (0, import_provider_utils.loadSetting)({
548
590
  settingValue: options.region,
@@ -583,10 +625,13 @@ function createAmazonBedrock(options = {}) {
583
625
  }
584
626
  return createChatModel(modelId, settings);
585
627
  };
628
+ const createEmbeddingModel = (modelId, settings = {}) => new BedrockEmbeddingModel(modelId, settings, {
629
+ client: createBedrockRuntimeClient()
630
+ });
586
631
  provider.languageModel = createChatModel;
587
- provider.textEmbeddingModel = (modelId) => {
588
- throw new import_provider3.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
589
- };
632
+ provider.embedding = createEmbeddingModel;
633
+ provider.textEmbedding = createEmbeddingModel;
634
+ provider.textEmbeddingModel = createEmbeddingModel;
590
635
  return provider;
591
636
  }
592
637
  var bedrock = createAmazonBedrock();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/bedrock-provider.ts","../src/bedrock-chat-language-model.ts","../src/convert-to-bedrock-chat-messages.ts","../src/map-bedrock-finish-reason.ts"],"sourcesContent":["export { bedrock, createAmazonBedrock } from './bedrock-provider';\nexport type {\n AmazonBedrockProvider,\n AmazonBedrockProviderSettings,\n} from './bedrock-provider';\n","import {\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadOptionalSetting,\n loadSetting,\n} from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n BedrockRuntimeClientConfig,\n} from '@aws-sdk/client-bedrock-runtime';\nimport { BedrockChatLanguageModel } from './bedrock-chat-language-model';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\n\nexport interface AmazonBedrockProviderSettings {\n region?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n\n /**\n * Complete Bedrock configuration for setting advanced authentication and\n * other options. When this is provided, the region, accessKeyId, and\n * secretAccessKey settings are ignored.\n */\n bedrockOptions?: BedrockRuntimeClientConfig;\n\n // for testing\n generateId?: () => string;\n}\n\nexport interface AmazonBedrockProvider extends ProviderV1 {\n (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n\n languageModel(\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n}\n\n/**\nCreate an Amazon Bedrock provider instance.\n */\nexport function createAmazonBedrock(\n options: AmazonBedrockProviderSettings = {},\n): AmazonBedrockProvider {\n const createBedrockRuntimeClient = () =>\n new BedrockRuntimeClient(\n options.bedrockOptions ?? {\n region: loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n }),\n credentials: {\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 },\n );\n\n const createChatModel = (\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings = {},\n ) =>\n new BedrockChatLanguageModel(modelId, settings, {\n client: createBedrockRuntimeClient(),\n generateId,\n });\n\n const provider = function (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider as AmazonBedrockProvider;\n}\n\n/**\nDefault Bedrock provider instance.\n */\nexport const bedrock = createAmazonBedrock();\n","import {\n JSONObject,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ParseResult } from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n ConverseCommand,\n ConverseCommandInput,\n ConverseStreamCommand,\n ConverseStreamOutput,\n GuardrailConfiguration,\n GuardrailStreamConfiguration,\n Tool,\n ToolConfiguration,\n ToolInputSchema,\n} from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\nimport { convertToBedrockChatMessages } from './convert-to-bedrock-chat-messages';\nimport { mapBedrockFinishReason } from './map-bedrock-finish-reason';\n\ntype BedrockChatConfig = {\n client: BedrockRuntimeClient;\n generateId: () => string;\n};\n\nexport class BedrockChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'amazon-bedrock';\n readonly defaultObjectGenerationMode = 'tool';\n readonly supportsImageUrls = false;\n\n readonly modelId: BedrockChatModelId;\n readonly settings: BedrockChatSettings;\n\n private readonly config: BedrockChatConfig;\n\n constructor(\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings,\n config: BedrockChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerMetadata,\n headers,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'topK',\n });\n }\n\n if (responseFormat != null && responseFormat.type !== 'text') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'responseFormat',\n details: 'JSON response format is not supported.',\n });\n }\n\n const { system, messages } = convertToBedrockChatMessages(prompt);\n\n const baseArgs: ConverseCommandInput = {\n modelId: this.modelId,\n system: system ? [{ text: system }] : undefined,\n additionalModelRequestFields: this.settings.additionalModelRequestFields,\n inferenceConfig: {\n maxTokens,\n temperature,\n topP,\n stopSequences,\n },\n messages,\n guardrailConfig: providerMetadata?.bedrock?.guardrailConfig as\n | GuardrailConfiguration\n | GuardrailStreamConfiguration\n | undefined,\n };\n\n switch (type) {\n case 'regular': {\n const toolConfig = prepareToolsAndToolChoice(mode);\n\n return {\n ...baseArgs,\n ...(toolConfig.tools?.length ? { toolConfig } : {}),\n } satisfies ConverseCommandInput;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'json-mode object generation',\n });\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n toolConfig: {\n tools: [\n {\n toolSpec: {\n name: mode.tool.name,\n description: mode.tool.description,\n inputSchema: {\n json: mode.tool.parameters,\n } as ToolInputSchema,\n },\n },\n ],\n toolChoice: { tool: { name: mode.tool.name } },\n },\n } satisfies ConverseCommandInput;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(new ConverseCommand(args));\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const providerMetadata = response.trace\n ? { bedrock: { trace: response.trace as JSONObject } }\n : undefined;\n\n return {\n text:\n response.output?.message?.content\n ?.map(part => part.text ?? '')\n .join('') ?? undefined,\n toolCalls: response.output?.message?.content\n ?.filter(part => !!part.toolUse)\n ?.map(part => ({\n toolCallType: 'function',\n toolCallId: part.toolUse?.toolUseId ?? this.config.generateId(),\n toolName: part.toolUse?.name ?? `tool-${this.config.generateId()}`,\n args: JSON.stringify(part.toolUse?.input ?? ''),\n })),\n finishReason: mapBedrockFinishReason(response.stopReason),\n usage: {\n promptTokens: response.usage?.inputTokens ?? Number.NaN,\n completionTokens: response.usage?.outputTokens ?? Number.NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n providerMetadata,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(\n new ConverseStreamCommand({ ...args }),\n );\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined =\n undefined;\n\n if (!response.stream) {\n throw new Error('No stream found');\n }\n\n const stream = new ReadableStream<any>({\n async start(controller) {\n for await (const chunk of response.stream!) {\n controller.enqueue({ success: true, value: chunk });\n }\n controller.close();\n },\n });\n\n const toolCallContentBlocks: Record<\n number,\n {\n toolCallId: string;\n toolName: string;\n jsonText: string;\n }\n > = {};\n\n return {\n stream: stream.pipeThrough(\n new TransformStream<\n ParseResult<ConverseStreamOutput>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n function enqueueError(error: Error) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n enqueueError(chunk.error);\n return;\n }\n\n const value = chunk.value;\n\n // handle errors:\n if (value.internalServerException) {\n enqueueError(value.internalServerException);\n return;\n }\n if (value.modelStreamErrorException) {\n enqueueError(value.modelStreamErrorException);\n return;\n }\n if (value.throttlingException) {\n enqueueError(value.throttlingException);\n return;\n }\n if (value.validationException) {\n enqueueError(value.validationException);\n return;\n }\n\n if (value.messageStop) {\n finishReason = mapBedrockFinishReason(\n value.messageStop.stopReason,\n );\n }\n\n if (value.metadata) {\n usage = {\n promptTokens: value.metadata.usage?.inputTokens ?? Number.NaN,\n completionTokens:\n value.metadata.usage?.outputTokens ?? Number.NaN,\n };\n\n if (value.metadata.trace) {\n providerMetadata = {\n bedrock: {\n trace: value.metadata.trace as JSONObject,\n },\n };\n }\n }\n\n if (value.contentBlockDelta?.delta?.text) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.contentBlockDelta.delta.text,\n });\n }\n\n const contentBlockStart = value.contentBlockStart;\n if (contentBlockStart?.start?.toolUse != null) {\n const toolUse = contentBlockStart.start.toolUse;\n toolCallContentBlocks[contentBlockStart.contentBlockIndex!] = {\n toolCallId: toolUse.toolUseId!,\n toolName: toolUse.name!,\n jsonText: '',\n };\n }\n\n const contentBlockDelta = value.contentBlockDelta;\n if (contentBlockDelta?.delta?.toolUse) {\n const contentBlock =\n toolCallContentBlocks[contentBlockDelta.contentBlockIndex!];\n const delta = contentBlockDelta.delta.toolUse.input ?? '';\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n argsTextDelta: delta,\n });\n\n contentBlock.jsonText += delta;\n }\n\n const contentBlockStop = value.contentBlockStop;\n if (contentBlockStop != null) {\n const index = contentBlockStop.contentBlockIndex!;\n const contentBlock = toolCallContentBlocks[index];\n\n // when finishing a tool call block, send the full tool call:\n if (contentBlock != null) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n args: contentBlock.jsonText,\n });\n\n delete toolCallContentBlocks[index];\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n): ToolConfiguration {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined };\n }\n\n const mappedTools: Tool[] = tools.map(tool => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: {\n json: tool.parameters,\n } as ToolInputSchema,\n },\n }));\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, toolChoice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { tools: mappedTools, toolChoice: { auto: {} } };\n case 'required':\n return { tools: mappedTools, toolChoice: { any: {} } };\n case 'none':\n // Bedrock does not support 'none' tool choice, so we remove the tools:\n return { tools: undefined, toolChoice: undefined };\n case 'tool':\n return {\n tools: mappedTools,\n toolChoice: { tool: { name: toolChoice.toolName } },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import {\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ImageFormat } from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockAssistantMessage,\n BedrockMessagesPrompt,\n BedrockUserMessage,\n} from './bedrock-chat-prompt';\n\nexport function convertToBedrockChatMessages(\n prompt: LanguageModelV1Prompt,\n): BedrockMessagesPrompt {\n const blocks = groupIntoBlocks(prompt);\n\n let system: string | undefined = undefined;\n const messages: BedrockMessagesPrompt['messages'] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n const type = block.type;\n\n switch (type) {\n case 'system': {\n if (messages.length > 0) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Multiple system messages that are separated by user/assistant messages',\n });\n }\n\n system = block.messages.map(({ content }) => content).join('\\n');\n break;\n }\n\n case 'user': {\n // combines all user and tool messages in this block into a single message:\n const bedrockContent: BedrockUserMessage['content'] = [];\n\n for (const message of block.messages) {\n const { role, content } = message;\n switch (role) {\n case 'user': {\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text: part.text,\n });\n break;\n }\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n bedrockContent.push({\n image: {\n format: part.mimeType?.split('/')?.[1] as ImageFormat,\n source: {\n bytes: part.image ?? (part.image as Uint8Array),\n },\n },\n });\n\n break;\n }\n }\n }\n\n break;\n }\n case 'tool': {\n for (let i = 0; i < content.length; i++) {\n const part = content[i];\n\n bedrockContent.push({\n toolResult: {\n toolUseId: part.toolCallId,\n content: [{ text: JSON.stringify(part.result) }],\n },\n });\n }\n\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({ role: 'user', content: bedrockContent });\n\n break;\n }\n\n case 'assistant': {\n // combines multiple assistant messages in this block into a single message:\n const bedrockContent: BedrockAssistantMessage['content'] = [];\n\n for (const message of block.messages) {\n const { content } = message;\n\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text:\n // trim the last text part if it's the last message in the block\n // because Bedrock does not allow trailing whitespace\n // in pre-filled assistant responses\n i === blocks.length - 1 && j === block.messages.length - 1\n ? part.text.trim()\n : part.text,\n });\n break;\n }\n\n case 'tool-call': {\n bedrockContent.push({\n toolUse: {\n toolUseId: part.toolCallId,\n name: part.toolName,\n input: part.args as any,\n },\n });\n break;\n }\n }\n }\n }\n\n messages.push({ role: 'assistant', content: bedrockContent });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return {\n system,\n messages,\n };\n}\n\ntype SystemBlock = {\n type: 'system';\n messages: Array<LanguageModelV1Message & { role: 'system' }>;\n};\ntype AssistantBlock = {\n type: 'assistant';\n messages: Array<LanguageModelV1Message & { role: 'assistant' }>;\n};\ntype UserBlock = {\n type: 'user';\n messages: Array<LanguageModelV1Message & { role: 'user' | 'tool' }>;\n};\n\nfunction groupIntoBlocks(\n prompt: LanguageModelV1Prompt,\n): Array<SystemBlock | AssistantBlock | UserBlock> {\n const blocks: Array<SystemBlock | AssistantBlock | UserBlock> = [];\n let currentBlock: SystemBlock | AssistantBlock | UserBlock | undefined =\n undefined;\n\n for (const message of prompt) {\n const { role } = message;\n switch (role) {\n case 'system': {\n if (currentBlock?.type !== 'system') {\n currentBlock = { type: 'system', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'assistant': {\n if (currentBlock?.type !== 'assistant') {\n currentBlock = { type: 'assistant', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'user': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'tool': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return blocks;\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { StopReason } from '@aws-sdk/client-bedrock-runtime';\n\nexport function mapBedrockFinishReason(\n finishReason?: StopReason,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop_sequence':\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'content_filtered':\n case 'guardrail_intervened':\n return 'content-filter';\n case 'tool_use':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n"],"mappings":"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","names":["import_provider","import_client_bedrock_runtime","import_provider","i","_a","_b","_c","_d","_e","_f"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/bedrock-provider.ts","../src/bedrock-chat-language-model.ts","../src/convert-to-bedrock-chat-messages.ts","../src/map-bedrock-finish-reason.ts","../src/bedrock-embedding-model.ts"],"sourcesContent":["export { bedrock, createAmazonBedrock } from './bedrock-provider';\nexport type {\n AmazonBedrockProvider,\n AmazonBedrockProviderSettings,\n} from './bedrock-provider';\n","import {\n EmbeddingModelV1,\n LanguageModelV1,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadOptionalSetting,\n loadSetting,\n} from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n BedrockRuntimeClientConfig,\n} from '@aws-sdk/client-bedrock-runtime';\nimport { BedrockChatLanguageModel } from './bedrock-chat-language-model';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\nimport { BedrockEmbeddingModel } from './bedrock-embedding-model';\nimport {\n BedrockEmbeddingModelId,\n BedrockEmbeddingSettings,\n} from './bedrock-embedding-settings';\n\nexport interface AmazonBedrockProviderSettings {\n region?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n\n /**\n * Complete Bedrock configuration for setting advanced authentication and\n * other options. When this is provided, the region, accessKeyId, and\n * secretAccessKey settings are ignored.\n */\n bedrockOptions?: BedrockRuntimeClientConfig;\n\n // for testing\n generateId?: () => string;\n}\n\nexport interface AmazonBedrockProvider extends ProviderV1 {\n (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n\n languageModel(\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n\n embedding(\n modelId: BedrockEmbeddingModelId,\n settings?: BedrockEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n}\n\n/**\nCreate an Amazon Bedrock provider instance.\n */\nexport function createAmazonBedrock(\n options: AmazonBedrockProviderSettings = {},\n): AmazonBedrockProvider {\n const createBedrockRuntimeClient = () =>\n new BedrockRuntimeClient(\n options.bedrockOptions ?? {\n region: loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n }),\n credentials: {\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 },\n );\n\n const createChatModel = (\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings = {},\n ) =>\n new BedrockChatLanguageModel(modelId, settings, {\n client: createBedrockRuntimeClient(),\n generateId,\n });\n\n const provider = function (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n const createEmbeddingModel = (\n modelId: BedrockEmbeddingModelId,\n settings: BedrockEmbeddingSettings = {},\n ) =>\n new BedrockEmbeddingModel(modelId, settings, {\n client: createBedrockRuntimeClient(),\n });\n\n provider.languageModel = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n return provider as AmazonBedrockProvider;\n}\n\n/**\nDefault Bedrock provider instance.\n */\nexport const bedrock = createAmazonBedrock();\n","import {\n JSONObject,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ParseResult } from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n ConverseCommand,\n ConverseCommandInput,\n ConverseStreamCommand,\n ConverseStreamOutput,\n GuardrailConfiguration,\n GuardrailStreamConfiguration,\n Tool,\n ToolConfiguration,\n ToolInputSchema,\n} from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\nimport { convertToBedrockChatMessages } from './convert-to-bedrock-chat-messages';\nimport { mapBedrockFinishReason } from './map-bedrock-finish-reason';\n\ntype BedrockChatConfig = {\n client: BedrockRuntimeClient;\n generateId: () => string;\n};\n\nexport class BedrockChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'amazon-bedrock';\n readonly defaultObjectGenerationMode = 'tool';\n readonly supportsImageUrls = false;\n\n readonly modelId: BedrockChatModelId;\n readonly settings: BedrockChatSettings;\n\n private readonly config: BedrockChatConfig;\n\n constructor(\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings,\n config: BedrockChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerMetadata,\n headers,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'topK',\n });\n }\n\n if (responseFormat != null && responseFormat.type !== 'text') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'responseFormat',\n details: 'JSON response format is not supported.',\n });\n }\n\n const { system, messages } = convertToBedrockChatMessages(prompt);\n\n const baseArgs: ConverseCommandInput = {\n modelId: this.modelId,\n system: system ? [{ text: system }] : undefined,\n additionalModelRequestFields: this.settings.additionalModelRequestFields,\n inferenceConfig: {\n maxTokens,\n temperature,\n topP,\n stopSequences,\n },\n messages,\n guardrailConfig: providerMetadata?.bedrock?.guardrailConfig as\n | GuardrailConfiguration\n | GuardrailStreamConfiguration\n | undefined,\n };\n\n switch (type) {\n case 'regular': {\n const toolConfig = prepareToolsAndToolChoice(mode);\n\n return {\n ...baseArgs,\n ...(toolConfig.tools?.length ? { toolConfig } : {}),\n } satisfies ConverseCommandInput;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'json-mode object generation',\n });\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n toolConfig: {\n tools: [\n {\n toolSpec: {\n name: mode.tool.name,\n description: mode.tool.description,\n inputSchema: {\n json: mode.tool.parameters,\n } as ToolInputSchema,\n },\n },\n ],\n toolChoice: { tool: { name: mode.tool.name } },\n },\n } satisfies ConverseCommandInput;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(new ConverseCommand(args));\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const providerMetadata = response.trace\n ? { bedrock: { trace: response.trace as JSONObject } }\n : undefined;\n\n return {\n text:\n response.output?.message?.content\n ?.map(part => part.text ?? '')\n .join('') ?? undefined,\n toolCalls: response.output?.message?.content\n ?.filter(part => !!part.toolUse)\n ?.map(part => ({\n toolCallType: 'function',\n toolCallId: part.toolUse?.toolUseId ?? this.config.generateId(),\n toolName: part.toolUse?.name ?? `tool-${this.config.generateId()}`,\n args: JSON.stringify(part.toolUse?.input ?? ''),\n })),\n finishReason: mapBedrockFinishReason(response.stopReason),\n usage: {\n promptTokens: response.usage?.inputTokens ?? Number.NaN,\n completionTokens: response.usage?.outputTokens ?? Number.NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n providerMetadata,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(\n new ConverseStreamCommand({ ...args }),\n );\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined =\n undefined;\n\n if (!response.stream) {\n throw new Error('No stream found');\n }\n\n const stream = new ReadableStream<any>({\n async start(controller) {\n for await (const chunk of response.stream!) {\n controller.enqueue({ success: true, value: chunk });\n }\n controller.close();\n },\n });\n\n const toolCallContentBlocks: Record<\n number,\n {\n toolCallId: string;\n toolName: string;\n jsonText: string;\n }\n > = {};\n\n return {\n stream: stream.pipeThrough(\n new TransformStream<\n ParseResult<ConverseStreamOutput>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n function enqueueError(error: Error) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n enqueueError(chunk.error);\n return;\n }\n\n const value = chunk.value;\n\n // handle errors:\n if (value.internalServerException) {\n enqueueError(value.internalServerException);\n return;\n }\n if (value.modelStreamErrorException) {\n enqueueError(value.modelStreamErrorException);\n return;\n }\n if (value.throttlingException) {\n enqueueError(value.throttlingException);\n return;\n }\n if (value.validationException) {\n enqueueError(value.validationException);\n return;\n }\n\n if (value.messageStop) {\n finishReason = mapBedrockFinishReason(\n value.messageStop.stopReason,\n );\n }\n\n if (value.metadata) {\n usage = {\n promptTokens: value.metadata.usage?.inputTokens ?? Number.NaN,\n completionTokens:\n value.metadata.usage?.outputTokens ?? Number.NaN,\n };\n\n if (value.metadata.trace) {\n providerMetadata = {\n bedrock: {\n trace: value.metadata.trace as JSONObject,\n },\n };\n }\n }\n\n if (value.contentBlockDelta?.delta?.text) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.contentBlockDelta.delta.text,\n });\n }\n\n const contentBlockStart = value.contentBlockStart;\n if (contentBlockStart?.start?.toolUse != null) {\n const toolUse = contentBlockStart.start.toolUse;\n toolCallContentBlocks[contentBlockStart.contentBlockIndex!] = {\n toolCallId: toolUse.toolUseId!,\n toolName: toolUse.name!,\n jsonText: '',\n };\n }\n\n const contentBlockDelta = value.contentBlockDelta;\n if (contentBlockDelta?.delta?.toolUse) {\n const contentBlock =\n toolCallContentBlocks[contentBlockDelta.contentBlockIndex!];\n const delta = contentBlockDelta.delta.toolUse.input ?? '';\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n argsTextDelta: delta,\n });\n\n contentBlock.jsonText += delta;\n }\n\n const contentBlockStop = value.contentBlockStop;\n if (contentBlockStop != null) {\n const index = contentBlockStop.contentBlockIndex!;\n const contentBlock = toolCallContentBlocks[index];\n\n // when finishing a tool call block, send the full tool call:\n if (contentBlock != null) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n args: contentBlock.jsonText,\n });\n\n delete toolCallContentBlocks[index];\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n): ToolConfiguration {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined };\n }\n\n const mappedTools: Tool[] = tools.map(tool => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: {\n json: tool.parameters,\n } as ToolInputSchema,\n },\n }));\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, toolChoice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { tools: mappedTools, toolChoice: { auto: {} } };\n case 'required':\n return { tools: mappedTools, toolChoice: { any: {} } };\n case 'none':\n // Bedrock does not support 'none' tool choice, so we remove the tools:\n return { tools: undefined, toolChoice: undefined };\n case 'tool':\n return {\n tools: mappedTools,\n toolChoice: { tool: { name: toolChoice.toolName } },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import {\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ImageFormat } from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockAssistantMessage,\n BedrockMessagesPrompt,\n BedrockUserMessage,\n} from './bedrock-chat-prompt';\n\nexport function convertToBedrockChatMessages(\n prompt: LanguageModelV1Prompt,\n): BedrockMessagesPrompt {\n const blocks = groupIntoBlocks(prompt);\n\n let system: string | undefined = undefined;\n const messages: BedrockMessagesPrompt['messages'] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n const type = block.type;\n\n switch (type) {\n case 'system': {\n if (messages.length > 0) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Multiple system messages that are separated by user/assistant messages',\n });\n }\n\n system = block.messages.map(({ content }) => content).join('\\n');\n break;\n }\n\n case 'user': {\n // combines all user and tool messages in this block into a single message:\n const bedrockContent: BedrockUserMessage['content'] = [];\n\n for (const message of block.messages) {\n const { role, content } = message;\n switch (role) {\n case 'user': {\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text: part.text,\n });\n break;\n }\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n bedrockContent.push({\n image: {\n format: part.mimeType?.split('/')?.[1] as ImageFormat,\n source: {\n bytes: part.image ?? (part.image as Uint8Array),\n },\n },\n });\n\n break;\n }\n }\n }\n\n break;\n }\n case 'tool': {\n for (let i = 0; i < content.length; i++) {\n const part = content[i];\n\n bedrockContent.push({\n toolResult: {\n toolUseId: part.toolCallId,\n content: [{ text: JSON.stringify(part.result) }],\n },\n });\n }\n\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({ role: 'user', content: bedrockContent });\n\n break;\n }\n\n case 'assistant': {\n // combines multiple assistant messages in this block into a single message:\n const bedrockContent: BedrockAssistantMessage['content'] = [];\n\n for (const message of block.messages) {\n const { content } = message;\n\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text:\n // trim the last text part if it's the last message in the block\n // because Bedrock does not allow trailing whitespace\n // in pre-filled assistant responses\n i === blocks.length - 1 && j === block.messages.length - 1\n ? part.text.trim()\n : part.text,\n });\n break;\n }\n\n case 'tool-call': {\n bedrockContent.push({\n toolUse: {\n toolUseId: part.toolCallId,\n name: part.toolName,\n input: part.args as any,\n },\n });\n break;\n }\n }\n }\n }\n\n messages.push({ role: 'assistant', content: bedrockContent });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return {\n system,\n messages,\n };\n}\n\ntype SystemBlock = {\n type: 'system';\n messages: Array<LanguageModelV1Message & { role: 'system' }>;\n};\ntype AssistantBlock = {\n type: 'assistant';\n messages: Array<LanguageModelV1Message & { role: 'assistant' }>;\n};\ntype UserBlock = {\n type: 'user';\n messages: Array<LanguageModelV1Message & { role: 'user' | 'tool' }>;\n};\n\nfunction groupIntoBlocks(\n prompt: LanguageModelV1Prompt,\n): Array<SystemBlock | AssistantBlock | UserBlock> {\n const blocks: Array<SystemBlock | AssistantBlock | UserBlock> = [];\n let currentBlock: SystemBlock | AssistantBlock | UserBlock | undefined =\n undefined;\n\n for (const message of prompt) {\n const { role } = message;\n switch (role) {\n case 'system': {\n if (currentBlock?.type !== 'system') {\n currentBlock = { type: 'system', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'assistant': {\n if (currentBlock?.type !== 'assistant') {\n currentBlock = { type: 'assistant', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'user': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'tool': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return blocks;\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { StopReason } from '@aws-sdk/client-bedrock-runtime';\n\nexport function mapBedrockFinishReason(\n finishReason?: StopReason,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop_sequence':\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'content_filtered':\n case 'guardrail_intervened':\n return 'content-filter';\n case 'tool_use':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n","import { EmbeddingModelV1 } from '@ai-sdk/provider';\nimport {\n BedrockEmbeddingModelId,\n BedrockEmbeddingSettings,\n} from './bedrock-embedding-settings';\nimport {\n BedrockRuntimeClient,\n InvokeModelCommand,\n} from '@aws-sdk/client-bedrock-runtime';\n\ntype BedrockEmbeddingConfig = {\n client: BedrockRuntimeClient;\n};\n\ntype DoEmbedResponse = Awaited<ReturnType<EmbeddingModelV1<string>['doEmbed']>>;\n\nexport class BedrockEmbeddingModel implements EmbeddingModelV1<string> {\n readonly specificationVersion = 'v1';\n readonly modelId: BedrockEmbeddingModelId;\n readonly provider = 'amazon-bedrock';\n readonly maxEmbeddingsPerCall = undefined;\n readonly supportsParallelCalls = true;\n private readonly config: BedrockEmbeddingConfig;\n private readonly settings: BedrockEmbeddingSettings;\n\n constructor(\n modelId: BedrockEmbeddingModelId,\n settings: BedrockEmbeddingSettings,\n config: BedrockEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n this.settings = settings;\n }\n\n async doEmbed({\n values,\n }: Parameters<\n EmbeddingModelV1<string>['doEmbed']\n >[0]): Promise<DoEmbedResponse> {\n const fn = async (inputText: string) => {\n const payload = {\n inputText,\n dimensions: this.settings.dimensions,\n normalize: this.settings.normalize,\n };\n\n const command = new InvokeModelCommand({\n contentType: 'application/json',\n body: JSON.stringify(payload),\n modelId: this.modelId,\n });\n const rawResponse = await this.config.client.send(command);\n\n const parsed = JSON.parse(new TextDecoder().decode(rawResponse.body));\n\n return parsed;\n };\n\n const responses = await Promise.all(values.map(fn));\n\n const response = responses.reduce(\n (acc, r) => {\n acc.embeddings.push(r.embedding);\n acc.usage.tokens += r.inputTextTokenCount;\n return acc;\n },\n { embeddings: [], usage: { tokens: 0 } },\n );\n\n return response;\n }\n}\n"],"mappings":"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","names":["import_client_bedrock_runtime","import_provider","i","_a","_b","_c","_d","_e","_f","import_client_bedrock_runtime"]}
package/dist/index.mjs CHANGED
@@ -1,14 +1,11 @@
1
1
  // src/bedrock-provider.ts
2
- import {
3
- NoSuchModelError
4
- } from "@ai-sdk/provider";
5
2
  import {
6
3
  generateId,
7
4
  loadOptionalSetting,
8
5
  loadSetting
9
6
  } from "@ai-sdk/provider-utils";
10
7
  import {
11
- BedrockRuntimeClient as BedrockRuntimeClient2
8
+ BedrockRuntimeClient as BedrockRuntimeClient3
12
9
  } from "@aws-sdk/client-bedrock-runtime";
13
10
 
14
11
  // src/bedrock-chat-language-model.ts
@@ -526,11 +523,56 @@ function prepareToolsAndToolChoice(mode) {
526
523
  }
527
524
  }
528
525
 
526
+ // src/bedrock-embedding-model.ts
527
+ import {
528
+ InvokeModelCommand
529
+ } from "@aws-sdk/client-bedrock-runtime";
530
+ var BedrockEmbeddingModel = class {
531
+ constructor(modelId, settings, config) {
532
+ this.specificationVersion = "v1";
533
+ this.provider = "amazon-bedrock";
534
+ this.maxEmbeddingsPerCall = void 0;
535
+ this.supportsParallelCalls = true;
536
+ this.modelId = modelId;
537
+ this.config = config;
538
+ this.settings = settings;
539
+ }
540
+ async doEmbed({
541
+ values
542
+ }) {
543
+ const fn = async (inputText) => {
544
+ const payload = {
545
+ inputText,
546
+ dimensions: this.settings.dimensions,
547
+ normalize: this.settings.normalize
548
+ };
549
+ const command = new InvokeModelCommand({
550
+ contentType: "application/json",
551
+ body: JSON.stringify(payload),
552
+ modelId: this.modelId
553
+ });
554
+ const rawResponse = await this.config.client.send(command);
555
+ const parsed = JSON.parse(new TextDecoder().decode(rawResponse.body));
556
+ return parsed;
557
+ };
558
+ const responses = await Promise.all(values.map(fn));
559
+ const response = responses.reduce(
560
+ (acc, r) => {
561
+ acc.embeddings.push(r.embedding);
562
+ acc.usage.tokens += r.inputTextTokenCount;
563
+ return acc;
564
+ },
565
+ { embeddings: [], usage: { tokens: 0 } }
566
+ );
567
+ return response;
568
+ }
569
+ };
570
+
529
571
  // src/bedrock-provider.ts
530
572
  function createAmazonBedrock(options = {}) {
531
573
  const createBedrockRuntimeClient = () => {
532
574
  var _a;
533
- return new BedrockRuntimeClient2(
575
+ return new BedrockRuntimeClient3(
534
576
  (_a = options.bedrockOptions) != null ? _a : {
535
577
  region: loadSetting({
536
578
  settingValue: options.region,
@@ -571,10 +613,13 @@ function createAmazonBedrock(options = {}) {
571
613
  }
572
614
  return createChatModel(modelId, settings);
573
615
  };
616
+ const createEmbeddingModel = (modelId, settings = {}) => new BedrockEmbeddingModel(modelId, settings, {
617
+ client: createBedrockRuntimeClient()
618
+ });
574
619
  provider.languageModel = createChatModel;
575
- provider.textEmbeddingModel = (modelId) => {
576
- throw new NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
577
- };
620
+ provider.embedding = createEmbeddingModel;
621
+ provider.textEmbedding = createEmbeddingModel;
622
+ provider.textEmbeddingModel = createEmbeddingModel;
578
623
  return provider;
579
624
  }
580
625
  var bedrock = createAmazonBedrock();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bedrock-provider.ts","../src/bedrock-chat-language-model.ts","../src/convert-to-bedrock-chat-messages.ts","../src/map-bedrock-finish-reason.ts"],"sourcesContent":["import {\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadOptionalSetting,\n loadSetting,\n} from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n BedrockRuntimeClientConfig,\n} from '@aws-sdk/client-bedrock-runtime';\nimport { BedrockChatLanguageModel } from './bedrock-chat-language-model';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\n\nexport interface AmazonBedrockProviderSettings {\n region?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n\n /**\n * Complete Bedrock configuration for setting advanced authentication and\n * other options. When this is provided, the region, accessKeyId, and\n * secretAccessKey settings are ignored.\n */\n bedrockOptions?: BedrockRuntimeClientConfig;\n\n // for testing\n generateId?: () => string;\n}\n\nexport interface AmazonBedrockProvider extends ProviderV1 {\n (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n\n languageModel(\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n}\n\n/**\nCreate an Amazon Bedrock provider instance.\n */\nexport function createAmazonBedrock(\n options: AmazonBedrockProviderSettings = {},\n): AmazonBedrockProvider {\n const createBedrockRuntimeClient = () =>\n new BedrockRuntimeClient(\n options.bedrockOptions ?? {\n region: loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n }),\n credentials: {\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 },\n );\n\n const createChatModel = (\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings = {},\n ) =>\n new BedrockChatLanguageModel(modelId, settings, {\n client: createBedrockRuntimeClient(),\n generateId,\n });\n\n const provider = function (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.languageModel = createChatModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\n\n return provider as AmazonBedrockProvider;\n}\n\n/**\nDefault Bedrock provider instance.\n */\nexport const bedrock = createAmazonBedrock();\n","import {\n JSONObject,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ParseResult } from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n ConverseCommand,\n ConverseCommandInput,\n ConverseStreamCommand,\n ConverseStreamOutput,\n GuardrailConfiguration,\n GuardrailStreamConfiguration,\n Tool,\n ToolConfiguration,\n ToolInputSchema,\n} from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\nimport { convertToBedrockChatMessages } from './convert-to-bedrock-chat-messages';\nimport { mapBedrockFinishReason } from './map-bedrock-finish-reason';\n\ntype BedrockChatConfig = {\n client: BedrockRuntimeClient;\n generateId: () => string;\n};\n\nexport class BedrockChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'amazon-bedrock';\n readonly defaultObjectGenerationMode = 'tool';\n readonly supportsImageUrls = false;\n\n readonly modelId: BedrockChatModelId;\n readonly settings: BedrockChatSettings;\n\n private readonly config: BedrockChatConfig;\n\n constructor(\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings,\n config: BedrockChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerMetadata,\n headers,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'topK',\n });\n }\n\n if (responseFormat != null && responseFormat.type !== 'text') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'responseFormat',\n details: 'JSON response format is not supported.',\n });\n }\n\n const { system, messages } = convertToBedrockChatMessages(prompt);\n\n const baseArgs: ConverseCommandInput = {\n modelId: this.modelId,\n system: system ? [{ text: system }] : undefined,\n additionalModelRequestFields: this.settings.additionalModelRequestFields,\n inferenceConfig: {\n maxTokens,\n temperature,\n topP,\n stopSequences,\n },\n messages,\n guardrailConfig: providerMetadata?.bedrock?.guardrailConfig as\n | GuardrailConfiguration\n | GuardrailStreamConfiguration\n | undefined,\n };\n\n switch (type) {\n case 'regular': {\n const toolConfig = prepareToolsAndToolChoice(mode);\n\n return {\n ...baseArgs,\n ...(toolConfig.tools?.length ? { toolConfig } : {}),\n } satisfies ConverseCommandInput;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'json-mode object generation',\n });\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n toolConfig: {\n tools: [\n {\n toolSpec: {\n name: mode.tool.name,\n description: mode.tool.description,\n inputSchema: {\n json: mode.tool.parameters,\n } as ToolInputSchema,\n },\n },\n ],\n toolChoice: { tool: { name: mode.tool.name } },\n },\n } satisfies ConverseCommandInput;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(new ConverseCommand(args));\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const providerMetadata = response.trace\n ? { bedrock: { trace: response.trace as JSONObject } }\n : undefined;\n\n return {\n text:\n response.output?.message?.content\n ?.map(part => part.text ?? '')\n .join('') ?? undefined,\n toolCalls: response.output?.message?.content\n ?.filter(part => !!part.toolUse)\n ?.map(part => ({\n toolCallType: 'function',\n toolCallId: part.toolUse?.toolUseId ?? this.config.generateId(),\n toolName: part.toolUse?.name ?? `tool-${this.config.generateId()}`,\n args: JSON.stringify(part.toolUse?.input ?? ''),\n })),\n finishReason: mapBedrockFinishReason(response.stopReason),\n usage: {\n promptTokens: response.usage?.inputTokens ?? Number.NaN,\n completionTokens: response.usage?.outputTokens ?? Number.NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n providerMetadata,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(\n new ConverseStreamCommand({ ...args }),\n );\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined =\n undefined;\n\n if (!response.stream) {\n throw new Error('No stream found');\n }\n\n const stream = new ReadableStream<any>({\n async start(controller) {\n for await (const chunk of response.stream!) {\n controller.enqueue({ success: true, value: chunk });\n }\n controller.close();\n },\n });\n\n const toolCallContentBlocks: Record<\n number,\n {\n toolCallId: string;\n toolName: string;\n jsonText: string;\n }\n > = {};\n\n return {\n stream: stream.pipeThrough(\n new TransformStream<\n ParseResult<ConverseStreamOutput>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n function enqueueError(error: Error) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n enqueueError(chunk.error);\n return;\n }\n\n const value = chunk.value;\n\n // handle errors:\n if (value.internalServerException) {\n enqueueError(value.internalServerException);\n return;\n }\n if (value.modelStreamErrorException) {\n enqueueError(value.modelStreamErrorException);\n return;\n }\n if (value.throttlingException) {\n enqueueError(value.throttlingException);\n return;\n }\n if (value.validationException) {\n enqueueError(value.validationException);\n return;\n }\n\n if (value.messageStop) {\n finishReason = mapBedrockFinishReason(\n value.messageStop.stopReason,\n );\n }\n\n if (value.metadata) {\n usage = {\n promptTokens: value.metadata.usage?.inputTokens ?? Number.NaN,\n completionTokens:\n value.metadata.usage?.outputTokens ?? Number.NaN,\n };\n\n if (value.metadata.trace) {\n providerMetadata = {\n bedrock: {\n trace: value.metadata.trace as JSONObject,\n },\n };\n }\n }\n\n if (value.contentBlockDelta?.delta?.text) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.contentBlockDelta.delta.text,\n });\n }\n\n const contentBlockStart = value.contentBlockStart;\n if (contentBlockStart?.start?.toolUse != null) {\n const toolUse = contentBlockStart.start.toolUse;\n toolCallContentBlocks[contentBlockStart.contentBlockIndex!] = {\n toolCallId: toolUse.toolUseId!,\n toolName: toolUse.name!,\n jsonText: '',\n };\n }\n\n const contentBlockDelta = value.contentBlockDelta;\n if (contentBlockDelta?.delta?.toolUse) {\n const contentBlock =\n toolCallContentBlocks[contentBlockDelta.contentBlockIndex!];\n const delta = contentBlockDelta.delta.toolUse.input ?? '';\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n argsTextDelta: delta,\n });\n\n contentBlock.jsonText += delta;\n }\n\n const contentBlockStop = value.contentBlockStop;\n if (contentBlockStop != null) {\n const index = contentBlockStop.contentBlockIndex!;\n const contentBlock = toolCallContentBlocks[index];\n\n // when finishing a tool call block, send the full tool call:\n if (contentBlock != null) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n args: contentBlock.jsonText,\n });\n\n delete toolCallContentBlocks[index];\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n): ToolConfiguration {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined };\n }\n\n const mappedTools: Tool[] = tools.map(tool => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: {\n json: tool.parameters,\n } as ToolInputSchema,\n },\n }));\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, toolChoice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { tools: mappedTools, toolChoice: { auto: {} } };\n case 'required':\n return { tools: mappedTools, toolChoice: { any: {} } };\n case 'none':\n // Bedrock does not support 'none' tool choice, so we remove the tools:\n return { tools: undefined, toolChoice: undefined };\n case 'tool':\n return {\n tools: mappedTools,\n toolChoice: { tool: { name: toolChoice.toolName } },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import {\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ImageFormat } from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockAssistantMessage,\n BedrockMessagesPrompt,\n BedrockUserMessage,\n} from './bedrock-chat-prompt';\n\nexport function convertToBedrockChatMessages(\n prompt: LanguageModelV1Prompt,\n): BedrockMessagesPrompt {\n const blocks = groupIntoBlocks(prompt);\n\n let system: string | undefined = undefined;\n const messages: BedrockMessagesPrompt['messages'] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n const type = block.type;\n\n switch (type) {\n case 'system': {\n if (messages.length > 0) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Multiple system messages that are separated by user/assistant messages',\n });\n }\n\n system = block.messages.map(({ content }) => content).join('\\n');\n break;\n }\n\n case 'user': {\n // combines all user and tool messages in this block into a single message:\n const bedrockContent: BedrockUserMessage['content'] = [];\n\n for (const message of block.messages) {\n const { role, content } = message;\n switch (role) {\n case 'user': {\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text: part.text,\n });\n break;\n }\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n bedrockContent.push({\n image: {\n format: part.mimeType?.split('/')?.[1] as ImageFormat,\n source: {\n bytes: part.image ?? (part.image as Uint8Array),\n },\n },\n });\n\n break;\n }\n }\n }\n\n break;\n }\n case 'tool': {\n for (let i = 0; i < content.length; i++) {\n const part = content[i];\n\n bedrockContent.push({\n toolResult: {\n toolUseId: part.toolCallId,\n content: [{ text: JSON.stringify(part.result) }],\n },\n });\n }\n\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({ role: 'user', content: bedrockContent });\n\n break;\n }\n\n case 'assistant': {\n // combines multiple assistant messages in this block into a single message:\n const bedrockContent: BedrockAssistantMessage['content'] = [];\n\n for (const message of block.messages) {\n const { content } = message;\n\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text:\n // trim the last text part if it's the last message in the block\n // because Bedrock does not allow trailing whitespace\n // in pre-filled assistant responses\n i === blocks.length - 1 && j === block.messages.length - 1\n ? part.text.trim()\n : part.text,\n });\n break;\n }\n\n case 'tool-call': {\n bedrockContent.push({\n toolUse: {\n toolUseId: part.toolCallId,\n name: part.toolName,\n input: part.args as any,\n },\n });\n break;\n }\n }\n }\n }\n\n messages.push({ role: 'assistant', content: bedrockContent });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return {\n system,\n messages,\n };\n}\n\ntype SystemBlock = {\n type: 'system';\n messages: Array<LanguageModelV1Message & { role: 'system' }>;\n};\ntype AssistantBlock = {\n type: 'assistant';\n messages: Array<LanguageModelV1Message & { role: 'assistant' }>;\n};\ntype UserBlock = {\n type: 'user';\n messages: Array<LanguageModelV1Message & { role: 'user' | 'tool' }>;\n};\n\nfunction groupIntoBlocks(\n prompt: LanguageModelV1Prompt,\n): Array<SystemBlock | AssistantBlock | UserBlock> {\n const blocks: Array<SystemBlock | AssistantBlock | UserBlock> = [];\n let currentBlock: SystemBlock | AssistantBlock | UserBlock | undefined =\n undefined;\n\n for (const message of prompt) {\n const { role } = message;\n switch (role) {\n case 'system': {\n if (currentBlock?.type !== 'system') {\n currentBlock = { type: 'system', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'assistant': {\n if (currentBlock?.type !== 'assistant') {\n currentBlock = { type: 'assistant', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'user': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'tool': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return blocks;\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { StopReason } from '@aws-sdk/client-bedrock-runtime';\n\nexport function mapBedrockFinishReason(\n finishReason?: StopReason,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop_sequence':\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'content_filtered':\n case 'guardrail_intervened':\n return 'content-filter';\n case 'tool_use':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n"],"mappings":"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","names":["BedrockRuntimeClient","UnsupportedFunctionalityError","i","UnsupportedFunctionalityError","_a","_b","_c","_d","_e","_f","BedrockRuntimeClient"]}
1
+ {"version":3,"sources":["../src/bedrock-provider.ts","../src/bedrock-chat-language-model.ts","../src/convert-to-bedrock-chat-messages.ts","../src/map-bedrock-finish-reason.ts","../src/bedrock-embedding-model.ts"],"sourcesContent":["import {\n EmbeddingModelV1,\n LanguageModelV1,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport {\n generateId,\n loadOptionalSetting,\n loadSetting,\n} from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n BedrockRuntimeClientConfig,\n} from '@aws-sdk/client-bedrock-runtime';\nimport { BedrockChatLanguageModel } from './bedrock-chat-language-model';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\nimport { BedrockEmbeddingModel } from './bedrock-embedding-model';\nimport {\n BedrockEmbeddingModelId,\n BedrockEmbeddingSettings,\n} from './bedrock-embedding-settings';\n\nexport interface AmazonBedrockProviderSettings {\n region?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n\n /**\n * Complete Bedrock configuration for setting advanced authentication and\n * other options. When this is provided, the region, accessKeyId, and\n * secretAccessKey settings are ignored.\n */\n bedrockOptions?: BedrockRuntimeClientConfig;\n\n // for testing\n generateId?: () => string;\n}\n\nexport interface AmazonBedrockProvider extends ProviderV1 {\n (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n\n languageModel(\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): LanguageModelV1;\n\n embedding(\n modelId: BedrockEmbeddingModelId,\n settings?: BedrockEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n}\n\n/**\nCreate an Amazon Bedrock provider instance.\n */\nexport function createAmazonBedrock(\n options: AmazonBedrockProviderSettings = {},\n): AmazonBedrockProvider {\n const createBedrockRuntimeClient = () =>\n new BedrockRuntimeClient(\n options.bedrockOptions ?? {\n region: loadSetting({\n settingValue: options.region,\n settingName: 'region',\n environmentVariableName: 'AWS_REGION',\n description: 'AWS region',\n }),\n credentials: {\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 },\n );\n\n const createChatModel = (\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings = {},\n ) =>\n new BedrockChatLanguageModel(modelId, settings, {\n client: createBedrockRuntimeClient(),\n generateId,\n });\n\n const provider = function (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Amazon Bedrock model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n const createEmbeddingModel = (\n modelId: BedrockEmbeddingModelId,\n settings: BedrockEmbeddingSettings = {},\n ) =>\n new BedrockEmbeddingModel(modelId, settings, {\n client: createBedrockRuntimeClient(),\n });\n\n provider.languageModel = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n\n return provider as AmazonBedrockProvider;\n}\n\n/**\nDefault Bedrock provider instance.\n */\nexport const bedrock = createAmazonBedrock();\n","import {\n JSONObject,\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1ProviderMetadata,\n LanguageModelV1StreamPart,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ParseResult } from '@ai-sdk/provider-utils';\nimport {\n BedrockRuntimeClient,\n ConverseCommand,\n ConverseCommandInput,\n ConverseStreamCommand,\n ConverseStreamOutput,\n GuardrailConfiguration,\n GuardrailStreamConfiguration,\n Tool,\n ToolConfiguration,\n ToolInputSchema,\n} from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockChatModelId,\n BedrockChatSettings,\n} from './bedrock-chat-settings';\nimport { convertToBedrockChatMessages } from './convert-to-bedrock-chat-messages';\nimport { mapBedrockFinishReason } from './map-bedrock-finish-reason';\n\ntype BedrockChatConfig = {\n client: BedrockRuntimeClient;\n generateId: () => string;\n};\n\nexport class BedrockChatLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'amazon-bedrock';\n readonly defaultObjectGenerationMode = 'tool';\n readonly supportsImageUrls = false;\n\n readonly modelId: BedrockChatModelId;\n readonly settings: BedrockChatSettings;\n\n private readonly config: BedrockChatConfig;\n\n constructor(\n modelId: BedrockChatModelId,\n settings: BedrockChatSettings,\n config: BedrockChatConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerMetadata,\n headers,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n if (topK != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'topK',\n });\n }\n\n if (responseFormat != null && responseFormat.type !== 'text') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'responseFormat',\n details: 'JSON response format is not supported.',\n });\n }\n\n const { system, messages } = convertToBedrockChatMessages(prompt);\n\n const baseArgs: ConverseCommandInput = {\n modelId: this.modelId,\n system: system ? [{ text: system }] : undefined,\n additionalModelRequestFields: this.settings.additionalModelRequestFields,\n inferenceConfig: {\n maxTokens,\n temperature,\n topP,\n stopSequences,\n },\n messages,\n guardrailConfig: providerMetadata?.bedrock?.guardrailConfig as\n | GuardrailConfiguration\n | GuardrailStreamConfiguration\n | undefined,\n };\n\n switch (type) {\n case 'regular': {\n const toolConfig = prepareToolsAndToolChoice(mode);\n\n return {\n ...baseArgs,\n ...(toolConfig.tools?.length ? { toolConfig } : {}),\n } satisfies ConverseCommandInput;\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'json-mode object generation',\n });\n }\n\n case 'object-tool': {\n return {\n ...baseArgs,\n toolConfig: {\n tools: [\n {\n toolSpec: {\n name: mode.tool.name,\n description: mode.tool.description,\n inputSchema: {\n json: mode.tool.parameters,\n } as ToolInputSchema,\n },\n },\n ],\n toolChoice: { tool: { name: mode.tool.name } },\n },\n } satisfies ConverseCommandInput;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(new ConverseCommand(args));\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n const providerMetadata = response.trace\n ? { bedrock: { trace: response.trace as JSONObject } }\n : undefined;\n\n return {\n text:\n response.output?.message?.content\n ?.map(part => part.text ?? '')\n .join('') ?? undefined,\n toolCalls: response.output?.message?.content\n ?.filter(part => !!part.toolUse)\n ?.map(part => ({\n toolCallType: 'function',\n toolCallId: part.toolUse?.toolUseId ?? this.config.generateId(),\n toolName: part.toolUse?.name ?? `tool-${this.config.generateId()}`,\n args: JSON.stringify(part.toolUse?.input ?? ''),\n })),\n finishReason: mapBedrockFinishReason(response.stopReason),\n usage: {\n promptTokens: response.usage?.inputTokens ?? Number.NaN,\n completionTokens: response.usage?.outputTokens ?? Number.NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n providerMetadata,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const args = await this.getArgs(options);\n\n const response = await this.config.client.send(\n new ConverseStreamCommand({ ...args }),\n );\n\n const { messages: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n let providerMetadata: LanguageModelV1ProviderMetadata | undefined =\n undefined;\n\n if (!response.stream) {\n throw new Error('No stream found');\n }\n\n const stream = new ReadableStream<any>({\n async start(controller) {\n for await (const chunk of response.stream!) {\n controller.enqueue({ success: true, value: chunk });\n }\n controller.close();\n },\n });\n\n const toolCallContentBlocks: Record<\n number,\n {\n toolCallId: string;\n toolName: string;\n jsonText: string;\n }\n > = {};\n\n return {\n stream: stream.pipeThrough(\n new TransformStream<\n ParseResult<ConverseStreamOutput>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n function enqueueError(error: Error) {\n finishReason = 'error';\n controller.enqueue({ type: 'error', error });\n }\n\n // handle failed chunk parsing / validation:\n if (!chunk.success) {\n enqueueError(chunk.error);\n return;\n }\n\n const value = chunk.value;\n\n // handle errors:\n if (value.internalServerException) {\n enqueueError(value.internalServerException);\n return;\n }\n if (value.modelStreamErrorException) {\n enqueueError(value.modelStreamErrorException);\n return;\n }\n if (value.throttlingException) {\n enqueueError(value.throttlingException);\n return;\n }\n if (value.validationException) {\n enqueueError(value.validationException);\n return;\n }\n\n if (value.messageStop) {\n finishReason = mapBedrockFinishReason(\n value.messageStop.stopReason,\n );\n }\n\n if (value.metadata) {\n usage = {\n promptTokens: value.metadata.usage?.inputTokens ?? Number.NaN,\n completionTokens:\n value.metadata.usage?.outputTokens ?? Number.NaN,\n };\n\n if (value.metadata.trace) {\n providerMetadata = {\n bedrock: {\n trace: value.metadata.trace as JSONObject,\n },\n };\n }\n }\n\n if (value.contentBlockDelta?.delta?.text) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.contentBlockDelta.delta.text,\n });\n }\n\n const contentBlockStart = value.contentBlockStart;\n if (contentBlockStart?.start?.toolUse != null) {\n const toolUse = contentBlockStart.start.toolUse;\n toolCallContentBlocks[contentBlockStart.contentBlockIndex!] = {\n toolCallId: toolUse.toolUseId!,\n toolName: toolUse.name!,\n jsonText: '',\n };\n }\n\n const contentBlockDelta = value.contentBlockDelta;\n if (contentBlockDelta?.delta?.toolUse) {\n const contentBlock =\n toolCallContentBlocks[contentBlockDelta.contentBlockIndex!];\n const delta = contentBlockDelta.delta.toolUse.input ?? '';\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n argsTextDelta: delta,\n });\n\n contentBlock.jsonText += delta;\n }\n\n const contentBlockStop = value.contentBlockStop;\n if (contentBlockStop != null) {\n const index = contentBlockStop.contentBlockIndex!;\n const contentBlock = toolCallContentBlocks[index];\n\n // when finishing a tool call block, send the full tool call:\n if (contentBlock != null) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: contentBlock.toolCallId,\n toolName: contentBlock.toolName,\n args: contentBlock.jsonText,\n });\n\n delete toolCallContentBlocks[index];\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n providerMetadata,\n });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings: [],\n };\n }\n}\n\nfunction prepareToolsAndToolChoice(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n): ToolConfiguration {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return { tools: undefined, toolChoice: undefined };\n }\n\n const mappedTools: Tool[] = tools.map(tool => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: {\n json: tool.parameters,\n } as ToolInputSchema,\n },\n }));\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return { tools: mappedTools, toolChoice: undefined };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return { tools: mappedTools, toolChoice: { auto: {} } };\n case 'required':\n return { tools: mappedTools, toolChoice: { any: {} } };\n case 'none':\n // Bedrock does not support 'none' tool choice, so we remove the tools:\n return { tools: undefined, toolChoice: undefined };\n case 'tool':\n return {\n tools: mappedTools,\n toolChoice: { tool: { name: toolChoice.toolName } },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n","import {\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { ImageFormat } from '@aws-sdk/client-bedrock-runtime';\nimport {\n BedrockAssistantMessage,\n BedrockMessagesPrompt,\n BedrockUserMessage,\n} from './bedrock-chat-prompt';\n\nexport function convertToBedrockChatMessages(\n prompt: LanguageModelV1Prompt,\n): BedrockMessagesPrompt {\n const blocks = groupIntoBlocks(prompt);\n\n let system: string | undefined = undefined;\n const messages: BedrockMessagesPrompt['messages'] = [];\n\n for (let i = 0; i < blocks.length; i++) {\n const block = blocks[i];\n const type = block.type;\n\n switch (type) {\n case 'system': {\n if (messages.length > 0) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Multiple system messages that are separated by user/assistant messages',\n });\n }\n\n system = block.messages.map(({ content }) => content).join('\\n');\n break;\n }\n\n case 'user': {\n // combines all user and tool messages in this block into a single message:\n const bedrockContent: BedrockUserMessage['content'] = [];\n\n for (const message of block.messages) {\n const { role, content } = message;\n switch (role) {\n case 'user': {\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text: part.text,\n });\n break;\n }\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n bedrockContent.push({\n image: {\n format: part.mimeType?.split('/')?.[1] as ImageFormat,\n source: {\n bytes: part.image ?? (part.image as Uint8Array),\n },\n },\n });\n\n break;\n }\n }\n }\n\n break;\n }\n case 'tool': {\n for (let i = 0; i < content.length; i++) {\n const part = content[i];\n\n bedrockContent.push({\n toolResult: {\n toolUseId: part.toolCallId,\n content: [{ text: JSON.stringify(part.result) }],\n },\n });\n }\n\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({ role: 'user', content: bedrockContent });\n\n break;\n }\n\n case 'assistant': {\n // combines multiple assistant messages in this block into a single message:\n const bedrockContent: BedrockAssistantMessage['content'] = [];\n\n for (const message of block.messages) {\n const { content } = message;\n\n for (let j = 0; j < content.length; j++) {\n const part = content[j];\n\n switch (part.type) {\n case 'text': {\n bedrockContent.push({\n text:\n // trim the last text part if it's the last message in the block\n // because Bedrock does not allow trailing whitespace\n // in pre-filled assistant responses\n i === blocks.length - 1 && j === block.messages.length - 1\n ? part.text.trim()\n : part.text,\n });\n break;\n }\n\n case 'tool-call': {\n bedrockContent.push({\n toolUse: {\n toolUseId: part.toolCallId,\n name: part.toolName,\n input: part.args as any,\n },\n });\n break;\n }\n }\n }\n }\n\n messages.push({ role: 'assistant', content: bedrockContent });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return {\n system,\n messages,\n };\n}\n\ntype SystemBlock = {\n type: 'system';\n messages: Array<LanguageModelV1Message & { role: 'system' }>;\n};\ntype AssistantBlock = {\n type: 'assistant';\n messages: Array<LanguageModelV1Message & { role: 'assistant' }>;\n};\ntype UserBlock = {\n type: 'user';\n messages: Array<LanguageModelV1Message & { role: 'user' | 'tool' }>;\n};\n\nfunction groupIntoBlocks(\n prompt: LanguageModelV1Prompt,\n): Array<SystemBlock | AssistantBlock | UserBlock> {\n const blocks: Array<SystemBlock | AssistantBlock | UserBlock> = [];\n let currentBlock: SystemBlock | AssistantBlock | UserBlock | undefined =\n undefined;\n\n for (const message of prompt) {\n const { role } = message;\n switch (role) {\n case 'system': {\n if (currentBlock?.type !== 'system') {\n currentBlock = { type: 'system', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'assistant': {\n if (currentBlock?.type !== 'assistant') {\n currentBlock = { type: 'assistant', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'user': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n case 'tool': {\n if (currentBlock?.type !== 'user') {\n currentBlock = { type: 'user', messages: [] };\n blocks.push(currentBlock);\n }\n\n currentBlock.messages.push(message);\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return blocks;\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { StopReason } from '@aws-sdk/client-bedrock-runtime';\n\nexport function mapBedrockFinishReason(\n finishReason?: StopReason,\n): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'stop_sequence':\n case 'end_turn':\n return 'stop';\n case 'max_tokens':\n return 'length';\n case 'content_filtered':\n case 'guardrail_intervened':\n return 'content-filter';\n case 'tool_use':\n return 'tool-calls';\n default:\n return 'unknown';\n }\n}\n","import { EmbeddingModelV1 } from '@ai-sdk/provider';\nimport {\n BedrockEmbeddingModelId,\n BedrockEmbeddingSettings,\n} from './bedrock-embedding-settings';\nimport {\n BedrockRuntimeClient,\n InvokeModelCommand,\n} from '@aws-sdk/client-bedrock-runtime';\n\ntype BedrockEmbeddingConfig = {\n client: BedrockRuntimeClient;\n};\n\ntype DoEmbedResponse = Awaited<ReturnType<EmbeddingModelV1<string>['doEmbed']>>;\n\nexport class BedrockEmbeddingModel implements EmbeddingModelV1<string> {\n readonly specificationVersion = 'v1';\n readonly modelId: BedrockEmbeddingModelId;\n readonly provider = 'amazon-bedrock';\n readonly maxEmbeddingsPerCall = undefined;\n readonly supportsParallelCalls = true;\n private readonly config: BedrockEmbeddingConfig;\n private readonly settings: BedrockEmbeddingSettings;\n\n constructor(\n modelId: BedrockEmbeddingModelId,\n settings: BedrockEmbeddingSettings,\n config: BedrockEmbeddingConfig,\n ) {\n this.modelId = modelId;\n this.config = config;\n this.settings = settings;\n }\n\n async doEmbed({\n values,\n }: Parameters<\n EmbeddingModelV1<string>['doEmbed']\n >[0]): Promise<DoEmbedResponse> {\n const fn = async (inputText: string) => {\n const payload = {\n inputText,\n dimensions: this.settings.dimensions,\n normalize: this.settings.normalize,\n };\n\n const command = new InvokeModelCommand({\n contentType: 'application/json',\n body: JSON.stringify(payload),\n modelId: this.modelId,\n });\n const rawResponse = await this.config.client.send(command);\n\n const parsed = JSON.parse(new TextDecoder().decode(rawResponse.body));\n\n return parsed;\n };\n\n const responses = await Promise.all(values.map(fn));\n\n const response = responses.reduce(\n (acc, r) => {\n acc.embeddings.push(r.embedding);\n acc.usage.tokens += r.inputTextTokenCount;\n return acc;\n },\n { embeddings: [], usage: { tokens: 0 } },\n );\n\n return response;\n }\n}\n"],"mappings":";AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE,wBAAAA;AAAA,OAEK;;;ACbP;AAAA,EAOE,iCAAAC;AAAA,OACK;AAEP;AAAA,EAEE;AAAA,EAEA;AAAA,OAOK;;;ACrBP;AAAA,EAGE;AAAA,OACK;AAQA,SAAS,6BACd,QACuB;AAdzB;AAeE,QAAM,SAAS,gBAAgB,MAAM;AAErC,MAAI,SAA6B;AACjC,QAAM,WAA8C,CAAC;AAErD,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,UAAM,QAAQ,OAAO,CAAC;AACtB,UAAM,OAAO,MAAM;AAEnB,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,IAAI,8BAA8B;AAAA,YACtC,eACE;AAAA,UACJ,CAAC;AAAA,QACH;AAEA,iBAAS,MAAM,SAAS,IAAI,CAAC,EAAE,QAAQ,MAAM,OAAO,EAAE,KAAK,IAAI;AAC/D;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AAEX,cAAM,iBAAgD,CAAC;AAEvD,mBAAW,WAAW,MAAM,UAAU;AACpC,gBAAM,EAAE,MAAM,QAAQ,IAAI;AAC1B,kBAAQ,MAAM;AAAA,YACZ,KAAK,QAAQ;AACX,uBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,sBAAM,OAAO,QAAQ,CAAC;AAEtB,wBAAQ,KAAK,MAAM;AAAA,kBACjB,KAAK,QAAQ;AACX,mCAAe,KAAK;AAAA,sBAClB,MAAM,KAAK;AAAA,oBACb,CAAC;AACD;AAAA,kBACF;AAAA,kBACA,KAAK,SAAS;AACZ,wBAAI,KAAK,iBAAiB,KAAK;AAE7B,4BAAM,IAAI,8BAA8B;AAAA,wBACtC,eAAe;AAAA,sBACjB,CAAC;AAAA,oBACH;AAEA,mCAAe,KAAK;AAAA,sBAClB,OAAO;AAAA,wBACL,SAAQ,gBAAK,aAAL,mBAAe,MAAM,SAArB,mBAA4B;AAAA,wBACpC,QAAQ;AAAA,0BACN,QAAO,UAAK,UAAL,YAAe,KAAK;AAAA,wBAC7B;AAAA,sBACF;AAAA,oBACF,CAAC;AAED;AAAA,kBACF;AAAA,gBACF;AAAA,cACF;AAEA;AAAA,YACF;AAAA,YACA,KAAK,QAAQ;AACX,uBAASC,KAAI,GAAGA,KAAI,QAAQ,QAAQA,MAAK;AACvC,sBAAM,OAAO,QAAQA,EAAC;AAEtB,+BAAe,KAAK;AAAA,kBAClB,YAAY;AAAA,oBACV,WAAW,KAAK;AAAA,oBAChB,SAAS,CAAC,EAAE,MAAM,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC;AAAA,kBACjD;AAAA,gBACF,CAAC;AAAA,cACH;AAEA;AAAA,YACF;AAAA,YACA,SAAS;AACP,oBAAM,mBAA0B;AAChC,oBAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,YACzD;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK,EAAE,MAAM,QAAQ,SAAS,eAAe,CAAC;AAEvD;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAEhB,cAAM,iBAAqD,CAAC;AAE5D,mBAAW,WAAW,MAAM,UAAU;AACpC,gBAAM,EAAE,QAAQ,IAAI;AAEpB,mBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,kBAAM,OAAO,QAAQ,CAAC;AAEtB,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,+BAAe,KAAK;AAAA,kBAClB;AAAA;AAAA;AAAA;AAAA,oBAIE,MAAM,OAAO,SAAS,KAAK,MAAM,MAAM,SAAS,SAAS,IACrD,KAAK,KAAK,KAAK,IACf,KAAK;AAAA;AAAA,gBACb,CAAC;AACD;AAAA,cACF;AAAA,cAEA,KAAK,aAAa;AAChB,+BAAe,KAAK;AAAA,kBAClB,SAAS;AAAA,oBACP,WAAW,KAAK;AAAA,oBAChB,MAAM,KAAK;AAAA,oBACX,OAAO,KAAK;AAAA,kBACd;AAAA,gBACF,CAAC;AACD;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK,EAAE,MAAM,aAAa,SAAS,eAAe,CAAC;AAE5D;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAeA,SAAS,gBACP,QACiD;AACjD,QAAM,SAA0D,CAAC;AACjE,MAAI,eACF;AAEF,aAAW,WAAW,QAAQ;AAC5B,UAAM,EAAE,KAAK,IAAI;AACjB,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,aAAI,6CAAc,UAAS,UAAU;AACnC,yBAAe,EAAE,MAAM,UAAU,UAAU,CAAC,EAAE;AAC9C,iBAAO,KAAK,YAAY;AAAA,QAC1B;AAEA,qBAAa,SAAS,KAAK,OAAO;AAClC;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,aAAI,6CAAc,UAAS,aAAa;AACtC,yBAAe,EAAE,MAAM,aAAa,UAAU,CAAC,EAAE;AACjD,iBAAO,KAAK,YAAY;AAAA,QAC1B;AAEA,qBAAa,SAAS,KAAK,OAAO;AAClC;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,aAAI,6CAAc,UAAS,QAAQ;AACjC,yBAAe,EAAE,MAAM,QAAQ,UAAU,CAAC,EAAE;AAC5C,iBAAO,KAAK,YAAY;AAAA,QAC1B;AAEA,qBAAa,SAAS,KAAK,OAAO;AAClC;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,aAAI,6CAAc,UAAS,QAAQ;AACjC,yBAAe,EAAE,MAAM,QAAQ,UAAU,CAAC,EAAE;AAC5C,iBAAO,KAAK,YAAY;AAAA,QAC1B;AAEA,qBAAa,SAAS,KAAK,OAAO;AAClC;AAAA,MACF;AAAA,MACA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ACjOO,SAAS,uBACd,cAC6B;AAC7B,UAAQ,cAAc;AAAA,IACpB,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AFcO,IAAM,2BAAN,MAA0D;AAAA,EAW/D,YACE,SACA,UACA,QACA;AAdF,SAAS,uBAAuB;AAChC,SAAS,WAAW;AACpB,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAY3B,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAAiD;AArEnD;AAsEI,UAAM,OAAO,KAAK;AAElB,UAAM,WAAyC,CAAC;AAEhD,QAAI,oBAAoB,MAAM;AAC5B,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,mBAAmB,MAAM;AAC3B,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,WAAW,MAAM;AACnB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,kBAAkB,QAAQ,eAAe,SAAS,QAAQ;AAC5D,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,EAAE,QAAQ,SAAS,IAAI,6BAA6B,MAAM;AAEhE,UAAM,WAAiC;AAAA,MACrC,SAAS,KAAK;AAAA,MACd,QAAQ,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI;AAAA,MACtC,8BAA8B,KAAK,SAAS;AAAA,MAC5C,iBAAiB;AAAA,QACf;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA;AAAA,MACA,kBAAiB,0DAAkB,YAAlB,mBAA2B;AAAA,IAI9C;AAEA,YAAQ,MAAM;AAAA,MACZ,KAAK,WAAW;AACd,cAAM,aAAa,0BAA0B,IAAI;AAEjD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,KAAI,gBAAW,UAAX,mBAAkB,UAAS,EAAE,WAAW,IAAI,CAAC;AAAA,QACnD;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,IAAIC,+BAA8B;AAAA,UACtC,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,MAEA,KAAK,eAAe;AAClB,eAAO;AAAA,UACL,GAAG;AAAA,UACH,YAAY;AAAA,YACV,OAAO;AAAA,cACL;AAAA,gBACE,UAAU;AAAA,kBACR,MAAM,KAAK,KAAK;AAAA,kBAChB,aAAa,KAAK,KAAK;AAAA,kBACvB,aAAa;AAAA,oBACX,MAAM,KAAK,KAAK;AAAA,kBAClB;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,YAAY,EAAE,MAAM,EAAE,MAAM,KAAK,KAAK,KAAK,EAAE;AAAA,UAC/C;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AArLjE;AAsLI,UAAM,OAAO,MAAM,KAAK,QAAQ,OAAO;AAEvC,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO,KAAK,IAAI,gBAAgB,IAAI,CAAC;AAExE,UAAM,EAAE,UAAU,WAAW,GAAG,YAAY,IAAI;AAEhD,UAAM,mBAAmB,SAAS,QAC9B,EAAE,SAAS,EAAE,OAAO,SAAS,MAAoB,EAAE,IACnD;AAEJ,WAAO;AAAA,MACL,OACE,gCAAS,WAAT,mBAAiB,YAAjB,mBAA0B,YAA1B,mBACI,IAAI,UAAK;AAnMrB,YAAAC;AAmMwB,gBAAAA,MAAA,KAAK,SAAL,OAAAA,MAAa;AAAA,SAC1B,KAAK,QAFR,YAEe;AAAA,MACjB,YAAW,gCAAS,WAAT,mBAAiB,YAAjB,mBAA0B,YAA1B,mBACP,OAAO,UAAQ,CAAC,CAAC,KAAK,aADf,mBAEP,IAAI,UAAK;AAvMnB,YAAAA,KAAAC,KAAAC,KAAAC,KAAAC,KAAAC;AAuMuB;AAAA,UACb,cAAc;AAAA,UACd,aAAYJ,OAAAD,MAAA,KAAK,YAAL,gBAAAA,IAAc,cAAd,OAAAC,MAA2B,KAAK,OAAO,WAAW;AAAA,UAC9D,WAAUE,OAAAD,MAAA,KAAK,YAAL,gBAAAA,IAAc,SAAd,OAAAC,MAAsB,QAAQ,KAAK,OAAO,WAAW,CAAC;AAAA,UAChE,MAAM,KAAK,WAAUE,OAAAD,MAAA,KAAK,YAAL,gBAAAA,IAAc,UAAd,OAAAC,MAAuB,EAAE;AAAA,QAChD;AAAA;AAAA,MACF,cAAc,uBAAuB,SAAS,UAAU;AAAA,MACxD,OAAO;AAAA,QACL,eAAc,oBAAS,UAAT,mBAAgB,gBAAhB,YAA+B,OAAO;AAAA,QACpD,mBAAkB,oBAAS,UAAT,mBAAgB,iBAAhB,YAAgC,OAAO;AAAA,MAC3D;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,UAAU,CAAC;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,OAAO,MAAM,KAAK,QAAQ,OAAO;AAEvC,UAAM,WAAW,MAAM,KAAK,OAAO,OAAO;AAAA,MACxC,IAAI,sBAAsB,EAAE,GAAG,KAAK,CAAC;AAAA,IACvC;AAEA,UAAM,EAAE,UAAU,WAAW,GAAG,YAAY,IAAI;AAEhD,QAAI,eAA4C;AAChD,QAAI,QAA4D;AAAA,MAC9D,cAAc,OAAO;AAAA,MACrB,kBAAkB,OAAO;AAAA,IAC3B;AACA,QAAI,mBACF;AAEF,QAAI,CAAC,SAAS,QAAQ;AACpB,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACnC;AAEA,UAAM,SAAS,IAAI,eAAoB;AAAA,MACrC,MAAM,MAAM,YAAY;AACtB,yBAAiB,SAAS,SAAS,QAAS;AAC1C,qBAAW,QAAQ,EAAE,SAAS,MAAM,OAAO,MAAM,CAAC;AAAA,QACpD;AACA,mBAAW,MAAM;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,wBAOF,CAAC;AAEL,WAAO;AAAA,MACL,QAAQ,OAAO;AAAA,QACb,IAAI,gBAGF;AAAA,UACA,UAAU,OAAO,YAAY;AAvQvC;AAwQY,qBAAS,aAAa,OAAc;AAClC,6BAAe;AACf,yBAAW,QAAQ,EAAE,MAAM,SAAS,MAAM,CAAC;AAAA,YAC7C;AAGA,gBAAI,CAAC,MAAM,SAAS;AAClB,2BAAa,MAAM,KAAK;AACxB;AAAA,YACF;AAEA,kBAAM,QAAQ,MAAM;AAGpB,gBAAI,MAAM,yBAAyB;AACjC,2BAAa,MAAM,uBAAuB;AAC1C;AAAA,YACF;AACA,gBAAI,MAAM,2BAA2B;AACnC,2BAAa,MAAM,yBAAyB;AAC5C;AAAA,YACF;AACA,gBAAI,MAAM,qBAAqB;AAC7B,2BAAa,MAAM,mBAAmB;AACtC;AAAA,YACF;AACA,gBAAI,MAAM,qBAAqB;AAC7B,2BAAa,MAAM,mBAAmB;AACtC;AAAA,YACF;AAEA,gBAAI,MAAM,aAAa;AACrB,6BAAe;AAAA,gBACb,MAAM,YAAY;AAAA,cACpB;AAAA,YACF;AAEA,gBAAI,MAAM,UAAU;AAClB,sBAAQ;AAAA,gBACN,eAAc,iBAAM,SAAS,UAAf,mBAAsB,gBAAtB,YAAqC,OAAO;AAAA,gBAC1D,mBACE,iBAAM,SAAS,UAAf,mBAAsB,iBAAtB,YAAsC,OAAO;AAAA,cACjD;AAEA,kBAAI,MAAM,SAAS,OAAO;AACxB,mCAAmB;AAAA,kBACjB,SAAS;AAAA,oBACP,OAAO,MAAM,SAAS;AAAA,kBACxB;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAEA,iBAAI,iBAAM,sBAAN,mBAAyB,UAAzB,mBAAgC,MAAM;AACxC,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,WAAW,MAAM,kBAAkB,MAAM;AAAA,cAC3C,CAAC;AAAA,YACH;AAEA,kBAAM,oBAAoB,MAAM;AAChC,kBAAI,4DAAmB,UAAnB,mBAA0B,YAAW,MAAM;AAC7C,oBAAM,UAAU,kBAAkB,MAAM;AACxC,oCAAsB,kBAAkB,iBAAkB,IAAI;AAAA,gBAC5D,YAAY,QAAQ;AAAA,gBACpB,UAAU,QAAQ;AAAA,gBAClB,UAAU;AAAA,cACZ;AAAA,YACF;AAEA,kBAAM,oBAAoB,MAAM;AAChC,iBAAI,4DAAmB,UAAnB,mBAA0B,SAAS;AACrC,oBAAM,eACJ,sBAAsB,kBAAkB,iBAAkB;AAC5D,oBAAM,SAAQ,uBAAkB,MAAM,QAAQ,UAAhC,YAAyC;AAEvD,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN,cAAc;AAAA,gBACd,YAAY,aAAa;AAAA,gBACzB,UAAU,aAAa;AAAA,gBACvB,eAAe;AAAA,cACjB,CAAC;AAED,2BAAa,YAAY;AAAA,YAC3B;AAEA,kBAAM,mBAAmB,MAAM;AAC/B,gBAAI,oBAAoB,MAAM;AAC5B,oBAAM,QAAQ,iBAAiB;AAC/B,oBAAM,eAAe,sBAAsB,KAAK;AAGhD,kBAAI,gBAAgB,MAAM;AACxB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,cAAc;AAAA,kBACd,YAAY,aAAa;AAAA,kBACzB,UAAU,aAAa;AAAA,kBACvB,MAAM,aAAa;AAAA,gBACrB,CAAC;AAED,uBAAO,sBAAsB,KAAK;AAAA,cACpC;AAAA,YACF;AAAA,UACF;AAAA,UAEA,MAAM,YAAY;AAChB,uBAAW,QAAQ;AAAA,cACjB,MAAM;AAAA,cACN;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,SAAS,EAAE,WAAW,YAAY;AAAA,MAClC,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;AAEA,SAAS,0BACP,MAGmB;AAvYrB;AAyYE,QAAM,UAAQ,UAAK,UAAL,mBAAY,UAAS,KAAK,QAAQ;AAEhD,MAAI,SAAS,MAAM;AACjB,WAAO,EAAE,OAAO,QAAW,YAAY,OAAU;AAAA,EACnD;AAEA,QAAM,cAAsB,MAAM,IAAI,WAAS;AAAA,IAC7C,UAAU;AAAA,MACR,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,aAAa;AAAA,QACX,MAAM,KAAK;AAAA,MACb;AAAA,IACF;AAAA,EACF,EAAE;AAEF,QAAM,aAAa,KAAK;AAExB,MAAI,cAAc,MAAM;AACtB,WAAO,EAAE,OAAO,aAAa,YAAY,OAAU;AAAA,EACrD;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,EAAE,OAAO,aAAa,YAAY,EAAE,MAAM,CAAC,EAAE,EAAE;AAAA,IACxD,KAAK;AACH,aAAO,EAAE,OAAO,aAAa,YAAY,EAAE,KAAK,CAAC,EAAE,EAAE;AAAA,IACvD,KAAK;AAEH,aAAO,EAAE,OAAO,QAAW,YAAY,OAAU;AAAA,IACnD,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY,EAAE,MAAM,EAAE,MAAM,WAAW,SAAS,EAAE;AAAA,MACpD;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI,MAAM,iCAAiC,gBAAgB,EAAE;AAAA,IACrE;AAAA,EACF;AACF;;;AG9aA;AAAA,EAEE;AAAA,OACK;AAQA,IAAM,wBAAN,MAAgE;AAAA,EASrE,YACE,SACA,UACA,QACA;AAZF,SAAS,uBAAuB;AAEhC,SAAS,WAAW;AACpB,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AAS/B,SAAK,UAAU;AACf,SAAK,SAAS;AACd,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,MAAM,QAAQ;AAAA,IACZ;AAAA,EACF,GAEgC;AAC9B,UAAM,KAAK,OAAO,cAAsB;AACtC,YAAM,UAAU;AAAA,QACd;AAAA,QACA,YAAY,KAAK,SAAS;AAAA,QAC1B,WAAW,KAAK,SAAS;AAAA,MAC3B;AAEA,YAAM,UAAU,IAAI,mBAAmB;AAAA,QACrC,aAAa;AAAA,QACb,MAAM,KAAK,UAAU,OAAO;AAAA,QAC5B,SAAS,KAAK;AAAA,MAChB,CAAC;AACD,YAAM,cAAc,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO;AAEzD,YAAM,SAAS,KAAK,MAAM,IAAI,YAAY,EAAE,OAAO,YAAY,IAAI,CAAC;AAEpE,aAAO;AAAA,IACT;AAEA,UAAM,YAAY,MAAM,QAAQ,IAAI,OAAO,IAAI,EAAE,CAAC;AAElD,UAAM,WAAW,UAAU;AAAA,MACzB,CAAC,KAAK,MAAM;AACV,YAAI,WAAW,KAAK,EAAE,SAAS;AAC/B,YAAI,MAAM,UAAU,EAAE;AACtB,eAAO;AAAA,MACT;AAAA,MACA,EAAE,YAAY,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,EAAE;AAAA,IACzC;AAEA,WAAO;AAAA,EACT;AACF;;;AJVO,SAAS,oBACd,UAAyC,CAAC,GACnB;AACvB,QAAM,6BAA6B,MAAG;AAjExC;AAkEI,eAAIC;AAAA,OACF,aAAQ,mBAAR,YAA0B;AAAA,QACxB,QAAQ,YAAY;AAAA,UAClB,cAAc,QAAQ;AAAA,UACtB,aAAa;AAAA,UACb,yBAAyB;AAAA,UACzB,aAAa;AAAA,QACf,CAAC;AAAA,QACD,aAAa;AAAA,UACX,aAAa,YAAY;AAAA,YACvB,cAAc,QAAQ;AAAA,YACtB,aAAa;AAAA,YACb,yBAAyB;AAAA,YACzB,aAAa;AAAA,UACf,CAAC;AAAA,UACD,iBAAiB,YAAY;AAAA,YAC3B,cAAc,QAAQ;AAAA,YACtB,aAAa;AAAA,YACb,yBAAyB;AAAA,YACzB,aAAa;AAAA,UACf,CAAC;AAAA,UACD,cAAc,oBAAoB;AAAA,YAChC,cAAc,QAAQ;AAAA,YACtB,yBAAyB;AAAA,UAC3B,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA;AAEF,QAAM,kBAAkB,CACtB,SACA,WAAgC,CAAC,MAEjC,IAAI,yBAAyB,SAAS,UAAU;AAAA,IAC9C,QAAQ,2BAA2B;AAAA,IACnC;AAAA,EACF,CAAC;AAEH,QAAM,WAAW,SACf,SACA,UACA;AACA,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,SAAS,QAAQ;AAAA,EAC1C;AAEA,QAAM,uBAAuB,CAC3B,SACA,WAAqC,CAAC,MAEtC,IAAI,sBAAsB,SAAS,UAAU;AAAA,IAC3C,QAAQ,2BAA2B;AAAA,EACrC,CAAC;AAEH,WAAS,gBAAgB;AACzB,WAAS,YAAY;AACrB,WAAS,gBAAgB;AACzB,WAAS,qBAAqB;AAE9B,SAAO;AACT;AAKO,IAAM,UAAU,oBAAoB;","names":["BedrockRuntimeClient","UnsupportedFunctionalityError","i","UnsupportedFunctionalityError","_a","_b","_c","_d","_e","_f","BedrockRuntimeClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/amazon-bedrock",
3
- "version": "0.0.28",
3
+ "version": "0.0.30",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -21,13 +21,13 @@
21
21
  "dependencies": {
22
22
  "@ai-sdk/provider": "0.0.24",
23
23
  "@ai-sdk/provider-utils": "1.0.20",
24
- "@aws-sdk/client-bedrock-runtime": "3.602.0"
24
+ "@aws-sdk/client-bedrock-runtime": "^3.663.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@smithy/types": "^3.1.0",
28
- "@types/node": "^18",
29
- "aws-sdk-client-mock": "^4.0.1",
30
- "tsup": "^8",
27
+ "@smithy/types": "^3.5.0",
28
+ "@types/node": "^18.19.54",
29
+ "aws-sdk-client-mock": "^4.0.2",
30
+ "tsup": "^8.3.0",
31
31
  "typescript": "5.5.4",
32
32
  "zod": "3.23.8",
33
33
  "@vercel/ai-tsconfig": "0.0.0"