@llumiverse/drivers 0.22.0-dev.1 → 0.22.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 +2 -2
- package/lib/cjs/adobe/firefly.js.map +1 -1
- package/lib/cjs/azure/azure_foundry.js +11 -11
- package/lib/cjs/azure/azure_foundry.js.map +1 -1
- package/lib/cjs/bedrock/index.js +154 -11
- package/lib/cjs/bedrock/index.js.map +1 -1
- package/lib/cjs/bedrock/twelvelabs.js +87 -0
- package/lib/cjs/bedrock/twelvelabs.js.map +1 -0
- package/lib/cjs/groq/index.js +3 -3
- package/lib/cjs/groq/index.js.map +1 -1
- package/lib/cjs/huggingface_ie.js +2 -2
- package/lib/cjs/huggingface_ie.js.map +1 -1
- package/lib/cjs/mistral/index.js +2 -2
- package/lib/cjs/mistral/index.js.map +1 -1
- package/lib/cjs/openai/azure_openai.js +1 -1
- package/lib/cjs/openai/azure_openai.js.map +1 -1
- package/lib/cjs/openai/index.js +9 -5
- package/lib/cjs/openai/index.js.map +1 -1
- package/lib/cjs/replicate.js +3 -3
- package/lib/cjs/replicate.js.map +1 -1
- package/lib/cjs/togetherai/index.js +2 -2
- package/lib/cjs/togetherai/index.js.map +1 -1
- package/lib/cjs/vertexai/index.js +81 -30
- package/lib/cjs/vertexai/index.js.map +1 -1
- package/lib/cjs/vertexai/models/claude.js +29 -7
- package/lib/cjs/vertexai/models/claude.js.map +1 -1
- package/lib/cjs/vertexai/models/gemini.js +13 -2
- package/lib/cjs/vertexai/models/gemini.js.map +1 -1
- package/lib/cjs/vertexai/models/imagen.js +2 -2
- package/lib/cjs/vertexai/models/imagen.js.map +1 -1
- package/lib/cjs/vertexai/models.js +13 -2
- package/lib/cjs/vertexai/models.js.map +1 -1
- package/lib/cjs/watsonx/index.js +3 -3
- package/lib/cjs/watsonx/index.js.map +1 -1
- package/lib/esm/adobe/firefly.js +2 -2
- package/lib/esm/adobe/firefly.js.map +1 -1
- package/lib/esm/azure/azure_foundry.js +11 -11
- package/lib/esm/azure/azure_foundry.js.map +1 -1
- package/lib/esm/bedrock/index.js +154 -11
- package/lib/esm/bedrock/index.js.map +1 -1
- package/lib/esm/bedrock/twelvelabs.js +84 -0
- package/lib/esm/bedrock/twelvelabs.js.map +1 -0
- package/lib/esm/groq/index.js +3 -3
- package/lib/esm/groq/index.js.map +1 -1
- package/lib/esm/huggingface_ie.js +2 -2
- package/lib/esm/huggingface_ie.js.map +1 -1
- package/lib/esm/mistral/index.js +2 -2
- package/lib/esm/mistral/index.js.map +1 -1
- package/lib/esm/openai/azure_openai.js +1 -1
- package/lib/esm/openai/azure_openai.js.map +1 -1
- package/lib/esm/openai/index.js +9 -5
- package/lib/esm/openai/index.js.map +1 -1
- package/lib/esm/replicate.js +3 -3
- package/lib/esm/replicate.js.map +1 -1
- package/lib/esm/src/bedrock/index.js +150 -7
- package/lib/esm/src/bedrock/index.js.map +1 -1
- package/lib/esm/src/bedrock/twelvelabs.js +84 -0
- package/lib/esm/src/bedrock/twelvelabs.js.map +1 -0
- package/lib/esm/src/groq/index.js +1 -1
- package/lib/esm/src/groq/index.js.map +1 -1
- package/lib/esm/src/huggingface_ie.js +3 -2
- package/lib/esm/src/huggingface_ie.js.map +1 -1
- package/lib/esm/src/index.js +2 -2
- package/lib/esm/src/index.js.map +1 -1
- package/lib/esm/src/openai/index.js +6 -2
- package/lib/esm/src/openai/index.js.map +1 -1
- package/lib/esm/src/replicate.js +1 -1
- package/lib/esm/src/replicate.js.map +1 -1
- package/lib/esm/src/test-driver/TestErrorCompletionStream.js +16 -0
- package/lib/esm/src/test-driver/TestErrorCompletionStream.js.map +1 -0
- package/lib/esm/src/test-driver/TestValidationErrorCompletionStream.js +20 -0
- package/lib/esm/src/test-driver/TestValidationErrorCompletionStream.js.map +1 -0
- package/lib/esm/src/test-driver/index.js +91 -0
- package/lib/esm/src/test-driver/index.js.map +1 -0
- package/lib/esm/src/test-driver/utils.js +25 -0
- package/lib/esm/src/test-driver/utils.js.map +1 -0
- package/lib/esm/src/vertexai/index.js +81 -30
- package/lib/esm/src/vertexai/index.js.map +1 -1
- package/lib/esm/src/vertexai/models/claude.js +26 -4
- package/lib/esm/src/vertexai/models/claude.js.map +1 -1
- package/lib/esm/src/vertexai/models/gemini.js +14 -3
- package/lib/esm/src/vertexai/models/gemini.js.map +1 -1
- package/lib/esm/src/vertexai/models/imagen.js +1 -1
- package/lib/esm/src/vertexai/models/imagen.js.map +1 -1
- package/lib/esm/src/vertexai/models.js +13 -2
- package/lib/esm/src/vertexai/models.js.map +1 -1
- package/lib/esm/togetherai/index.js +2 -2
- package/lib/esm/togetherai/index.js.map +1 -1
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/vertexai/index.js +81 -30
- package/lib/esm/vertexai/index.js.map +1 -1
- package/lib/esm/vertexai/models/claude.js +28 -6
- package/lib/esm/vertexai/models/claude.js.map +1 -1
- package/lib/esm/vertexai/models/gemini.js +14 -3
- package/lib/esm/vertexai/models/gemini.js.map +1 -1
- package/lib/esm/vertexai/models/imagen.js +2 -2
- package/lib/esm/vertexai/models/imagen.js.map +1 -1
- package/lib/esm/vertexai/models.js +13 -2
- package/lib/esm/vertexai/models.js.map +1 -1
- package/lib/esm/watsonx/index.js +3 -3
- package/lib/esm/watsonx/index.js.map +1 -1
- package/lib/types/bedrock/index.d.ts +7 -3
- package/lib/types/bedrock/index.d.ts.map +1 -1
- 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.map +1 -1
- package/lib/types/openai/index.d.ts.map +1 -1
- package/lib/types/replicate.d.ts.map +1 -1
- package/lib/types/src/bedrock/index.d.ts +7 -3
- package/lib/types/src/bedrock/twelvelabs.d.ts +49 -0
- package/lib/types/src/huggingface_ie.d.ts +6 -6
- package/lib/types/src/index.d.ts +2 -2
- package/lib/types/src/test-driver/TestErrorCompletionStream.d.ts +8 -0
- package/lib/types/src/test-driver/TestValidationErrorCompletionStream.d.ts +8 -0
- package/lib/types/src/test-driver/index.d.ts +23 -0
- package/lib/types/src/test-driver/utils.d.ts +4 -0
- package/lib/types/src/vertexai/index.d.ts +11 -11
- package/lib/types/src/vertexai/models/claude.d.ts +2 -0
- package/lib/types/vertexai/index.d.ts +11 -11
- package/lib/types/vertexai/index.d.ts.map +1 -1
- package/lib/types/vertexai/models/claude.d.ts +2 -0
- package/lib/types/vertexai/models/claude.d.ts.map +1 -1
- package/lib/types/vertexai/models/gemini.d.ts.map +1 -1
- package/lib/types/vertexai/models.d.ts.map +1 -1
- package/package.json +85 -85
- package/src/bedrock/index.ts +183 -10
- package/src/bedrock/twelvelabs.ts +150 -0
- package/src/groq/index.ts +4 -3
- package/src/huggingface_ie.ts +8 -7
- package/src/index.ts +2 -2
- package/src/openai/index.ts +6 -2
- package/src/replicate.ts +1 -1
- package/src/vertexai/index.ts +56 -3
- package/src/vertexai/models/claude.ts +30 -4
- package/src/vertexai/models/gemini.ts +16 -5
- package/src/vertexai/models.ts +14 -2
- /package/src/{test-driver → test}/TestErrorCompletionStream.ts +0 -0
- /package/src/{test-driver → test}/TestValidationErrorCompletionStream.ts +0 -0
- /package/src/{test-driver → test}/index.ts +0 -0
- /package/src/{test-driver → test}/utils.ts +0 -0
package/src/huggingface_ie.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
HfInference,
|
|
3
|
+
HfInferenceEndpoint,
|
|
4
|
+
TextGenerationStreamOutput
|
|
4
5
|
} from "@huggingface/inference";
|
|
5
6
|
import {
|
|
6
7
|
AIModel,
|
|
@@ -24,7 +25,7 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
24
25
|
static PROVIDER = "huggingface_ie";
|
|
25
26
|
provider = HuggingFaceIEDriver.PROVIDER;
|
|
26
27
|
service: FetchClient;
|
|
27
|
-
_executor?:
|
|
28
|
+
_executor?: HfInferenceEndpoint;
|
|
28
29
|
|
|
29
30
|
constructor(
|
|
30
31
|
options: HuggingFaceIEDriverOptions
|
|
@@ -59,8 +60,7 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
59
60
|
`Endpoint ${model} is not running - current status: ${endpoint.status}`
|
|
60
61
|
);
|
|
61
62
|
|
|
62
|
-
|
|
63
|
-
this._executor = new InferenceClient(this.options.apiKey).endpoint(
|
|
63
|
+
this._executor = new HfInference(this.options.apiKey).endpoint(
|
|
64
64
|
endpoint.url
|
|
65
65
|
);
|
|
66
66
|
}
|
|
@@ -82,7 +82,8 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
82
82
|
},
|
|
83
83
|
});
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
|
|
86
|
+
return transformAsyncIterator(req, (val: TextGenerationStreamOutput) => {
|
|
86
87
|
//special like <s> are not part of the result
|
|
87
88
|
if (val.token.special) return { result: [] };
|
|
88
89
|
let finish_reason = val.details?.finish_reason as string;
|
|
@@ -95,7 +96,7 @@ export class HuggingFaceIEDriver extends AbstractDriver<HuggingFaceIEDriverOptio
|
|
|
95
96
|
token_usage: {
|
|
96
97
|
result: val.details?.generated_tokens ?? 0,
|
|
97
98
|
}
|
|
98
|
-
};
|
|
99
|
+
} as CompletionChunkObject;
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
102
|
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export * from "./azure/azure_foundry.js";
|
|
2
1
|
export * from "./bedrock/index.js";
|
|
3
2
|
export * from "./groq/index.js";
|
|
4
3
|
export * from "./huggingface_ie.js";
|
|
5
4
|
export * from "./mistral/index.js";
|
|
6
5
|
export * from "./openai/azure_openai.js";
|
|
6
|
+
export * from "./azure/azure_foundry.js";
|
|
7
7
|
export * from "./openai/openai.js";
|
|
8
8
|
export * from "./replicate.js";
|
|
9
|
-
export * from "./test
|
|
9
|
+
export * from "./test/index.js";
|
|
10
10
|
export * from "./togetherai/index.js";
|
|
11
11
|
export * from "./vertexai/index.js";
|
|
12
12
|
export * from "./watsonx/index.js";
|
package/src/openai/index.ts
CHANGED
|
@@ -293,7 +293,7 @@ export abstract class BaseOpenAIDriver extends AbstractDriver<
|
|
|
293
293
|
//Some of these use the completions API instead of the chat completions API.
|
|
294
294
|
//Others are for non-text input modalities. Therefore common to both.
|
|
295
295
|
const wordBlacklist = ["embed", "whisper", "transcribe", "audio", "moderation", "tts",
|
|
296
|
-
"realtime", "dall-e", "babbage", "davinci", "codex", "o1-pro"];
|
|
296
|
+
"realtime", "dall-e", "babbage", "davinci", "codex", "o1-pro", "computer-use", "sora"];
|
|
297
297
|
|
|
298
298
|
|
|
299
299
|
//OpenAI has very little information, filtering based on name.
|
|
@@ -304,11 +304,15 @@ export abstract class BaseOpenAIDriver extends AbstractDriver<
|
|
|
304
304
|
const models = filter ? result.filter(filter) : result;
|
|
305
305
|
const aiModels = models.map((m) => {
|
|
306
306
|
const modelCapability = getModelCapabilities(m.id, "openai");
|
|
307
|
+
let owner = m.owned_by;
|
|
308
|
+
if (owner == "system") {
|
|
309
|
+
owner = "openai";
|
|
310
|
+
}
|
|
307
311
|
return {
|
|
308
312
|
id: m.id,
|
|
309
313
|
name: m.id,
|
|
310
314
|
provider: this.provider,
|
|
311
|
-
owner:
|
|
315
|
+
owner: owner,
|
|
312
316
|
type: m.object === "model" ? ModelType.Text : ModelType.Unknown,
|
|
313
317
|
can_stream: true,
|
|
314
318
|
is_multimodal: m.id.includes("gpt-4"),
|
package/src/replicate.ts
CHANGED
|
@@ -236,7 +236,7 @@ export class ReplicateDriver extends AbstractDriver<DriverOptions, string> {
|
|
|
236
236
|
this.service.models.versions.list(owner, model),
|
|
237
237
|
]);
|
|
238
238
|
|
|
239
|
-
if (!rModel || !versions ||
|
|
239
|
+
if (!rModel || !versions || versions.length === 0) {
|
|
240
240
|
throw new Error("Model not found or no versions available");
|
|
241
241
|
}
|
|
242
242
|
|
package/src/vertexai/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { PredictionServiceClient, v1beta1 } from "@google-cloud/aiplatform";
|
|
|
23
23
|
import { AnthropicVertex } from "@anthropic-ai/vertex-sdk";
|
|
24
24
|
import { ImagenModelDefinition, ImagenPrompt } from "./models/imagen.js";
|
|
25
25
|
import { GoogleGenAI, Content, Model } from "@google/genai";
|
|
26
|
+
import { NON_GLOBAL_ANTHROPIC_MODELS, ANTHROPIC_REGIONS } from "./models/claude.js";
|
|
26
27
|
|
|
27
28
|
export interface VertexAIDriverOptions extends DriverOptions {
|
|
28
29
|
project: string;
|
|
@@ -130,12 +131,34 @@ export class VertexAIDriver extends AbstractDriver<VertexAIDriverOptions, Vertex
|
|
|
130
131
|
return this.llamaClient;
|
|
131
132
|
}
|
|
132
133
|
|
|
133
|
-
public getAnthropicClient(): AnthropicVertex {
|
|
134
|
-
//
|
|
134
|
+
public getAnthropicClient(region: string = this.options.region): AnthropicVertex {
|
|
135
|
+
// Extract region prefix and map if it exists in ANTHROPIC_REGIONS, otherwise use as-is
|
|
136
|
+
const getRegionPrefix = (r: string) => r.split('-')[0];
|
|
137
|
+
const regionPrefix = getRegionPrefix(region);
|
|
138
|
+
const mappedRegion = ANTHROPIC_REGIONS[regionPrefix] || region;
|
|
139
|
+
|
|
140
|
+
const defaultRegionPrefix = getRegionPrefix(this.options.region);
|
|
141
|
+
const defaultMappedRegion = ANTHROPIC_REGIONS[defaultRegionPrefix] || this.options.region;
|
|
142
|
+
|
|
143
|
+
// If mapped region is different from default mapped region, create one-off client
|
|
144
|
+
if (mappedRegion !== defaultMappedRegion) {
|
|
145
|
+
return new AnthropicVertex({
|
|
146
|
+
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
|
|
147
|
+
region: mappedRegion,
|
|
148
|
+
projectId: this.options.project,
|
|
149
|
+
googleAuth: new GoogleAuth({
|
|
150
|
+
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
151
|
+
authClient: this.authClient as JSONClient,
|
|
152
|
+
projectId: this.options.project,
|
|
153
|
+
}),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
//Lazy initialization for default region
|
|
135
158
|
if (!this.anthropicClient) {
|
|
136
159
|
this.anthropicClient = new AnthropicVertex({
|
|
137
160
|
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
|
|
138
|
-
region:
|
|
161
|
+
region: mappedRegion,
|
|
139
162
|
projectId: this.options.project,
|
|
140
163
|
googleAuth: new GoogleAuth({
|
|
141
164
|
scopes: ["https://www.googleapis.com/auth/cloud-platform"],
|
|
@@ -353,6 +376,36 @@ export class VertexAIDriver extends AbstractDriver<VertexAIDriverOptions, Vertex
|
|
|
353
376
|
} satisfies AIModel<string>;
|
|
354
377
|
}));
|
|
355
378
|
|
|
379
|
+
// Create global anthropic models for those not in NON_GLOBAL_ANTHROPIC_MODELS
|
|
380
|
+
if (publisher === 'anthropic') {
|
|
381
|
+
const globalAnthropicModels = response.filter((model) => {
|
|
382
|
+
const modelName = model.name ?? "";
|
|
383
|
+
if (retiredModels.some(retiredModel => modelName.includes(retiredModel))) {
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
if (modelFamily.some(family => modelName.includes(family))) {
|
|
387
|
+
if (modelName.includes("claude-3-7")) {
|
|
388
|
+
return true;
|
|
389
|
+
}
|
|
390
|
+
return !NON_GLOBAL_ANTHROPIC_MODELS.some(nonGlobalModel => modelName.includes(nonGlobalModel));
|
|
391
|
+
}
|
|
392
|
+
return false;
|
|
393
|
+
}).map(model => {
|
|
394
|
+
const modelCapability = getModelCapabilities(model.name ?? '', "vertexai");
|
|
395
|
+
return {
|
|
396
|
+
id: "locations/global/" + model.name,
|
|
397
|
+
name: "Global " + model.name?.split('/').pop(),
|
|
398
|
+
provider: 'vertexai',
|
|
399
|
+
owner: publisher,
|
|
400
|
+
input_modalities: modelModalitiesToArray(modelCapability.input),
|
|
401
|
+
output_modalities: modelModalitiesToArray(modelCapability.output),
|
|
402
|
+
tool_support: modelCapability.tool_support,
|
|
403
|
+
} satisfies AIModel<string>;
|
|
404
|
+
});
|
|
405
|
+
|
|
406
|
+
models = models.concat(globalAnthropicModels);
|
|
407
|
+
}
|
|
408
|
+
|
|
356
409
|
// Add additional models that are not in the listing
|
|
357
410
|
for (const additionalModel of additionalModels[publisher as keyof typeof additionalModels]) {
|
|
358
411
|
const publisherModelName = `publishers/${publisher}/models/${additionalModel}`;
|
|
@@ -9,6 +9,17 @@ import { ModelDefinition } from "../models.js";
|
|
|
9
9
|
import { MessageCreateParamsBase, MessageCreateParamsNonStreaming, RawMessageStreamEvent } from "@anthropic-ai/sdk/resources/messages.js";
|
|
10
10
|
import { MessageStreamParams } from "@anthropic-ai/sdk/resources/index.mjs";
|
|
11
11
|
|
|
12
|
+
export const ANTHROPIC_REGIONS: Record<string, string> = {
|
|
13
|
+
us: "us-east5",
|
|
14
|
+
europe: "europe-west1",
|
|
15
|
+
global: "global",
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const NON_GLOBAL_ANTHROPIC_MODELS = [
|
|
19
|
+
"claude-3-5",
|
|
20
|
+
"claude-3",
|
|
21
|
+
];
|
|
22
|
+
|
|
12
23
|
interface ClaudePrompt {
|
|
13
24
|
messages: MessageParam[];
|
|
14
25
|
system?: TextBlockParam[];
|
|
@@ -250,7 +261,15 @@ export class ClaudeModelDefinition implements ModelDefinition<ClaudePrompt> {
|
|
|
250
261
|
}
|
|
251
262
|
|
|
252
263
|
async requestTextCompletion(driver: VertexAIDriver, prompt: ClaudePrompt, options: ExecutionOptions): Promise<Completion> {
|
|
253
|
-
const
|
|
264
|
+
const splits = options.model.split("/");
|
|
265
|
+
let region: string | undefined = undefined;
|
|
266
|
+
if (splits[0] === "locations" && splits.length >= 2) {
|
|
267
|
+
region = splits[1];
|
|
268
|
+
}
|
|
269
|
+
const modelName = splits[splits.length - 1];
|
|
270
|
+
options = { ...options, model: modelName };
|
|
271
|
+
|
|
272
|
+
const client = driver.getAnthropicClient(region);
|
|
254
273
|
options.model_options = options.model_options as VertexAIClaudeOptions;
|
|
255
274
|
|
|
256
275
|
if (options.model_options?._option_id !== "vertexai-claude") {
|
|
@@ -287,7 +306,15 @@ export class ClaudeModelDefinition implements ModelDefinition<ClaudePrompt> {
|
|
|
287
306
|
}
|
|
288
307
|
|
|
289
308
|
async requestTextCompletionStream(driver: VertexAIDriver, prompt: ClaudePrompt, options: ExecutionOptions): Promise<AsyncIterable<CompletionChunkObject>> {
|
|
290
|
-
const
|
|
309
|
+
const splits = options.model.split("/");
|
|
310
|
+
let region: string | undefined = undefined;
|
|
311
|
+
if (splits[0] === "locations" && splits.length >= 2) {
|
|
312
|
+
region = splits[1];
|
|
313
|
+
}
|
|
314
|
+
const modelName = splits[splits.length - 1];
|
|
315
|
+
options = { ...options, model: modelName };
|
|
316
|
+
|
|
317
|
+
const client = driver.getAnthropicClient(region);
|
|
291
318
|
const model_options = options.model_options as VertexAIClaudeOptions | undefined;
|
|
292
319
|
|
|
293
320
|
if (model_options?._option_id !== "vertexai-claude") {
|
|
@@ -399,8 +426,7 @@ interface RequestOptions {
|
|
|
399
426
|
}
|
|
400
427
|
|
|
401
428
|
function getClaudePayload(options: ExecutionOptions, prompt: ClaudePrompt): { payload: MessageCreateParamsBase, requestOptions: RequestOptions | undefined } {
|
|
402
|
-
const
|
|
403
|
-
const modelName = splits[splits.length - 1];
|
|
429
|
+
const modelName = options.model; // Model name is already extracted in the calling methods
|
|
404
430
|
const model_options = options.model_options as VertexAIClaudeOptions;
|
|
405
431
|
|
|
406
432
|
// Add beta header for Claude 3.7 models to enable 128k output tokens
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Content, FinishReason, FunctionCallingConfigMode, FunctionDeclaration, GenerateContentConfig, GenerateContentParameters,
|
|
3
3
|
GenerateContentResponseUsageMetadata,
|
|
4
|
-
HarmBlockThreshold, HarmCategory, Part, SafetySetting, Schema, Tool, Type
|
|
4
|
+
HarmBlockThreshold, HarmCategory, Modality, Part, SafetySetting, Schema, Tool, Type
|
|
5
5
|
} from "@google/genai";
|
|
6
6
|
import {
|
|
7
7
|
AIModel, Completion, CompletionChunkObject, CompletionResult, ExecutionOptions,
|
|
@@ -56,7 +56,18 @@ function getGeminiPayload(options: ExecutionOptions, prompt: GenerateContentProm
|
|
|
56
56
|
|| options.model.includes("gemini-2.5");
|
|
57
57
|
|
|
58
58
|
const configNanoBanana: GenerateContentConfig = {
|
|
59
|
-
|
|
59
|
+
systemInstruction: prompt.system,
|
|
60
|
+
safetySettings: geminiSafetySettings,
|
|
61
|
+
responseModalities: [Modality.TEXT, Modality.IMAGE], // This is an error if only Text, and Only Image just gets blank responses.
|
|
62
|
+
candidateCount: 1,
|
|
63
|
+
//Model options
|
|
64
|
+
temperature: model_options?.temperature,
|
|
65
|
+
topP: model_options?.top_p,
|
|
66
|
+
maxOutputTokens: geminiMaxTokens(options),
|
|
67
|
+
stopSequences: model_options?.stop_sequence,
|
|
68
|
+
imageConfig: {
|
|
69
|
+
aspectRatio: model_options?.image_aspect_ratio,
|
|
70
|
+
}
|
|
60
71
|
}
|
|
61
72
|
|
|
62
73
|
const config: GenerateContentConfig = {
|
|
@@ -502,7 +513,7 @@ export function mergeConsecutiveRole(contents: Content[] | undefined): Content[]
|
|
|
502
513
|
const supportedFinishReasons: FinishReason[] = [
|
|
503
514
|
FinishReason.MAX_TOKENS,
|
|
504
515
|
FinishReason.STOP,
|
|
505
|
-
FinishReason.FINISH_REASON_UNSPECIFIED
|
|
516
|
+
FinishReason.FINISH_REASON_UNSPECIFIED,
|
|
506
517
|
]
|
|
507
518
|
|
|
508
519
|
function geminiMaxTokens(option: StatelessExecutionOptions) {
|
|
@@ -716,7 +727,7 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
716
727
|
let region: string | undefined = undefined;
|
|
717
728
|
if (splits[0] === "locations" && splits.length >= 2) {
|
|
718
729
|
region = splits[1];
|
|
719
|
-
}
|
|
730
|
+
}
|
|
720
731
|
const modelName = splits[splits.length - 1];
|
|
721
732
|
options = { ...options, model: modelName };
|
|
722
733
|
|
|
@@ -784,7 +795,7 @@ export class GeminiModelDefinition implements ModelDefinition<GenerateContentPro
|
|
|
784
795
|
let region: string | undefined = undefined;
|
|
785
796
|
if (splits[0] === "locations" && splits.length >= 2) {
|
|
786
797
|
region = splits[1];
|
|
787
|
-
}
|
|
798
|
+
}
|
|
788
799
|
const modelName = splits[splits.length - 1];
|
|
789
800
|
options = { ...options, model: modelName };
|
|
790
801
|
|
package/src/vertexai/models.ts
CHANGED
|
@@ -15,8 +15,20 @@ export interface ModelDefinition<PromptT = any> {
|
|
|
15
15
|
|
|
16
16
|
export function getModelDefinition(model: string): ModelDefinition {
|
|
17
17
|
const splits = model.split("/");
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
|
|
19
|
+
// Handle both formats: "publishers/anthropic/models/..." and "locations/.../publishers/anthropic/models/..."
|
|
20
|
+
let publisher: string | undefined;
|
|
21
|
+
let modelName: string;
|
|
22
|
+
|
|
23
|
+
const publisherIndex = splits.indexOf("publishers");
|
|
24
|
+
if (publisherIndex !== -1 && publisherIndex + 1 < splits.length) {
|
|
25
|
+
publisher = splits[publisherIndex + 1];
|
|
26
|
+
modelName = trimModelName(splits[splits.length - 1]);
|
|
27
|
+
} else {
|
|
28
|
+
// Fallback to old logic for backward compatibility
|
|
29
|
+
publisher = splits[1];
|
|
30
|
+
modelName = trimModelName(splits[splits.length - 1]);
|
|
31
|
+
}
|
|
20
32
|
|
|
21
33
|
if (publisher?.includes("anthropic")) {
|
|
22
34
|
return new ClaudeModelDefinition(modelName);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|