@llumiverse/drivers 0.19.0 → 0.20.0
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/lib/cjs/bedrock/converse.js +181 -123
- package/lib/cjs/bedrock/converse.js.map +1 -1
- package/lib/cjs/bedrock/index.js +152 -70
- package/lib/cjs/bedrock/index.js.map +1 -1
- package/lib/cjs/vertexai/index.js +1 -0
- package/lib/cjs/vertexai/index.js.map +1 -1
- package/lib/cjs/vertexai/models/claude.js +227 -118
- package/lib/cjs/vertexai/models/claude.js.map +1 -1
- package/lib/cjs/vertexai/models/gemini.js +110 -70
- package/lib/cjs/vertexai/models/gemini.js.map +1 -1
- package/lib/cjs/vertexai/models/imagen.js +2 -2
- package/lib/cjs/vertexai/models/imagen.js.map +1 -1
- package/lib/cjs/watsonx/index.js +10 -10
- package/lib/cjs/watsonx/index.js.map +1 -1
- package/lib/esm/bedrock/converse.js +180 -122
- package/lib/esm/bedrock/converse.js.map +1 -1
- package/lib/esm/bedrock/index.js +153 -71
- package/lib/esm/bedrock/index.js.map +1 -1
- package/lib/esm/vertexai/index.js +1 -0
- package/lib/esm/vertexai/index.js.map +1 -1
- package/lib/esm/vertexai/models/claude.js +228 -119
- package/lib/esm/vertexai/models/claude.js.map +1 -1
- package/lib/esm/vertexai/models/gemini.js +109 -70
- package/lib/esm/vertexai/models/gemini.js.map +1 -1
- package/lib/esm/vertexai/models/imagen.js +2 -2
- package/lib/esm/vertexai/models/imagen.js.map +1 -1
- package/lib/esm/watsonx/index.js +10 -10
- package/lib/esm/watsonx/index.js.map +1 -1
- package/lib/types/bedrock/converse.d.ts +2 -2
- package/lib/types/bedrock/converse.d.ts.map +1 -1
- package/lib/types/bedrock/index.d.ts +5 -5
- package/lib/types/bedrock/index.d.ts.map +1 -1
- package/lib/types/vertexai/index.d.ts +2 -3
- package/lib/types/vertexai/index.d.ts.map +1 -1
- package/lib/types/vertexai/models/claude.d.ts +5 -7
- package/lib/types/vertexai/models/claude.d.ts.map +1 -1
- package/lib/types/vertexai/models/gemini.d.ts +4 -2
- package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
- package/lib/types/vertexai/models.d.ts +2 -2
- package/lib/types/vertexai/models.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/bedrock/converse.ts +194 -129
- package/src/bedrock/index.ts +177 -82
- package/src/vertexai/index.ts +3 -3
- package/src/vertexai/models/claude.ts +268 -138
- package/src/vertexai/models/gemini.ts +120 -77
- package/src/vertexai/models/imagen.ts +3 -3
- package/src/vertexai/models.ts +2 -2
- package/src/watsonx/index.ts +12 -12
|
@@ -6,13 +6,11 @@ exports.converseRemoveJSONprefill = converseRemoveJSONprefill;
|
|
|
6
6
|
exports.converseJSONprefill = converseJSONprefill;
|
|
7
7
|
exports.formatConversePrompt = formatConversePrompt;
|
|
8
8
|
const core_1 = require("@llumiverse/core");
|
|
9
|
+
const core_2 = require("@llumiverse/core");
|
|
9
10
|
const client_bedrock_runtime_1 = require("@aws-sdk/client-bedrock-runtime");
|
|
10
11
|
const s3_js_1 = require("./s3.js");
|
|
11
|
-
function getJSONSafetyNotice(schema) {
|
|
12
|
-
return "The answer must be a JSON object using the following JSON Schema:\n" + JSON.stringify(schema, undefined, 2);
|
|
13
|
-
}
|
|
14
12
|
function roleConversion(role) {
|
|
15
|
-
return role ===
|
|
13
|
+
return role === core_2.PromptRole.assistant ? client_bedrock_runtime_1.ConversationRole.ASSISTANT : client_bedrock_runtime_1.ConversationRole.USER;
|
|
16
14
|
}
|
|
17
15
|
function mimeToImageType(mime) {
|
|
18
16
|
if (mime.startsWith("image/")) {
|
|
@@ -32,32 +30,133 @@ function mimeToVideoType(mime) {
|
|
|
32
30
|
}
|
|
33
31
|
return "mp4";
|
|
34
32
|
}
|
|
35
|
-
async function
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
async function processFile(f, mode) {
|
|
34
|
+
const source = await f.getStream();
|
|
35
|
+
//Image file - "png" | "jpeg" | "gif" | "webp"
|
|
36
|
+
if (f.mime_type && f.mime_type.startsWith("image")) {
|
|
37
|
+
const imageBlock = {
|
|
38
|
+
image: {
|
|
39
|
+
format: mimeToImageType(f.mime_type),
|
|
40
|
+
source: { bytes: await (0, core_1.readStreamAsUint8Array)(source) },
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
return mode === 'content'
|
|
44
|
+
? imageBlock
|
|
45
|
+
: imageBlock;
|
|
46
|
+
}
|
|
47
|
+
//Document file - "pdf | csv | doc | docx | xls | xlsx | html | txt | md"
|
|
48
|
+
else if (f.mime_type && (f.mime_type.startsWith("text") || f.mime_type?.startsWith("application"))) {
|
|
49
|
+
// Handle JSON files specially
|
|
50
|
+
if (f.mime_type === "application/json" || (f.name && f.name.endsWith('.json'))) {
|
|
51
|
+
const jsonContent = await (0, core_1.readStreamAsString)(source);
|
|
52
|
+
try {
|
|
53
|
+
const parsedJson = JSON.parse(jsonContent);
|
|
54
|
+
if (mode === 'tool') {
|
|
55
|
+
return { json: parsedJson };
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// ContentBlock doesn't support JSON, so treat as text
|
|
59
|
+
return { text: jsonContent };
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
const textBlock = { text: jsonContent };
|
|
64
|
+
return mode === 'content'
|
|
65
|
+
? textBlock
|
|
66
|
+
: textBlock;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
const documentBlock = {
|
|
71
|
+
document: {
|
|
72
|
+
format: mimeToDocType(f.mime_type),
|
|
73
|
+
name: f.name,
|
|
74
|
+
source: { bytes: await (0, core_1.readStreamAsUint8Array)(source) },
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
return mode === 'content'
|
|
78
|
+
? documentBlock
|
|
79
|
+
: documentBlock;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//Video file - "mov | mkv | mp4 | webm | flv | mpeg | mpg | wmv | three_gp"
|
|
83
|
+
else if (f.mime_type && f.mime_type.startsWith("video")) {
|
|
84
|
+
let url_string = (await f.getURL()).toLowerCase();
|
|
85
|
+
let url_format = new URL(url_string);
|
|
86
|
+
if (url_format.hostname.endsWith("amazonaws.com") &&
|
|
87
|
+
(url_format.hostname.startsWith("s3.") || url_format.hostname.includes(".s3."))) {
|
|
88
|
+
//Convert to s3:// format
|
|
89
|
+
const parsedUrl = (0, s3_js_1.parseS3UrlToUri)(new URL(url_string));
|
|
90
|
+
url_string = parsedUrl;
|
|
91
|
+
url_format = new URL(parsedUrl);
|
|
92
|
+
}
|
|
93
|
+
const videoBlock = url_format.protocol === "s3:" ? {
|
|
94
|
+
video: {
|
|
95
|
+
format: mimeToVideoType(f.mime_type),
|
|
96
|
+
source: {
|
|
97
|
+
s3Location: {
|
|
98
|
+
uri: url_string, //S3 URL
|
|
99
|
+
//bucketOwner: We don't have this additional information.
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
} : {
|
|
104
|
+
video: {
|
|
105
|
+
format: mimeToVideoType(f.mime_type),
|
|
106
|
+
source: { bytes: await (0, core_1.readStreamAsUint8Array)(source) },
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
return mode === 'content'
|
|
110
|
+
? videoBlock
|
|
111
|
+
: videoBlock;
|
|
112
|
+
}
|
|
113
|
+
//Fallback, send as text
|
|
114
|
+
else {
|
|
115
|
+
const textBlock = { text: await (0, core_1.readStreamAsString)(source) };
|
|
116
|
+
return mode === 'content'
|
|
117
|
+
? textBlock
|
|
118
|
+
: textBlock;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
async function processFileToContentBlock(f) {
|
|
122
|
+
try {
|
|
123
|
+
return processFile(f, 'content');
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
throw new Error(`Failed to process file ${f.name} for prompt: ${error instanceof Error ? error.message : String(error)}`);
|
|
39
127
|
}
|
|
40
|
-
return Buffer.concat(out).toString();
|
|
41
128
|
}
|
|
42
|
-
async function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
129
|
+
async function processFileToToolContentBlock(f) {
|
|
130
|
+
try {
|
|
131
|
+
return processFile(f, 'tool');
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
throw new Error(`Failed to process file ${f.name} for tool response: ${error instanceof Error ? error.message : String(error)}`);
|
|
46
135
|
}
|
|
47
|
-
return Buffer.concat(out);
|
|
48
136
|
}
|
|
49
137
|
function converseConcatMessages(messages) {
|
|
50
|
-
if (!messages)
|
|
138
|
+
if (!messages || messages.length === 0)
|
|
51
139
|
return [];
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
140
|
+
const needsMerging = messages.some((message, i) => i < messages.length - 1 && message.role === messages[i + 1].role);
|
|
141
|
+
// If no merging needed, return original array
|
|
142
|
+
if (!needsMerging) {
|
|
143
|
+
return messages;
|
|
144
|
+
}
|
|
145
|
+
const result = [];
|
|
146
|
+
let currentMessage = { ...messages[0] };
|
|
147
|
+
for (let i = 1; i < messages.length; i++) {
|
|
148
|
+
if (currentMessage.role === messages[i].role) {
|
|
149
|
+
// Same role - concatenate content
|
|
150
|
+
currentMessage.content = (currentMessage.content || []).concat(...(messages[i].content || []));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Different role - push current and start new
|
|
154
|
+
result.push(currentMessage);
|
|
155
|
+
currentMessage = { ...messages[i] };
|
|
58
156
|
}
|
|
59
157
|
}
|
|
60
|
-
|
|
158
|
+
result.push(currentMessage);
|
|
159
|
+
return result;
|
|
61
160
|
}
|
|
62
161
|
function converseSystemToMessages(system) {
|
|
63
162
|
return {
|
|
@@ -85,137 +184,96 @@ function converseJSONprefill(messages) {
|
|
|
85
184
|
});
|
|
86
185
|
return messages;
|
|
87
186
|
}
|
|
88
|
-
|
|
187
|
+
// Used to ignore unsupported roles. Typically these are things like image specific roles.
|
|
188
|
+
const unsupportedRoles = [
|
|
189
|
+
core_2.PromptRole.negative,
|
|
190
|
+
core_2.PromptRole.mask,
|
|
191
|
+
];
|
|
192
|
+
async function formatConversePrompt(segments, options) {
|
|
89
193
|
//Non-const for concat
|
|
90
194
|
let system = [];
|
|
91
195
|
const safety = [];
|
|
92
196
|
let messages = [];
|
|
93
197
|
for (const segment of segments) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
198
|
+
// Role dependent processing
|
|
199
|
+
if (segment.role === core_2.PromptRole.system) {
|
|
200
|
+
system.push({ text: segment.content });
|
|
201
|
+
}
|
|
202
|
+
else if (segment.role === core_2.PromptRole.tool) {
|
|
203
|
+
if (!segment.tool_use_id) {
|
|
204
|
+
throw new Error("Tool use ID is required for tool segments");
|
|
205
|
+
}
|
|
206
|
+
//Tool use results (i.e. the model has requested a tool and this it the answer to that request)
|
|
207
|
+
const toolContentBlocks = [];
|
|
208
|
+
//Text segments
|
|
209
|
+
if (segment.content) {
|
|
210
|
+
toolContentBlocks.push({ text: segment.content });
|
|
211
|
+
}
|
|
212
|
+
//Handle attached files
|
|
213
|
+
for (const file of segment.files ?? []) {
|
|
214
|
+
toolContentBlocks.push(await processFileToToolContentBlock(file));
|
|
215
|
+
}
|
|
216
|
+
messages.push({
|
|
98
217
|
content: [{
|
|
99
218
|
toolResult: {
|
|
100
219
|
toolUseId: segment.tool_use_id,
|
|
101
|
-
content:
|
|
220
|
+
content: toolContentBlocks,
|
|
102
221
|
}
|
|
103
222
|
}],
|
|
104
|
-
role: client_bedrock_runtime_1.ConversationRole.USER
|
|
223
|
+
role: client_bedrock_runtime_1.ConversationRole.USER
|
|
105
224
|
});
|
|
106
|
-
messages = messages.concat(parts);
|
|
107
|
-
continue;
|
|
108
225
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
else if (f.mime_type && (f.mime_type.startsWith("text") || f.mime_type?.startsWith("application"))) {
|
|
127
|
-
content = [
|
|
128
|
-
{ text: f.name },
|
|
129
|
-
{
|
|
130
|
-
document: {
|
|
131
|
-
format: mimeToDocType(f.mime_type),
|
|
132
|
-
name: f.name,
|
|
133
|
-
source: { bytes: await readStreamAsUint8Array(source) },
|
|
134
|
-
},
|
|
135
|
-
},
|
|
136
|
-
];
|
|
137
|
-
//Video file - "mov | mkv | mp4 | webm | flv | mpeg | mpg | wmv | three_gp"
|
|
138
|
-
}
|
|
139
|
-
else if (f.mime_type && f.mime_type.startsWith("video")) {
|
|
140
|
-
let url_string = (await f.getURL()).toLowerCase();
|
|
141
|
-
let url_format = new URL(url_string);
|
|
142
|
-
if (url_format.hostname.endsWith("amazonaws.com") &&
|
|
143
|
-
(url_format.hostname.startsWith("s3.") || url_format.hostname.includes(".s3."))) {
|
|
144
|
-
//Convert to s3:// format
|
|
145
|
-
const parsedUrl = (0, s3_js_1.parseS3UrlToUri)(new URL(url_string));
|
|
146
|
-
url_string = parsedUrl;
|
|
147
|
-
url_format = new URL(parsedUrl);
|
|
148
|
-
}
|
|
149
|
-
if (url_format.protocol === "s3:") {
|
|
150
|
-
//Use S3 bucket if available
|
|
151
|
-
content = [
|
|
152
|
-
{
|
|
153
|
-
video: {
|
|
154
|
-
format: mimeToVideoType(f.mime_type),
|
|
155
|
-
source: {
|
|
156
|
-
s3Location: {
|
|
157
|
-
uri: url_string, //S3 URL
|
|
158
|
-
//bucketOwner: We don't have this additional information.
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
];
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
content = [
|
|
167
|
-
{
|
|
168
|
-
video: {
|
|
169
|
-
format: mimeToVideoType(f.mime_type),
|
|
170
|
-
source: { bytes: await readStreamAsUint8Array(source) },
|
|
171
|
-
},
|
|
172
|
-
},
|
|
173
|
-
];
|
|
174
|
-
}
|
|
175
|
-
//Fallback, send string
|
|
226
|
+
else if (!unsupportedRoles.includes(segment.role)) {
|
|
227
|
+
//User, Assistant or safety roles
|
|
228
|
+
const contentBlocks = [];
|
|
229
|
+
//Text segments
|
|
230
|
+
if (segment.content) {
|
|
231
|
+
contentBlocks.push({ text: segment.content });
|
|
232
|
+
}
|
|
233
|
+
//Handle attached files
|
|
234
|
+
for (const file of segment.files ?? []) {
|
|
235
|
+
contentBlocks.push(await processFileToContentBlock(file));
|
|
236
|
+
}
|
|
237
|
+
//If there are no content blocks, skip this message
|
|
238
|
+
if (contentBlocks.length !== 0) {
|
|
239
|
+
const message = { content: contentBlocks, role: roleConversion(segment.role) };
|
|
240
|
+
if (segment.role === core_2.PromptRole.safety) {
|
|
241
|
+
safety.push(message);
|
|
176
242
|
}
|
|
177
243
|
else {
|
|
178
|
-
|
|
244
|
+
messages.push(message);
|
|
179
245
|
}
|
|
180
|
-
parts.push({
|
|
181
|
-
content: content,
|
|
182
|
-
role: roleConversion(segment.role),
|
|
183
|
-
});
|
|
184
246
|
}
|
|
185
247
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
if (segment.role === core_1.PromptRole.system) {
|
|
194
|
-
system.push({ text: segment.content });
|
|
195
|
-
}
|
|
196
|
-
else if (segment.role === core_1.PromptRole.safety) {
|
|
197
|
-
safety.push({ text: segment.content });
|
|
248
|
+
}
|
|
249
|
+
if (options.result_schema) {
|
|
250
|
+
let schemaText;
|
|
251
|
+
if (options.tools && options.tools.length > 0) {
|
|
252
|
+
schemaText = "When not calling tools, the answer must be a JSON object using the following JSON Schema:\n" + JSON.stringify(options.result_schema, undefined, 2);
|
|
198
253
|
}
|
|
199
|
-
else
|
|
200
|
-
|
|
201
|
-
messages = messages.concat(parts);
|
|
254
|
+
else {
|
|
255
|
+
schemaText = "The answer must be a JSON object using the following JSON Schema:\n" + JSON.stringify(options.result_schema, undefined, 2);
|
|
202
256
|
}
|
|
257
|
+
system.push({ text: "IMPORTANT: " + schemaText });
|
|
258
|
+
}
|
|
259
|
+
// Safety messages are user messages that should be included at the end.
|
|
260
|
+
if (safety.length > 0) {
|
|
261
|
+
messages = messages.concat(safety);
|
|
203
262
|
}
|
|
204
263
|
//Conversations must start with a user message
|
|
205
264
|
//Use the system messages if none are provided
|
|
206
265
|
if (messages.length === 0) {
|
|
207
266
|
const systemMessage = converseSystemToMessages(system);
|
|
208
|
-
if (systemMessage?.content
|
|
267
|
+
if (systemMessage?.content?.[0]?.text?.trim()) {
|
|
209
268
|
messages.push(systemMessage);
|
|
210
269
|
}
|
|
211
270
|
else {
|
|
212
271
|
throw new Error("Prompt must contain at least one message");
|
|
213
272
|
}
|
|
214
|
-
system =
|
|
273
|
+
system = undefined;
|
|
215
274
|
}
|
|
216
|
-
if (
|
|
217
|
-
|
|
218
|
-
system = system.concat(safety);
|
|
275
|
+
if (system && system.length === 0) {
|
|
276
|
+
system = undefined; // If no system messages, set to undefined
|
|
219
277
|
}
|
|
220
278
|
messages = converseConcatMessages(messages);
|
|
221
279
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"converse.js","sourceRoot":"","sources":["../../../src/bedrock/converse.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"converse.js","sourceRoot":"","sources":["../../../src/bedrock/converse.ts"],"names":[],"mappings":"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"}
|