@llumiverse/drivers 0.15.0 → 0.16.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/README.md +3 -3
- package/lib/cjs/adobe/firefly.js +119 -0
- package/lib/cjs/adobe/firefly.js.map +1 -0
- package/lib/cjs/bedrock/converse.js +177 -0
- package/lib/cjs/bedrock/converse.js.map +1 -0
- package/lib/cjs/bedrock/index.js +329 -228
- package/lib/cjs/bedrock/index.js.map +1 -1
- package/lib/cjs/bedrock/nova-image-payload.js +207 -0
- package/lib/cjs/bedrock/nova-image-payload.js.map +1 -0
- package/lib/cjs/groq/index.js +34 -9
- package/lib/cjs/groq/index.js.map +1 -1
- package/lib/cjs/huggingface_ie.js +28 -12
- package/lib/cjs/huggingface_ie.js.map +1 -1
- package/lib/cjs/index.js +1 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/mistral/index.js +31 -12
- package/lib/cjs/mistral/index.js.map +1 -1
- package/lib/cjs/mistral/types.js.map +1 -1
- package/lib/cjs/openai/index.js +149 -27
- package/lib/cjs/openai/index.js.map +1 -1
- package/lib/cjs/replicate.js +16 -18
- package/lib/cjs/replicate.js.map +1 -1
- package/lib/cjs/test/TestValidationErrorCompletionStream.js.map +1 -1
- package/lib/cjs/test/index.js.map +1 -1
- package/lib/cjs/togetherai/index.js +40 -10
- package/lib/cjs/togetherai/index.js.map +1 -1
- package/lib/cjs/vertexai/embeddings/embeddings-image.js +26 -0
- package/lib/cjs/vertexai/embeddings/embeddings-image.js.map +1 -0
- package/lib/cjs/vertexai/embeddings/embeddings-text.js +1 -1
- package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +1 -1
- package/lib/cjs/vertexai/index.js +88 -24
- package/lib/cjs/vertexai/index.js.map +1 -1
- package/lib/cjs/vertexai/models/claude.js +252 -0
- package/lib/cjs/vertexai/models/claude.js.map +1 -0
- package/lib/cjs/vertexai/models/gemini.js +147 -22
- package/lib/cjs/vertexai/models/gemini.js.map +1 -1
- package/lib/cjs/vertexai/models/imagen.js +317 -0
- package/lib/cjs/vertexai/models/imagen.js.map +1 -0
- package/lib/cjs/vertexai/models.js +12 -64
- package/lib/cjs/vertexai/models.js.map +1 -1
- package/lib/cjs/watsonx/index.js +39 -8
- package/lib/cjs/watsonx/index.js.map +1 -1
- package/lib/cjs/xai/index.js +71 -0
- package/lib/cjs/xai/index.js.map +1 -0
- package/lib/esm/adobe/firefly.js +115 -0
- package/lib/esm/adobe/firefly.js.map +1 -0
- package/lib/esm/bedrock/converse.js +171 -0
- package/lib/esm/bedrock/converse.js.map +1 -0
- package/lib/esm/bedrock/index.js +331 -230
- package/lib/esm/bedrock/index.js.map +1 -1
- package/lib/esm/bedrock/nova-image-payload.js +203 -0
- package/lib/esm/bedrock/nova-image-payload.js.map +1 -0
- package/lib/esm/groq/index.js +34 -9
- package/lib/esm/groq/index.js.map +1 -1
- package/lib/esm/huggingface_ie.js +29 -13
- package/lib/esm/huggingface_ie.js.map +1 -1
- package/lib/esm/index.js +1 -0
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/mistral/index.js +31 -12
- package/lib/esm/mistral/index.js.map +1 -1
- package/lib/esm/mistral/types.js.map +1 -1
- package/lib/esm/openai/index.js +150 -28
- package/lib/esm/openai/index.js.map +1 -1
- package/lib/esm/replicate.js +17 -19
- package/lib/esm/replicate.js.map +1 -1
- package/lib/esm/test/TestValidationErrorCompletionStream.js.map +1 -1
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/togetherai/index.js +40 -10
- package/lib/esm/togetherai/index.js.map +1 -1
- package/lib/esm/vertexai/embeddings/embeddings-image.js +23 -0
- package/lib/esm/vertexai/embeddings/embeddings-image.js.map +1 -0
- package/lib/esm/vertexai/embeddings/embeddings-text.js +1 -1
- package/lib/esm/vertexai/embeddings/embeddings-text.js.map +1 -1
- package/lib/esm/vertexai/index.js +89 -26
- package/lib/esm/vertexai/index.js.map +1 -1
- package/lib/esm/vertexai/models/claude.js +247 -0
- package/lib/esm/vertexai/models/claude.js.map +1 -0
- package/lib/esm/vertexai/models/gemini.js +148 -23
- package/lib/esm/vertexai/models/gemini.js.map +1 -1
- package/lib/esm/vertexai/models/imagen.js +310 -0
- package/lib/esm/vertexai/models/imagen.js.map +1 -0
- package/lib/esm/vertexai/models.js +12 -61
- package/lib/esm/vertexai/models.js.map +1 -1
- package/lib/esm/watsonx/index.js +39 -8
- package/lib/esm/watsonx/index.js.map +1 -1
- package/lib/esm/xai/index.js +64 -0
- package/lib/esm/xai/index.js.map +1 -0
- package/lib/types/adobe/firefly.d.ts +30 -0
- package/lib/types/adobe/firefly.d.ts.map +1 -0
- package/lib/types/bedrock/converse.d.ts +8 -0
- package/lib/types/bedrock/converse.d.ts.map +1 -0
- package/lib/types/bedrock/index.d.ts +26 -11
- package/lib/types/bedrock/index.d.ts.map +1 -1
- package/lib/types/bedrock/nova-image-payload.d.ts +74 -0
- package/lib/types/bedrock/nova-image-payload.d.ts.map +1 -0
- package/lib/types/bedrock/payloads.d.ts +9 -65
- package/lib/types/bedrock/payloads.d.ts.map +1 -1
- package/lib/types/groq/index.d.ts +3 -3
- package/lib/types/groq/index.d.ts.map +1 -1
- package/lib/types/huggingface_ie.d.ts +5 -7
- package/lib/types/huggingface_ie.d.ts.map +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/mistral/index.d.ts +4 -4
- package/lib/types/mistral/index.d.ts.map +1 -1
- package/lib/types/mistral/types.d.ts +1 -0
- package/lib/types/mistral/types.d.ts.map +1 -1
- package/lib/types/openai/index.d.ts +5 -4
- package/lib/types/openai/index.d.ts.map +1 -1
- package/lib/types/replicate.d.ts +4 -9
- package/lib/types/replicate.d.ts.map +1 -1
- package/lib/types/test/index.d.ts +2 -2
- package/lib/types/test/index.d.ts.map +1 -1
- package/lib/types/togetherai/index.d.ts +4 -4
- package/lib/types/togetherai/index.d.ts.map +1 -1
- package/lib/types/vertexai/embeddings/embeddings-image.d.ts +11 -0
- package/lib/types/vertexai/embeddings/embeddings-image.d.ts.map +1 -0
- package/lib/types/vertexai/index.d.ts +16 -7
- package/lib/types/vertexai/index.d.ts.map +1 -1
- package/lib/types/vertexai/models/claude.d.ts +20 -0
- package/lib/types/vertexai/models/claude.d.ts.map +1 -0
- package/lib/types/vertexai/models/gemini.d.ts +4 -4
- package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
- package/lib/types/vertexai/models/imagen.d.ts +75 -0
- package/lib/types/vertexai/models/imagen.d.ts.map +1 -0
- package/lib/types/vertexai/models.d.ts +3 -6
- package/lib/types/vertexai/models.d.ts.map +1 -1
- package/lib/types/watsonx/index.d.ts +3 -3
- package/lib/types/watsonx/index.d.ts.map +1 -1
- package/lib/types/xai/index.d.ts +19 -0
- package/lib/types/xai/index.d.ts.map +1 -0
- package/package.json +17 -15
- package/src/adobe/firefly.ts +207 -0
- package/src/bedrock/converse.ts +194 -0
- package/src/bedrock/index.ts +349 -237
- package/src/bedrock/nova-image-payload.ts +309 -0
- package/src/bedrock/payloads.ts +12 -66
- package/src/groq/index.ts +35 -12
- package/src/huggingface_ie.ts +34 -13
- package/src/index.ts +1 -0
- package/src/mistral/index.ts +34 -12
- package/src/mistral/types.ts +2 -1
- package/src/openai/index.ts +167 -33
- package/src/replicate.ts +21 -20
- package/src/test/TestValidationErrorCompletionStream.ts +2 -2
- package/src/test/index.ts +3 -2
- package/src/togetherai/index.ts +44 -12
- package/src/vertexai/embeddings/embeddings-image.ts +50 -0
- package/src/vertexai/embeddings/embeddings-text.ts +1 -1
- package/src/vertexai/index.ts +106 -32
- package/src/vertexai/models/claude.ts +281 -0
- package/src/vertexai/models/gemini.ts +159 -26
- package/src/vertexai/models/imagen.ts +401 -0
- package/src/vertexai/models.ts +16 -78
- package/src/watsonx/index.ts +42 -10
- package/src/xai/index.ts +110 -0
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { FinishReason, HarmBlockThreshold, HarmCategory } from "@google-cloud/vertexai";
|
|
2
|
-
import { PromptRole, readStreamAsBase64 } from "@llumiverse/core";
|
|
2
|
+
import { ModelType, PromptRole, readStreamAsBase64 } from "@llumiverse/core";
|
|
3
3
|
import { asyncMap } from "@llumiverse/core/async";
|
|
4
|
-
import { BuiltinModels } from "../models.js";
|
|
5
4
|
function getGenerativeModel(driver, options, modelParams) {
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
5
|
+
//1.0 Ultra does not support JSON output, 1.0 Pro does.
|
|
6
|
+
const jsonMode = options.result_schema && !(options.model.includes("ultra"));
|
|
7
|
+
if (options.model_options?._option_id !== "text-fallback") {
|
|
8
|
+
driver.logger.warn("Invalid model options", { options: options.model_options });
|
|
9
|
+
}
|
|
10
|
+
options.model_options = options.model_options;
|
|
11
|
+
const model_options = options.model_options;
|
|
9
12
|
const model = driver.vertexai.getGenerativeModel({
|
|
10
13
|
model: options.model,
|
|
11
14
|
safetySettings: modelParams?.safetySettings ?? [{
|
|
@@ -31,10 +34,13 @@ function getGenerativeModel(driver, options, modelParams) {
|
|
|
31
34
|
],
|
|
32
35
|
generationConfig: {
|
|
33
36
|
responseMimeType: jsonMode ? "application/json" : "text/plain",
|
|
34
|
-
responseSchema: jsonModeWithSchema ? schema : undefined,
|
|
35
37
|
candidateCount: modelParams?.generationConfig?.candidateCount ?? 1,
|
|
36
|
-
temperature:
|
|
37
|
-
maxOutputTokens:
|
|
38
|
+
temperature: model_options?.temperature,
|
|
39
|
+
maxOutputTokens: model_options?.max_tokens,
|
|
40
|
+
topP: model_options?.top_p,
|
|
41
|
+
topK: model_options?.top_k,
|
|
42
|
+
frequencyPenalty: model_options?.frequency_penalty,
|
|
43
|
+
stopSequences: model_options?.stop_sequence,
|
|
38
44
|
},
|
|
39
45
|
});
|
|
40
46
|
return model;
|
|
@@ -51,20 +57,38 @@ function collectTextParts(content) {
|
|
|
51
57
|
}
|
|
52
58
|
return out.join('\n');
|
|
53
59
|
}
|
|
60
|
+
function collectToolUseParts(content) {
|
|
61
|
+
const out = [];
|
|
62
|
+
const parts = content.parts;
|
|
63
|
+
for (const part of parts) {
|
|
64
|
+
if (part.functionCall) {
|
|
65
|
+
out.push({
|
|
66
|
+
id: part.functionCall.name,
|
|
67
|
+
name: part.functionCall.name,
|
|
68
|
+
input: part.functionCall.args,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return out.length > 0 ? out : undefined;
|
|
73
|
+
}
|
|
54
74
|
export class GeminiModelDefinition {
|
|
55
75
|
model;
|
|
56
|
-
constructor(modelId
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
76
|
+
constructor(modelId) {
|
|
77
|
+
this.model = {
|
|
78
|
+
id: modelId,
|
|
79
|
+
name: modelId,
|
|
80
|
+
provider: 'vertexai',
|
|
81
|
+
type: ModelType.Text,
|
|
82
|
+
can_stream: true,
|
|
83
|
+
};
|
|
62
84
|
}
|
|
63
85
|
async createPrompt(_driver, segments, options) {
|
|
86
|
+
const splits = options.model.split("/");
|
|
87
|
+
const modelName = splits[splits.length - 1];
|
|
88
|
+
options = { ...options, model: modelName };
|
|
64
89
|
const schema = options.result_schema;
|
|
65
90
|
const contents = [];
|
|
66
91
|
const safety = [];
|
|
67
|
-
const jsonModeInConfig = options.result_schema && options.model.includes("1.5") && options.model.includes("pro");
|
|
68
92
|
let lastUserContent = undefined;
|
|
69
93
|
for (const msg of segments) {
|
|
70
94
|
if (msg.role === PromptRole.safety) {
|
|
@@ -85,6 +109,19 @@ export class GeminiModelDefinition {
|
|
|
85
109
|
});
|
|
86
110
|
}
|
|
87
111
|
}
|
|
112
|
+
if (msg.role === PromptRole.tool) {
|
|
113
|
+
const content = {
|
|
114
|
+
role: 'user',
|
|
115
|
+
parts: [{
|
|
116
|
+
functionResponse: {
|
|
117
|
+
name: msg.tool_use_id,
|
|
118
|
+
response: formatFunctionResponse(msg.content || ''),
|
|
119
|
+
}
|
|
120
|
+
}]
|
|
121
|
+
};
|
|
122
|
+
contents.push(content);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
88
125
|
const role = msg.role === PromptRole.assistant ? "model" : "user";
|
|
89
126
|
if (lastUserContent && lastUserContent.role === role) {
|
|
90
127
|
lastUserContent.parts.push({ text: msg.content });
|
|
@@ -104,7 +141,7 @@ export class GeminiModelDefinition {
|
|
|
104
141
|
}
|
|
105
142
|
}
|
|
106
143
|
let tools = undefined;
|
|
107
|
-
if (schema
|
|
144
|
+
if (schema) {
|
|
108
145
|
safety.push("The answer must be a JSON object using the following JSON Schema:\n" + JSON.stringify(schema));
|
|
109
146
|
}
|
|
110
147
|
if (safety.length > 0) {
|
|
@@ -122,7 +159,13 @@ export class GeminiModelDefinition {
|
|
|
122
159
|
// put system mesages first and safety last
|
|
123
160
|
return { contents, tools };
|
|
124
161
|
}
|
|
125
|
-
async
|
|
162
|
+
async requestTextCompletion(driver, prompt, options) {
|
|
163
|
+
const splits = options.model.split("/");
|
|
164
|
+
const modelName = splits[splits.length - 1];
|
|
165
|
+
options = { ...options, model: modelName };
|
|
166
|
+
let conversation = updateConversation(options.conversation, prompt.contents);
|
|
167
|
+
prompt.contents = conversation;
|
|
168
|
+
prompt.tools = getToolDefinitions(options.tools);
|
|
126
169
|
const model = getGenerativeModel(driver, options);
|
|
127
170
|
const r = await model.generateContent(prompt);
|
|
128
171
|
const response = await r.response;
|
|
@@ -132,6 +175,7 @@ export class GeminiModelDefinition {
|
|
|
132
175
|
result: usage?.candidatesTokenCount,
|
|
133
176
|
total: usage?.totalTokenCount,
|
|
134
177
|
};
|
|
178
|
+
let tool_use;
|
|
135
179
|
let finish_reason, result;
|
|
136
180
|
const candidate = response.candidates && response.candidates[0];
|
|
137
181
|
if (candidate) {
|
|
@@ -146,36 +190,117 @@ export class GeminiModelDefinition {
|
|
|
146
190
|
}
|
|
147
191
|
const content = candidate.content;
|
|
148
192
|
if (content) {
|
|
193
|
+
tool_use = collectToolUseParts(content);
|
|
149
194
|
result = collectTextParts(content);
|
|
195
|
+
conversation = updateConversation(conversation, [content]);
|
|
150
196
|
// if (options.result_schema) {
|
|
151
197
|
// result = candidate.;
|
|
152
198
|
// } else {
|
|
153
199
|
// }
|
|
154
200
|
}
|
|
155
201
|
}
|
|
202
|
+
if (tool_use) {
|
|
203
|
+
finish_reason = "tool_use";
|
|
204
|
+
}
|
|
156
205
|
return {
|
|
157
206
|
result: result ?? '',
|
|
158
|
-
token_usage,
|
|
159
|
-
finish_reason,
|
|
207
|
+
token_usage: token_usage,
|
|
208
|
+
finish_reason: finish_reason,
|
|
160
209
|
original_response: options.include_original_response ? response : undefined,
|
|
210
|
+
conversation,
|
|
211
|
+
tool_use
|
|
161
212
|
};
|
|
162
213
|
}
|
|
163
|
-
async
|
|
214
|
+
async requestTextCompletionStream(driver, prompt, options) {
|
|
215
|
+
const splits = options.model.split("/");
|
|
216
|
+
const modelName = splits[splits.length - 1];
|
|
217
|
+
options = { ...options, model: modelName };
|
|
164
218
|
const model = getGenerativeModel(driver, options);
|
|
165
219
|
const streamingResp = await model.generateContentStream(prompt);
|
|
166
220
|
const stream = asyncMap(streamingResp.stream, async (item) => {
|
|
221
|
+
const usage = item.usageMetadata;
|
|
222
|
+
const token_usage = {
|
|
223
|
+
prompt: usage?.promptTokenCount,
|
|
224
|
+
result: usage?.candidatesTokenCount,
|
|
225
|
+
total: usage?.totalTokenCount,
|
|
226
|
+
};
|
|
167
227
|
if (item.candidates && item.candidates.length > 0) {
|
|
168
228
|
for (const candidate of item.candidates) {
|
|
229
|
+
let finish_reason;
|
|
230
|
+
switch (candidate.finishReason) {
|
|
231
|
+
case FinishReason.MAX_TOKENS:
|
|
232
|
+
finish_reason = "length";
|
|
233
|
+
break;
|
|
234
|
+
case FinishReason.STOP:
|
|
235
|
+
finish_reason = "stop";
|
|
236
|
+
break;
|
|
237
|
+
default: finish_reason = candidate.finishReason;
|
|
238
|
+
}
|
|
169
239
|
if (candidate.content?.role === 'model') {
|
|
170
240
|
const text = collectTextParts(candidate.content);
|
|
171
|
-
|
|
172
|
-
|
|
241
|
+
return {
|
|
242
|
+
result: text,
|
|
243
|
+
token_usage: token_usage,
|
|
244
|
+
finish_reason: finish_reason,
|
|
245
|
+
};
|
|
173
246
|
}
|
|
174
247
|
}
|
|
175
248
|
}
|
|
176
|
-
|
|
249
|
+
//No normal output, returning block reason if it exists.
|
|
250
|
+
return {
|
|
251
|
+
result: item.promptFeedback?.blockReasonMessage ?? "",
|
|
252
|
+
finish_reason: item.promptFeedback?.blockReason ?? "",
|
|
253
|
+
};
|
|
177
254
|
});
|
|
178
255
|
return stream;
|
|
179
256
|
}
|
|
180
257
|
}
|
|
258
|
+
function getToolDefinitions(tools) {
|
|
259
|
+
return tools ? tools.map(getToolDefinition) : undefined;
|
|
260
|
+
}
|
|
261
|
+
function getToolDefinition(tool) {
|
|
262
|
+
return {
|
|
263
|
+
functionDeclarations: [
|
|
264
|
+
{
|
|
265
|
+
name: tool.name,
|
|
266
|
+
description: tool.description,
|
|
267
|
+
parameters: { ...tool.input_schema, type: "OBJECT" },
|
|
268
|
+
}
|
|
269
|
+
]
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Update the converatation messages
|
|
274
|
+
* @param prompt
|
|
275
|
+
* @param response
|
|
276
|
+
* @returns
|
|
277
|
+
*/
|
|
278
|
+
function updateConversation(conversation, prompt) {
|
|
279
|
+
return (conversation || []).concat(prompt);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
*
|
|
283
|
+
* Gemini supports JSON output in the response. so we test if the response is a valid JSON object. otherwise we treat the response as a string.
|
|
284
|
+
*
|
|
285
|
+
* This is an excerpt from googleapis.github.io/python-genai:
|
|
286
|
+
*
|
|
287
|
+
* The function response in JSON object format.
|
|
288
|
+
* Use “output” key to specify function output and “error” key to specify error details (if any).
|
|
289
|
+
* If “output” and “error” keys are not specified, then whole “response” is treated as function output.
|
|
290
|
+
* @see https://googleapis.github.io/python-genai/genai.html#genai.types.FunctionResponse
|
|
291
|
+
*/
|
|
292
|
+
function formatFunctionResponse(response) {
|
|
293
|
+
response = response.trim();
|
|
294
|
+
if (response.startsWith("{") && response.endsWith("}")) {
|
|
295
|
+
try {
|
|
296
|
+
return JSON.parse(response);
|
|
297
|
+
}
|
|
298
|
+
catch (e) {
|
|
299
|
+
return { output: response };
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
return { output: response };
|
|
304
|
+
}
|
|
305
|
+
}
|
|
181
306
|
//# sourceMappingURL=gemini.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/vertexai/models/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,YAAY,
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../../src/vertexai/models/gemini.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { Modalities, ModelType, PromptRole, readStreamAsBase64 } from "@llumiverse/core";
|
|
2
|
+
const projectId = process.env.GOOGLE_PROJECT_ID;
|
|
3
|
+
const location = 'us-central1';
|
|
4
|
+
import aiplatform from '@google-cloud/aiplatform';
|
|
5
|
+
// Imports the Google Cloud Prediction Service Client library
|
|
6
|
+
const { PredictionServiceClient } = aiplatform.v1;
|
|
7
|
+
// Import the helper module for converting arbitrary protobuf.Value objects
|
|
8
|
+
import { helpers } from '@google-cloud/aiplatform';
|
|
9
|
+
export var ImagenTaskType;
|
|
10
|
+
(function (ImagenTaskType) {
|
|
11
|
+
ImagenTaskType["TEXT_IMAGE"] = "TEXT_IMAGE";
|
|
12
|
+
ImagenTaskType["EDIT_MODE_INPAINT_REMOVAL"] = "EDIT_MODE_INPAINT_REMOVAL";
|
|
13
|
+
ImagenTaskType["EDIT_MODE_INPAINT_INSERTION"] = "EDIT_MODE_INPAINT_INSERTION";
|
|
14
|
+
ImagenTaskType["EDIT_MODE_BGSWAP"] = "EDIT_MODE_BGSWAP";
|
|
15
|
+
ImagenTaskType["EDIT_MODE_OUTPAINT"] = "EDIT_MODE_OUTPAINT";
|
|
16
|
+
ImagenTaskType["CUSTOMIZATION_SUBJECT"] = "CUSTOMIZATION_SUBJECT";
|
|
17
|
+
ImagenTaskType["CUSTOMIZATION_STYLE"] = "CUSTOMIZATION_STYLE";
|
|
18
|
+
ImagenTaskType["CUSTOMIZATION_CONTROLLED"] = "CUSTOMIZATION_CONTROLLED";
|
|
19
|
+
ImagenTaskType["CUSTOMIZATION_INSTRUCT"] = "CUSTOMIZATION_INSTRUCT";
|
|
20
|
+
})(ImagenTaskType || (ImagenTaskType = {}));
|
|
21
|
+
export var ImagenMaskMode;
|
|
22
|
+
(function (ImagenMaskMode) {
|
|
23
|
+
ImagenMaskMode["MASK_MODE_USER_PROVIDED"] = "MASK_MODE_USER_PROVIDED";
|
|
24
|
+
ImagenMaskMode["MASK_MODE_BACKGROUND"] = "MASK_MODE_BACKGROUND";
|
|
25
|
+
ImagenMaskMode["MASK_MODE_FOREGROUND"] = "MASK_MODE_FOREGROUND";
|
|
26
|
+
ImagenMaskMode["MASK_MODE_SEMANTIC"] = "MASK_MODE_SEMANTIC";
|
|
27
|
+
})(ImagenMaskMode || (ImagenMaskMode = {}));
|
|
28
|
+
// Specifies the location of the api endpoint
|
|
29
|
+
const clientOptions = {
|
|
30
|
+
apiEndpoint: `${location}-aiplatform.googleapis.com`,
|
|
31
|
+
};
|
|
32
|
+
// Instantiates a client
|
|
33
|
+
const predictionServiceClient = new PredictionServiceClient(clientOptions);
|
|
34
|
+
function getImagenParameters(taskType, options) {
|
|
35
|
+
const commonParameters = {
|
|
36
|
+
sampleCount: options?.number_of_images,
|
|
37
|
+
seed: options?.seed,
|
|
38
|
+
safetySetting: options?.safety_setting,
|
|
39
|
+
personGeneration: options?.person_generation,
|
|
40
|
+
negativePrompt: taskType ? undefined : "", //Filled in later from the prompt
|
|
41
|
+
//TODO: Add more safety and prompt rejection information
|
|
42
|
+
//includeSafetyAttributes: true,
|
|
43
|
+
//includeRaiReason: true,
|
|
44
|
+
};
|
|
45
|
+
switch (taskType) {
|
|
46
|
+
case ImagenTaskType.EDIT_MODE_INPAINT_REMOVAL:
|
|
47
|
+
return {
|
|
48
|
+
...commonParameters,
|
|
49
|
+
editMode: "EDIT_MODE_INPAINT_REMOVAL",
|
|
50
|
+
editConfig: {
|
|
51
|
+
baseSteps: options?.edit_steps,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
case ImagenTaskType.EDIT_MODE_INPAINT_INSERTION:
|
|
55
|
+
return {
|
|
56
|
+
...commonParameters,
|
|
57
|
+
editMode: "EDIT_MODE_INPAINT_INSERTION",
|
|
58
|
+
editConfig: {
|
|
59
|
+
baseSteps: options?.edit_steps,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
case ImagenTaskType.EDIT_MODE_BGSWAP:
|
|
63
|
+
return {
|
|
64
|
+
...commonParameters,
|
|
65
|
+
editMode: "EDIT_MODE_BGSWAP",
|
|
66
|
+
editConfig: {
|
|
67
|
+
baseSteps: options?.edit_steps,
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
case ImagenTaskType.EDIT_MODE_OUTPAINT:
|
|
71
|
+
return {
|
|
72
|
+
...commonParameters,
|
|
73
|
+
editMode: "EDIT_MODE_OUTPAINT",
|
|
74
|
+
editConfig: {
|
|
75
|
+
baseSteps: options?.edit_steps,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
case ImagenTaskType.TEXT_IMAGE:
|
|
79
|
+
return {
|
|
80
|
+
...commonParameters,
|
|
81
|
+
// You can't use a seed value and watermark at the same time.
|
|
82
|
+
addWatermark: options?.add_watermark,
|
|
83
|
+
aspectRatio: options?.aspect_ratio,
|
|
84
|
+
enhancePrompt: options?.enhance_prompt,
|
|
85
|
+
};
|
|
86
|
+
case ImagenTaskType.CUSTOMIZATION_SUBJECT:
|
|
87
|
+
case ImagenTaskType.CUSTOMIZATION_CONTROLLED:
|
|
88
|
+
case ImagenTaskType.CUSTOMIZATION_INSTRUCT:
|
|
89
|
+
case ImagenTaskType.CUSTOMIZATION_STYLE:
|
|
90
|
+
return {
|
|
91
|
+
...commonParameters,
|
|
92
|
+
};
|
|
93
|
+
default:
|
|
94
|
+
throw new Error("Task type not supported");
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export class ImagenModelDefinition {
|
|
98
|
+
model;
|
|
99
|
+
constructor(modelId) {
|
|
100
|
+
this.model = {
|
|
101
|
+
id: modelId,
|
|
102
|
+
name: modelId,
|
|
103
|
+
provider: 'vertexai',
|
|
104
|
+
type: ModelType.Image,
|
|
105
|
+
can_stream: false,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
async createPrompt(_driver, segments, options) {
|
|
109
|
+
const splits = options.model.split("/");
|
|
110
|
+
const modelName = splits[splits.length - 1];
|
|
111
|
+
options = { ...options, model: modelName };
|
|
112
|
+
const prompt = {
|
|
113
|
+
prompt: "",
|
|
114
|
+
};
|
|
115
|
+
//Collect text prompts, Imagen does not support roles, so everything gets merged together
|
|
116
|
+
// however we still respect our typical pattern. System First, Safety Last.
|
|
117
|
+
const system = [];
|
|
118
|
+
const user = [];
|
|
119
|
+
const safety = [];
|
|
120
|
+
const negative = [];
|
|
121
|
+
const mask_mode = options.model_options?.mask_mode;
|
|
122
|
+
const imagenOptions = options.model_options;
|
|
123
|
+
for (const msg of segments) {
|
|
124
|
+
if (msg.role === PromptRole.safety) {
|
|
125
|
+
safety.push(msg.content);
|
|
126
|
+
}
|
|
127
|
+
else if (msg.role === PromptRole.system) {
|
|
128
|
+
system.push(msg.content);
|
|
129
|
+
}
|
|
130
|
+
else if (msg.role === PromptRole.negative) {
|
|
131
|
+
negative.push(msg.content);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
//Everything else is assumed to be user or user adjacent.
|
|
135
|
+
user.push(msg.content);
|
|
136
|
+
}
|
|
137
|
+
if (msg.files) {
|
|
138
|
+
//Get images from messages
|
|
139
|
+
if (!prompt.referenceImages) {
|
|
140
|
+
prompt.referenceImages = [];
|
|
141
|
+
}
|
|
142
|
+
//Always required, but only used by customisation.
|
|
143
|
+
//Each ref ID refers to a single "reference", i.e. object. To provide multiple images of a single ref,
|
|
144
|
+
//include multiple images in one prompt.
|
|
145
|
+
const refId = prompt.referenceImages.length + 1;
|
|
146
|
+
for (const img of msg.files) {
|
|
147
|
+
if (img.mime_type?.includes("image")) {
|
|
148
|
+
if (msg.role !== PromptRole.mask) {
|
|
149
|
+
//Editing based mode requires a reference image
|
|
150
|
+
if (imagenOptions?.edit_mode?.includes("EDIT_MODE")) {
|
|
151
|
+
prompt.referenceImages.push({
|
|
152
|
+
referenceType: "REFERENCE_TYPE_RAW",
|
|
153
|
+
referenceId: refId,
|
|
154
|
+
referenceImage: {
|
|
155
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
//If mask is auto-generated, add a mask reference
|
|
159
|
+
if (mask_mode !== ImagenMaskMode.MASK_MODE_USER_PROVIDED) {
|
|
160
|
+
prompt.referenceImages.push({
|
|
161
|
+
referenceType: "REFERENCE_TYPE_MASK",
|
|
162
|
+
referenceId: refId,
|
|
163
|
+
maskImageConfig: {
|
|
164
|
+
maskMode: mask_mode,
|
|
165
|
+
dilation: imagenOptions?.mask_dilation,
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else if (options.model_options?.edit_mode === ImagenTaskType.CUSTOMIZATION_SUBJECT) {
|
|
171
|
+
//First image is always the control image
|
|
172
|
+
if (refId == 1) {
|
|
173
|
+
//Customization subject mode requires a control image
|
|
174
|
+
prompt.referenceImages.push({
|
|
175
|
+
referenceType: "REFERENCE_TYPE_CONTROL",
|
|
176
|
+
referenceId: refId,
|
|
177
|
+
referenceImage: {
|
|
178
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
179
|
+
},
|
|
180
|
+
controlImageConfig: {
|
|
181
|
+
controlType: imagenOptions?.controlType === "CONTROL_TYPE_FACE_MESH" ? "CONTROL_TYPE_FACE_MESH" : "CONTROL_TYPE_CANNY",
|
|
182
|
+
enableControlImageComputation: imagenOptions?.controlImageComputation,
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
// Subject images
|
|
188
|
+
prompt.referenceImages.push({
|
|
189
|
+
referenceType: "REFERENCE_TYPE_SUBJECT",
|
|
190
|
+
referenceId: refId,
|
|
191
|
+
referenceImage: {
|
|
192
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
193
|
+
},
|
|
194
|
+
subjectImageConfig: {
|
|
195
|
+
subjectDescription: prompt.subjectDescription ?? msg.content,
|
|
196
|
+
subjectType: imagenOptions?.subjectType ?? "SUBJECT_TYPE_DEFAULT",
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else if (options.model_options?.edit_mode === ImagenTaskType.CUSTOMIZATION_STYLE) {
|
|
202
|
+
// Style images
|
|
203
|
+
prompt.referenceImages.push({
|
|
204
|
+
referenceType: "REFERENCE_TYPE_STYLE",
|
|
205
|
+
referenceId: refId,
|
|
206
|
+
referenceImage: {
|
|
207
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
208
|
+
},
|
|
209
|
+
styleImageConfig: {
|
|
210
|
+
styleDescription: prompt.subjectDescription ?? msg.content,
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
else if (options.model_options?.edit_mode === ImagenTaskType.CUSTOMIZATION_CONTROLLED) {
|
|
215
|
+
// Control images
|
|
216
|
+
prompt.referenceImages.push({
|
|
217
|
+
referenceType: "REFERENCE_TYPE_CONTROL",
|
|
218
|
+
referenceId: refId,
|
|
219
|
+
referenceImage: {
|
|
220
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
221
|
+
},
|
|
222
|
+
controlImageConfig: {
|
|
223
|
+
controlType: imagenOptions?.controlType === "CONTROL_TYPE_FACE_MESH" ? "CONTROL_TYPE_FACE_MESH" : "CONTROL_TYPE_CANNY",
|
|
224
|
+
enableControlImageComputation: imagenOptions?.controlImageComputation,
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else if (options.model_options?.edit_mode === ImagenTaskType.CUSTOMIZATION_INSTRUCT) {
|
|
229
|
+
// Control images
|
|
230
|
+
prompt.referenceImages.push({
|
|
231
|
+
referenceType: "REFERENCE_TYPE_RAW",
|
|
232
|
+
referenceId: refId,
|
|
233
|
+
referenceImage: {
|
|
234
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//If mask is user-provided, add a mask reference
|
|
240
|
+
if (msg.role === PromptRole.mask && mask_mode === ImagenMaskMode.MASK_MODE_USER_PROVIDED) {
|
|
241
|
+
prompt.referenceImages.push({
|
|
242
|
+
referenceType: "REFERENCE_TYPE_MASK",
|
|
243
|
+
referenceId: refId,
|
|
244
|
+
referenceImage: {
|
|
245
|
+
bytesBase64Encoded: await readStreamAsBase64(await img.getStream()),
|
|
246
|
+
},
|
|
247
|
+
maskImageConfig: {
|
|
248
|
+
maskMode: mask_mode,
|
|
249
|
+
dilation: imagenOptions?.mask_dilation,
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//Extract the text from the segments
|
|
258
|
+
prompt.prompt += [system.join("\n\n"), user.join("\n\n"), safety.join("\n\n")].join("\n\n");
|
|
259
|
+
//Negative prompt
|
|
260
|
+
if (negative.length > 0) {
|
|
261
|
+
prompt.negativePrompt = negative.join(", ");
|
|
262
|
+
}
|
|
263
|
+
console.log(prompt);
|
|
264
|
+
return prompt;
|
|
265
|
+
}
|
|
266
|
+
async requestImageGeneration(driver, prompt, options) {
|
|
267
|
+
if (options.model_options?._option_id !== "vertexai-imagen") {
|
|
268
|
+
driver.logger.warn("Invalid model options", { options: options.model_options });
|
|
269
|
+
}
|
|
270
|
+
options.model_options = options.model_options;
|
|
271
|
+
if (options.output_modality !== Modalities.image) {
|
|
272
|
+
throw new Error(`Image generation requires image output_modality`);
|
|
273
|
+
}
|
|
274
|
+
const taskType = options.model_options.edit_mode ?? ImagenTaskType.TEXT_IMAGE;
|
|
275
|
+
driver.logger.info("Task type: " + taskType);
|
|
276
|
+
const modelName = options.model.split("/").pop() ?? '';
|
|
277
|
+
// Configure the parent resource
|
|
278
|
+
const endpoint = `projects/${projectId}/locations/${location}/publishers/google/models/${modelName}`;
|
|
279
|
+
const instanceValue = helpers.toValue(prompt);
|
|
280
|
+
if (!instanceValue) {
|
|
281
|
+
throw new Error('No instance value found');
|
|
282
|
+
}
|
|
283
|
+
const instances = [instanceValue];
|
|
284
|
+
let parameter = getImagenParameters(taskType, options.model_options);
|
|
285
|
+
parameter.negativePrompt = prompt.negativePrompt ?? undefined;
|
|
286
|
+
const numberOfImages = options.model_options?.number_of_images ?? 1;
|
|
287
|
+
// Remove all undefined values
|
|
288
|
+
parameter = Object.fromEntries(Object.entries(parameter).filter(([_, v]) => v !== undefined));
|
|
289
|
+
const parameters = helpers.toValue(parameter);
|
|
290
|
+
const request = {
|
|
291
|
+
endpoint,
|
|
292
|
+
instances,
|
|
293
|
+
parameters,
|
|
294
|
+
};
|
|
295
|
+
// Predict request
|
|
296
|
+
const [response] = await predictionServiceClient.predict(request, { timeout: 120000 * numberOfImages }); //Extended timeout for image generation
|
|
297
|
+
const predictions = response.predictions;
|
|
298
|
+
if (!predictions) {
|
|
299
|
+
throw new Error('No predictions found');
|
|
300
|
+
}
|
|
301
|
+
// Extract base64 encoded images from predictions
|
|
302
|
+
const images = predictions.map(prediction => prediction.structValue?.fields?.bytesBase64Encoded?.stringValue ?? '');
|
|
303
|
+
return {
|
|
304
|
+
result: {
|
|
305
|
+
images
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=imagen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"imagen.js","sourceRoot":"","sources":["../../../../src/vertexai/models/imagen.ts"],"names":[],"mappings":"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"}
|