@ai-sdk/amazon-bedrock 3.0.0-beta.12 → 3.0.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +193 -127
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +157 -88
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -3
package/dist/index.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
loadSetting,
|
|
6
6
|
withoutTrailingSlash
|
|
7
7
|
} from "@ai-sdk/provider-utils";
|
|
8
|
+
import { anthropicTools as anthropicTools2 } from "@ai-sdk/anthropic/internal";
|
|
8
9
|
|
|
9
10
|
// src/bedrock-chat-language-model.ts
|
|
10
11
|
import {
|
|
@@ -152,90 +153,143 @@ var createBedrockEventStreamResponseHandler = (chunkSchema) => async ({ response
|
|
|
152
153
|
import {
|
|
153
154
|
UnsupportedFunctionalityError
|
|
154
155
|
} from "@ai-sdk/provider";
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
);
|
|
161
|
-
}
|
|
162
|
-
return false;
|
|
163
|
-
});
|
|
164
|
-
}
|
|
156
|
+
import { asSchema } from "@ai-sdk/provider-utils";
|
|
157
|
+
import {
|
|
158
|
+
anthropicTools,
|
|
159
|
+
prepareTools as prepareAnthropicTools
|
|
160
|
+
} from "@ai-sdk/anthropic/internal";
|
|
165
161
|
function prepareTools({
|
|
166
162
|
tools,
|
|
167
163
|
toolChoice,
|
|
168
|
-
|
|
164
|
+
modelId
|
|
169
165
|
}) {
|
|
170
|
-
|
|
171
|
-
const
|
|
172
|
-
if (tools == null) {
|
|
166
|
+
const toolWarnings = [];
|
|
167
|
+
const betas = /* @__PURE__ */ new Set();
|
|
168
|
+
if (tools == null || tools.length === 0) {
|
|
173
169
|
return {
|
|
174
|
-
toolConfig: {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
toolWarnings: []
|
|
170
|
+
toolConfig: {},
|
|
171
|
+
additionalTools: void 0,
|
|
172
|
+
betas,
|
|
173
|
+
toolWarnings
|
|
179
174
|
};
|
|
180
175
|
}
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
bedrockTools.push({
|
|
188
|
-
toolSpec: {
|
|
189
|
-
name: tool.name,
|
|
190
|
-
description: tool.description,
|
|
191
|
-
inputSchema: {
|
|
192
|
-
json: tool.inputSchema
|
|
193
|
-
}
|
|
194
|
-
}
|
|
176
|
+
const supportedTools = tools.filter((tool) => {
|
|
177
|
+
if (tool.type === "provider-defined" && tool.id === "anthropic.web_search_20250305") {
|
|
178
|
+
toolWarnings.push({
|
|
179
|
+
type: "unsupported-tool",
|
|
180
|
+
tool,
|
|
181
|
+
details: "The web_search_20250305 tool is not supported on Amazon Bedrock."
|
|
195
182
|
});
|
|
183
|
+
return false;
|
|
196
184
|
}
|
|
197
|
-
|
|
198
|
-
|
|
185
|
+
return true;
|
|
186
|
+
});
|
|
187
|
+
if (supportedTools.length === 0) {
|
|
199
188
|
return {
|
|
200
|
-
toolConfig: {
|
|
189
|
+
toolConfig: {},
|
|
190
|
+
additionalTools: void 0,
|
|
191
|
+
betas,
|
|
201
192
|
toolWarnings
|
|
202
193
|
};
|
|
203
194
|
}
|
|
204
|
-
const
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
195
|
+
const isAnthropicModel = modelId.includes("anthropic.");
|
|
196
|
+
const providerDefinedTools = supportedTools.filter(
|
|
197
|
+
(t) => t.type === "provider-defined"
|
|
198
|
+
);
|
|
199
|
+
const functionTools = supportedTools.filter((t) => t.type === "function");
|
|
200
|
+
let additionalTools = void 0;
|
|
201
|
+
const bedrockTools = [];
|
|
202
|
+
const usingAnthropicTools = isAnthropicModel && providerDefinedTools.length > 0;
|
|
203
|
+
if (usingAnthropicTools) {
|
|
204
|
+
if (functionTools.length > 0) {
|
|
205
|
+
toolWarnings.push({
|
|
206
|
+
type: "unsupported-setting",
|
|
207
|
+
setting: "tools",
|
|
208
|
+
details: "Mixed Anthropic provider-defined tools and standard function tools are not supported in a single call to Bedrock. Only Anthropic tools will be used."
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
const {
|
|
212
|
+
toolChoice: preparedAnthropicToolChoice,
|
|
213
|
+
toolWarnings: anthropicToolWarnings,
|
|
214
|
+
betas: anthropicBetas
|
|
215
|
+
} = prepareAnthropicTools({
|
|
216
|
+
tools: providerDefinedTools,
|
|
217
|
+
toolChoice
|
|
218
|
+
});
|
|
219
|
+
toolWarnings.push(...anthropicToolWarnings);
|
|
220
|
+
anthropicBetas.forEach((beta) => betas.add(beta));
|
|
221
|
+
if (preparedAnthropicToolChoice) {
|
|
222
|
+
additionalTools = {
|
|
223
|
+
tool_choice: preparedAnthropicToolChoice
|
|
231
224
|
};
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
225
|
+
}
|
|
226
|
+
for (const tool of providerDefinedTools) {
|
|
227
|
+
const toolFactory = Object.values(anthropicTools).find((factory) => {
|
|
228
|
+
const instance = factory({});
|
|
229
|
+
return instance.id === tool.id;
|
|
236
230
|
});
|
|
231
|
+
if (toolFactory != null) {
|
|
232
|
+
const fullToolDefinition = toolFactory({});
|
|
233
|
+
bedrockTools.push({
|
|
234
|
+
toolSpec: {
|
|
235
|
+
name: tool.name,
|
|
236
|
+
inputSchema: {
|
|
237
|
+
json: asSchema(fullToolDefinition.inputSchema).jsonSchema
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
} else {
|
|
242
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
} else {
|
|
246
|
+
for (const tool of providerDefinedTools) {
|
|
247
|
+
toolWarnings.push({ type: "unsupported-tool", tool });
|
|
237
248
|
}
|
|
238
249
|
}
|
|
250
|
+
for (const tool of functionTools) {
|
|
251
|
+
bedrockTools.push({
|
|
252
|
+
toolSpec: {
|
|
253
|
+
name: tool.name,
|
|
254
|
+
description: tool.description,
|
|
255
|
+
inputSchema: {
|
|
256
|
+
json: tool.inputSchema
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
let bedrockToolChoice = void 0;
|
|
262
|
+
if (!usingAnthropicTools && bedrockTools.length > 0 && toolChoice) {
|
|
263
|
+
const type = toolChoice.type;
|
|
264
|
+
switch (type) {
|
|
265
|
+
case "auto":
|
|
266
|
+
bedrockToolChoice = { auto: {} };
|
|
267
|
+
break;
|
|
268
|
+
case "required":
|
|
269
|
+
bedrockToolChoice = { any: {} };
|
|
270
|
+
break;
|
|
271
|
+
case "none":
|
|
272
|
+
bedrockTools.length = 0;
|
|
273
|
+
bedrockToolChoice = void 0;
|
|
274
|
+
break;
|
|
275
|
+
case "tool":
|
|
276
|
+
bedrockToolChoice = { tool: { name: toolChoice.toolName } };
|
|
277
|
+
break;
|
|
278
|
+
default: {
|
|
279
|
+
const _exhaustiveCheck = type;
|
|
280
|
+
throw new UnsupportedFunctionalityError({
|
|
281
|
+
functionality: `tool choice type: ${_exhaustiveCheck}`
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
const toolConfig = bedrockTools.length > 0 ? { tools: bedrockTools, toolChoice: bedrockToolChoice } : {};
|
|
287
|
+
return {
|
|
288
|
+
toolConfig,
|
|
289
|
+
additionalTools,
|
|
290
|
+
betas,
|
|
291
|
+
toolWarnings
|
|
292
|
+
};
|
|
239
293
|
}
|
|
240
294
|
|
|
241
295
|
// src/convert-to-bedrock-chat-messages.ts
|
|
@@ -592,7 +646,7 @@ var BedrockChatLanguageModel = class {
|
|
|
592
646
|
toolChoice,
|
|
593
647
|
providerOptions
|
|
594
648
|
}) {
|
|
595
|
-
var _a, _b, _c, _d;
|
|
649
|
+
var _a, _b, _c, _d, _e, _f;
|
|
596
650
|
const bedrockOptions = (_a = await parseProviderOptions2({
|
|
597
651
|
provider: "bedrock",
|
|
598
652
|
providerOptions,
|
|
@@ -644,6 +698,18 @@ var BedrockChatLanguageModel = class {
|
|
|
644
698
|
description: "Respond with a JSON object.",
|
|
645
699
|
inputSchema: responseFormat.schema
|
|
646
700
|
} : void 0;
|
|
701
|
+
const { toolConfig, additionalTools, toolWarnings, betas } = prepareTools({
|
|
702
|
+
tools: jsonResponseTool ? [jsonResponseTool, ...tools != null ? tools : []] : tools,
|
|
703
|
+
toolChoice: jsonResponseTool != null ? { type: "tool", toolName: jsonResponseTool.name } : toolChoice,
|
|
704
|
+
modelId: this.modelId
|
|
705
|
+
});
|
|
706
|
+
warnings.push(...toolWarnings);
|
|
707
|
+
if (additionalTools) {
|
|
708
|
+
bedrockOptions.additionalModelRequestFields = {
|
|
709
|
+
...bedrockOptions.additionalModelRequestFields,
|
|
710
|
+
...additionalTools
|
|
711
|
+
};
|
|
712
|
+
}
|
|
647
713
|
const isThinking = ((_b = bedrockOptions.reasoningConfig) == null ? void 0 : _b.type) === "enabled";
|
|
648
714
|
const thinkingBudget = (_c = bedrockOptions.reasoningConfig) == null ? void 0 : _c.budgetTokens;
|
|
649
715
|
const inferenceConfig = {
|
|
@@ -682,9 +748,9 @@ var BedrockChatLanguageModel = class {
|
|
|
682
748
|
details: "topP is not supported when thinking is enabled"
|
|
683
749
|
});
|
|
684
750
|
}
|
|
685
|
-
const
|
|
751
|
+
const hasAnyTools = ((_f = (_e = toolConfig.tools) == null ? void 0 : _e.length) != null ? _f : 0) > 0 || additionalTools;
|
|
686
752
|
let filteredPrompt = prompt;
|
|
687
|
-
if (
|
|
753
|
+
if (!hasAnyTools) {
|
|
688
754
|
const hasToolContent = prompt.some(
|
|
689
755
|
(message) => "content" in message && Array.isArray(message.content) && message.content.some(
|
|
690
756
|
(part) => part.type === "tool-call" || part.type === "tool-result"
|
|
@@ -709,11 +775,6 @@ var BedrockChatLanguageModel = class {
|
|
|
709
775
|
}
|
|
710
776
|
}
|
|
711
777
|
const { system, messages } = await convertToBedrockChatMessages(filteredPrompt);
|
|
712
|
-
const { toolConfig, toolWarnings } = prepareTools({
|
|
713
|
-
tools: activeTools,
|
|
714
|
-
toolChoice: jsonResponseTool != null ? { type: "tool", toolName: jsonResponseTool.name } : toolChoice,
|
|
715
|
-
prompt: filteredPrompt
|
|
716
|
-
});
|
|
717
778
|
const { reasoningConfig: _, ...filteredBedrockOptions } = (providerOptions == null ? void 0 : providerOptions.bedrock) || {};
|
|
718
779
|
return {
|
|
719
780
|
command: {
|
|
@@ -724,26 +785,35 @@ var BedrockChatLanguageModel = class {
|
|
|
724
785
|
inferenceConfig
|
|
725
786
|
},
|
|
726
787
|
...filteredBedrockOptions,
|
|
727
|
-
...toolConfig.tools !== void 0 ? { toolConfig } : {}
|
|
788
|
+
...toolConfig.tools !== void 0 && toolConfig.tools.length > 0 ? { toolConfig } : {}
|
|
728
789
|
},
|
|
729
|
-
warnings
|
|
730
|
-
usesJsonResponseTool: jsonResponseTool != null
|
|
790
|
+
warnings,
|
|
791
|
+
usesJsonResponseTool: jsonResponseTool != null,
|
|
792
|
+
betas
|
|
731
793
|
};
|
|
732
794
|
}
|
|
795
|
+
async getHeaders({
|
|
796
|
+
betas,
|
|
797
|
+
headers
|
|
798
|
+
}) {
|
|
799
|
+
return combineHeaders(
|
|
800
|
+
await resolve(this.config.headers),
|
|
801
|
+
betas.size > 0 ? { "anthropic-beta": Array.from(betas).join(",") } : {},
|
|
802
|
+
headers
|
|
803
|
+
);
|
|
804
|
+
}
|
|
733
805
|
async doGenerate(options) {
|
|
734
806
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
735
807
|
const {
|
|
736
808
|
command: args,
|
|
737
809
|
warnings,
|
|
738
|
-
usesJsonResponseTool
|
|
810
|
+
usesJsonResponseTool,
|
|
811
|
+
betas
|
|
739
812
|
} = await this.getArgs(options);
|
|
740
813
|
const url = `${this.getUrl(this.modelId)}/converse`;
|
|
741
814
|
const { value: response, responseHeaders } = await postJsonToApi({
|
|
742
815
|
url,
|
|
743
|
-
headers:
|
|
744
|
-
await resolve(this.config.headers),
|
|
745
|
-
options.headers
|
|
746
|
-
),
|
|
816
|
+
headers: await this.getHeaders({ betas, headers: options.headers }),
|
|
747
817
|
body: args,
|
|
748
818
|
failedResponseHandler: createJsonErrorResponseHandler({
|
|
749
819
|
errorSchema: BedrockErrorSchema,
|
|
@@ -840,15 +910,13 @@ var BedrockChatLanguageModel = class {
|
|
|
840
910
|
const {
|
|
841
911
|
command: args,
|
|
842
912
|
warnings,
|
|
843
|
-
usesJsonResponseTool
|
|
913
|
+
usesJsonResponseTool,
|
|
914
|
+
betas
|
|
844
915
|
} = await this.getArgs(options);
|
|
845
916
|
const url = `${this.getUrl(this.modelId)}/converse-stream`;
|
|
846
917
|
const { value: response, responseHeaders } = await postJsonToApi({
|
|
847
918
|
url,
|
|
848
|
-
headers:
|
|
849
|
-
await resolve(this.config.headers),
|
|
850
|
-
options.headers
|
|
851
|
-
),
|
|
919
|
+
headers: await this.getHeaders({ betas, headers: options.headers }),
|
|
852
920
|
body: args,
|
|
853
921
|
failedResponseHandler: createJsonErrorResponseHandler({
|
|
854
922
|
errorSchema: BedrockErrorSchema,
|
|
@@ -1602,6 +1670,7 @@ Original error: ${errorMessage}`
|
|
|
1602
1670
|
provider.textEmbeddingModel = createEmbeddingModel;
|
|
1603
1671
|
provider.image = createImageModel;
|
|
1604
1672
|
provider.imageModel = createImageModel;
|
|
1673
|
+
provider.tools = anthropicTools2;
|
|
1605
1674
|
return provider;
|
|
1606
1675
|
}
|
|
1607
1676
|
var bedrock = createAmazonBedrock();
|