@ai-sdk/amazon-bedrock 0.0.1

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/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2023 Vercel, Inc.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
package/README.md ADDED
@@ -0,0 +1,36 @@
1
+ # Vercel AI SDK - Amazon Bedrock Provider
2
+
3
+ The **[Amazon Bedrock provider](https://sdk.vercel.ai/providers/ai-sdk-providers/amazon-bedrock)** for the [Vercel AI SDK](https://sdk.vercel.ai/docs)
4
+ contains language model support for the Amazon Bedrock [converse API](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html).
5
+
6
+ ## Setup
7
+
8
+ The Amazon Bedrock provider is available in the `@ai-sdk/amazon-bedrock` module. You can install it with
9
+
10
+ ```bash
11
+ npm i @ai-sdk/amazon-bedrock
12
+ ```
13
+
14
+ ## Provider Instance
15
+
16
+ You can import the default provider instance `bedrock` from `@ai-sdk/amazon-bedrock`:
17
+
18
+ ```ts
19
+ import { bedrock } from '@ai-sdk/amazon-bedrock';
20
+ ```
21
+
22
+ ## Example
23
+
24
+ ```ts
25
+ import { bedrock } from '@ai-sdk/amazon-bedrock';
26
+ import { generateText } from 'ai';
27
+
28
+ const { text } = await generateText({
29
+ model: bedrock('meta.llama3-8b-instruct-v1:0'),
30
+ prompt: 'Write a vegetarian lasagna recipe for 4 people.',
31
+ });
32
+ ```
33
+
34
+ ## Documentation
35
+
36
+ Please check out the **[Amazon Bedrock provider documentation](https://sdk.vercel.ai/providers/ai-sdk-providers/amazon-bedrock)** for more information.
@@ -0,0 +1,50 @@
1
+ import { LanguageModelV1 } from '@ai-sdk/provider';
2
+ import { BedrockRuntimeClient } from '@aws-sdk/client-bedrock-runtime';
3
+
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 & {});
5
+ interface BedrockChatSettings {
6
+ /**
7
+ Additional inference parameters that the model supports,
8
+ beyond the base set of inference parameters that Converse
9
+ supports in the inferenceConfig field
10
+ */
11
+ additionalModelRequestFields?: Record<string, any>;
12
+ }
13
+
14
+ type BedrockChatConfig = {
15
+ client: BedrockRuntimeClient;
16
+ generateId: () => string;
17
+ };
18
+ declare class BedrockChatLanguageModel implements LanguageModelV1 {
19
+ readonly specificationVersion = "v1";
20
+ readonly provider = "amazon-bedrock";
21
+ readonly defaultObjectGenerationMode = "tool";
22
+ readonly modelId: BedrockChatModelId;
23
+ readonly settings: BedrockChatSettings;
24
+ private readonly config;
25
+ constructor(modelId: BedrockChatModelId, settings: BedrockChatSettings, config: BedrockChatConfig);
26
+ private getArgs;
27
+ doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
28
+ doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
29
+ }
30
+
31
+ interface AmazonBedrockProviderSettings {
32
+ region?: string;
33
+ accessKeyId?: string;
34
+ secretAccessKey?: string;
35
+ generateId?: () => string;
36
+ }
37
+ interface AmazonBedrockProvider {
38
+ (modelId: BedrockChatModelId, settings?: BedrockChatSettings): BedrockChatLanguageModel;
39
+ languageModel(modelId: BedrockChatModelId, settings?: BedrockChatSettings): BedrockChatLanguageModel;
40
+ }
41
+ /**
42
+ Create an Amazon Bedrock provider instance.
43
+ */
44
+ declare function createAmazonBedrock(options?: AmazonBedrockProviderSettings): AmazonBedrockProvider;
45
+ /**
46
+ Default Bedrock provider instance.
47
+ */
48
+ declare const bedrock: AmazonBedrockProvider;
49
+
50
+ export { type AmazonBedrockProvider, type AmazonBedrockProviderSettings, bedrock, createAmazonBedrock };
@@ -0,0 +1,50 @@
1
+ import { LanguageModelV1 } from '@ai-sdk/provider';
2
+ import { BedrockRuntimeClient } from '@aws-sdk/client-bedrock-runtime';
3
+
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 & {});
5
+ interface BedrockChatSettings {
6
+ /**
7
+ Additional inference parameters that the model supports,
8
+ beyond the base set of inference parameters that Converse
9
+ supports in the inferenceConfig field
10
+ */
11
+ additionalModelRequestFields?: Record<string, any>;
12
+ }
13
+
14
+ type BedrockChatConfig = {
15
+ client: BedrockRuntimeClient;
16
+ generateId: () => string;
17
+ };
18
+ declare class BedrockChatLanguageModel implements LanguageModelV1 {
19
+ readonly specificationVersion = "v1";
20
+ readonly provider = "amazon-bedrock";
21
+ readonly defaultObjectGenerationMode = "tool";
22
+ readonly modelId: BedrockChatModelId;
23
+ readonly settings: BedrockChatSettings;
24
+ private readonly config;
25
+ constructor(modelId: BedrockChatModelId, settings: BedrockChatSettings, config: BedrockChatConfig);
26
+ private getArgs;
27
+ doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
28
+ doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
29
+ }
30
+
31
+ interface AmazonBedrockProviderSettings {
32
+ region?: string;
33
+ accessKeyId?: string;
34
+ secretAccessKey?: string;
35
+ generateId?: () => string;
36
+ }
37
+ interface AmazonBedrockProvider {
38
+ (modelId: BedrockChatModelId, settings?: BedrockChatSettings): BedrockChatLanguageModel;
39
+ languageModel(modelId: BedrockChatModelId, settings?: BedrockChatSettings): BedrockChatLanguageModel;
40
+ }
41
+ /**
42
+ Create an Amazon Bedrock provider instance.
43
+ */
44
+ declare function createAmazonBedrock(options?: AmazonBedrockProviderSettings): AmazonBedrockProvider;
45
+ /**
46
+ Default Bedrock provider instance.
47
+ */
48
+ declare const bedrock: AmazonBedrockProvider;
49
+
50
+ export { type AmazonBedrockProvider, type AmazonBedrockProviderSettings, bedrock, createAmazonBedrock };
package/dist/index.js ADDED
@@ -0,0 +1,487 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ bedrock: () => bedrock,
24
+ createAmazonBedrock: () => createAmazonBedrock
25
+ });
26
+ module.exports = __toCommonJS(src_exports);
27
+
28
+ // src/bedrock-provider.ts
29
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
30
+ var import_client_bedrock_runtime2 = require("@aws-sdk/client-bedrock-runtime");
31
+
32
+ // src/bedrock-chat-language-model.ts
33
+ var import_provider2 = require("@ai-sdk/provider");
34
+ var import_client_bedrock_runtime = require("@aws-sdk/client-bedrock-runtime");
35
+
36
+ // src/convert-to-bedrock-chat-messages.ts
37
+ var import_provider = require("@ai-sdk/provider");
38
+ var import_provider_utils = require("@ai-sdk/provider-utils");
39
+ async function convertToBedrockChatMessages({
40
+ prompt,
41
+ downloadImplementation = import_provider_utils.download
42
+ }) {
43
+ var _a, _b;
44
+ let system = void 0;
45
+ const messages = [];
46
+ for (const { role, content } of prompt) {
47
+ switch (role) {
48
+ case "system": {
49
+ if (system != null) {
50
+ throw new import_provider.UnsupportedFunctionalityError({
51
+ functionality: "Multiple system messages"
52
+ });
53
+ }
54
+ system = content;
55
+ break;
56
+ }
57
+ case "user": {
58
+ const bedrockMessageContent = [];
59
+ for (const part of content) {
60
+ switch (part.type) {
61
+ case "text": {
62
+ bedrockMessageContent.push({ text: part.text });
63
+ break;
64
+ }
65
+ case "image": {
66
+ let data;
67
+ let mimeType;
68
+ if (part.image instanceof URL) {
69
+ const downloadResult = await downloadImplementation({
70
+ url: part.image
71
+ });
72
+ data = downloadResult.data;
73
+ mimeType = downloadResult.mimeType;
74
+ } else {
75
+ data = part.image;
76
+ mimeType = part.mimeType;
77
+ }
78
+ bedrockMessageContent.push({
79
+ image: {
80
+ format: (_b = (_a = mimeType != null ? mimeType : part.mimeType) == null ? void 0 : _a.split(
81
+ "/"
82
+ )) == null ? void 0 : _b[1],
83
+ source: {
84
+ bytes: data != null ? data : part.image
85
+ }
86
+ }
87
+ });
88
+ break;
89
+ }
90
+ }
91
+ }
92
+ messages.push({
93
+ role: "user",
94
+ content: bedrockMessageContent
95
+ });
96
+ break;
97
+ }
98
+ case "assistant": {
99
+ const toolUse = [];
100
+ let text = "";
101
+ for (const part of content) {
102
+ switch (part.type) {
103
+ case "text": {
104
+ text += part.text;
105
+ break;
106
+ }
107
+ case "tool-call": {
108
+ toolUse.push({
109
+ toolUseId: part.toolCallId,
110
+ name: part.toolName,
111
+ input: part.args
112
+ });
113
+ break;
114
+ }
115
+ default: {
116
+ const _exhaustiveCheck = part;
117
+ throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
118
+ }
119
+ }
120
+ }
121
+ messages.push({
122
+ role: "assistant",
123
+ content: [
124
+ ...text ? [{ text }] : [],
125
+ ...toolUse.map((toolUse2) => ({ toolUse: toolUse2 }))
126
+ ]
127
+ });
128
+ break;
129
+ }
130
+ case "tool":
131
+ messages.push({
132
+ role: "user",
133
+ content: content.map((part) => ({
134
+ toolResult: {
135
+ toolUseId: part.toolCallId,
136
+ status: part.isError ? "error" : "success",
137
+ content: [{ text: JSON.stringify(part.result) }]
138
+ }
139
+ }))
140
+ });
141
+ break;
142
+ default: {
143
+ throw new Error(`Unsupported role: ${role}`);
144
+ }
145
+ }
146
+ }
147
+ return { system, messages };
148
+ }
149
+
150
+ // src/map-bedrock-finish-reason.ts
151
+ function mapBedrockFinishReason(finishReason) {
152
+ switch (finishReason) {
153
+ case "stop_sequence":
154
+ case "end_turn":
155
+ return "stop";
156
+ case "max_tokens":
157
+ return "length";
158
+ case "content_filtered":
159
+ return "content-filter";
160
+ case "tool_use":
161
+ return "tool-calls";
162
+ default:
163
+ return "unknown";
164
+ }
165
+ }
166
+
167
+ // src/bedrock-chat-language-model.ts
168
+ var BedrockChatLanguageModel = class {
169
+ constructor(modelId, settings, config) {
170
+ this.specificationVersion = "v1";
171
+ this.provider = "amazon-bedrock";
172
+ this.defaultObjectGenerationMode = "tool";
173
+ this.modelId = modelId;
174
+ this.settings = settings;
175
+ this.config = config;
176
+ }
177
+ async getArgs({
178
+ mode,
179
+ prompt,
180
+ maxTokens,
181
+ temperature,
182
+ topP,
183
+ frequencyPenalty,
184
+ presencePenalty,
185
+ seed
186
+ }) {
187
+ var _a;
188
+ const type = mode.type;
189
+ const warnings = [];
190
+ if (frequencyPenalty != null) {
191
+ warnings.push({
192
+ type: "unsupported-setting",
193
+ setting: "frequencyPenalty"
194
+ });
195
+ }
196
+ if (presencePenalty != null) {
197
+ warnings.push({
198
+ type: "unsupported-setting",
199
+ setting: "presencePenalty"
200
+ });
201
+ }
202
+ if (seed != null) {
203
+ warnings.push({
204
+ type: "unsupported-setting",
205
+ setting: "seed"
206
+ });
207
+ }
208
+ const { system, messages } = await convertToBedrockChatMessages({ prompt });
209
+ const baseArgs = {
210
+ modelId: this.modelId,
211
+ system: system ? [{ text: system }] : void 0,
212
+ additionalModelRequestFields: this.settings.additionalModelRequestFields,
213
+ inferenceConfig: {
214
+ maxTokens,
215
+ temperature,
216
+ topP
217
+ },
218
+ messages
219
+ };
220
+ switch (type) {
221
+ case "regular": {
222
+ const toolConfig = prepareToolsAndToolChoice(mode);
223
+ return {
224
+ ...baseArgs,
225
+ ...((_a = toolConfig.tools) == null ? void 0 : _a.length) ? { toolConfig } : {}
226
+ };
227
+ }
228
+ case "object-json": {
229
+ throw new import_provider2.UnsupportedFunctionalityError({
230
+ functionality: "json-mode object generation"
231
+ });
232
+ }
233
+ case "object-tool": {
234
+ return {
235
+ ...baseArgs,
236
+ toolConfig: {
237
+ tools: [
238
+ {
239
+ toolSpec: {
240
+ name: mode.tool.name,
241
+ description: mode.tool.description,
242
+ inputSchema: { json: JSON.stringify(mode.tool.parameters) }
243
+ }
244
+ }
245
+ ],
246
+ toolChoice: { tool: { name: mode.tool.name } }
247
+ }
248
+ };
249
+ }
250
+ case "object-grammar": {
251
+ throw new import_provider2.UnsupportedFunctionalityError({
252
+ functionality: "grammar-mode object generation"
253
+ });
254
+ }
255
+ default: {
256
+ const _exhaustiveCheck = type;
257
+ throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
258
+ }
259
+ }
260
+ }
261
+ async doGenerate(options) {
262
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
263
+ const args = await this.getArgs(options);
264
+ const response = await this.config.client.send(new import_client_bedrock_runtime.ConverseCommand(args));
265
+ const { messages: rawPrompt, ...rawSettings } = args;
266
+ return {
267
+ text: (_d = (_c = (_b = (_a = response.output) == null ? void 0 : _a.message) == null ? void 0 : _b.content) == null ? void 0 : _c.map((part) => {
268
+ var _a2;
269
+ return (_a2 = part.text) != null ? _a2 : "";
270
+ }).join("")) != null ? _d : void 0,
271
+ toolCalls: (_h = (_g = (_f = (_e = response.output) == null ? void 0 : _e.message) == null ? void 0 : _f.content) == null ? void 0 : _g.filter((part) => !!part.toolUse)) == null ? void 0 : _h.map((part) => {
272
+ var _a2, _b2, _c2, _d2, _e2, _f2;
273
+ return {
274
+ toolCallType: "function",
275
+ toolCallId: (_b2 = (_a2 = part.toolUse) == null ? void 0 : _a2.toolUseId) != null ? _b2 : this.config.generateId(),
276
+ toolName: (_d2 = (_c2 = part.toolUse) == null ? void 0 : _c2.name) != null ? _d2 : `tool-${this.config.generateId()}`,
277
+ args: JSON.stringify((_f2 = (_e2 = part.toolUse) == null ? void 0 : _e2.input) != null ? _f2 : "")
278
+ };
279
+ }),
280
+ finishReason: mapBedrockFinishReason(response.stopReason),
281
+ usage: {
282
+ promptTokens: (_j = (_i = response.usage) == null ? void 0 : _i.inputTokens) != null ? _j : Number.NaN,
283
+ completionTokens: (_l = (_k = response.usage) == null ? void 0 : _k.outputTokens) != null ? _l : Number.NaN
284
+ },
285
+ rawCall: { rawPrompt, rawSettings },
286
+ warnings: []
287
+ };
288
+ }
289
+ async doStream(options) {
290
+ const args = await this.getArgs(options);
291
+ const response = await this.config.client.send(
292
+ new import_client_bedrock_runtime.ConverseStreamCommand({ ...args })
293
+ );
294
+ const { messages: rawPrompt, ...rawSettings } = args;
295
+ let finishReason = "other";
296
+ let usage = {
297
+ promptTokens: Number.NaN,
298
+ completionTokens: Number.NaN
299
+ };
300
+ if (!response.stream) {
301
+ throw new Error("No stream found");
302
+ }
303
+ const stream = new ReadableStream({
304
+ async start(controller) {
305
+ for await (const chunk of response.stream) {
306
+ controller.enqueue({ success: true, value: chunk });
307
+ }
308
+ controller.close();
309
+ }
310
+ });
311
+ let toolName = "";
312
+ let toolCallId = "";
313
+ let toolCallArgs = "";
314
+ return {
315
+ stream: stream.pipeThrough(
316
+ new TransformStream({
317
+ transform(chunk, controller) {
318
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
319
+ function enqueueError(error) {
320
+ finishReason = "error";
321
+ controller.enqueue({ type: "error", error });
322
+ }
323
+ if (!chunk.success) {
324
+ enqueueError(chunk.error);
325
+ return;
326
+ }
327
+ const value = chunk.value;
328
+ if (value.internalServerException) {
329
+ enqueueError(value.internalServerException);
330
+ return;
331
+ }
332
+ if (value.modelStreamErrorException) {
333
+ enqueueError(value.modelStreamErrorException);
334
+ return;
335
+ }
336
+ if (value.throttlingException) {
337
+ enqueueError(value.throttlingException);
338
+ return;
339
+ }
340
+ if (value.validationException) {
341
+ enqueueError(value.validationException);
342
+ return;
343
+ }
344
+ if (value.messageStop) {
345
+ finishReason = mapBedrockFinishReason(
346
+ value.messageStop.stopReason
347
+ );
348
+ }
349
+ if (value.metadata) {
350
+ usage = {
351
+ promptTokens: (_b = (_a = value.metadata.usage) == null ? void 0 : _a.inputTokens) != null ? _b : Number.NaN,
352
+ completionTokens: (_d = (_c = value.metadata.usage) == null ? void 0 : _c.outputTokens) != null ? _d : Number.NaN
353
+ };
354
+ }
355
+ if ((_f = (_e = value.contentBlockDelta) == null ? void 0 : _e.delta) == null ? void 0 : _f.text) {
356
+ controller.enqueue({
357
+ type: "text-delta",
358
+ textDelta: value.contentBlockDelta.delta.text
359
+ });
360
+ }
361
+ if ((_h = (_g = value.contentBlockStart) == null ? void 0 : _g.start) == null ? void 0 : _h.toolUse) {
362
+ const toolUse = value.contentBlockStart.start.toolUse;
363
+ toolName = (_i = toolUse.name) != null ? _i : "";
364
+ toolCallId = (_j = toolUse.toolUseId) != null ? _j : "";
365
+ }
366
+ if ((_l = (_k = value.contentBlockDelta) == null ? void 0 : _k.delta) == null ? void 0 : _l.toolUse) {
367
+ toolCallArgs += (_m = value.contentBlockDelta.delta.toolUse.input) != null ? _m : "";
368
+ controller.enqueue({
369
+ type: "tool-call-delta",
370
+ toolCallType: "function",
371
+ toolCallId,
372
+ toolName,
373
+ argsTextDelta: (_n = value.contentBlockDelta.delta.toolUse.input) != null ? _n : ""
374
+ });
375
+ }
376
+ if (value.contentBlockStop && toolCallArgs.length > 0) {
377
+ controller.enqueue({
378
+ type: "tool-call",
379
+ toolCallType: "function",
380
+ toolCallId,
381
+ toolName,
382
+ args: toolCallArgs
383
+ });
384
+ }
385
+ },
386
+ flush(controller) {
387
+ controller.enqueue({
388
+ type: "finish",
389
+ finishReason,
390
+ usage
391
+ });
392
+ }
393
+ })
394
+ ),
395
+ rawCall: { rawPrompt, rawSettings },
396
+ warnings: []
397
+ };
398
+ }
399
+ };
400
+ function prepareToolsAndToolChoice(mode) {
401
+ var _a;
402
+ const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
403
+ if (tools == null) {
404
+ return { tools: void 0, toolChoice: void 0 };
405
+ }
406
+ const mappedTools = tools.map((tool) => ({
407
+ toolSpec: {
408
+ name: tool.name,
409
+ description: tool.description,
410
+ inputSchema: {
411
+ json: tool.parameters
412
+ }
413
+ }
414
+ }));
415
+ const toolChoice = mode.toolChoice;
416
+ if (toolChoice == null) {
417
+ return { tools: mappedTools, toolChoice: void 0 };
418
+ }
419
+ const type = toolChoice.type;
420
+ switch (type) {
421
+ case "auto":
422
+ return { tools: mappedTools, toolChoice: { auto: {} } };
423
+ case "required":
424
+ return { tools: mappedTools, toolChoice: { any: {} } };
425
+ case "none":
426
+ return { tools: void 0, toolChoice: void 0 };
427
+ case "tool":
428
+ return {
429
+ tools: mappedTools,
430
+ toolChoice: { tool: { name: toolChoice.toolName } }
431
+ };
432
+ default: {
433
+ const _exhaustiveCheck = type;
434
+ throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);
435
+ }
436
+ }
437
+ }
438
+
439
+ // src/bedrock-provider.ts
440
+ function createAmazonBedrock(options = {}) {
441
+ const createBedrockRuntimeClient = () => {
442
+ const config = {
443
+ region: (0, import_provider_utils2.loadSetting)({
444
+ settingValue: options.region,
445
+ settingName: "region",
446
+ environmentVariableName: "AWS_REGION",
447
+ description: "AWS region"
448
+ }),
449
+ credentials: {
450
+ accessKeyId: (0, import_provider_utils2.loadSetting)({
451
+ settingValue: options.accessKeyId,
452
+ settingName: "accessKeyId",
453
+ environmentVariableName: "AWS_ACCESS_KEY_ID",
454
+ description: "AWS access key ID"
455
+ }),
456
+ secretAccessKey: (0, import_provider_utils2.loadSetting)({
457
+ settingValue: options.secretAccessKey,
458
+ settingName: "secretAccessKey",
459
+ environmentVariableName: "AWS_SECRET_ACCESS_KEY",
460
+ description: "AWS secret access key"
461
+ })
462
+ }
463
+ };
464
+ return new import_client_bedrock_runtime2.BedrockRuntimeClient(config);
465
+ };
466
+ const createChatModel = (modelId, settings = {}) => new BedrockChatLanguageModel(modelId, settings, {
467
+ client: createBedrockRuntimeClient(),
468
+ generateId: import_provider_utils2.generateId
469
+ });
470
+ const provider = function(modelId, settings) {
471
+ if (new.target) {
472
+ throw new Error(
473
+ "The Amazon Bedrock model function cannot be called with the new keyword."
474
+ );
475
+ }
476
+ return createChatModel(modelId, settings);
477
+ };
478
+ provider.languageModel = createChatModel;
479
+ return provider;
480
+ }
481
+ var bedrock = createAmazonBedrock();
482
+ // Annotate the CommonJS export names for ESM import in node:
483
+ 0 && (module.exports = {
484
+ bedrock,
485
+ createAmazonBedrock
486
+ });
487
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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 * from './bedrock-provider';\n","import { generateId, loadSetting } from '@ai-sdk/provider-utils';\nimport { BedrockRuntimeClient } 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\n // for testing\n generateId?: () => string;\n}\n\nexport interface AmazonBedrockProvider {\n (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): BedrockChatLanguageModel;\n\n languageModel(\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): BedrockChatLanguageModel;\n}\n\n/**\nCreate an Amazon Bedrock provider instance.\n */\nexport function createAmazonBedrock(\n options: AmazonBedrockProviderSettings = {},\n): AmazonBedrockProvider {\n const createBedrockRuntimeClient = () => {\n const config = {\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 },\n };\n\n return new BedrockRuntimeClient(config);\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\n return provider as AmazonBedrockProvider;\n}\n\n/**\nDefault Bedrock provider instance.\n */\nexport const bedrock = createAmazonBedrock();\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\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 Tool,\n ToolConfiguration,\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\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 frequencyPenalty,\n presencePenalty,\n seed,\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 const { system, messages } = await 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 },\n messages,\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: { json: JSON.stringify(mode.tool.parameters) },\n },\n },\n ],\n toolChoice: { tool: { name: mode.tool.name } },\n },\n } satisfies ConverseCommandInput;\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'grammar-mode object generation',\n });\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 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 };\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 = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\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 let toolName = '';\n let toolCallId = '';\n let toolCallArgs = '';\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\n if (value.contentBlockDelta?.delta?.text) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.contentBlockDelta.delta.text,\n });\n }\n\n if (value.contentBlockStart?.start?.toolUse) {\n // store the tool name and id for the next chunk\n const toolUse = value.contentBlockStart.start.toolUse;\n toolName = toolUse.name ?? '';\n toolCallId = toolUse.toolUseId ?? '';\n }\n\n if (value.contentBlockDelta?.delta?.toolUse) {\n // continue to get the chunks of the tool call args\n toolCallArgs += value.contentBlockDelta.delta.toolUse.input ?? '';\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId,\n toolName,\n argsTextDelta:\n value.contentBlockDelta.delta.toolUse.input ?? '',\n });\n }\n\n // if the content is done and a tool call was made, send it\n if (value.contentBlockStop && toolCallArgs.length > 0) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId,\n toolName,\n args: toolCallArgs,\n });\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\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 as any,\n },\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 LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { BedrockMessages, BedrockMessagesPrompt } from './bedrock-chat-prompt';\nimport { ContentBlock, ImageFormat } from '@aws-sdk/client-bedrock-runtime';\nimport { download } from '@ai-sdk/provider-utils';\n\ntype ConvertToBedrockChatMessagesArgs = {\n prompt: LanguageModelV1Prompt;\n downloadImplementation?: typeof download;\n};\n\nexport async function convertToBedrockChatMessages({\n prompt,\n downloadImplementation = download,\n}: ConvertToBedrockChatMessagesArgs): Promise<BedrockMessagesPrompt> {\n let system: string | undefined = undefined;\n const messages: BedrockMessages = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (system != null) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Multiple system messages',\n });\n }\n\n system = content;\n break;\n }\n\n case 'user': {\n const bedrockMessageContent: ContentBlock[] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n bedrockMessageContent.push({ text: part.text });\n break;\n }\n\n case 'image': {\n let data: Uint8Array;\n let mimeType: string | undefined;\n\n if (part.image instanceof URL) {\n const downloadResult = await downloadImplementation({\n url: part.image,\n });\n\n data = downloadResult.data;\n mimeType = downloadResult.mimeType;\n } else {\n data = part.image;\n mimeType = part.mimeType;\n }\n\n bedrockMessageContent.push({\n image: {\n format: (mimeType ?? part.mimeType)?.split(\n '/',\n )?.[1] as ImageFormat,\n source: {\n bytes: data ?? (part.image as Uint8Array),\n },\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: 'user',\n content: bedrockMessageContent,\n });\n\n break;\n }\n\n case 'assistant': {\n const toolUse: Array<{\n toolUseId: string;\n name: string;\n input: any;\n }> = [];\n\n let text = '';\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolUse.push({\n toolUseId: part.toolCallId,\n name: part.toolName,\n input: part.args,\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: [\n ...(text ? [{ text }] : []),\n ...toolUse.map(toolUse => ({ toolUse: toolUse })),\n ],\n });\n\n break;\n }\n\n case 'tool':\n messages.push({\n role: 'user',\n content: content.map(part => ({\n toolResult: {\n toolUseId: part.toolCallId,\n status: part.isError ? 'error' : 'success',\n content: [{ text: JSON.stringify(part.result) }],\n },\n })),\n });\n break;\n\n default: {\n throw new Error(`Unsupported role: ${role}`);\n }\n }\n }\n\n return { system, messages };\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 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_utils","import_client_bedrock_runtime","import_provider","toolUse","_a","_b","_c","_d","_e","_f"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,466 @@
1
+ // src/bedrock-provider.ts
2
+ import { generateId, loadSetting } from "@ai-sdk/provider-utils";
3
+ import { BedrockRuntimeClient as BedrockRuntimeClient2 } from "@aws-sdk/client-bedrock-runtime";
4
+
5
+ // src/bedrock-chat-language-model.ts
6
+ import {
7
+ UnsupportedFunctionalityError as UnsupportedFunctionalityError2
8
+ } from "@ai-sdk/provider";
9
+ import {
10
+ ConverseCommand,
11
+ ConverseStreamCommand
12
+ } from "@aws-sdk/client-bedrock-runtime";
13
+
14
+ // src/convert-to-bedrock-chat-messages.ts
15
+ import {
16
+ UnsupportedFunctionalityError
17
+ } from "@ai-sdk/provider";
18
+ import { download } from "@ai-sdk/provider-utils";
19
+ async function convertToBedrockChatMessages({
20
+ prompt,
21
+ downloadImplementation = download
22
+ }) {
23
+ var _a, _b;
24
+ let system = void 0;
25
+ const messages = [];
26
+ for (const { role, content } of prompt) {
27
+ switch (role) {
28
+ case "system": {
29
+ if (system != null) {
30
+ throw new UnsupportedFunctionalityError({
31
+ functionality: "Multiple system messages"
32
+ });
33
+ }
34
+ system = content;
35
+ break;
36
+ }
37
+ case "user": {
38
+ const bedrockMessageContent = [];
39
+ for (const part of content) {
40
+ switch (part.type) {
41
+ case "text": {
42
+ bedrockMessageContent.push({ text: part.text });
43
+ break;
44
+ }
45
+ case "image": {
46
+ let data;
47
+ let mimeType;
48
+ if (part.image instanceof URL) {
49
+ const downloadResult = await downloadImplementation({
50
+ url: part.image
51
+ });
52
+ data = downloadResult.data;
53
+ mimeType = downloadResult.mimeType;
54
+ } else {
55
+ data = part.image;
56
+ mimeType = part.mimeType;
57
+ }
58
+ bedrockMessageContent.push({
59
+ image: {
60
+ format: (_b = (_a = mimeType != null ? mimeType : part.mimeType) == null ? void 0 : _a.split(
61
+ "/"
62
+ )) == null ? void 0 : _b[1],
63
+ source: {
64
+ bytes: data != null ? data : part.image
65
+ }
66
+ }
67
+ });
68
+ break;
69
+ }
70
+ }
71
+ }
72
+ messages.push({
73
+ role: "user",
74
+ content: bedrockMessageContent
75
+ });
76
+ break;
77
+ }
78
+ case "assistant": {
79
+ const toolUse = [];
80
+ let text = "";
81
+ for (const part of content) {
82
+ switch (part.type) {
83
+ case "text": {
84
+ text += part.text;
85
+ break;
86
+ }
87
+ case "tool-call": {
88
+ toolUse.push({
89
+ toolUseId: part.toolCallId,
90
+ name: part.toolName,
91
+ input: part.args
92
+ });
93
+ break;
94
+ }
95
+ default: {
96
+ const _exhaustiveCheck = part;
97
+ throw new Error(`Unsupported part: ${_exhaustiveCheck}`);
98
+ }
99
+ }
100
+ }
101
+ messages.push({
102
+ role: "assistant",
103
+ content: [
104
+ ...text ? [{ text }] : [],
105
+ ...toolUse.map((toolUse2) => ({ toolUse: toolUse2 }))
106
+ ]
107
+ });
108
+ break;
109
+ }
110
+ case "tool":
111
+ messages.push({
112
+ role: "user",
113
+ content: content.map((part) => ({
114
+ toolResult: {
115
+ toolUseId: part.toolCallId,
116
+ status: part.isError ? "error" : "success",
117
+ content: [{ text: JSON.stringify(part.result) }]
118
+ }
119
+ }))
120
+ });
121
+ break;
122
+ default: {
123
+ throw new Error(`Unsupported role: ${role}`);
124
+ }
125
+ }
126
+ }
127
+ return { system, messages };
128
+ }
129
+
130
+ // src/map-bedrock-finish-reason.ts
131
+ function mapBedrockFinishReason(finishReason) {
132
+ switch (finishReason) {
133
+ case "stop_sequence":
134
+ case "end_turn":
135
+ return "stop";
136
+ case "max_tokens":
137
+ return "length";
138
+ case "content_filtered":
139
+ return "content-filter";
140
+ case "tool_use":
141
+ return "tool-calls";
142
+ default:
143
+ return "unknown";
144
+ }
145
+ }
146
+
147
+ // src/bedrock-chat-language-model.ts
148
+ var BedrockChatLanguageModel = class {
149
+ constructor(modelId, settings, config) {
150
+ this.specificationVersion = "v1";
151
+ this.provider = "amazon-bedrock";
152
+ this.defaultObjectGenerationMode = "tool";
153
+ this.modelId = modelId;
154
+ this.settings = settings;
155
+ this.config = config;
156
+ }
157
+ async getArgs({
158
+ mode,
159
+ prompt,
160
+ maxTokens,
161
+ temperature,
162
+ topP,
163
+ frequencyPenalty,
164
+ presencePenalty,
165
+ seed
166
+ }) {
167
+ var _a;
168
+ const type = mode.type;
169
+ const warnings = [];
170
+ if (frequencyPenalty != null) {
171
+ warnings.push({
172
+ type: "unsupported-setting",
173
+ setting: "frequencyPenalty"
174
+ });
175
+ }
176
+ if (presencePenalty != null) {
177
+ warnings.push({
178
+ type: "unsupported-setting",
179
+ setting: "presencePenalty"
180
+ });
181
+ }
182
+ if (seed != null) {
183
+ warnings.push({
184
+ type: "unsupported-setting",
185
+ setting: "seed"
186
+ });
187
+ }
188
+ const { system, messages } = await convertToBedrockChatMessages({ prompt });
189
+ const baseArgs = {
190
+ modelId: this.modelId,
191
+ system: system ? [{ text: system }] : void 0,
192
+ additionalModelRequestFields: this.settings.additionalModelRequestFields,
193
+ inferenceConfig: {
194
+ maxTokens,
195
+ temperature,
196
+ topP
197
+ },
198
+ messages
199
+ };
200
+ switch (type) {
201
+ case "regular": {
202
+ const toolConfig = prepareToolsAndToolChoice(mode);
203
+ return {
204
+ ...baseArgs,
205
+ ...((_a = toolConfig.tools) == null ? void 0 : _a.length) ? { toolConfig } : {}
206
+ };
207
+ }
208
+ case "object-json": {
209
+ throw new UnsupportedFunctionalityError2({
210
+ functionality: "json-mode object generation"
211
+ });
212
+ }
213
+ case "object-tool": {
214
+ return {
215
+ ...baseArgs,
216
+ toolConfig: {
217
+ tools: [
218
+ {
219
+ toolSpec: {
220
+ name: mode.tool.name,
221
+ description: mode.tool.description,
222
+ inputSchema: { json: JSON.stringify(mode.tool.parameters) }
223
+ }
224
+ }
225
+ ],
226
+ toolChoice: { tool: { name: mode.tool.name } }
227
+ }
228
+ };
229
+ }
230
+ case "object-grammar": {
231
+ throw new UnsupportedFunctionalityError2({
232
+ functionality: "grammar-mode object generation"
233
+ });
234
+ }
235
+ default: {
236
+ const _exhaustiveCheck = type;
237
+ throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
238
+ }
239
+ }
240
+ }
241
+ async doGenerate(options) {
242
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
243
+ const args = await this.getArgs(options);
244
+ const response = await this.config.client.send(new ConverseCommand(args));
245
+ const { messages: rawPrompt, ...rawSettings } = args;
246
+ return {
247
+ text: (_d = (_c = (_b = (_a = response.output) == null ? void 0 : _a.message) == null ? void 0 : _b.content) == null ? void 0 : _c.map((part) => {
248
+ var _a2;
249
+ return (_a2 = part.text) != null ? _a2 : "";
250
+ }).join("")) != null ? _d : void 0,
251
+ toolCalls: (_h = (_g = (_f = (_e = response.output) == null ? void 0 : _e.message) == null ? void 0 : _f.content) == null ? void 0 : _g.filter((part) => !!part.toolUse)) == null ? void 0 : _h.map((part) => {
252
+ var _a2, _b2, _c2, _d2, _e2, _f2;
253
+ return {
254
+ toolCallType: "function",
255
+ toolCallId: (_b2 = (_a2 = part.toolUse) == null ? void 0 : _a2.toolUseId) != null ? _b2 : this.config.generateId(),
256
+ toolName: (_d2 = (_c2 = part.toolUse) == null ? void 0 : _c2.name) != null ? _d2 : `tool-${this.config.generateId()}`,
257
+ args: JSON.stringify((_f2 = (_e2 = part.toolUse) == null ? void 0 : _e2.input) != null ? _f2 : "")
258
+ };
259
+ }),
260
+ finishReason: mapBedrockFinishReason(response.stopReason),
261
+ usage: {
262
+ promptTokens: (_j = (_i = response.usage) == null ? void 0 : _i.inputTokens) != null ? _j : Number.NaN,
263
+ completionTokens: (_l = (_k = response.usage) == null ? void 0 : _k.outputTokens) != null ? _l : Number.NaN
264
+ },
265
+ rawCall: { rawPrompt, rawSettings },
266
+ warnings: []
267
+ };
268
+ }
269
+ async doStream(options) {
270
+ const args = await this.getArgs(options);
271
+ const response = await this.config.client.send(
272
+ new ConverseStreamCommand({ ...args })
273
+ );
274
+ const { messages: rawPrompt, ...rawSettings } = args;
275
+ let finishReason = "other";
276
+ let usage = {
277
+ promptTokens: Number.NaN,
278
+ completionTokens: Number.NaN
279
+ };
280
+ if (!response.stream) {
281
+ throw new Error("No stream found");
282
+ }
283
+ const stream = new ReadableStream({
284
+ async start(controller) {
285
+ for await (const chunk of response.stream) {
286
+ controller.enqueue({ success: true, value: chunk });
287
+ }
288
+ controller.close();
289
+ }
290
+ });
291
+ let toolName = "";
292
+ let toolCallId = "";
293
+ let toolCallArgs = "";
294
+ return {
295
+ stream: stream.pipeThrough(
296
+ new TransformStream({
297
+ transform(chunk, controller) {
298
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
299
+ function enqueueError(error) {
300
+ finishReason = "error";
301
+ controller.enqueue({ type: "error", error });
302
+ }
303
+ if (!chunk.success) {
304
+ enqueueError(chunk.error);
305
+ return;
306
+ }
307
+ const value = chunk.value;
308
+ if (value.internalServerException) {
309
+ enqueueError(value.internalServerException);
310
+ return;
311
+ }
312
+ if (value.modelStreamErrorException) {
313
+ enqueueError(value.modelStreamErrorException);
314
+ return;
315
+ }
316
+ if (value.throttlingException) {
317
+ enqueueError(value.throttlingException);
318
+ return;
319
+ }
320
+ if (value.validationException) {
321
+ enqueueError(value.validationException);
322
+ return;
323
+ }
324
+ if (value.messageStop) {
325
+ finishReason = mapBedrockFinishReason(
326
+ value.messageStop.stopReason
327
+ );
328
+ }
329
+ if (value.metadata) {
330
+ usage = {
331
+ promptTokens: (_b = (_a = value.metadata.usage) == null ? void 0 : _a.inputTokens) != null ? _b : Number.NaN,
332
+ completionTokens: (_d = (_c = value.metadata.usage) == null ? void 0 : _c.outputTokens) != null ? _d : Number.NaN
333
+ };
334
+ }
335
+ if ((_f = (_e = value.contentBlockDelta) == null ? void 0 : _e.delta) == null ? void 0 : _f.text) {
336
+ controller.enqueue({
337
+ type: "text-delta",
338
+ textDelta: value.contentBlockDelta.delta.text
339
+ });
340
+ }
341
+ if ((_h = (_g = value.contentBlockStart) == null ? void 0 : _g.start) == null ? void 0 : _h.toolUse) {
342
+ const toolUse = value.contentBlockStart.start.toolUse;
343
+ toolName = (_i = toolUse.name) != null ? _i : "";
344
+ toolCallId = (_j = toolUse.toolUseId) != null ? _j : "";
345
+ }
346
+ if ((_l = (_k = value.contentBlockDelta) == null ? void 0 : _k.delta) == null ? void 0 : _l.toolUse) {
347
+ toolCallArgs += (_m = value.contentBlockDelta.delta.toolUse.input) != null ? _m : "";
348
+ controller.enqueue({
349
+ type: "tool-call-delta",
350
+ toolCallType: "function",
351
+ toolCallId,
352
+ toolName,
353
+ argsTextDelta: (_n = value.contentBlockDelta.delta.toolUse.input) != null ? _n : ""
354
+ });
355
+ }
356
+ if (value.contentBlockStop && toolCallArgs.length > 0) {
357
+ controller.enqueue({
358
+ type: "tool-call",
359
+ toolCallType: "function",
360
+ toolCallId,
361
+ toolName,
362
+ args: toolCallArgs
363
+ });
364
+ }
365
+ },
366
+ flush(controller) {
367
+ controller.enqueue({
368
+ type: "finish",
369
+ finishReason,
370
+ usage
371
+ });
372
+ }
373
+ })
374
+ ),
375
+ rawCall: { rawPrompt, rawSettings },
376
+ warnings: []
377
+ };
378
+ }
379
+ };
380
+ function prepareToolsAndToolChoice(mode) {
381
+ var _a;
382
+ const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
383
+ if (tools == null) {
384
+ return { tools: void 0, toolChoice: void 0 };
385
+ }
386
+ const mappedTools = tools.map((tool) => ({
387
+ toolSpec: {
388
+ name: tool.name,
389
+ description: tool.description,
390
+ inputSchema: {
391
+ json: tool.parameters
392
+ }
393
+ }
394
+ }));
395
+ const toolChoice = mode.toolChoice;
396
+ if (toolChoice == null) {
397
+ return { tools: mappedTools, toolChoice: void 0 };
398
+ }
399
+ const type = toolChoice.type;
400
+ switch (type) {
401
+ case "auto":
402
+ return { tools: mappedTools, toolChoice: { auto: {} } };
403
+ case "required":
404
+ return { tools: mappedTools, toolChoice: { any: {} } };
405
+ case "none":
406
+ return { tools: void 0, toolChoice: void 0 };
407
+ case "tool":
408
+ return {
409
+ tools: mappedTools,
410
+ toolChoice: { tool: { name: toolChoice.toolName } }
411
+ };
412
+ default: {
413
+ const _exhaustiveCheck = type;
414
+ throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);
415
+ }
416
+ }
417
+ }
418
+
419
+ // src/bedrock-provider.ts
420
+ function createAmazonBedrock(options = {}) {
421
+ const createBedrockRuntimeClient = () => {
422
+ const config = {
423
+ region: loadSetting({
424
+ settingValue: options.region,
425
+ settingName: "region",
426
+ environmentVariableName: "AWS_REGION",
427
+ description: "AWS region"
428
+ }),
429
+ credentials: {
430
+ accessKeyId: loadSetting({
431
+ settingValue: options.accessKeyId,
432
+ settingName: "accessKeyId",
433
+ environmentVariableName: "AWS_ACCESS_KEY_ID",
434
+ description: "AWS access key ID"
435
+ }),
436
+ secretAccessKey: loadSetting({
437
+ settingValue: options.secretAccessKey,
438
+ settingName: "secretAccessKey",
439
+ environmentVariableName: "AWS_SECRET_ACCESS_KEY",
440
+ description: "AWS secret access key"
441
+ })
442
+ }
443
+ };
444
+ return new BedrockRuntimeClient2(config);
445
+ };
446
+ const createChatModel = (modelId, settings = {}) => new BedrockChatLanguageModel(modelId, settings, {
447
+ client: createBedrockRuntimeClient(),
448
+ generateId
449
+ });
450
+ const provider = function(modelId, settings) {
451
+ if (new.target) {
452
+ throw new Error(
453
+ "The Amazon Bedrock model function cannot be called with the new keyword."
454
+ );
455
+ }
456
+ return createChatModel(modelId, settings);
457
+ };
458
+ provider.languageModel = createChatModel;
459
+ return provider;
460
+ }
461
+ var bedrock = createAmazonBedrock();
462
+ export {
463
+ bedrock,
464
+ createAmazonBedrock
465
+ };
466
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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 { generateId, loadSetting } from '@ai-sdk/provider-utils';\nimport { BedrockRuntimeClient } 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\n // for testing\n generateId?: () => string;\n}\n\nexport interface AmazonBedrockProvider {\n (\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): BedrockChatLanguageModel;\n\n languageModel(\n modelId: BedrockChatModelId,\n settings?: BedrockChatSettings,\n ): BedrockChatLanguageModel;\n}\n\n/**\nCreate an Amazon Bedrock provider instance.\n */\nexport function createAmazonBedrock(\n options: AmazonBedrockProviderSettings = {},\n): AmazonBedrockProvider {\n const createBedrockRuntimeClient = () => {\n const config = {\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 },\n };\n\n return new BedrockRuntimeClient(config);\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\n return provider as AmazonBedrockProvider;\n}\n\n/**\nDefault Bedrock provider instance.\n */\nexport const bedrock = createAmazonBedrock();\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\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 Tool,\n ToolConfiguration,\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\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 frequencyPenalty,\n presencePenalty,\n seed,\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 const { system, messages } = await 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 },\n messages,\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: { json: JSON.stringify(mode.tool.parameters) },\n },\n },\n ],\n toolChoice: { tool: { name: mode.tool.name } },\n },\n } satisfies ConverseCommandInput;\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'grammar-mode object generation',\n });\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 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 };\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 = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\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 let toolName = '';\n let toolCallId = '';\n let toolCallArgs = '';\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\n if (value.contentBlockDelta?.delta?.text) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: value.contentBlockDelta.delta.text,\n });\n }\n\n if (value.contentBlockStart?.start?.toolUse) {\n // store the tool name and id for the next chunk\n const toolUse = value.contentBlockStart.start.toolUse;\n toolName = toolUse.name ?? '';\n toolCallId = toolUse.toolUseId ?? '';\n }\n\n if (value.contentBlockDelta?.delta?.toolUse) {\n // continue to get the chunks of the tool call args\n toolCallArgs += value.contentBlockDelta.delta.toolUse.input ?? '';\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId,\n toolName,\n argsTextDelta:\n value.contentBlockDelta.delta.toolUse.input ?? '',\n });\n }\n\n // if the content is done and a tool call was made, send it\n if (value.contentBlockStop && toolCallArgs.length > 0) {\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId,\n toolName,\n args: toolCallArgs,\n });\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\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 as any,\n },\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 LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { BedrockMessages, BedrockMessagesPrompt } from './bedrock-chat-prompt';\nimport { ContentBlock, ImageFormat } from '@aws-sdk/client-bedrock-runtime';\nimport { download } from '@ai-sdk/provider-utils';\n\ntype ConvertToBedrockChatMessagesArgs = {\n prompt: LanguageModelV1Prompt;\n downloadImplementation?: typeof download;\n};\n\nexport async function convertToBedrockChatMessages({\n prompt,\n downloadImplementation = download,\n}: ConvertToBedrockChatMessagesArgs): Promise<BedrockMessagesPrompt> {\n let system: string | undefined = undefined;\n const messages: BedrockMessages = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (system != null) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Multiple system messages',\n });\n }\n\n system = content;\n break;\n }\n\n case 'user': {\n const bedrockMessageContent: ContentBlock[] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n bedrockMessageContent.push({ text: part.text });\n break;\n }\n\n case 'image': {\n let data: Uint8Array;\n let mimeType: string | undefined;\n\n if (part.image instanceof URL) {\n const downloadResult = await downloadImplementation({\n url: part.image,\n });\n\n data = downloadResult.data;\n mimeType = downloadResult.mimeType;\n } else {\n data = part.image;\n mimeType = part.mimeType;\n }\n\n bedrockMessageContent.push({\n image: {\n format: (mimeType ?? part.mimeType)?.split(\n '/',\n )?.[1] as ImageFormat,\n source: {\n bytes: data ?? (part.image as Uint8Array),\n },\n },\n });\n break;\n }\n }\n }\n\n messages.push({\n role: 'user',\n content: bedrockMessageContent,\n });\n\n break;\n }\n\n case 'assistant': {\n const toolUse: Array<{\n toolUseId: string;\n name: string;\n input: any;\n }> = [];\n\n let text = '';\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n text += part.text;\n break;\n }\n case 'tool-call': {\n toolUse.push({\n toolUseId: part.toolCallId,\n name: part.toolName,\n input: part.args,\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n messages.push({\n role: 'assistant',\n content: [\n ...(text ? [{ text }] : []),\n ...toolUse.map(toolUse => ({ toolUse: toolUse })),\n ],\n });\n\n break;\n }\n\n case 'tool':\n messages.push({\n role: 'user',\n content: content.map(part => ({\n toolResult: {\n toolUseId: part.toolCallId,\n status: part.isError ? 'error' : 'success',\n content: [{ text: JSON.stringify(part.result) }],\n },\n })),\n });\n break;\n\n default: {\n throw new Error(`Unsupported role: ${role}`);\n }\n }\n }\n\n return { system, messages };\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 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","toolUse","UnsupportedFunctionalityError","_a","_b","_c","_d","_e","_f","BedrockRuntimeClient"]}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@ai-sdk/amazon-bedrock",
3
+ "version": "0.0.1",
4
+ "license": "Apache-2.0",
5
+ "sideEffects": false,
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "files": [
10
+ "dist/**/*"
11
+ ],
12
+ "exports": {
13
+ "./package.json": "./package.json",
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.mjs",
17
+ "require": "./dist/index.js"
18
+ }
19
+ },
20
+ "dependencies": {
21
+ "@ai-sdk/provider": "0.0.10",
22
+ "@ai-sdk/provider-utils": "0.0.16",
23
+ "@aws-sdk/client-bedrock-runtime": "3.602.0"
24
+ },
25
+ "devDependencies": {
26
+ "@smithy/types": "^3.1.0",
27
+ "@types/node": "^18",
28
+ "aws-sdk-client-mock": "^4.0.1",
29
+ "tsup": "^8",
30
+ "typescript": "5.1.3",
31
+ "zod": "3.23.8",
32
+ "@vercel/ai-tsconfig": "0.0.0"
33
+ },
34
+ "peerDependencies": {
35
+ "zod": "^3.0.0"
36
+ },
37
+ "engines": {
38
+ "node": ">=18"
39
+ },
40
+ "publishConfig": {
41
+ "access": "public"
42
+ },
43
+ "homepage": "https://sdk.vercel.ai/docs",
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/vercel/ai.git"
47
+ },
48
+ "bugs": {
49
+ "url": "https://github.com/vercel/ai/issues"
50
+ },
51
+ "keywords": [
52
+ "ai"
53
+ ],
54
+ "scripts": {
55
+ "build": "tsup",
56
+ "clean": "rm -rf dist",
57
+ "dev": "tsup --watch",
58
+ "lint": "eslint \"./**/*.ts*\"",
59
+ "type-check": "tsc --noEmit",
60
+ "prettier-check": "prettier --check \"./**/*.ts*\"",
61
+ "test": "pnpm test:node && pnpm test:edge",
62
+ "test:edge": "vitest --config vitest.edge.config.js --run",
63
+ "test:node": "vitest --config vitest.node.config.js --run"
64
+ }
65
+ }