@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 +13 -0
- package/README.md +36 -0
- package/dist/index.d.mts +50 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.js +487 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +466 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +65 -0
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.
|
package/dist/index.d.mts
ADDED
|
@@ -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.d.ts
ADDED
|
@@ -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
|
+
}
|