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