@ai-sdk/amazon-bedrock 4.0.138 → 4.0.140
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 +21 -0
- package/dist/anthropic/index.js +1 -1
- package/dist/anthropic/index.mjs +1 -1
- package/dist/index.js +51 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +55 -14
- package/dist/index.mjs.map +1 -1
- package/dist/mantle/index.js +1 -1
- package/dist/mantle/index.mjs +1 -1
- package/package.json +3 -3
- package/src/bedrock-api-types.ts +9 -3
- package/src/bedrock-chat-language-model.ts +7 -19
- package/src/convert-to-bedrock-chat-messages.ts +57 -9
package/dist/mantle/index.js
CHANGED
|
@@ -35,7 +35,7 @@ var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
|
35
35
|
var import_aws4fetch = require("aws4fetch");
|
|
36
36
|
|
|
37
37
|
// src/version.ts
|
|
38
|
-
var VERSION = true ? "4.0.
|
|
38
|
+
var VERSION = true ? "4.0.140" : "0.0.0-test";
|
|
39
39
|
|
|
40
40
|
// src/bedrock-sigv4-fetch.ts
|
|
41
41
|
function createSigV4FetchFunction(getCredentials, fetch, service = "bedrock") {
|
package/dist/mantle/index.mjs
CHANGED
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
import { AwsV4Signer } from "aws4fetch";
|
|
24
24
|
|
|
25
25
|
// src/version.ts
|
|
26
|
-
var VERSION = true ? "4.0.
|
|
26
|
+
var VERSION = true ? "4.0.140" : "0.0.0-test";
|
|
27
27
|
|
|
28
28
|
// src/bedrock-sigv4-fetch.ts
|
|
29
29
|
function createSigV4FetchFunction(getCredentials, fetch, service = "bedrock") {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/amazon-bedrock",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.140",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"@smithy/eventstream-codec": "^4.0.1",
|
|
45
45
|
"@smithy/util-utf8": "^4.0.0",
|
|
46
46
|
"aws4fetch": "^1.0.20",
|
|
47
|
-
"@ai-sdk/anthropic": "3.0.
|
|
48
|
-
"@ai-sdk/openai": "3.0.
|
|
47
|
+
"@ai-sdk/anthropic": "3.0.101",
|
|
48
|
+
"@ai-sdk/openai": "3.0.88",
|
|
49
49
|
"@ai-sdk/provider": "3.0.14",
|
|
50
50
|
"@ai-sdk/provider-utils": "4.0.40"
|
|
51
51
|
},
|
package/src/bedrock-api-types.ts
CHANGED
|
@@ -165,9 +165,15 @@ export interface BedrockGuardrailConverseContentBlock {
|
|
|
165
165
|
export interface BedrockImageBlock {
|
|
166
166
|
image: {
|
|
167
167
|
format: BedrockImageFormat;
|
|
168
|
-
source:
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
source:
|
|
169
|
+
| {
|
|
170
|
+
bytes: string;
|
|
171
|
+
}
|
|
172
|
+
| {
|
|
173
|
+
s3Location: {
|
|
174
|
+
uri: string;
|
|
175
|
+
};
|
|
176
|
+
};
|
|
171
177
|
};
|
|
172
178
|
}
|
|
173
179
|
|
|
@@ -24,7 +24,10 @@ import {
|
|
|
24
24
|
type ParseResult,
|
|
25
25
|
type Resolvable,
|
|
26
26
|
} from '@ai-sdk/provider-utils';
|
|
27
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
getModelCapabilities,
|
|
29
|
+
sanitizeJsonSchema,
|
|
30
|
+
} from '@ai-sdk/anthropic/internal';
|
|
28
31
|
import { z } from 'zod/v4';
|
|
29
32
|
import {
|
|
30
33
|
BEDROCK_STOP_REASONS,
|
|
@@ -154,8 +157,8 @@ export class BedrockChatLanguageModel implements LanguageModelV3 {
|
|
|
154
157
|
this.modelId.includes('claude-fable-5') ||
|
|
155
158
|
this.modelId.includes('claude-sonnet-5');
|
|
156
159
|
|
|
157
|
-
const modelSupportsStructuredOutput =
|
|
158
|
-
|
|
160
|
+
const { supportsStructuredOutput: modelSupportsStructuredOutput } =
|
|
161
|
+
getModelCapabilities(this.modelId);
|
|
159
162
|
|
|
160
163
|
const useNativeStructuredOutput =
|
|
161
164
|
isAnthropicModel &&
|
|
@@ -447,7 +450,7 @@ export class BedrockChatLanguageModel implements LanguageModelV3 {
|
|
|
447
450
|
}
|
|
448
451
|
|
|
449
452
|
readonly supportedUrls: Record<string, RegExp[]> = {
|
|
450
|
-
|
|
453
|
+
'image/*': [/^s3:\/\//],
|
|
451
454
|
};
|
|
452
455
|
|
|
453
456
|
private async getHeaders({
|
|
@@ -1046,21 +1049,6 @@ export class BedrockChatLanguageModel implements LanguageModelV3 {
|
|
|
1046
1049
|
}
|
|
1047
1050
|
}
|
|
1048
1051
|
|
|
1049
|
-
function bedrockChatModelSupportsStructuredOutput(modelId: string): boolean {
|
|
1050
|
-
return (
|
|
1051
|
-
modelId.includes('claude-opus-4-8') ||
|
|
1052
|
-
modelId.includes('claude-opus-4-7') ||
|
|
1053
|
-
modelId.includes('claude-fable-5') ||
|
|
1054
|
-
modelId.includes('claude-sonnet-5') ||
|
|
1055
|
-
modelId.includes('claude-sonnet-4-6') ||
|
|
1056
|
-
modelId.includes('claude-opus-4-6') ||
|
|
1057
|
-
modelId.includes('claude-sonnet-4-5') ||
|
|
1058
|
-
modelId.includes('claude-opus-4-5') ||
|
|
1059
|
-
modelId.includes('claude-haiku-4-5') ||
|
|
1060
|
-
modelId.includes('claude-opus-4-1')
|
|
1061
|
-
);
|
|
1062
|
-
}
|
|
1063
|
-
|
|
1064
1052
|
class JsonObjectTextExtractor {
|
|
1065
1053
|
private started = false;
|
|
1066
1054
|
private completed = false;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UnsupportedFunctionalityError,
|
|
3
3
|
type JSONObject,
|
|
4
|
+
type LanguageModelV3FilePart,
|
|
4
5
|
type LanguageModelV3Message,
|
|
5
6
|
type LanguageModelV3Prompt,
|
|
6
7
|
type SharedV3ProviderMetadata,
|
|
@@ -17,6 +18,7 @@ import {
|
|
|
17
18
|
type BedrockCachePoint,
|
|
18
19
|
type BedrockDocumentFormat,
|
|
19
20
|
type BedrockDocumentMimeType,
|
|
21
|
+
type BedrockImageBlock,
|
|
20
22
|
type BedrockImageFormat,
|
|
21
23
|
type BedrockImageMimeType,
|
|
22
24
|
type BedrockMessages,
|
|
@@ -51,6 +53,38 @@ function pushCachePoint(
|
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
|
|
56
|
+
function sanitizeToolName(toolName: string): string {
|
|
57
|
+
return toolName.replace(/[^a-zA-Z0-9_-]/g, '') || '_';
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function getBedrockImageSource({
|
|
61
|
+
data,
|
|
62
|
+
functionality,
|
|
63
|
+
}: {
|
|
64
|
+
data: LanguageModelV3FilePart['data'];
|
|
65
|
+
functionality: string;
|
|
66
|
+
}): BedrockImageBlock['image']['source'] {
|
|
67
|
+
if (data instanceof URL) {
|
|
68
|
+
if (data.protocol !== 's3:') {
|
|
69
|
+
throw new UnsupportedFunctionalityError({ functionality });
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
s3Location: {
|
|
73
|
+
uri: data.toString(),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return { bytes: convertToBase64(data) };
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function getBedrockImageFormatFromUrl(url: URL): BedrockImageFormat {
|
|
82
|
+
const extension = url.pathname.split('.').pop()?.toLowerCase();
|
|
83
|
+
return getBedrockImageFormat(
|
|
84
|
+
`image/${extension === 'jpg' ? 'jpeg' : extension}`,
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
54
88
|
async function shouldEnableCitations(
|
|
55
89
|
providerMetadata: SharedV3ProviderMetadata | undefined,
|
|
56
90
|
): Promise<boolean> {
|
|
@@ -122,21 +156,23 @@ export async function convertToBedrockChatMessages(
|
|
|
122
156
|
}
|
|
123
157
|
|
|
124
158
|
case 'file': {
|
|
125
|
-
if (part.data instanceof URL) {
|
|
126
|
-
// The AI SDK automatically downloads files for user file parts with URLs
|
|
127
|
-
throw new UnsupportedFunctionalityError({
|
|
128
|
-
functionality: 'File URL data',
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
159
|
if (part.mediaType.startsWith('image/')) {
|
|
133
160
|
bedrockContent.push({
|
|
134
161
|
image: {
|
|
135
162
|
format: getBedrockImageFormat(part.mediaType),
|
|
136
|
-
source: {
|
|
163
|
+
source: getBedrockImageSource({
|
|
164
|
+
data: part.data,
|
|
165
|
+
functionality: 'File URL data',
|
|
166
|
+
}),
|
|
137
167
|
},
|
|
138
168
|
});
|
|
139
169
|
} else {
|
|
170
|
+
if (part.data instanceof URL) {
|
|
171
|
+
throw new UnsupportedFunctionalityError({
|
|
172
|
+
functionality: 'File URL data',
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
140
176
|
if (!part.mediaType) {
|
|
141
177
|
throw new UnsupportedFunctionalityError({
|
|
142
178
|
functionality: 'file without mime type',
|
|
@@ -199,6 +235,18 @@ export async function convertToBedrockChatMessages(
|
|
|
199
235
|
},
|
|
200
236
|
};
|
|
201
237
|
}
|
|
238
|
+
case 'image-url': {
|
|
239
|
+
const url = new URL(contentPart.url);
|
|
240
|
+
return {
|
|
241
|
+
image: {
|
|
242
|
+
format: getBedrockImageFormatFromUrl(url),
|
|
243
|
+
source: getBedrockImageSource({
|
|
244
|
+
data: url,
|
|
245
|
+
functionality: `tool result image URL "${contentPart.url}"`,
|
|
246
|
+
}),
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
202
250
|
case 'file-data': {
|
|
203
251
|
if (!contentPart.mediaType.startsWith('image/')) {
|
|
204
252
|
const enableCitations =
|
|
@@ -366,7 +414,7 @@ export async function convertToBedrockChatMessages(
|
|
|
366
414
|
bedrockContent.push({
|
|
367
415
|
toolUse: {
|
|
368
416
|
toolUseId: normalizeToolCallId(part.toolCallId, isMistral),
|
|
369
|
-
name: part.toolName,
|
|
417
|
+
name: sanitizeToolName(part.toolName),
|
|
370
418
|
input: part.input as JSONObject,
|
|
371
419
|
},
|
|
372
420
|
});
|