@llumiverse/drivers 1.0.0-dev.20260202.145450Z → 1.0.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/adobe/firefly.js +120 -0
- package/lib/cjs/adobe/firefly.js.map +1 -0
- package/lib/cjs/azure/azure_foundry.js +432 -0
- package/lib/cjs/azure/azure_foundry.js.map +1 -0
- package/lib/cjs/bedrock/converse.js +359 -0
- package/lib/cjs/bedrock/converse.js.map +1 -0
- package/lib/cjs/bedrock/index.js +1441 -0
- package/lib/cjs/bedrock/index.js.map +1 -0
- package/lib/cjs/bedrock/nova-image-payload.js +207 -0
- package/lib/cjs/bedrock/nova-image-payload.js.map +1 -0
- package/lib/cjs/bedrock/payloads.js +3 -0
- package/lib/cjs/bedrock/payloads.js.map +1 -0
- package/lib/cjs/bedrock/s3.js +107 -0
- package/lib/cjs/bedrock/s3.js.map +1 -0
- package/lib/cjs/bedrock/twelvelabs.js +87 -0
- package/lib/cjs/bedrock/twelvelabs.js.map +1 -0
- package/lib/cjs/groq/index.js +326 -0
- package/lib/cjs/groq/index.js.map +1 -0
- package/lib/cjs/huggingface_ie.js +201 -0
- package/lib/cjs/huggingface_ie.js.map +1 -0
- package/lib/cjs/index.js +31 -0
- package/lib/cjs/index.js.map +1 -0
- package/lib/cjs/mistral/index.js +176 -0
- package/lib/cjs/mistral/index.js.map +1 -0
- package/lib/cjs/mistral/types.js +83 -0
- package/lib/cjs/mistral/types.js.map +1 -0
- package/lib/cjs/openai/azure_openai.js +72 -0
- package/lib/cjs/openai/azure_openai.js.map +1 -0
- package/lib/cjs/openai/index.js +1100 -0
- package/lib/cjs/openai/index.js.map +1 -0
- package/lib/cjs/openai/openai.js +21 -0
- package/lib/cjs/openai/openai.js.map +1 -0
- package/lib/cjs/openai/openai_compatible.js +63 -0
- package/lib/cjs/openai/openai_compatible.js.map +1 -0
- package/lib/cjs/openai/openai_format.js +131 -0
- package/lib/cjs/openai/openai_format.js.map +1 -0
- package/lib/cjs/package.json +3 -0
- package/lib/cjs/replicate.js +275 -0
- package/lib/cjs/replicate.js.map +1 -0
- package/lib/cjs/test-driver/TestErrorCompletionStream.js +20 -0
- package/lib/cjs/test-driver/TestErrorCompletionStream.js.map +1 -0
- package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js +24 -0
- package/lib/cjs/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
- package/lib/cjs/test-driver/index.js +109 -0
- package/lib/cjs/test-driver/index.js.map +1 -0
- package/lib/cjs/test-driver/utils.js +30 -0
- package/lib/cjs/test-driver/utils.js.map +1 -0
- package/lib/cjs/togetherai/index.js +126 -0
- package/lib/cjs/togetherai/index.js.map +1 -0
- package/lib/cjs/togetherai/interfaces.js +3 -0
- package/lib/cjs/togetherai/interfaces.js.map +1 -0
- package/lib/cjs/vertexai/debug.js +12 -0
- package/lib/cjs/vertexai/debug.js.map +1 -0
- package/lib/cjs/vertexai/embeddings/embeddings-image.js +27 -0
- package/lib/cjs/vertexai/embeddings/embeddings-image.js.map +1 -0
- package/lib/cjs/vertexai/embeddings/embeddings-text.js +23 -0
- package/lib/cjs/vertexai/embeddings/embeddings-text.js.map +1 -0
- package/lib/cjs/vertexai/index.js +635 -0
- package/lib/cjs/vertexai/index.js.map +1 -0
- package/lib/cjs/vertexai/models/claude.js +842 -0
- package/lib/cjs/vertexai/models/claude.js.map +1 -0
- package/lib/cjs/vertexai/models/gemini.js +1110 -0
- package/lib/cjs/vertexai/models/gemini.js.map +1 -0
- package/lib/cjs/vertexai/models/imagen.js +303 -0
- package/lib/cjs/vertexai/models/imagen.js.map +1 -0
- package/lib/cjs/vertexai/models/llama.js +183 -0
- package/lib/cjs/vertexai/models/llama.js.map +1 -0
- package/lib/cjs/vertexai/models.js +35 -0
- package/lib/cjs/vertexai/models.js.map +1 -0
- package/lib/cjs/watsonx/index.js +161 -0
- package/lib/cjs/watsonx/index.js.map +1 -0
- package/lib/cjs/watsonx/interfaces.js +3 -0
- package/lib/cjs/watsonx/interfaces.js.map +1 -0
- package/lib/cjs/xai/index.js +65 -0
- package/lib/cjs/xai/index.js.map +1 -0
- package/lib/esm/adobe/firefly.js +116 -0
- package/lib/esm/adobe/firefly.js.map +1 -0
- package/lib/esm/azure/azure_foundry.js +426 -0
- package/lib/esm/azure/azure_foundry.js.map +1 -0
- package/lib/esm/bedrock/converse.js +352 -0
- package/lib/esm/bedrock/converse.js.map +1 -0
- package/lib/esm/bedrock/index.js +1434 -0
- package/lib/esm/bedrock/index.js.map +1 -0
- package/lib/esm/bedrock/nova-image-payload.js +203 -0
- package/lib/esm/bedrock/nova-image-payload.js.map +1 -0
- package/lib/esm/bedrock/payloads.js +2 -0
- package/lib/esm/bedrock/payloads.js.map +1 -0
- package/lib/esm/bedrock/s3.js +99 -0
- package/lib/esm/bedrock/s3.js.map +1 -0
- package/lib/esm/bedrock/twelvelabs.js +84 -0
- package/lib/esm/bedrock/twelvelabs.js.map +1 -0
- package/lib/esm/groq/index.js +319 -0
- package/lib/esm/groq/index.js.map +1 -0
- package/lib/esm/huggingface_ie.js +197 -0
- package/lib/esm/huggingface_ie.js.map +1 -0
- package/lib/esm/index.js +15 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/mistral/index.js +172 -0
- package/lib/esm/mistral/index.js.map +1 -0
- package/lib/esm/mistral/types.js +80 -0
- package/lib/esm/mistral/types.js.map +1 -0
- package/lib/esm/openai/azure_openai.js +68 -0
- package/lib/esm/openai/azure_openai.js.map +1 -0
- package/lib/esm/openai/index.js +1093 -0
- package/lib/esm/openai/index.js.map +1 -0
- package/lib/esm/openai/openai.js +14 -0
- package/lib/esm/openai/openai.js.map +1 -0
- package/lib/esm/openai/openai_compatible.js +56 -0
- package/lib/esm/openai/openai_compatible.js.map +1 -0
- package/lib/esm/openai/openai_format.js +127 -0
- package/lib/esm/openai/openai_format.js.map +1 -0
- package/lib/esm/replicate.js +268 -0
- package/lib/esm/replicate.js.map +1 -0
- package/lib/esm/test-driver/TestErrorCompletionStream.js +16 -0
- package/lib/esm/test-driver/TestErrorCompletionStream.js.map +1 -0
- package/lib/esm/test-driver/TestValidationErrorCompletionStream.js +20 -0
- package/lib/esm/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
- package/lib/esm/test-driver/index.js +91 -0
- package/lib/esm/test-driver/index.js.map +1 -0
- package/lib/esm/test-driver/utils.js +25 -0
- package/lib/esm/test-driver/utils.js.map +1 -0
- package/lib/esm/togetherai/index.js +122 -0
- package/lib/esm/togetherai/index.js.map +1 -0
- package/lib/esm/togetherai/interfaces.js +2 -0
- package/lib/esm/togetherai/interfaces.js.map +1 -0
- package/lib/esm/vertexai/debug.js +6 -0
- package/lib/esm/vertexai/debug.js.map +1 -0
- package/lib/esm/vertexai/embeddings/embeddings-image.js +24 -0
- package/lib/esm/vertexai/embeddings/embeddings-image.js.map +1 -0
- package/lib/esm/vertexai/embeddings/embeddings-text.js +20 -0
- package/lib/esm/vertexai/embeddings/embeddings-text.js.map +1 -0
- package/lib/esm/vertexai/index.js +630 -0
- package/lib/esm/vertexai/index.js.map +1 -0
- package/lib/esm/vertexai/models/claude.js +833 -0
- package/lib/esm/vertexai/models/claude.js.map +1 -0
- package/lib/esm/vertexai/models/gemini.js +1104 -0
- package/lib/esm/vertexai/models/gemini.js.map +1 -0
- package/lib/esm/vertexai/models/imagen.js +299 -0
- package/lib/esm/vertexai/models/imagen.js.map +1 -0
- package/lib/esm/vertexai/models/llama.js +179 -0
- package/lib/esm/vertexai/models/llama.js.map +1 -0
- package/lib/esm/vertexai/models.js +32 -0
- package/lib/esm/vertexai/models.js.map +1 -0
- package/lib/esm/watsonx/index.js +157 -0
- package/lib/esm/watsonx/index.js.map +1 -0
- package/lib/esm/watsonx/interfaces.js +2 -0
- package/lib/esm/watsonx/interfaces.js.map +1 -0
- package/lib/esm/xai/index.js +58 -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/azure/azure_foundry.d.ts +52 -0
- package/lib/types/azure/azure_foundry.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 +135 -0
- package/lib/types/bedrock/index.d.ts.map +1 -0
- 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 +12 -0
- package/lib/types/bedrock/payloads.d.ts.map +1 -0
- package/lib/types/bedrock/s3.d.ts +23 -0
- package/lib/types/bedrock/s3.d.ts.map +1 -0
- package/lib/types/bedrock/twelvelabs.d.ts +50 -0
- package/lib/types/bedrock/twelvelabs.d.ts.map +1 -0
- package/lib/types/groq/index.d.ts +27 -0
- package/lib/types/groq/index.d.ts.map +1 -0
- package/lib/types/huggingface_ie.d.ts +35 -0
- package/lib/types/huggingface_ie.d.ts.map +1 -0
- package/lib/types/index.d.ts +15 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/mistral/index.d.ts +25 -0
- package/lib/types/mistral/index.d.ts.map +1 -0
- package/lib/types/mistral/types.d.ts +127 -0
- package/lib/types/mistral/types.d.ts.map +1 -0
- package/lib/types/openai/azure_openai.d.ts +25 -0
- package/lib/types/openai/azure_openai.d.ts.map +1 -0
- package/lib/types/openai/index.d.ts +126 -0
- package/lib/types/openai/index.d.ts.map +1 -0
- package/lib/types/openai/openai.d.ts +15 -0
- package/lib/types/openai/openai.d.ts.map +1 -0
- package/lib/types/openai/openai_compatible.d.ts +31 -0
- package/lib/types/openai/openai_compatible.d.ts.map +1 -0
- package/lib/types/openai/openai_format.d.ts +21 -0
- package/lib/types/openai/openai_format.d.ts.map +1 -0
- package/lib/types/replicate.d.ts +48 -0
- package/lib/types/replicate.d.ts.map +1 -0
- package/lib/types/test-driver/TestErrorCompletionStream.d.ts +9 -0
- package/lib/types/test-driver/TestErrorCompletionStream.d.ts.map +1 -0
- package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts +9 -0
- package/lib/types/test-driver/TestValidationErrorCompletionStream.d.ts.map +1 -0
- package/lib/types/test-driver/index.d.ts +24 -0
- package/lib/types/test-driver/index.d.ts.map +1 -0
- package/lib/types/test-driver/utils.d.ts +5 -0
- package/lib/types/test-driver/utils.d.ts.map +1 -0
- package/lib/types/togetherai/index.d.ts +23 -0
- package/lib/types/togetherai/index.d.ts.map +1 -0
- package/lib/types/togetherai/interfaces.d.ts +96 -0
- package/lib/types/togetherai/interfaces.d.ts.map +1 -0
- package/lib/types/vertexai/debug.d.ts +2 -0
- package/lib/types/vertexai/debug.d.ts.map +1 -0
- 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/embeddings/embeddings-text.d.ts +10 -0
- package/lib/types/vertexai/embeddings/embeddings-text.d.ts.map +1 -0
- package/lib/types/vertexai/index.d.ts +79 -0
- package/lib/types/vertexai/index.d.ts.map +1 -0
- package/lib/types/vertexai/models/claude.d.ts +103 -0
- package/lib/types/vertexai/models/claude.d.ts.map +1 -0
- package/lib/types/vertexai/models/gemini.d.ts +78 -0
- package/lib/types/vertexai/models/gemini.d.ts.map +1 -0
- 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/llama.d.ts +20 -0
- package/lib/types/vertexai/models/llama.d.ts.map +1 -0
- package/lib/types/vertexai/models.d.ts +20 -0
- package/lib/types/vertexai/models.d.ts.map +1 -0
- package/lib/types/watsonx/index.d.ts +27 -0
- package/lib/types/watsonx/index.d.ts.map +1 -0
- package/lib/types/watsonx/interfaces.d.ts +65 -0
- package/lib/types/watsonx/interfaces.d.ts.map +1 -0
- package/lib/types/xai/index.d.ts +18 -0
- package/lib/types/xai/index.d.ts.map +1 -0
- package/package.json +18 -18
- package/src/bedrock/converse.ts +85 -10
- package/src/bedrock/error-handling.test.ts +352 -0
- package/src/bedrock/index.ts +293 -16
- package/src/groq/index.ts +9 -4
- package/src/mistral/index.ts +25 -22
- package/src/mistral/types.ts +0 -5
- package/src/openai/error-handling.test.ts +567 -0
- package/src/openai/index.ts +513 -33
- package/src/openai/openai_compatible.ts +7 -0
- package/src/openai/openai_format.ts +1 -1
- package/src/vertexai/index.ts +61 -13
- package/src/vertexai/models/claude-error-handling.test.ts +432 -0
- package/src/vertexai/models/claude.ts +287 -10
- package/src/vertexai/models/gemini-error-handling.test.ts +353 -0
- package/src/vertexai/models/gemini.ts +329 -52
- package/src/vertexai/models.ts +7 -2
|
@@ -0,0 +1,635 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VertexAIDriver = void 0;
|
|
4
|
+
exports.trimModelName = trimModelName;
|
|
5
|
+
const vertex_sdk_1 = require("@anthropic-ai/vertex-sdk");
|
|
6
|
+
const aiplatform_1 = require("@google-cloud/aiplatform");
|
|
7
|
+
const genai_1 = require("@google/genai");
|
|
8
|
+
const core_1 = require("@llumiverse/core");
|
|
9
|
+
const api_fetch_client_1 = require("@vertesia/api-fetch-client");
|
|
10
|
+
const google_auth_library_1 = require("google-auth-library");
|
|
11
|
+
const embeddings_image_js_1 = require("./embeddings/embeddings-image.js");
|
|
12
|
+
const embeddings_text_js_1 = require("./embeddings/embeddings-text.js");
|
|
13
|
+
const models_js_1 = require("./models.js");
|
|
14
|
+
const claude_js_1 = require("./models/claude.js");
|
|
15
|
+
const imagen_js_1 = require("./models/imagen.js");
|
|
16
|
+
function trimModelName(model) {
|
|
17
|
+
const i = model.lastIndexOf("@");
|
|
18
|
+
return i > -1 ? model.substring(0, i) : model;
|
|
19
|
+
}
|
|
20
|
+
class VertexAIDriver extends core_1.AbstractDriver {
|
|
21
|
+
static PROVIDER = "vertexai";
|
|
22
|
+
provider = VertexAIDriver.PROVIDER;
|
|
23
|
+
aiplatform;
|
|
24
|
+
anthropicClient;
|
|
25
|
+
fetchClient;
|
|
26
|
+
googleGenAI;
|
|
27
|
+
llamaClient;
|
|
28
|
+
modelGarden;
|
|
29
|
+
imagenClient;
|
|
30
|
+
googleAuth;
|
|
31
|
+
authClientPromise;
|
|
32
|
+
constructor(options) {
|
|
33
|
+
super(options);
|
|
34
|
+
this.aiplatform = undefined;
|
|
35
|
+
this.anthropicClient = undefined;
|
|
36
|
+
this.fetchClient = undefined;
|
|
37
|
+
this.googleGenAI = undefined;
|
|
38
|
+
this.modelGarden = undefined;
|
|
39
|
+
this.llamaClient = undefined;
|
|
40
|
+
this.imagenClient = undefined;
|
|
41
|
+
this.googleAuth = new google_auth_library_1.GoogleAuth(options.googleAuthOptions);
|
|
42
|
+
this.authClientPromise = undefined;
|
|
43
|
+
}
|
|
44
|
+
async getAuthClient() {
|
|
45
|
+
if (!this.authClientPromise) {
|
|
46
|
+
this.authClientPromise = this.googleAuth.getClient();
|
|
47
|
+
}
|
|
48
|
+
return this.authClientPromise;
|
|
49
|
+
}
|
|
50
|
+
getGoogleGenAIClient(region = this.options.region) {
|
|
51
|
+
//Lazy initialization
|
|
52
|
+
if (region !== this.options.region) {
|
|
53
|
+
//Get one off client for different region
|
|
54
|
+
return new genai_1.GoogleGenAI({
|
|
55
|
+
project: this.options.project,
|
|
56
|
+
location: region,
|
|
57
|
+
vertexai: true,
|
|
58
|
+
googleAuthOptions: this.options.googleAuthOptions || {
|
|
59
|
+
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (!this.googleGenAI) {
|
|
64
|
+
this.googleGenAI = new genai_1.GoogleGenAI({
|
|
65
|
+
project: this.options.project,
|
|
66
|
+
location: region,
|
|
67
|
+
vertexai: true,
|
|
68
|
+
googleAuthOptions: this.options.googleAuthOptions || {
|
|
69
|
+
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return this.googleGenAI;
|
|
74
|
+
}
|
|
75
|
+
getFetchClient() {
|
|
76
|
+
//Lazy initialization
|
|
77
|
+
if (!this.fetchClient) {
|
|
78
|
+
this.fetchClient = createFetchClient({
|
|
79
|
+
region: this.options.region,
|
|
80
|
+
project: this.options.project,
|
|
81
|
+
}).withAuthCallback(async () => {
|
|
82
|
+
const token = await this.googleAuth.getAccessToken();
|
|
83
|
+
return `Bearer ${token}`;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return this.fetchClient;
|
|
87
|
+
}
|
|
88
|
+
getLLamaClient(region = "us-central1") {
|
|
89
|
+
//Lazy initialization
|
|
90
|
+
if (!this.llamaClient || this.llamaClient["region"] !== region) {
|
|
91
|
+
this.llamaClient = createFetchClient({
|
|
92
|
+
region: region,
|
|
93
|
+
project: this.options.project,
|
|
94
|
+
apiVersion: "v1beta1",
|
|
95
|
+
}).withAuthCallback(async () => {
|
|
96
|
+
const token = await this.googleAuth.getAccessToken();
|
|
97
|
+
return `Bearer ${token}`;
|
|
98
|
+
});
|
|
99
|
+
// Store the region for potential client reuse
|
|
100
|
+
this.llamaClient["region"] = region;
|
|
101
|
+
}
|
|
102
|
+
return this.llamaClient;
|
|
103
|
+
}
|
|
104
|
+
async getAnthropicClient(region = this.options.region) {
|
|
105
|
+
// Extract region prefix and map if it exists in ANTHROPIC_REGIONS, otherwise use as-is
|
|
106
|
+
const getRegionPrefix = (r) => r.split('-')[0];
|
|
107
|
+
const regionPrefix = getRegionPrefix(region);
|
|
108
|
+
const mappedRegion = claude_js_1.ANTHROPIC_REGIONS[regionPrefix] || region;
|
|
109
|
+
const defaultRegionPrefix = getRegionPrefix(this.options.region);
|
|
110
|
+
const defaultMappedRegion = claude_js_1.ANTHROPIC_REGIONS[defaultRegionPrefix] || this.options.region;
|
|
111
|
+
// Get auth client to avoid version mismatch with GoogleAuth generic types
|
|
112
|
+
const authClient = await this.getAuthClient();
|
|
113
|
+
// If mapped region is different from default mapped region, create one-off client
|
|
114
|
+
if (mappedRegion !== defaultMappedRegion) {
|
|
115
|
+
return new vertex_sdk_1.AnthropicVertex({
|
|
116
|
+
timeout: 20 * 60 * 10000, // Set to 20 minutes, 10 minute default, setting this disables long request error: https://github.com/anthropics/anthropic-sdk-typescript?#long-requests
|
|
117
|
+
region: mappedRegion,
|
|
118
|
+
projectId: this.options.project,
|
|
119
|
+
authClient: authClient,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//Lazy initialization for default region
|
|
123
|
+
if (!this.anthropicClient) {
|
|
124
|
+
this.anthropicClient = new vertex_sdk_1.AnthropicVertex({
|
|
125
|
+
timeout: 20 * 60 * 10000, // Set to 20 minutes, 10 minute default, setting this disables long request error: https://github.com/anthropics/anthropic-sdk-typescript?#long-requests
|
|
126
|
+
region: mappedRegion,
|
|
127
|
+
projectId: this.options.project,
|
|
128
|
+
authClient: authClient,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return this.anthropicClient;
|
|
132
|
+
}
|
|
133
|
+
async getAIPlatformClient() {
|
|
134
|
+
//Lazy initialization
|
|
135
|
+
if (!this.aiplatform) {
|
|
136
|
+
const authClient = await this.getAuthClient();
|
|
137
|
+
this.aiplatform = new aiplatform_1.v1beta1.ModelServiceClient({
|
|
138
|
+
projectId: this.options.project,
|
|
139
|
+
apiEndpoint: `${this.options.region}-${API_BASE_PATH}`,
|
|
140
|
+
authClient,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
return this.aiplatform;
|
|
144
|
+
}
|
|
145
|
+
async getModelGardenClient() {
|
|
146
|
+
//Lazy initialization
|
|
147
|
+
if (!this.modelGarden) {
|
|
148
|
+
const authClient = await this.getAuthClient();
|
|
149
|
+
this.modelGarden = new aiplatform_1.v1beta1.ModelGardenServiceClient({
|
|
150
|
+
projectId: this.options.project,
|
|
151
|
+
apiEndpoint: `${this.options.region}-${API_BASE_PATH}`,
|
|
152
|
+
authClient,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
return this.modelGarden;
|
|
156
|
+
}
|
|
157
|
+
async getImagenClient() {
|
|
158
|
+
//Lazy initialization
|
|
159
|
+
if (!this.imagenClient) {
|
|
160
|
+
// TODO: make location configurable, fixed to us-central1 for now
|
|
161
|
+
const authClient = await this.getAuthClient();
|
|
162
|
+
this.imagenClient = new aiplatform_1.PredictionServiceClient({
|
|
163
|
+
projectId: this.options.project,
|
|
164
|
+
apiEndpoint: `us-central1-${API_BASE_PATH}`,
|
|
165
|
+
authClient,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return this.imagenClient;
|
|
169
|
+
}
|
|
170
|
+
validateResult(result, options) {
|
|
171
|
+
// Optionally preprocess the result before validation
|
|
172
|
+
const modelDef = (0, models_js_1.getModelDefinition)(options.model);
|
|
173
|
+
if (typeof modelDef.preValidationProcessing === "function") {
|
|
174
|
+
const processed = modelDef.preValidationProcessing(result, options);
|
|
175
|
+
result = processed.result;
|
|
176
|
+
options = processed.options;
|
|
177
|
+
}
|
|
178
|
+
super.validateResult(result, options);
|
|
179
|
+
}
|
|
180
|
+
canStream(options) {
|
|
181
|
+
if (this.isImageModel(options.model)) {
|
|
182
|
+
return Promise.resolve(false);
|
|
183
|
+
}
|
|
184
|
+
return Promise.resolve((0, models_js_1.getModelDefinition)(options.model).model.can_stream === true);
|
|
185
|
+
}
|
|
186
|
+
isImageModel(model) {
|
|
187
|
+
return model.includes("imagen");
|
|
188
|
+
}
|
|
189
|
+
createPrompt(segments, options) {
|
|
190
|
+
if (this.isImageModel(options.model)) {
|
|
191
|
+
return new imagen_js_1.ImagenModelDefinition(options.model).createPrompt(this, segments, options);
|
|
192
|
+
}
|
|
193
|
+
return (0, models_js_1.getModelDefinition)(options.model).createPrompt(this, segments, options);
|
|
194
|
+
}
|
|
195
|
+
async requestTextCompletion(prompt, options) {
|
|
196
|
+
return (0, models_js_1.getModelDefinition)(options.model).requestTextCompletion(this, prompt, options);
|
|
197
|
+
}
|
|
198
|
+
async requestTextCompletionStream(prompt, options) {
|
|
199
|
+
return (0, models_js_1.getModelDefinition)(options.model).requestTextCompletionStream(this, prompt, options);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Build conversation context after streaming completion.
|
|
203
|
+
* Reconstructs the assistant message from accumulated results and applies stripping.
|
|
204
|
+
* Handles both Gemini (Content[]) and Claude (ClaudePrompt) formats.
|
|
205
|
+
*/
|
|
206
|
+
buildStreamingConversation(prompt, result, toolUse, options) {
|
|
207
|
+
// Handle Claude-style prompts (has 'messages' array)
|
|
208
|
+
if ('messages' in prompt && Array.isArray(prompt.messages)) {
|
|
209
|
+
return this.buildClaudeStreamingConversation(prompt, result, toolUse, options);
|
|
210
|
+
}
|
|
211
|
+
// Only handle Gemini-style prompts with contents array
|
|
212
|
+
if (!('contents' in prompt) || !Array.isArray(prompt.contents)) {
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
const completionResults = result;
|
|
216
|
+
// Convert accumulated results to text content for assistant message
|
|
217
|
+
const textContent = completionResults
|
|
218
|
+
.map(r => {
|
|
219
|
+
switch (r.type) {
|
|
220
|
+
case 'text':
|
|
221
|
+
return r.value;
|
|
222
|
+
case 'json':
|
|
223
|
+
return typeof r.value === 'string' ? r.value : JSON.stringify(r.value);
|
|
224
|
+
case 'image':
|
|
225
|
+
// Skip images in conversation - they're in the result
|
|
226
|
+
return '';
|
|
227
|
+
default:
|
|
228
|
+
return String(r.value || '');
|
|
229
|
+
}
|
|
230
|
+
})
|
|
231
|
+
.join('');
|
|
232
|
+
// Build parts array for assistant message
|
|
233
|
+
const parts = [];
|
|
234
|
+
if (textContent) {
|
|
235
|
+
parts.push({ text: textContent });
|
|
236
|
+
}
|
|
237
|
+
// Add function calls if present (Gemini format)
|
|
238
|
+
if (toolUse && toolUse.length > 0) {
|
|
239
|
+
for (const tool of toolUse) {
|
|
240
|
+
const functionCallPart = {
|
|
241
|
+
functionCall: {
|
|
242
|
+
name: tool.tool_name,
|
|
243
|
+
args: tool.tool_input,
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
// Include thought_signature for Gemini thinking models (2.5+/3.0+)
|
|
247
|
+
// This must be preserved in the conversation for subsequent API calls
|
|
248
|
+
if (tool.thought_signature) {
|
|
249
|
+
functionCallPart.thoughtSignature = tool.thought_signature;
|
|
250
|
+
}
|
|
251
|
+
parts.push(functionCallPart);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
// prompt.contents already includes the conversation history
|
|
255
|
+
// (merged in requestTextCompletionStream via updateConversation),
|
|
256
|
+
// so we use it directly — do NOT prepend options.conversation again.
|
|
257
|
+
let conversation = [
|
|
258
|
+
...prompt.contents,
|
|
259
|
+
];
|
|
260
|
+
// Only add assistant message if there's actual content
|
|
261
|
+
// (Empty text parts can cause API errors)
|
|
262
|
+
if (parts.length > 0) {
|
|
263
|
+
conversation.push({
|
|
264
|
+
role: 'model',
|
|
265
|
+
parts: parts
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
// Increment turn counter
|
|
269
|
+
conversation = (0, core_1.incrementConversationTurn)(conversation);
|
|
270
|
+
// Apply stripping based on options
|
|
271
|
+
const currentTurn = (0, core_1.getConversationMeta)(conversation).turnNumber;
|
|
272
|
+
const stripOptions = {
|
|
273
|
+
keepForTurns: options.stripImagesAfterTurns ?? Infinity,
|
|
274
|
+
currentTurn,
|
|
275
|
+
textMaxTokens: options.stripTextMaxTokens
|
|
276
|
+
};
|
|
277
|
+
let processedConversation = (0, core_1.stripBase64ImagesFromConversation)(conversation, stripOptions);
|
|
278
|
+
processedConversation = (0, core_1.truncateLargeTextInConversation)(processedConversation, stripOptions);
|
|
279
|
+
processedConversation = (0, core_1.stripHeartbeatsFromConversation)(processedConversation, {
|
|
280
|
+
keepForTurns: options.stripHeartbeatsAfterTurns ?? 1,
|
|
281
|
+
currentTurn,
|
|
282
|
+
});
|
|
283
|
+
// Preserve system instruction in conversation for Gemini multi-turn support.
|
|
284
|
+
// The Gemini API takes system as a separate parameter (not in contents),
|
|
285
|
+
// so we must store it in the conversation wrapper to survive serialization.
|
|
286
|
+
const geminiPrompt = prompt;
|
|
287
|
+
if (geminiPrompt.system) {
|
|
288
|
+
if (typeof processedConversation === 'object' && processedConversation !== null) {
|
|
289
|
+
processedConversation = { ...processedConversation, _llumiverse_system: geminiPrompt.system };
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return processedConversation;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Build conversation for Claude streaming.
|
|
296
|
+
* Creates assistant message with tool_use blocks in Claude's ContentBlock format.
|
|
297
|
+
*/
|
|
298
|
+
buildClaudeStreamingConversation(prompt, result, toolUse, options) {
|
|
299
|
+
const completionResults = result;
|
|
300
|
+
// Convert accumulated results to text content
|
|
301
|
+
const textContent = completionResults
|
|
302
|
+
.map(r => {
|
|
303
|
+
switch (r.type) {
|
|
304
|
+
case 'text':
|
|
305
|
+
return r.value;
|
|
306
|
+
case 'json':
|
|
307
|
+
return typeof r.value === 'string' ? r.value : JSON.stringify(r.value);
|
|
308
|
+
case 'image':
|
|
309
|
+
return '';
|
|
310
|
+
default:
|
|
311
|
+
return String(r.value || '');
|
|
312
|
+
}
|
|
313
|
+
})
|
|
314
|
+
.join('');
|
|
315
|
+
// Build Claude-style ContentBlock array for assistant message
|
|
316
|
+
const content = [];
|
|
317
|
+
// Add text block if there's text content
|
|
318
|
+
if (textContent) {
|
|
319
|
+
content.push({
|
|
320
|
+
type: 'text',
|
|
321
|
+
text: textContent
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
// Add tool_use blocks in Claude format
|
|
325
|
+
if (toolUse && toolUse.length > 0) {
|
|
326
|
+
for (const tool of toolUse) {
|
|
327
|
+
content.push({
|
|
328
|
+
type: 'tool_use',
|
|
329
|
+
id: tool.id,
|
|
330
|
+
name: tool.tool_name,
|
|
331
|
+
input: tool.tool_input ?? {}
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Claude's requestTextCompletionStream does NOT mutate prompt.messages
|
|
336
|
+
// to include history, so we must prepend options.conversation here.
|
|
337
|
+
const existingMessages = options.conversation?.messages ?? [];
|
|
338
|
+
const existingSystem = options.conversation?.system ?? prompt.system;
|
|
339
|
+
// Build the new messages array
|
|
340
|
+
const newMessages = [
|
|
341
|
+
...existingMessages,
|
|
342
|
+
...prompt.messages,
|
|
343
|
+
];
|
|
344
|
+
// Only add assistant message if there's actual content
|
|
345
|
+
// (Claude API rejects empty text content blocks)
|
|
346
|
+
if (content.length > 0) {
|
|
347
|
+
newMessages.push({
|
|
348
|
+
role: 'assistant',
|
|
349
|
+
content: content
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
// Build the new conversation in ClaudePrompt format
|
|
353
|
+
const conversation = {
|
|
354
|
+
messages: newMessages,
|
|
355
|
+
system: existingSystem
|
|
356
|
+
};
|
|
357
|
+
// Increment turn counter
|
|
358
|
+
const withTurn = (0, core_1.incrementConversationTurn)(conversation);
|
|
359
|
+
// Apply stripping based on options
|
|
360
|
+
const currentTurn = (0, core_1.getConversationMeta)(withTurn).turnNumber;
|
|
361
|
+
const stripOptions = {
|
|
362
|
+
keepForTurns: options.stripImagesAfterTurns ?? Infinity,
|
|
363
|
+
currentTurn,
|
|
364
|
+
textMaxTokens: options.stripTextMaxTokens
|
|
365
|
+
};
|
|
366
|
+
let processedConversation = (0, core_1.stripBase64ImagesFromConversation)(withTurn, stripOptions);
|
|
367
|
+
processedConversation = (0, core_1.truncateLargeTextInConversation)(processedConversation, stripOptions);
|
|
368
|
+
processedConversation = (0, core_1.stripHeartbeatsFromConversation)(processedConversation, {
|
|
369
|
+
keepForTurns: options.stripHeartbeatsAfterTurns ?? 1,
|
|
370
|
+
currentTurn,
|
|
371
|
+
});
|
|
372
|
+
return processedConversation;
|
|
373
|
+
}
|
|
374
|
+
async requestImageGeneration(_prompt, _options) {
|
|
375
|
+
const splits = _options.model.split("/");
|
|
376
|
+
const modelName = trimModelName(splits[splits.length - 1]);
|
|
377
|
+
return new imagen_js_1.ImagenModelDefinition(modelName).requestImageGeneration(this, _prompt, _options);
|
|
378
|
+
}
|
|
379
|
+
async getGenAIModelsArray(client) {
|
|
380
|
+
const models = [];
|
|
381
|
+
const pager = await client.models.list();
|
|
382
|
+
for await (const item of pager) {
|
|
383
|
+
models.push(item);
|
|
384
|
+
}
|
|
385
|
+
return models;
|
|
386
|
+
}
|
|
387
|
+
async listModels(_params) {
|
|
388
|
+
// Get clients
|
|
389
|
+
const modelGarden = await this.getModelGardenClient();
|
|
390
|
+
const aiplatform = await this.getAIPlatformClient();
|
|
391
|
+
const globalGenAiClient = this.getGoogleGenAIClient("global");
|
|
392
|
+
let models = [];
|
|
393
|
+
//Model Garden Publisher models - Pretrained models
|
|
394
|
+
const publishers = ["google", "anthropic", "meta"];
|
|
395
|
+
// Meta "maas" models are LLama Models-As-A-Service. Non-maas models are not pre-deployed.
|
|
396
|
+
const supportedModels = { google: ["gemini", "imagen"], anthropic: ["claude"], meta: ["maas"] };
|
|
397
|
+
// Additional models not in the listings, but we want to include
|
|
398
|
+
// TODO: Remove once the models are available in the listing API, or no longer needed
|
|
399
|
+
const additionalModels = {
|
|
400
|
+
google: [
|
|
401
|
+
"imagen-3.0-fast-generate-001",
|
|
402
|
+
],
|
|
403
|
+
anthropic: [],
|
|
404
|
+
meta: [
|
|
405
|
+
"llama-4-maverick-17b-128e-instruct-maas",
|
|
406
|
+
"llama-4-scout-17b-16e-instruct-maas",
|
|
407
|
+
"llama-3.3-70b-instruct-maas",
|
|
408
|
+
"llama-3.2-90b-vision-instruct-maas",
|
|
409
|
+
"llama-3.1-405b-instruct-maas",
|
|
410
|
+
"llama-3.1-70b-instruct-maas",
|
|
411
|
+
"llama-3.1-8b-instruct-maas",
|
|
412
|
+
],
|
|
413
|
+
};
|
|
414
|
+
//Used to exclude retired models that are still in the listing API but not available for use.
|
|
415
|
+
//Or models we do not support yet
|
|
416
|
+
const unsupportedModelsByPublisher = {
|
|
417
|
+
google: ["gemini-pro", "gemini-ultra", "imagen-product-recontext-preview", "embedding", "gemini-live-2.5-flash-preview-native-audio", "computer-use-preview"],
|
|
418
|
+
anthropic: [],
|
|
419
|
+
meta: [],
|
|
420
|
+
};
|
|
421
|
+
// Start all network requests in parallel
|
|
422
|
+
const aiplatformPromise = aiplatform.listModels({
|
|
423
|
+
parent: `projects/${this.options.project}/locations/${this.options.region}`,
|
|
424
|
+
});
|
|
425
|
+
const publisherPromises = publishers.map(async (publisher) => {
|
|
426
|
+
const [response] = await modelGarden.listPublisherModels({
|
|
427
|
+
parent: `publishers/${publisher}`,
|
|
428
|
+
orderBy: "name",
|
|
429
|
+
listAllVersions: true,
|
|
430
|
+
});
|
|
431
|
+
return { publisher, response };
|
|
432
|
+
});
|
|
433
|
+
const globalGooglePromise = this.getGenAIModelsArray(globalGenAiClient);
|
|
434
|
+
// Await all network requests
|
|
435
|
+
const [aiplatformResult, globalGoogleResult, ...publisherResults] = await Promise.all([
|
|
436
|
+
aiplatformPromise,
|
|
437
|
+
globalGooglePromise,
|
|
438
|
+
...publisherPromises,
|
|
439
|
+
]);
|
|
440
|
+
// Process aiplatform models, project specific models
|
|
441
|
+
const [response] = aiplatformResult;
|
|
442
|
+
models = models.concat(response.map((model) => ({
|
|
443
|
+
id: model.name?.split("/").pop() ?? "",
|
|
444
|
+
name: model.displayName ?? "",
|
|
445
|
+
provider: "vertexai"
|
|
446
|
+
})));
|
|
447
|
+
// Process global google models from GenAI
|
|
448
|
+
models = models.concat(globalGoogleResult.map((model) => {
|
|
449
|
+
const modelCapability = (0, core_1.getModelCapabilities)(model.name ?? '', "vertexai");
|
|
450
|
+
return {
|
|
451
|
+
id: "locations/global/" + model.name,
|
|
452
|
+
name: "Global " + model.name?.split('/').pop(),
|
|
453
|
+
provider: "vertexai",
|
|
454
|
+
owner: "google",
|
|
455
|
+
input_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.input),
|
|
456
|
+
output_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.output),
|
|
457
|
+
tool_support: modelCapability.tool_support,
|
|
458
|
+
};
|
|
459
|
+
}));
|
|
460
|
+
// Process publisher models
|
|
461
|
+
for (const result of publisherResults) {
|
|
462
|
+
const { publisher, response } = result;
|
|
463
|
+
const modelFamily = supportedModels[publisher];
|
|
464
|
+
const retiredModels = unsupportedModelsByPublisher[publisher];
|
|
465
|
+
models = models.concat(response.filter((model) => {
|
|
466
|
+
const modelName = model.name ?? "";
|
|
467
|
+
// Exclude retired models
|
|
468
|
+
if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
// Check if the model belongs to the supported model families
|
|
472
|
+
if (modelFamily.some(family => modelName.includes(family))) {
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
return false;
|
|
476
|
+
}).map(model => {
|
|
477
|
+
const modelCapability = (0, core_1.getModelCapabilities)(model.name ?? '', "vertexai");
|
|
478
|
+
return {
|
|
479
|
+
id: model.name ?? '',
|
|
480
|
+
name: model.name?.split('/').pop() ?? '',
|
|
481
|
+
provider: 'vertexai',
|
|
482
|
+
owner: publisher,
|
|
483
|
+
input_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.input),
|
|
484
|
+
output_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.output),
|
|
485
|
+
tool_support: modelCapability.tool_support,
|
|
486
|
+
};
|
|
487
|
+
}));
|
|
488
|
+
// Create global google gemini models for Gemini 2.5 and later, if missing from GenAI listing
|
|
489
|
+
if (publisher === 'google') {
|
|
490
|
+
const globalGeminiModels = response.filter((model) => {
|
|
491
|
+
const modelName = model.name ?? "";
|
|
492
|
+
if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
|
|
493
|
+
return false;
|
|
494
|
+
}
|
|
495
|
+
if (modelFamily.some(family => modelName.includes(family))) {
|
|
496
|
+
const versionMatch = modelName.match(/gemini-(\d+(?:\.\d+)?)/);
|
|
497
|
+
if (versionMatch) {
|
|
498
|
+
const version = parseFloat(versionMatch[1]);
|
|
499
|
+
if (version >= 2.5) {
|
|
500
|
+
// Check if already present
|
|
501
|
+
const shortName = modelName.split('/').pop();
|
|
502
|
+
const globalName = "Global " + shortName;
|
|
503
|
+
if (models.some(m => m.name === globalName)) {
|
|
504
|
+
return false;
|
|
505
|
+
}
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
return false;
|
|
512
|
+
}).map(model => {
|
|
513
|
+
const modelCapability = (0, core_1.getModelCapabilities)(model.name ?? '', "vertexai");
|
|
514
|
+
return {
|
|
515
|
+
id: "locations/global/" + model.name,
|
|
516
|
+
name: "Global " + model.name?.split('/').pop(),
|
|
517
|
+
provider: 'vertexai',
|
|
518
|
+
owner: publisher,
|
|
519
|
+
input_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.input),
|
|
520
|
+
output_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.output),
|
|
521
|
+
tool_support: modelCapability.tool_support,
|
|
522
|
+
};
|
|
523
|
+
});
|
|
524
|
+
models = models.concat(globalGeminiModels);
|
|
525
|
+
}
|
|
526
|
+
// Create global anthropic models for those not in NON_GLOBAL_ANTHROPIC_MODELS
|
|
527
|
+
if (publisher === 'anthropic') {
|
|
528
|
+
const globalAnthropicModels = response.filter((model) => {
|
|
529
|
+
const modelName = model.name ?? "";
|
|
530
|
+
if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
|
|
531
|
+
return false;
|
|
532
|
+
}
|
|
533
|
+
if (modelFamily.some(family => modelName.includes(family))) {
|
|
534
|
+
if (modelName.includes("claude-3-7")) {
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
537
|
+
return !claude_js_1.NON_GLOBAL_ANTHROPIC_MODELS.some(nonGlobalModel => modelName.includes(nonGlobalModel));
|
|
538
|
+
}
|
|
539
|
+
return false;
|
|
540
|
+
}).map(model => {
|
|
541
|
+
const modelCapability = (0, core_1.getModelCapabilities)(model.name ?? '', "vertexai");
|
|
542
|
+
return {
|
|
543
|
+
id: "locations/global/" + model.name,
|
|
544
|
+
name: "Global " + model.name?.split('/').pop(),
|
|
545
|
+
provider: 'vertexai',
|
|
546
|
+
owner: publisher,
|
|
547
|
+
input_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.input),
|
|
548
|
+
output_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.output),
|
|
549
|
+
tool_support: modelCapability.tool_support,
|
|
550
|
+
};
|
|
551
|
+
});
|
|
552
|
+
models = models.concat(globalAnthropicModels);
|
|
553
|
+
}
|
|
554
|
+
// Add additional models that are not in the listing
|
|
555
|
+
for (const additionalModel of additionalModels[publisher]) {
|
|
556
|
+
const publisherModelName = `publishers/${publisher}/models/${additionalModel}`;
|
|
557
|
+
const modelCapability = (0, core_1.getModelCapabilities)(additionalModel, "vertexai");
|
|
558
|
+
models.push({
|
|
559
|
+
id: publisherModelName,
|
|
560
|
+
name: additionalModel,
|
|
561
|
+
provider: 'vertexai',
|
|
562
|
+
owner: publisher,
|
|
563
|
+
input_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.input),
|
|
564
|
+
output_modalities: (0, core_1.modelModalitiesToArray)(modelCapability.output),
|
|
565
|
+
tool_support: modelCapability.tool_support,
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
//Remove duplicates
|
|
570
|
+
const uniqueModels = Array.from(new Set(models.map(a => a.id)))
|
|
571
|
+
.map(id => {
|
|
572
|
+
return models.find(a => a.id === id) ?? {};
|
|
573
|
+
}).sort((a, b) => a.id.localeCompare(b.id));
|
|
574
|
+
return uniqueModels;
|
|
575
|
+
}
|
|
576
|
+
validateConnection() {
|
|
577
|
+
throw new Error("Method not implemented.");
|
|
578
|
+
}
|
|
579
|
+
async generateEmbeddings(options) {
|
|
580
|
+
if (options.image || options.model?.includes("multimodal")) {
|
|
581
|
+
if (options.text && options.image) {
|
|
582
|
+
throw new Error("Text and Image simultaneous embedding not implemented. Submit separately");
|
|
583
|
+
}
|
|
584
|
+
return (0, embeddings_image_js_1.getEmbeddingsForImages)(this, options);
|
|
585
|
+
}
|
|
586
|
+
const text_options = {
|
|
587
|
+
content: options.text ?? "",
|
|
588
|
+
model: options.model,
|
|
589
|
+
};
|
|
590
|
+
return (0, embeddings_text_js_1.getEmbeddingsForText)(this, text_options);
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Cleanup Google Cloud clients when the driver is evicted from the cache.
|
|
594
|
+
*/
|
|
595
|
+
destroy() {
|
|
596
|
+
this.aiplatform?.close();
|
|
597
|
+
this.modelGarden?.close();
|
|
598
|
+
this.imagenClient?.close();
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Format VertexAI errors by routing to model-specific error handlers.
|
|
602
|
+
* Each model definition (Gemini, Claude, Llama) can provide custom error parsing
|
|
603
|
+
* based on their specific SDK error structures.
|
|
604
|
+
*
|
|
605
|
+
* @param error - The error from the VertexAI/model SDK
|
|
606
|
+
* @param context - Context about where the error occurred
|
|
607
|
+
* @returns A standardized LlumiverseError
|
|
608
|
+
*/
|
|
609
|
+
formatLlumiverseError(error, context) {
|
|
610
|
+
// Get the model definition for this request
|
|
611
|
+
const modelDef = (0, models_js_1.getModelDefinition)(context.model);
|
|
612
|
+
// If the model definition provides custom error handling, use it
|
|
613
|
+
if (modelDef.formatLlumiverseError) {
|
|
614
|
+
try {
|
|
615
|
+
return modelDef.formatLlumiverseError(this, error, context);
|
|
616
|
+
}
|
|
617
|
+
catch (formattingError) {
|
|
618
|
+
// If model-specific handler throws, fall through to default handling
|
|
619
|
+
// This allows model handlers to explicitly opt out for certain errors
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
// Fall back to default AbstractDriver error handling
|
|
623
|
+
return super.formatLlumiverseError(error, context);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
exports.VertexAIDriver = VertexAIDriver;
|
|
627
|
+
//'us-central1-aiplatform.googleapis.com',
|
|
628
|
+
const API_BASE_PATH = "aiplatform.googleapis.com";
|
|
629
|
+
function createFetchClient({ region, project, apiEndpoint, apiVersion = "v1", }) {
|
|
630
|
+
const vertexBaseEndpoint = apiEndpoint ?? `${region}-${API_BASE_PATH}`;
|
|
631
|
+
return new api_fetch_client_1.FetchClient(`https://${vertexBaseEndpoint}/${apiVersion}/projects/${project}/locations/${region}`).withHeaders({
|
|
632
|
+
"Content-Type": "application/json",
|
|
633
|
+
});
|
|
634
|
+
}
|
|
635
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/vertexai/index.ts"],"names":[],"mappings":"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"}
|