@ai-sdk/google-vertex 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -8
- package/dist/index.d.mts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +228 -34
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +226 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -4
package/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Vercel AI SDK - Google Vertex AI Provider
|
2
2
|
|
3
|
-
The Google provider for the [Vercel AI SDK](https://sdk.vercel.ai/docs) contains language model support for the [Google Vertex AI](https://cloud.google.com/vertex-ai) APIs.
|
4
|
-
It creates language model objects that can be used with the `generateText` and `streamText` AI functions.
|
5
|
-
Tool calls are currently not supported.
|
3
|
+
The **[Google Vertex provider](https://sdk.vercel.ai/providers/ai-sdk-providers/google-vertex)** for the [Vercel AI SDK](https://sdk.vercel.ai/docs) contains language model support for the [Google Vertex AI](https://cloud.google.com/vertex-ai) APIs.
|
6
4
|
|
7
5
|
## Setup
|
8
6
|
|
@@ -20,12 +18,18 @@ You can import the default provider instance `vertex` from `@ai-sdk/google-verte
|
|
20
18
|
import { vertex } from '@ai-sdk/google-vertex';
|
21
19
|
```
|
22
20
|
|
23
|
-
|
21
|
+
## Example
|
24
22
|
|
25
23
|
```ts
|
26
|
-
import {
|
24
|
+
import { vertex } from '@ai-sdk/google-vertex'
|
25
|
+
import { generateText } from 'ai'
|
27
26
|
|
28
|
-
const
|
29
|
-
|
30
|
-
|
27
|
+
const { text } = await generateText({
|
28
|
+
model: vertex('gemini-1.0-pro')
|
29
|
+
prompt: 'Write a vegetarian lasagna recipe for 4 people.'
|
30
|
+
})
|
31
31
|
```
|
32
|
+
|
33
|
+
## Documentation
|
34
|
+
|
35
|
+
Please check out the **[Google Vertex provider](https://sdk.vercel.ai/providers/ai-sdk-providers/google-vertex)** for more information.
|
package/dist/index.d.mts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { VertexAI } from '@google-cloud/vertexai';
|
1
|
+
import { VertexAI, VertexInit } from '@google-cloud/vertexai';
|
2
2
|
import { LanguageModelV1 } from '@ai-sdk/provider';
|
3
3
|
|
4
|
-
type GoogleVertexModelId = 'gemini-1.0-pro' | 'gemini-1.0-pro-vision' | (string & {});
|
4
|
+
type GoogleVertexModelId = 'gemini-1.5-flash' | 'gemini-1.5-pro' | 'gemini-1.0-pro' | 'gemini-1.0-pro-vision' | (string & {});
|
5
5
|
interface GoogleVertexSettings {
|
6
6
|
/**
|
7
7
|
Optional. The maximum number of tokens to consider when sampling.
|
@@ -45,6 +45,13 @@ interface GoogleVertexProviderSettings {
|
|
45
45
|
Your Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.
|
46
46
|
*/
|
47
47
|
project?: string;
|
48
|
+
/**
|
49
|
+
Optional. The Authentication options provided by google-auth-library.
|
50
|
+
Complete list of authentication options is documented in the
|
51
|
+
GoogleAuthOptions interface:
|
52
|
+
https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.
|
53
|
+
*/
|
54
|
+
googleAuthOptions?: VertexInit['googleAuthOptions'];
|
48
55
|
generateId?: () => string;
|
49
56
|
createVertexAI?: ({ project, location, }: {
|
50
57
|
project: string;
|
package/dist/index.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
import { VertexAI } from '@google-cloud/vertexai';
|
1
|
+
import { VertexAI, VertexInit } from '@google-cloud/vertexai';
|
2
2
|
import { LanguageModelV1 } from '@ai-sdk/provider';
|
3
3
|
|
4
|
-
type GoogleVertexModelId = 'gemini-1.0-pro' | 'gemini-1.0-pro-vision' | (string & {});
|
4
|
+
type GoogleVertexModelId = 'gemini-1.5-flash' | 'gemini-1.5-pro' | 'gemini-1.0-pro' | 'gemini-1.0-pro-vision' | (string & {});
|
5
5
|
interface GoogleVertexSettings {
|
6
6
|
/**
|
7
7
|
Optional. The maximum number of tokens to consider when sampling.
|
@@ -45,6 +45,13 @@ interface GoogleVertexProviderSettings {
|
|
45
45
|
Your Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.
|
46
46
|
*/
|
47
47
|
project?: string;
|
48
|
+
/**
|
49
|
+
Optional. The Authentication options provided by google-auth-library.
|
50
|
+
Complete list of authentication options is documented in the
|
51
|
+
GoogleAuthOptions interface:
|
52
|
+
https://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.
|
53
|
+
*/
|
54
|
+
googleAuthOptions?: VertexInit['googleAuthOptions'];
|
48
55
|
generateId?: () => string;
|
49
56
|
createVertexAI?: ({ project, location, }: {
|
50
57
|
project: string;
|
package/dist/index.js
CHANGED
@@ -27,10 +27,10 @@ module.exports = __toCommonJS(src_exports);
|
|
27
27
|
|
28
28
|
// src/google-vertex-provider.ts
|
29
29
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
30
|
-
var
|
30
|
+
var import_vertexai2 = require("@google-cloud/vertexai");
|
31
31
|
|
32
32
|
// src/google-vertex-language-model.ts
|
33
|
-
var
|
33
|
+
var import_provider3 = require("@ai-sdk/provider");
|
34
34
|
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
35
35
|
|
36
36
|
// src/convert-to-google-vertex-content-request.ts
|
@@ -87,15 +87,18 @@ function convertToGoogleVertexContentRequest(prompt) {
|
|
87
87
|
case "assistant": {
|
88
88
|
contents.push({
|
89
89
|
role: "assistant",
|
90
|
-
parts: content.map((part) => {
|
90
|
+
parts: content.filter((part) => part.type !== "text" || part.text.length > 0).map((part) => {
|
91
91
|
switch (part.type) {
|
92
92
|
case "text": {
|
93
|
-
return {
|
93
|
+
return { text: part.text };
|
94
94
|
}
|
95
95
|
case "tool-call": {
|
96
|
-
|
97
|
-
|
98
|
-
|
96
|
+
return {
|
97
|
+
functionCall: {
|
98
|
+
name: part.toolName,
|
99
|
+
args: part.args
|
100
|
+
}
|
101
|
+
};
|
99
102
|
}
|
100
103
|
default: {
|
101
104
|
const _exhaustiveCheck = part;
|
@@ -109,9 +112,16 @@ function convertToGoogleVertexContentRequest(prompt) {
|
|
109
112
|
break;
|
110
113
|
}
|
111
114
|
case "tool": {
|
112
|
-
|
113
|
-
|
115
|
+
contents.push({
|
116
|
+
role: "user",
|
117
|
+
parts: content.map((part) => ({
|
118
|
+
functionResponse: {
|
119
|
+
name: part.toolName,
|
120
|
+
response: part.result
|
121
|
+
}
|
122
|
+
}))
|
114
123
|
});
|
124
|
+
break;
|
115
125
|
}
|
116
126
|
default: {
|
117
127
|
const _exhaustiveCheck = role;
|
@@ -150,6 +160,115 @@ function mapGoogleVertexFinishReason({
|
|
150
160
|
}
|
151
161
|
}
|
152
162
|
|
163
|
+
// src/prepare-function-declaration-schema.ts
|
164
|
+
var import_provider2 = require("@ai-sdk/provider");
|
165
|
+
var import_vertexai = require("@google-cloud/vertexai");
|
166
|
+
var primitiveTypes = {
|
167
|
+
string: import_vertexai.FunctionDeclarationSchemaType.STRING,
|
168
|
+
number: import_vertexai.FunctionDeclarationSchemaType.NUMBER,
|
169
|
+
integer: import_vertexai.FunctionDeclarationSchemaType.INTEGER,
|
170
|
+
boolean: import_vertexai.FunctionDeclarationSchemaType.BOOLEAN
|
171
|
+
};
|
172
|
+
function prepareFunctionDeclarationSchema(jsonSchema) {
|
173
|
+
var _a;
|
174
|
+
if (typeof jsonSchema === "boolean") {
|
175
|
+
return {
|
176
|
+
type: import_vertexai.FunctionDeclarationSchemaType.BOOLEAN,
|
177
|
+
properties: {}
|
178
|
+
};
|
179
|
+
}
|
180
|
+
const type = jsonSchema.type;
|
181
|
+
switch (type) {
|
182
|
+
case "number":
|
183
|
+
case "integer":
|
184
|
+
case "boolean":
|
185
|
+
case "string":
|
186
|
+
return {
|
187
|
+
type: primitiveTypes[type],
|
188
|
+
description: jsonSchema.description,
|
189
|
+
required: jsonSchema.required,
|
190
|
+
properties: {}
|
191
|
+
};
|
192
|
+
case "object":
|
193
|
+
return {
|
194
|
+
type: import_vertexai.FunctionDeclarationSchemaType.OBJECT,
|
195
|
+
properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
|
196
|
+
(acc, [key, value]) => {
|
197
|
+
acc[key] = prepareFunctionDeclarationSchemaProperty(value);
|
198
|
+
return acc;
|
199
|
+
},
|
200
|
+
{}
|
201
|
+
),
|
202
|
+
description: jsonSchema.description,
|
203
|
+
required: jsonSchema.required
|
204
|
+
};
|
205
|
+
case "array":
|
206
|
+
throw new import_provider2.UnsupportedFunctionalityError({
|
207
|
+
functionality: "arrays are not supported as root or as array parameters"
|
208
|
+
});
|
209
|
+
default: {
|
210
|
+
throw new import_provider2.UnsupportedFunctionalityError({
|
211
|
+
functionality: `json schema type: ${type}`
|
212
|
+
});
|
213
|
+
}
|
214
|
+
}
|
215
|
+
}
|
216
|
+
function prepareFunctionDeclarationSchemaProperty(jsonSchema) {
|
217
|
+
var _a;
|
218
|
+
if (typeof jsonSchema === "boolean") {
|
219
|
+
return {
|
220
|
+
type: import_vertexai.FunctionDeclarationSchemaType.BOOLEAN
|
221
|
+
};
|
222
|
+
}
|
223
|
+
const type = jsonSchema.type;
|
224
|
+
switch (type) {
|
225
|
+
case "number":
|
226
|
+
case "integer":
|
227
|
+
case "boolean":
|
228
|
+
case "string": {
|
229
|
+
return {
|
230
|
+
type: primitiveTypes[type],
|
231
|
+
description: jsonSchema.description,
|
232
|
+
required: jsonSchema.required
|
233
|
+
};
|
234
|
+
}
|
235
|
+
case "array": {
|
236
|
+
const items = jsonSchema.items;
|
237
|
+
if (items == null) {
|
238
|
+
throw new import_provider2.UnsupportedFunctionalityError({
|
239
|
+
functionality: "Array without items is not supported in tool parameters"
|
240
|
+
});
|
241
|
+
}
|
242
|
+
if (Array.isArray(items)) {
|
243
|
+
throw new import_provider2.UnsupportedFunctionalityError({
|
244
|
+
functionality: "Tuple arrays are not supported in tool parameters"
|
245
|
+
});
|
246
|
+
}
|
247
|
+
return {
|
248
|
+
type: import_vertexai.FunctionDeclarationSchemaType.ARRAY,
|
249
|
+
description: jsonSchema.description,
|
250
|
+
required: jsonSchema.required,
|
251
|
+
items: prepareFunctionDeclarationSchema(items)
|
252
|
+
};
|
253
|
+
}
|
254
|
+
case "object":
|
255
|
+
return {
|
256
|
+
type: import_vertexai.FunctionDeclarationSchemaType.OBJECT,
|
257
|
+
properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
|
258
|
+
(acc, [key, value]) => {
|
259
|
+
acc[key] = prepareFunctionDeclarationSchema(value);
|
260
|
+
return acc;
|
261
|
+
},
|
262
|
+
{}
|
263
|
+
),
|
264
|
+
description: jsonSchema.description,
|
265
|
+
required: jsonSchema.required
|
266
|
+
};
|
267
|
+
default:
|
268
|
+
throw new Error(`Unsupported type: ${type}`);
|
269
|
+
}
|
270
|
+
}
|
271
|
+
|
153
272
|
// src/google-vertex-language-model.ts
|
154
273
|
var GoogleVertexLanguageModel = class {
|
155
274
|
constructor(modelId, settings, config) {
|
@@ -170,7 +289,6 @@ var GoogleVertexLanguageModel = class {
|
|
170
289
|
temperature,
|
171
290
|
topP
|
172
291
|
}) {
|
173
|
-
var _a;
|
174
292
|
const warnings = [];
|
175
293
|
if (frequencyPenalty != null) {
|
176
294
|
warnings.push({
|
@@ -201,32 +319,28 @@ var GoogleVertexLanguageModel = class {
|
|
201
319
|
const type = mode.type;
|
202
320
|
switch (type) {
|
203
321
|
case "regular": {
|
204
|
-
if ((_a = mode.tools) == null ? void 0 : _a.length) {
|
205
|
-
throw new import_provider2.UnsupportedFunctionalityError({
|
206
|
-
functionality: "tools"
|
207
|
-
});
|
208
|
-
}
|
209
322
|
return {
|
210
323
|
model: this.config.vertexAI.getGenerativeModel({
|
211
324
|
model: this.modelId,
|
212
|
-
generationConfig
|
325
|
+
generationConfig,
|
326
|
+
tools: prepareTools(mode)
|
213
327
|
}),
|
214
328
|
contentRequest: convertToGoogleVertexContentRequest(prompt),
|
215
329
|
warnings
|
216
330
|
};
|
217
331
|
}
|
218
332
|
case "object-json": {
|
219
|
-
throw new
|
333
|
+
throw new import_provider3.UnsupportedFunctionalityError({
|
220
334
|
functionality: "object-json mode"
|
221
335
|
});
|
222
336
|
}
|
223
337
|
case "object-tool": {
|
224
|
-
throw new
|
338
|
+
throw new import_provider3.UnsupportedFunctionalityError({
|
225
339
|
functionality: "object-tool mode"
|
226
340
|
});
|
227
341
|
}
|
228
342
|
case "object-grammar": {
|
229
|
-
throw new
|
343
|
+
throw new import_provider3.UnsupportedFunctionalityError({
|
230
344
|
functionality: "object-grammar mode"
|
231
345
|
});
|
232
346
|
}
|
@@ -242,14 +356,20 @@ var GoogleVertexLanguageModel = class {
|
|
242
356
|
const { response } = await model.generateContent(contentRequest);
|
243
357
|
const firstCandidate = (_a = response.candidates) == null ? void 0 : _a[0];
|
244
358
|
if (firstCandidate == null) {
|
245
|
-
throw new
|
359
|
+
throw new import_provider3.NoContentGeneratedError({ message: "No candidates returned" });
|
246
360
|
}
|
361
|
+
const parts = firstCandidate.content.parts;
|
247
362
|
const usageMetadata = response.usageMetadata;
|
363
|
+
const toolCalls = getToolCallsFromParts({
|
364
|
+
parts,
|
365
|
+
generateId: this.config.generateId
|
366
|
+
});
|
248
367
|
return {
|
249
|
-
text:
|
368
|
+
text: getTextFromParts(parts),
|
369
|
+
toolCalls,
|
250
370
|
finishReason: mapGoogleVertexFinishReason({
|
251
371
|
finishReason: firstCandidate.finishReason,
|
252
|
-
hasToolCalls:
|
372
|
+
hasToolCalls: toolCalls != null && toolCalls.length > 0
|
253
373
|
}),
|
254
374
|
usage: {
|
255
375
|
promptTokens: (_b = usageMetadata == null ? void 0 : usageMetadata.promptTokenCount) != null ? _b : NaN,
|
@@ -270,6 +390,8 @@ var GoogleVertexLanguageModel = class {
|
|
270
390
|
promptTokens: Number.NaN,
|
271
391
|
completionTokens: Number.NaN
|
272
392
|
};
|
393
|
+
const generateId2 = this.config.generateId;
|
394
|
+
let hasToolCalls = false;
|
273
395
|
return {
|
274
396
|
stream: (0, import_provider_utils2.convertAsyncGeneratorToReadableStream)(stream).pipeThrough(
|
275
397
|
new TransformStream(
|
@@ -283,27 +405,53 @@ var GoogleVertexLanguageModel = class {
|
|
283
405
|
completionTokens: (_b = usageMetadata.candidatesTokenCount) != null ? _b : NaN
|
284
406
|
};
|
285
407
|
}
|
286
|
-
const
|
287
|
-
if (
|
408
|
+
const candidate = (_c = chunk.candidates) == null ? void 0 : _c[0];
|
409
|
+
if (candidate == null) {
|
288
410
|
controller.enqueue({
|
289
411
|
type: "error",
|
290
|
-
error: new
|
412
|
+
error: new import_provider3.NoContentGeneratedError({
|
291
413
|
message: "No candidates in chunk."
|
292
414
|
})
|
293
415
|
});
|
294
416
|
return;
|
295
417
|
}
|
296
|
-
if (
|
418
|
+
if (candidate.finishReason != null) {
|
297
419
|
finishReason = mapGoogleVertexFinishReason({
|
298
|
-
finishReason:
|
299
|
-
hasToolCalls
|
420
|
+
finishReason: candidate.finishReason,
|
421
|
+
hasToolCalls
|
300
422
|
});
|
301
423
|
}
|
302
|
-
const
|
303
|
-
|
304
|
-
|
305
|
-
|
424
|
+
const content = candidate.content;
|
425
|
+
const deltaText = getTextFromParts(content.parts);
|
426
|
+
if (deltaText != null) {
|
427
|
+
controller.enqueue({
|
428
|
+
type: "text-delta",
|
429
|
+
textDelta: deltaText
|
430
|
+
});
|
431
|
+
}
|
432
|
+
const toolCallDeltas = getToolCallsFromParts({
|
433
|
+
parts: content.parts,
|
434
|
+
generateId: generateId2
|
306
435
|
});
|
436
|
+
if (toolCallDeltas != null) {
|
437
|
+
for (const toolCall of toolCallDeltas) {
|
438
|
+
controller.enqueue({
|
439
|
+
type: "tool-call-delta",
|
440
|
+
toolCallType: "function",
|
441
|
+
toolCallId: toolCall.toolCallId,
|
442
|
+
toolName: toolCall.toolName,
|
443
|
+
argsTextDelta: toolCall.args
|
444
|
+
});
|
445
|
+
controller.enqueue({
|
446
|
+
type: "tool-call",
|
447
|
+
toolCallType: "function",
|
448
|
+
toolCallId: toolCall.toolCallId,
|
449
|
+
toolName: toolCall.toolName,
|
450
|
+
args: toolCall.args
|
451
|
+
});
|
452
|
+
hasToolCalls = true;
|
453
|
+
}
|
454
|
+
}
|
307
455
|
},
|
308
456
|
flush(controller) {
|
309
457
|
controller.enqueue({
|
@@ -323,6 +471,51 @@ var GoogleVertexLanguageModel = class {
|
|
323
471
|
};
|
324
472
|
}
|
325
473
|
};
|
474
|
+
function prepareTools(mode) {
|
475
|
+
var _a;
|
476
|
+
const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
|
477
|
+
if (tools == null) {
|
478
|
+
return void 0;
|
479
|
+
}
|
480
|
+
const toolChoice = mode.toolChoice;
|
481
|
+
if ((toolChoice == null ? void 0 : toolChoice.type) === "none") {
|
482
|
+
return void 0;
|
483
|
+
}
|
484
|
+
if (toolChoice == null || toolChoice.type === "auto") {
|
485
|
+
return [
|
486
|
+
{
|
487
|
+
functionDeclarations: tools.map((tool) => {
|
488
|
+
var _a2;
|
489
|
+
return {
|
490
|
+
name: tool.name,
|
491
|
+
description: (_a2 = tool.description) != null ? _a2 : "",
|
492
|
+
parameters: prepareFunctionDeclarationSchema(tool.parameters)
|
493
|
+
};
|
494
|
+
})
|
495
|
+
}
|
496
|
+
];
|
497
|
+
}
|
498
|
+
throw new import_provider3.UnsupportedFunctionalityError({
|
499
|
+
functionality: `toolChoice: ${toolChoice.type}`
|
500
|
+
});
|
501
|
+
}
|
502
|
+
function getToolCallsFromParts({
|
503
|
+
parts,
|
504
|
+
generateId: generateId2
|
505
|
+
}) {
|
506
|
+
return parts.flatMap(
|
507
|
+
(part) => part.functionCall == null ? [] : {
|
508
|
+
toolCallType: "function",
|
509
|
+
toolCallId: generateId2(),
|
510
|
+
toolName: part.functionCall.name,
|
511
|
+
args: JSON.stringify(part.functionCall.args)
|
512
|
+
}
|
513
|
+
);
|
514
|
+
}
|
515
|
+
function getTextFromParts(parts) {
|
516
|
+
const textParts = parts.filter((part) => "text" in part);
|
517
|
+
return textParts.length === 0 ? void 0 : textParts.map((part) => part.text).join("");
|
518
|
+
}
|
326
519
|
|
327
520
|
// src/google-vertex-provider.ts
|
328
521
|
function createVertex(options = {}) {
|
@@ -340,9 +533,10 @@ function createVertex(options = {}) {
|
|
340
533
|
settingName: "location",
|
341
534
|
environmentVariableName: "GOOGLE_VERTEX_LOCATION",
|
342
535
|
description: "Google Vertex location"
|
343
|
-
})
|
536
|
+
}),
|
537
|
+
googleAuthOptions: options.googleAuthOptions
|
344
538
|
};
|
345
|
-
return (_b = (_a = options.createVertexAI) == null ? void 0 : _a.call(options, config)) != null ? _b : new
|
539
|
+
return (_b = (_a = options.createVertexAI) == null ? void 0 : _a.call(options, config)) != null ? _b : new import_vertexai2.VertexAI(config);
|
346
540
|
};
|
347
541
|
const createChatModel = (modelId, settings = {}) => {
|
348
542
|
var _a;
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/google-vertex-provider.ts","../src/google-vertex-language-model.ts","../src/convert-to-google-vertex-content-request.ts","../src/map-google-vertex-finish-reason.ts"],"sourcesContent":["export * from './google-vertex-provider';\n","import { generateId, loadSetting } from '@ai-sdk/provider-utils';\nimport { VertexAI } from '@google-cloud/vertexai';\nimport { GoogleVertexLanguageModel } from './google-vertex-language-model';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\n\nexport interface GoogleVertexProvider {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): GoogleVertexLanguageModel;\n}\n\nexport interface GoogleVertexProviderSettings {\n /**\nYour Google Vertex location. Defaults to the environment variable `GOOGLE_VERTEX_LOCATION`.\n */\n location?: string;\n\n /**\nYour Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.\n */\n project?: string;\n\n // for testing\n generateId?: () => string;\n\n // for testing\n createVertexAI?: ({\n project,\n location,\n }: {\n project: string;\n location: string;\n }) => VertexAI;\n}\n\n/**\nCreate a Google Vertex AI provider instance.\n */\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n const createVertexAI = () => {\n const config = {\n project: loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n }),\n location: loadSetting({\n settingValue: options.location,\n settingName: 'location',\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n description: 'Google Vertex location',\n }),\n };\n\n return options.createVertexAI?.(config) ?? new VertexAI(config);\n };\n\n const createChatModel = (\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings = {},\n ) =>\n new GoogleVertexLanguageModel(modelId, settings, {\n vertexAI: createVertexAI(),\n generateId: options.generateId ?? generateId,\n });\n\n const provider = function (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Google Vertex AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.chat = createChatModel;\n\n return provider as GoogleVertexProvider;\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import {\n LanguageModelV1,\n LanguageModelV1CallOptions,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1StreamPart,\n NoContentGeneratedError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertAsyncGeneratorToReadableStream } from '@ai-sdk/provider-utils';\nimport {\n GenerateContentResponse,\n GenerationConfig,\n VertexAI,\n} from '@google-cloud/vertexai';\nimport { convertToGoogleVertexContentRequest } from './convert-to-google-vertex-content-request';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\nimport { mapGoogleVertexFinishReason } from './map-google-vertex-finish-reason';\n\ntype GoogleVertexAIConfig = {\n vertexAI: VertexAI;\n generateId: () => string;\n};\n\nexport class GoogleVertexLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'google-vertex';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: GoogleVertexModelId;\n readonly settings: GoogleVertexSettings;\n\n private readonly config: GoogleVertexAIConfig;\n\n constructor(\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings,\n config: GoogleVertexAIConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private getArgs({\n prompt,\n mode,\n frequencyPenalty,\n presencePenalty,\n seed,\n maxTokens,\n temperature,\n topP,\n }: LanguageModelV1CallOptions) {\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n if (mode.tools?.length) {\n throw new UnsupportedFunctionalityError({\n functionality: 'tools',\n });\n }\n\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig,\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { response } = await model.generateContent(contentRequest);\n\n const firstCandidate = response.candidates?.[0];\n\n if (firstCandidate == null) {\n throw new NoContentGeneratedError({ message: 'No candidates returned' });\n }\n\n const usageMetadata = response.usageMetadata;\n\n return {\n text: firstCandidate.content.parts.map(part => part.text).join(''),\n finishReason: mapGoogleVertexFinishReason({\n finishReason: firstCandidate.finishReason,\n hasToolCalls: false,\n }),\n usage: {\n promptTokens: usageMetadata?.promptTokenCount ?? NaN,\n completionTokens: usageMetadata?.candidatesTokenCount ?? NaN,\n },\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n\n return {\n stream: convertAsyncGeneratorToReadableStream(stream).pipeThrough(\n new TransformStream<GenerateContentResponse, LanguageModelV1StreamPart>(\n {\n transform(chunk, controller) {\n const usageMetadata = chunk.usageMetadata;\n if (usageMetadata != null) {\n usage = {\n promptTokens: usageMetadata.promptTokenCount ?? NaN,\n completionTokens: usageMetadata.candidatesTokenCount ?? NaN,\n };\n }\n\n const firstCandidate = chunk.candidates?.[0];\n\n if (firstCandidate == null) {\n controller.enqueue({\n type: 'error',\n error: new NoContentGeneratedError({\n message: 'No candidates in chunk.',\n }),\n });\n return;\n }\n\n if (firstCandidate.finishReason != null) {\n finishReason = mapGoogleVertexFinishReason({\n finishReason: firstCandidate.finishReason,\n hasToolCalls: false,\n });\n }\n\n const textDelta = firstCandidate.content.parts\n .map(part => part.text)\n .join('');\n\n controller.enqueue({\n type: 'text-delta',\n textDelta,\n });\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n });\n },\n },\n ),\n ),\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n}\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport { Content, GenerateContentRequest } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n let systemInstruction: string | undefined = undefined;\n const contents: Content[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (systemInstruction != null) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Multiple system messages',\n });\n }\n\n systemInstruction = content;\n break;\n }\n\n case 'user': {\n contents.push({\n role: 'user',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'URL image parts',\n });\n } else {\n return {\n inlineData: {\n data: convertUint8ArrayToBase64(part.image),\n mimeType: part.mimeType ?? 'image/jpeg',\n },\n };\n }\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n contents.push({\n role: 'assistant',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: `role: tool`,\n });\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new UnsupportedFunctionalityError({\n functionality: `role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return {\n systemInstruction,\n contents,\n };\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { FinishReason } from '@google-cloud/vertexai';\n\nexport function mapGoogleVertexFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: FinishReason | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'STOP':\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'MAX_TOKENS':\n return 'length';\n case 'BLOCKLIST':\n case 'PROHIBITED_CONTENT':\n case 'SPII':\n case 'RECITATION':\n case 'SAFETY':\n return 'content-filter';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider","import_provider_utils"]}
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/google-vertex-provider.ts","../src/google-vertex-language-model.ts","../src/convert-to-google-vertex-content-request.ts","../src/map-google-vertex-finish-reason.ts","../src/prepare-function-declaration-schema.ts"],"sourcesContent":["export * from './google-vertex-provider';\n","import { generateId, loadSetting } from '@ai-sdk/provider-utils';\nimport { VertexAI, VertexInit } from '@google-cloud/vertexai';\nimport { GoogleVertexLanguageModel } from './google-vertex-language-model';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\n\nexport interface GoogleVertexProvider {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): GoogleVertexLanguageModel;\n}\n\nexport interface GoogleVertexProviderSettings {\n /**\nYour Google Vertex location. Defaults to the environment variable `GOOGLE_VERTEX_LOCATION`.\n */\n location?: string;\n\n /**\nYour Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.\n */\n project?: string;\n\n /**\n Optional. The Authentication options provided by google-auth-library.\nComplete list of authentication options is documented in the\nGoogleAuthOptions interface:\nhttps://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.\n */\n googleAuthOptions?: VertexInit['googleAuthOptions'];\n\n // for testing\n generateId?: () => string;\n\n // for testing\n createVertexAI?: ({\n project,\n location,\n }: {\n project: string;\n location: string;\n }) => VertexAI;\n}\n\n/**\nCreate a Google Vertex AI provider instance.\n */\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n const createVertexAI = () => {\n const config = {\n project: loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n }),\n location: loadSetting({\n settingValue: options.location,\n settingName: 'location',\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n description: 'Google Vertex location',\n }),\n googleAuthOptions: options.googleAuthOptions,\n };\n\n return options.createVertexAI?.(config) ?? new VertexAI(config);\n };\n\n const createChatModel = (\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings = {},\n ) =>\n new GoogleVertexLanguageModel(modelId, settings, {\n vertexAI: createVertexAI(),\n generateId: options.generateId ?? generateId,\n });\n\n const provider = function (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Google Vertex AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.chat = createChatModel;\n\n return provider as GoogleVertexProvider;\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import {\n LanguageModelV1,\n LanguageModelV1CallOptions,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1StreamPart,\n NoContentGeneratedError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertAsyncGeneratorToReadableStream } from '@ai-sdk/provider-utils';\nimport {\n GenerateContentResponse,\n GenerationConfig,\n Part,\n VertexAI,\n} from '@google-cloud/vertexai';\nimport { convertToGoogleVertexContentRequest } from './convert-to-google-vertex-content-request';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\nimport { mapGoogleVertexFinishReason } from './map-google-vertex-finish-reason';\nimport { prepareFunctionDeclarationSchema } from './prepare-function-declaration-schema';\n\ntype GoogleVertexAIConfig = {\n vertexAI: VertexAI;\n generateId: () => string;\n};\n\nexport class GoogleVertexLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'google-vertex';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: GoogleVertexModelId;\n readonly settings: GoogleVertexSettings;\n\n private readonly config: GoogleVertexAIConfig;\n\n constructor(\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings,\n config: GoogleVertexAIConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private getArgs({\n prompt,\n mode,\n frequencyPenalty,\n presencePenalty,\n seed,\n maxTokens,\n temperature,\n topP,\n }: LanguageModelV1CallOptions) {\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig,\n tools: prepareTools(mode),\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { response } = await model.generateContent(contentRequest);\n\n const firstCandidate = response.candidates?.[0];\n\n if (firstCandidate == null) {\n throw new NoContentGeneratedError({ message: 'No candidates returned' });\n }\n\n const parts = firstCandidate.content.parts;\n const usageMetadata = response.usageMetadata;\n\n const toolCalls = getToolCallsFromParts({\n parts,\n generateId: this.config.generateId,\n });\n\n return {\n text: getTextFromParts(parts),\n toolCalls,\n finishReason: mapGoogleVertexFinishReason({\n finishReason: firstCandidate.finishReason,\n hasToolCalls: toolCalls != null && toolCalls.length > 0,\n }),\n usage: {\n promptTokens: usageMetadata?.promptTokenCount ?? NaN,\n completionTokens: usageMetadata?.candidatesTokenCount ?? NaN,\n },\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n\n const generateId = this.config.generateId;\n let hasToolCalls = false;\n\n return {\n stream: convertAsyncGeneratorToReadableStream(stream).pipeThrough(\n new TransformStream<GenerateContentResponse, LanguageModelV1StreamPart>(\n {\n transform(chunk, controller) {\n const usageMetadata = chunk.usageMetadata;\n if (usageMetadata != null) {\n usage = {\n promptTokens: usageMetadata.promptTokenCount ?? NaN,\n completionTokens: usageMetadata.candidatesTokenCount ?? NaN,\n };\n }\n\n const candidate = chunk.candidates?.[0];\n\n if (candidate == null) {\n controller.enqueue({\n type: 'error',\n error: new NoContentGeneratedError({\n message: 'No candidates in chunk.',\n }),\n });\n return;\n }\n\n if (candidate.finishReason != null) {\n finishReason = mapGoogleVertexFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls,\n });\n }\n\n const content = candidate.content;\n\n const deltaText = getTextFromParts(content.parts);\n if (deltaText != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: deltaText,\n });\n }\n\n const toolCallDeltas = getToolCallsFromParts({\n parts: content.parts,\n generateId,\n });\n\n if (toolCallDeltas != null) {\n for (const toolCall of toolCallDeltas) {\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n argsTextDelta: toolCall.args,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n });\n\n hasToolCalls = true;\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n });\n },\n },\n ),\n ),\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n}\n\nfunction prepareTools(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n) {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return undefined;\n }\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice?.type === 'none') {\n return undefined;\n }\n\n if (toolChoice == null || toolChoice.type === 'auto') {\n return [\n {\n functionDeclarations: tools.map(tool => ({\n name: tool.name,\n description: tool.description ?? '',\n parameters: prepareFunctionDeclarationSchema(tool.parameters),\n })),\n },\n ];\n }\n\n // forcing tool calls or a specific tool call is not supported by Vertex:\n throw new UnsupportedFunctionalityError({\n functionality: `toolChoice: ${toolChoice.type}`,\n });\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n}: {\n parts: Part[];\n generateId: () => string;\n}) {\n return parts.flatMap(part =>\n part.functionCall == null\n ? []\n : {\n toolCallType: 'function' as const,\n toolCallId: generateId(),\n toolName: part.functionCall.name,\n args: JSON.stringify(part.functionCall.args),\n },\n );\n}\n\nfunction getTextFromParts(parts: Part[]) {\n const textParts = parts.filter(part => 'text' in part) as Array<\n Part & { text: string }\n >;\n\n return textParts.length === 0\n ? undefined\n : textParts.map(part => part.text).join('');\n}\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport { Content, GenerateContentRequest } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n let systemInstruction: string | undefined = undefined;\n const contents: Content[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (systemInstruction != null) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Multiple system messages',\n });\n }\n\n systemInstruction = content;\n break;\n }\n\n case 'user': {\n contents.push({\n role: 'user',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'URL image parts',\n });\n } else {\n return {\n inlineData: {\n data: convertUint8ArrayToBase64(part.image),\n mimeType: part.mimeType ?? 'image/jpeg',\n },\n };\n }\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n contents.push({\n role: 'assistant',\n parts: content\n .filter(part => part.type !== 'text' || part.text.length > 0)\n .map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n\n case 'tool-call': {\n return {\n functionCall: {\n name: part.toolName,\n args: part.args as object,\n },\n };\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'tool': {\n contents.push({\n role: 'user',\n parts: content.map(part => ({\n functionResponse: {\n name: part.toolName,\n response: part.result as object,\n },\n })),\n });\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new UnsupportedFunctionalityError({\n functionality: `role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return {\n systemInstruction,\n contents,\n };\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { FinishReason } from '@google-cloud/vertexai';\n\nexport function mapGoogleVertexFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: FinishReason | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'STOP':\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'MAX_TOKENS':\n return 'length';\n case 'BLOCKLIST':\n case 'PROHIBITED_CONTENT':\n case 'SPII':\n case 'RECITATION':\n case 'SAFETY':\n return 'content-filter';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n","import { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport {\n FunctionDeclarationSchema,\n FunctionDeclarationSchemaProperty,\n FunctionDeclarationSchemaType,\n} from '@google-cloud/vertexai';\nimport { JSONSchema7Definition } from 'json-schema';\n\nconst primitiveTypes = {\n string: FunctionDeclarationSchemaType.STRING,\n number: FunctionDeclarationSchemaType.NUMBER,\n integer: FunctionDeclarationSchemaType.INTEGER,\n boolean: FunctionDeclarationSchemaType.BOOLEAN,\n};\n\n/**\nConverts the tool parameters JSON schema to the format required by Vertex AI.\n */\nexport function prepareFunctionDeclarationSchema(\n jsonSchema: JSONSchema7Definition,\n): FunctionDeclarationSchema {\n if (typeof jsonSchema === 'boolean') {\n return {\n type: FunctionDeclarationSchemaType.BOOLEAN,\n properties: {},\n };\n }\n\n const type = jsonSchema.type;\n switch (type) {\n case 'number':\n case 'integer':\n case 'boolean':\n case 'string':\n return {\n type: primitiveTypes[type],\n description: jsonSchema.description,\n required: jsonSchema.required,\n properties: {},\n };\n\n case 'object':\n return {\n type: FunctionDeclarationSchemaType.OBJECT,\n properties: Object.entries(jsonSchema.properties ?? {}).reduce(\n (acc, [key, value]) => {\n acc[key] = prepareFunctionDeclarationSchemaProperty(value);\n return acc;\n },\n {} as Record<string, FunctionDeclarationSchemaProperty>,\n ),\n description: jsonSchema.description,\n required: jsonSchema.required,\n };\n\n case 'array':\n throw new UnsupportedFunctionalityError({\n functionality:\n 'arrays are not supported as root or as array parameters',\n });\n\n default: {\n throw new UnsupportedFunctionalityError({\n functionality: `json schema type: ${type}`,\n });\n }\n }\n}\n\nfunction prepareFunctionDeclarationSchemaProperty(\n jsonSchema: JSONSchema7Definition,\n): FunctionDeclarationSchemaProperty {\n if (typeof jsonSchema === 'boolean') {\n return {\n type: FunctionDeclarationSchemaType.BOOLEAN,\n };\n }\n\n const type = jsonSchema.type;\n\n switch (type) {\n // primitive types:\n case 'number':\n case 'integer':\n case 'boolean':\n case 'string': {\n return {\n type: primitiveTypes[type],\n description: jsonSchema.description,\n required: jsonSchema.required,\n };\n }\n // array:\n case 'array': {\n const items = jsonSchema.items;\n\n if (items == null) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Array without items is not supported in tool parameters',\n });\n }\n\n if (Array.isArray(items)) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tuple arrays are not supported in tool parameters',\n });\n }\n\n return {\n type: FunctionDeclarationSchemaType.ARRAY,\n description: jsonSchema.description,\n required: jsonSchema.required,\n items: prepareFunctionDeclarationSchema(items),\n };\n }\n // nested object:\n case 'object':\n return {\n type: FunctionDeclarationSchemaType.OBJECT,\n properties: Object.entries(jsonSchema.properties ?? {}).reduce(\n (acc, [key, value]) => {\n acc[key] = prepareFunctionDeclarationSchema(value);\n return acc;\n },\n {} as Record<string, FunctionDeclarationSchema>,\n ),\n description: jsonSchema.description,\n required: jsonSchema.required,\n };\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n"],"mappings":"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","names":["import_provider_utils","import_vertexai","import_provider","import_provider_utils","import_provider","generateId","_a"]}
|
package/dist/index.mjs
CHANGED
@@ -5,7 +5,7 @@ import { VertexAI } from "@google-cloud/vertexai";
|
|
5
5
|
// src/google-vertex-language-model.ts
|
6
6
|
import {
|
7
7
|
NoContentGeneratedError,
|
8
|
-
UnsupportedFunctionalityError as
|
8
|
+
UnsupportedFunctionalityError as UnsupportedFunctionalityError3
|
9
9
|
} from "@ai-sdk/provider";
|
10
10
|
import { convertAsyncGeneratorToReadableStream } from "@ai-sdk/provider-utils";
|
11
11
|
|
@@ -65,15 +65,18 @@ function convertToGoogleVertexContentRequest(prompt) {
|
|
65
65
|
case "assistant": {
|
66
66
|
contents.push({
|
67
67
|
role: "assistant",
|
68
|
-
parts: content.map((part) => {
|
68
|
+
parts: content.filter((part) => part.type !== "text" || part.text.length > 0).map((part) => {
|
69
69
|
switch (part.type) {
|
70
70
|
case "text": {
|
71
|
-
return {
|
71
|
+
return { text: part.text };
|
72
72
|
}
|
73
73
|
case "tool-call": {
|
74
|
-
|
75
|
-
|
76
|
-
|
74
|
+
return {
|
75
|
+
functionCall: {
|
76
|
+
name: part.toolName,
|
77
|
+
args: part.args
|
78
|
+
}
|
79
|
+
};
|
77
80
|
}
|
78
81
|
default: {
|
79
82
|
const _exhaustiveCheck = part;
|
@@ -87,9 +90,16 @@ function convertToGoogleVertexContentRequest(prompt) {
|
|
87
90
|
break;
|
88
91
|
}
|
89
92
|
case "tool": {
|
90
|
-
|
91
|
-
|
93
|
+
contents.push({
|
94
|
+
role: "user",
|
95
|
+
parts: content.map((part) => ({
|
96
|
+
functionResponse: {
|
97
|
+
name: part.toolName,
|
98
|
+
response: part.result
|
99
|
+
}
|
100
|
+
}))
|
92
101
|
});
|
102
|
+
break;
|
93
103
|
}
|
94
104
|
default: {
|
95
105
|
const _exhaustiveCheck = role;
|
@@ -128,6 +138,117 @@ function mapGoogleVertexFinishReason({
|
|
128
138
|
}
|
129
139
|
}
|
130
140
|
|
141
|
+
// src/prepare-function-declaration-schema.ts
|
142
|
+
import { UnsupportedFunctionalityError as UnsupportedFunctionalityError2 } from "@ai-sdk/provider";
|
143
|
+
import {
|
144
|
+
FunctionDeclarationSchemaType
|
145
|
+
} from "@google-cloud/vertexai";
|
146
|
+
var primitiveTypes = {
|
147
|
+
string: FunctionDeclarationSchemaType.STRING,
|
148
|
+
number: FunctionDeclarationSchemaType.NUMBER,
|
149
|
+
integer: FunctionDeclarationSchemaType.INTEGER,
|
150
|
+
boolean: FunctionDeclarationSchemaType.BOOLEAN
|
151
|
+
};
|
152
|
+
function prepareFunctionDeclarationSchema(jsonSchema) {
|
153
|
+
var _a;
|
154
|
+
if (typeof jsonSchema === "boolean") {
|
155
|
+
return {
|
156
|
+
type: FunctionDeclarationSchemaType.BOOLEAN,
|
157
|
+
properties: {}
|
158
|
+
};
|
159
|
+
}
|
160
|
+
const type = jsonSchema.type;
|
161
|
+
switch (type) {
|
162
|
+
case "number":
|
163
|
+
case "integer":
|
164
|
+
case "boolean":
|
165
|
+
case "string":
|
166
|
+
return {
|
167
|
+
type: primitiveTypes[type],
|
168
|
+
description: jsonSchema.description,
|
169
|
+
required: jsonSchema.required,
|
170
|
+
properties: {}
|
171
|
+
};
|
172
|
+
case "object":
|
173
|
+
return {
|
174
|
+
type: FunctionDeclarationSchemaType.OBJECT,
|
175
|
+
properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
|
176
|
+
(acc, [key, value]) => {
|
177
|
+
acc[key] = prepareFunctionDeclarationSchemaProperty(value);
|
178
|
+
return acc;
|
179
|
+
},
|
180
|
+
{}
|
181
|
+
),
|
182
|
+
description: jsonSchema.description,
|
183
|
+
required: jsonSchema.required
|
184
|
+
};
|
185
|
+
case "array":
|
186
|
+
throw new UnsupportedFunctionalityError2({
|
187
|
+
functionality: "arrays are not supported as root or as array parameters"
|
188
|
+
});
|
189
|
+
default: {
|
190
|
+
throw new UnsupportedFunctionalityError2({
|
191
|
+
functionality: `json schema type: ${type}`
|
192
|
+
});
|
193
|
+
}
|
194
|
+
}
|
195
|
+
}
|
196
|
+
function prepareFunctionDeclarationSchemaProperty(jsonSchema) {
|
197
|
+
var _a;
|
198
|
+
if (typeof jsonSchema === "boolean") {
|
199
|
+
return {
|
200
|
+
type: FunctionDeclarationSchemaType.BOOLEAN
|
201
|
+
};
|
202
|
+
}
|
203
|
+
const type = jsonSchema.type;
|
204
|
+
switch (type) {
|
205
|
+
case "number":
|
206
|
+
case "integer":
|
207
|
+
case "boolean":
|
208
|
+
case "string": {
|
209
|
+
return {
|
210
|
+
type: primitiveTypes[type],
|
211
|
+
description: jsonSchema.description,
|
212
|
+
required: jsonSchema.required
|
213
|
+
};
|
214
|
+
}
|
215
|
+
case "array": {
|
216
|
+
const items = jsonSchema.items;
|
217
|
+
if (items == null) {
|
218
|
+
throw new UnsupportedFunctionalityError2({
|
219
|
+
functionality: "Array without items is not supported in tool parameters"
|
220
|
+
});
|
221
|
+
}
|
222
|
+
if (Array.isArray(items)) {
|
223
|
+
throw new UnsupportedFunctionalityError2({
|
224
|
+
functionality: "Tuple arrays are not supported in tool parameters"
|
225
|
+
});
|
226
|
+
}
|
227
|
+
return {
|
228
|
+
type: FunctionDeclarationSchemaType.ARRAY,
|
229
|
+
description: jsonSchema.description,
|
230
|
+
required: jsonSchema.required,
|
231
|
+
items: prepareFunctionDeclarationSchema(items)
|
232
|
+
};
|
233
|
+
}
|
234
|
+
case "object":
|
235
|
+
return {
|
236
|
+
type: FunctionDeclarationSchemaType.OBJECT,
|
237
|
+
properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
|
238
|
+
(acc, [key, value]) => {
|
239
|
+
acc[key] = prepareFunctionDeclarationSchema(value);
|
240
|
+
return acc;
|
241
|
+
},
|
242
|
+
{}
|
243
|
+
),
|
244
|
+
description: jsonSchema.description,
|
245
|
+
required: jsonSchema.required
|
246
|
+
};
|
247
|
+
default:
|
248
|
+
throw new Error(`Unsupported type: ${type}`);
|
249
|
+
}
|
250
|
+
}
|
251
|
+
|
131
252
|
// src/google-vertex-language-model.ts
|
132
253
|
var GoogleVertexLanguageModel = class {
|
133
254
|
constructor(modelId, settings, config) {
|
@@ -148,7 +269,6 @@ var GoogleVertexLanguageModel = class {
|
|
148
269
|
temperature,
|
149
270
|
topP
|
150
271
|
}) {
|
151
|
-
var _a;
|
152
272
|
const warnings = [];
|
153
273
|
if (frequencyPenalty != null) {
|
154
274
|
warnings.push({
|
@@ -179,32 +299,28 @@ var GoogleVertexLanguageModel = class {
|
|
179
299
|
const type = mode.type;
|
180
300
|
switch (type) {
|
181
301
|
case "regular": {
|
182
|
-
if ((_a = mode.tools) == null ? void 0 : _a.length) {
|
183
|
-
throw new UnsupportedFunctionalityError2({
|
184
|
-
functionality: "tools"
|
185
|
-
});
|
186
|
-
}
|
187
302
|
return {
|
188
303
|
model: this.config.vertexAI.getGenerativeModel({
|
189
304
|
model: this.modelId,
|
190
|
-
generationConfig
|
305
|
+
generationConfig,
|
306
|
+
tools: prepareTools(mode)
|
191
307
|
}),
|
192
308
|
contentRequest: convertToGoogleVertexContentRequest(prompt),
|
193
309
|
warnings
|
194
310
|
};
|
195
311
|
}
|
196
312
|
case "object-json": {
|
197
|
-
throw new
|
313
|
+
throw new UnsupportedFunctionalityError3({
|
198
314
|
functionality: "object-json mode"
|
199
315
|
});
|
200
316
|
}
|
201
317
|
case "object-tool": {
|
202
|
-
throw new
|
318
|
+
throw new UnsupportedFunctionalityError3({
|
203
319
|
functionality: "object-tool mode"
|
204
320
|
});
|
205
321
|
}
|
206
322
|
case "object-grammar": {
|
207
|
-
throw new
|
323
|
+
throw new UnsupportedFunctionalityError3({
|
208
324
|
functionality: "object-grammar mode"
|
209
325
|
});
|
210
326
|
}
|
@@ -222,12 +338,18 @@ var GoogleVertexLanguageModel = class {
|
|
222
338
|
if (firstCandidate == null) {
|
223
339
|
throw new NoContentGeneratedError({ message: "No candidates returned" });
|
224
340
|
}
|
341
|
+
const parts = firstCandidate.content.parts;
|
225
342
|
const usageMetadata = response.usageMetadata;
|
343
|
+
const toolCalls = getToolCallsFromParts({
|
344
|
+
parts,
|
345
|
+
generateId: this.config.generateId
|
346
|
+
});
|
226
347
|
return {
|
227
|
-
text:
|
348
|
+
text: getTextFromParts(parts),
|
349
|
+
toolCalls,
|
228
350
|
finishReason: mapGoogleVertexFinishReason({
|
229
351
|
finishReason: firstCandidate.finishReason,
|
230
|
-
hasToolCalls:
|
352
|
+
hasToolCalls: toolCalls != null && toolCalls.length > 0
|
231
353
|
}),
|
232
354
|
usage: {
|
233
355
|
promptTokens: (_b = usageMetadata == null ? void 0 : usageMetadata.promptTokenCount) != null ? _b : NaN,
|
@@ -248,6 +370,8 @@ var GoogleVertexLanguageModel = class {
|
|
248
370
|
promptTokens: Number.NaN,
|
249
371
|
completionTokens: Number.NaN
|
250
372
|
};
|
373
|
+
const generateId2 = this.config.generateId;
|
374
|
+
let hasToolCalls = false;
|
251
375
|
return {
|
252
376
|
stream: convertAsyncGeneratorToReadableStream(stream).pipeThrough(
|
253
377
|
new TransformStream(
|
@@ -261,8 +385,8 @@ var GoogleVertexLanguageModel = class {
|
|
261
385
|
completionTokens: (_b = usageMetadata.candidatesTokenCount) != null ? _b : NaN
|
262
386
|
};
|
263
387
|
}
|
264
|
-
const
|
265
|
-
if (
|
388
|
+
const candidate = (_c = chunk.candidates) == null ? void 0 : _c[0];
|
389
|
+
if (candidate == null) {
|
266
390
|
controller.enqueue({
|
267
391
|
type: "error",
|
268
392
|
error: new NoContentGeneratedError({
|
@@ -271,17 +395,43 @@ var GoogleVertexLanguageModel = class {
|
|
271
395
|
});
|
272
396
|
return;
|
273
397
|
}
|
274
|
-
if (
|
398
|
+
if (candidate.finishReason != null) {
|
275
399
|
finishReason = mapGoogleVertexFinishReason({
|
276
|
-
finishReason:
|
277
|
-
hasToolCalls
|
400
|
+
finishReason: candidate.finishReason,
|
401
|
+
hasToolCalls
|
278
402
|
});
|
279
403
|
}
|
280
|
-
const
|
281
|
-
|
282
|
-
|
283
|
-
|
404
|
+
const content = candidate.content;
|
405
|
+
const deltaText = getTextFromParts(content.parts);
|
406
|
+
if (deltaText != null) {
|
407
|
+
controller.enqueue({
|
408
|
+
type: "text-delta",
|
409
|
+
textDelta: deltaText
|
410
|
+
});
|
411
|
+
}
|
412
|
+
const toolCallDeltas = getToolCallsFromParts({
|
413
|
+
parts: content.parts,
|
414
|
+
generateId: generateId2
|
284
415
|
});
|
416
|
+
if (toolCallDeltas != null) {
|
417
|
+
for (const toolCall of toolCallDeltas) {
|
418
|
+
controller.enqueue({
|
419
|
+
type: "tool-call-delta",
|
420
|
+
toolCallType: "function",
|
421
|
+
toolCallId: toolCall.toolCallId,
|
422
|
+
toolName: toolCall.toolName,
|
423
|
+
argsTextDelta: toolCall.args
|
424
|
+
});
|
425
|
+
controller.enqueue({
|
426
|
+
type: "tool-call",
|
427
|
+
toolCallType: "function",
|
428
|
+
toolCallId: toolCall.toolCallId,
|
429
|
+
toolName: toolCall.toolName,
|
430
|
+
args: toolCall.args
|
431
|
+
});
|
432
|
+
hasToolCalls = true;
|
433
|
+
}
|
434
|
+
}
|
285
435
|
},
|
286
436
|
flush(controller) {
|
287
437
|
controller.enqueue({
|
@@ -301,6 +451,51 @@ var GoogleVertexLanguageModel = class {
|
|
301
451
|
};
|
302
452
|
}
|
303
453
|
};
|
454
|
+
function prepareTools(mode) {
|
455
|
+
var _a;
|
456
|
+
const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
|
457
|
+
if (tools == null) {
|
458
|
+
return void 0;
|
459
|
+
}
|
460
|
+
const toolChoice = mode.toolChoice;
|
461
|
+
if ((toolChoice == null ? void 0 : toolChoice.type) === "none") {
|
462
|
+
return void 0;
|
463
|
+
}
|
464
|
+
if (toolChoice == null || toolChoice.type === "auto") {
|
465
|
+
return [
|
466
|
+
{
|
467
|
+
functionDeclarations: tools.map((tool) => {
|
468
|
+
var _a2;
|
469
|
+
return {
|
470
|
+
name: tool.name,
|
471
|
+
description: (_a2 = tool.description) != null ? _a2 : "",
|
472
|
+
parameters: prepareFunctionDeclarationSchema(tool.parameters)
|
473
|
+
};
|
474
|
+
})
|
475
|
+
}
|
476
|
+
];
|
477
|
+
}
|
478
|
+
throw new UnsupportedFunctionalityError3({
|
479
|
+
functionality: `toolChoice: ${toolChoice.type}`
|
480
|
+
});
|
481
|
+
}
|
482
|
+
function getToolCallsFromParts({
|
483
|
+
parts,
|
484
|
+
generateId: generateId2
|
485
|
+
}) {
|
486
|
+
return parts.flatMap(
|
487
|
+
(part) => part.functionCall == null ? [] : {
|
488
|
+
toolCallType: "function",
|
489
|
+
toolCallId: generateId2(),
|
490
|
+
toolName: part.functionCall.name,
|
491
|
+
args: JSON.stringify(part.functionCall.args)
|
492
|
+
}
|
493
|
+
);
|
494
|
+
}
|
495
|
+
function getTextFromParts(parts) {
|
496
|
+
const textParts = parts.filter((part) => "text" in part);
|
497
|
+
return textParts.length === 0 ? void 0 : textParts.map((part) => part.text).join("");
|
498
|
+
}
|
304
499
|
|
305
500
|
// src/google-vertex-provider.ts
|
306
501
|
function createVertex(options = {}) {
|
@@ -318,7 +513,8 @@ function createVertex(options = {}) {
|
|
318
513
|
settingName: "location",
|
319
514
|
environmentVariableName: "GOOGLE_VERTEX_LOCATION",
|
320
515
|
description: "Google Vertex location"
|
321
|
-
})
|
516
|
+
}),
|
517
|
+
googleAuthOptions: options.googleAuthOptions
|
322
518
|
};
|
323
519
|
return (_b = (_a = options.createVertexAI) == null ? void 0 : _a.call(options, config)) != null ? _b : new VertexAI(config);
|
324
520
|
};
|
package/dist/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/google-vertex-provider.ts","../src/google-vertex-language-model.ts","../src/convert-to-google-vertex-content-request.ts","../src/map-google-vertex-finish-reason.ts"],"sourcesContent":["import { generateId, loadSetting } from '@ai-sdk/provider-utils';\nimport { VertexAI } from '@google-cloud/vertexai';\nimport { GoogleVertexLanguageModel } from './google-vertex-language-model';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\n\nexport interface GoogleVertexProvider {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): GoogleVertexLanguageModel;\n}\n\nexport interface GoogleVertexProviderSettings {\n /**\nYour Google Vertex location. Defaults to the environment variable `GOOGLE_VERTEX_LOCATION`.\n */\n location?: string;\n\n /**\nYour Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.\n */\n project?: string;\n\n // for testing\n generateId?: () => string;\n\n // for testing\n createVertexAI?: ({\n project,\n location,\n }: {\n project: string;\n location: string;\n }) => VertexAI;\n}\n\n/**\nCreate a Google Vertex AI provider instance.\n */\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n const createVertexAI = () => {\n const config = {\n project: loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n }),\n location: loadSetting({\n settingValue: options.location,\n settingName: 'location',\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n description: 'Google Vertex location',\n }),\n };\n\n return options.createVertexAI?.(config) ?? new VertexAI(config);\n };\n\n const createChatModel = (\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings = {},\n ) =>\n new GoogleVertexLanguageModel(modelId, settings, {\n vertexAI: createVertexAI(),\n generateId: options.generateId ?? generateId,\n });\n\n const provider = function (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Google Vertex AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.chat = createChatModel;\n\n return provider as GoogleVertexProvider;\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import {\n LanguageModelV1,\n LanguageModelV1CallOptions,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1StreamPart,\n NoContentGeneratedError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertAsyncGeneratorToReadableStream } from '@ai-sdk/provider-utils';\nimport {\n GenerateContentResponse,\n GenerationConfig,\n VertexAI,\n} from '@google-cloud/vertexai';\nimport { convertToGoogleVertexContentRequest } from './convert-to-google-vertex-content-request';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\nimport { mapGoogleVertexFinishReason } from './map-google-vertex-finish-reason';\n\ntype GoogleVertexAIConfig = {\n vertexAI: VertexAI;\n generateId: () => string;\n};\n\nexport class GoogleVertexLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'google-vertex';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: GoogleVertexModelId;\n readonly settings: GoogleVertexSettings;\n\n private readonly config: GoogleVertexAIConfig;\n\n constructor(\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings,\n config: GoogleVertexAIConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private getArgs({\n prompt,\n mode,\n frequencyPenalty,\n presencePenalty,\n seed,\n maxTokens,\n temperature,\n topP,\n }: LanguageModelV1CallOptions) {\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n if (mode.tools?.length) {\n throw new UnsupportedFunctionalityError({\n functionality: 'tools',\n });\n }\n\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig,\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { response } = await model.generateContent(contentRequest);\n\n const firstCandidate = response.candidates?.[0];\n\n if (firstCandidate == null) {\n throw new NoContentGeneratedError({ message: 'No candidates returned' });\n }\n\n const usageMetadata = response.usageMetadata;\n\n return {\n text: firstCandidate.content.parts.map(part => part.text).join(''),\n finishReason: mapGoogleVertexFinishReason({\n finishReason: firstCandidate.finishReason,\n hasToolCalls: false,\n }),\n usage: {\n promptTokens: usageMetadata?.promptTokenCount ?? NaN,\n completionTokens: usageMetadata?.candidatesTokenCount ?? NaN,\n },\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n\n return {\n stream: convertAsyncGeneratorToReadableStream(stream).pipeThrough(\n new TransformStream<GenerateContentResponse, LanguageModelV1StreamPart>(\n {\n transform(chunk, controller) {\n const usageMetadata = chunk.usageMetadata;\n if (usageMetadata != null) {\n usage = {\n promptTokens: usageMetadata.promptTokenCount ?? NaN,\n completionTokens: usageMetadata.candidatesTokenCount ?? NaN,\n };\n }\n\n const firstCandidate = chunk.candidates?.[0];\n\n if (firstCandidate == null) {\n controller.enqueue({\n type: 'error',\n error: new NoContentGeneratedError({\n message: 'No candidates in chunk.',\n }),\n });\n return;\n }\n\n if (firstCandidate.finishReason != null) {\n finishReason = mapGoogleVertexFinishReason({\n finishReason: firstCandidate.finishReason,\n hasToolCalls: false,\n });\n }\n\n const textDelta = firstCandidate.content.parts\n .map(part => part.text)\n .join('');\n\n controller.enqueue({\n type: 'text-delta',\n textDelta,\n });\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n });\n },\n },\n ),\n ),\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n}\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport { Content, GenerateContentRequest } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n let systemInstruction: string | undefined = undefined;\n const contents: Content[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (systemInstruction != null) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Multiple system messages',\n });\n }\n\n systemInstruction = content;\n break;\n }\n\n case 'user': {\n contents.push({\n role: 'user',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'URL image parts',\n });\n } else {\n return {\n inlineData: {\n data: convertUint8ArrayToBase64(part.image),\n mimeType: part.mimeType ?? 'image/jpeg',\n },\n };\n }\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n contents.push({\n role: 'assistant',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { type: 'text', text: part.text };\n }\n\n case 'tool-call': {\n throw new UnsupportedFunctionalityError({\n functionality: 'tool-call',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'tool': {\n throw new UnsupportedFunctionalityError({\n functionality: `role: tool`,\n });\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new UnsupportedFunctionalityError({\n functionality: `role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return {\n systemInstruction,\n contents,\n };\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { FinishReason } from '@google-cloud/vertexai';\n\nexport function mapGoogleVertexFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: FinishReason | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'STOP':\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'MAX_TOKENS':\n return 'length';\n case 'BLOCKLIST':\n case 'PROHIBITED_CONTENT':\n case 'SPII':\n case 'RECITATION':\n case 'SAFETY':\n return 'content-filter';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n"],"mappings":"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","names":["UnsupportedFunctionalityError","UnsupportedFunctionalityError"]}
|
1
|
+
{"version":3,"sources":["../src/google-vertex-provider.ts","../src/google-vertex-language-model.ts","../src/convert-to-google-vertex-content-request.ts","../src/map-google-vertex-finish-reason.ts","../src/prepare-function-declaration-schema.ts"],"sourcesContent":["import { generateId, loadSetting } from '@ai-sdk/provider-utils';\nimport { VertexAI, VertexInit } from '@google-cloud/vertexai';\nimport { GoogleVertexLanguageModel } from './google-vertex-language-model';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\n\nexport interface GoogleVertexProvider {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): GoogleVertexLanguageModel;\n}\n\nexport interface GoogleVertexProviderSettings {\n /**\nYour Google Vertex location. Defaults to the environment variable `GOOGLE_VERTEX_LOCATION`.\n */\n location?: string;\n\n /**\nYour Google Vertex project. Defaults to the environment variable `GOOGLE_VERTEX_PROJECT`.\n */\n project?: string;\n\n /**\n Optional. The Authentication options provided by google-auth-library.\nComplete list of authentication options is documented in the\nGoogleAuthOptions interface:\nhttps://github.com/googleapis/google-auth-library-nodejs/blob/main/src/auth/googleauth.ts.\n */\n googleAuthOptions?: VertexInit['googleAuthOptions'];\n\n // for testing\n generateId?: () => string;\n\n // for testing\n createVertexAI?: ({\n project,\n location,\n }: {\n project: string;\n location: string;\n }) => VertexAI;\n}\n\n/**\nCreate a Google Vertex AI provider instance.\n */\nexport function createVertex(\n options: GoogleVertexProviderSettings = {},\n): GoogleVertexProvider {\n const createVertexAI = () => {\n const config = {\n project: loadSetting({\n settingValue: options.project,\n settingName: 'project',\n environmentVariableName: 'GOOGLE_VERTEX_PROJECT',\n description: 'Google Vertex project',\n }),\n location: loadSetting({\n settingValue: options.location,\n settingName: 'location',\n environmentVariableName: 'GOOGLE_VERTEX_LOCATION',\n description: 'Google Vertex location',\n }),\n googleAuthOptions: options.googleAuthOptions,\n };\n\n return options.createVertexAI?.(config) ?? new VertexAI(config);\n };\n\n const createChatModel = (\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings = {},\n ) =>\n new GoogleVertexLanguageModel(modelId, settings, {\n vertexAI: createVertexAI(),\n generateId: options.generateId ?? generateId,\n });\n\n const provider = function (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) {\n if (new.target) {\n throw new Error(\n 'The Google Vertex AI model function cannot be called with the new keyword.',\n );\n }\n\n return createChatModel(modelId, settings);\n };\n\n provider.chat = createChatModel;\n\n return provider as GoogleVertexProvider;\n}\n\n/**\nDefault Google Vertex AI provider instance.\n */\nexport const vertex = createVertex();\n","import {\n LanguageModelV1,\n LanguageModelV1CallOptions,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1StreamPart,\n NoContentGeneratedError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertAsyncGeneratorToReadableStream } from '@ai-sdk/provider-utils';\nimport {\n GenerateContentResponse,\n GenerationConfig,\n Part,\n VertexAI,\n} from '@google-cloud/vertexai';\nimport { convertToGoogleVertexContentRequest } from './convert-to-google-vertex-content-request';\nimport {\n GoogleVertexModelId,\n GoogleVertexSettings,\n} from './google-vertex-settings';\nimport { mapGoogleVertexFinishReason } from './map-google-vertex-finish-reason';\nimport { prepareFunctionDeclarationSchema } from './prepare-function-declaration-schema';\n\ntype GoogleVertexAIConfig = {\n vertexAI: VertexAI;\n generateId: () => string;\n};\n\nexport class GoogleVertexLanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly provider = 'google-vertex';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: GoogleVertexModelId;\n readonly settings: GoogleVertexSettings;\n\n private readonly config: GoogleVertexAIConfig;\n\n constructor(\n modelId: GoogleVertexModelId,\n settings: GoogleVertexSettings,\n config: GoogleVertexAIConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n private getArgs({\n prompt,\n mode,\n frequencyPenalty,\n presencePenalty,\n seed,\n maxTokens,\n temperature,\n topP,\n }: LanguageModelV1CallOptions) {\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig,\n tools: prepareTools(mode),\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { response } = await model.generateContent(contentRequest);\n\n const firstCandidate = response.candidates?.[0];\n\n if (firstCandidate == null) {\n throw new NoContentGeneratedError({ message: 'No candidates returned' });\n }\n\n const parts = firstCandidate.content.parts;\n const usageMetadata = response.usageMetadata;\n\n const toolCalls = getToolCallsFromParts({\n parts,\n generateId: this.config.generateId,\n });\n\n return {\n text: getTextFromParts(parts),\n toolCalls,\n finishReason: mapGoogleVertexFinishReason({\n finishReason: firstCandidate.finishReason,\n hasToolCalls: toolCalls != null && toolCalls.length > 0,\n }),\n usage: {\n promptTokens: usageMetadata?.promptTokenCount ?? NaN,\n completionTokens: usageMetadata?.candidatesTokenCount ?? NaN,\n },\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { model, contentRequest, warnings } = this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n\n const generateId = this.config.generateId;\n let hasToolCalls = false;\n\n return {\n stream: convertAsyncGeneratorToReadableStream(stream).pipeThrough(\n new TransformStream<GenerateContentResponse, LanguageModelV1StreamPart>(\n {\n transform(chunk, controller) {\n const usageMetadata = chunk.usageMetadata;\n if (usageMetadata != null) {\n usage = {\n promptTokens: usageMetadata.promptTokenCount ?? NaN,\n completionTokens: usageMetadata.candidatesTokenCount ?? NaN,\n };\n }\n\n const candidate = chunk.candidates?.[0];\n\n if (candidate == null) {\n controller.enqueue({\n type: 'error',\n error: new NoContentGeneratedError({\n message: 'No candidates in chunk.',\n }),\n });\n return;\n }\n\n if (candidate.finishReason != null) {\n finishReason = mapGoogleVertexFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls,\n });\n }\n\n const content = candidate.content;\n\n const deltaText = getTextFromParts(content.parts);\n if (deltaText != null) {\n controller.enqueue({\n type: 'text-delta',\n textDelta: deltaText,\n });\n }\n\n const toolCallDeltas = getToolCallsFromParts({\n parts: content.parts,\n generateId,\n });\n\n if (toolCallDeltas != null) {\n for (const toolCall of toolCallDeltas) {\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallType: 'function',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n argsTextDelta: toolCall.args,\n });\n\n controller.enqueue({\n type: 'tool-call',\n toolCallType: 'function',\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n });\n\n hasToolCalls = true;\n }\n }\n },\n\n flush(controller) {\n controller.enqueue({\n type: 'finish',\n finishReason,\n usage,\n });\n },\n },\n ),\n ),\n rawCall: {\n rawPrompt: contentRequest,\n rawSettings: {},\n },\n warnings,\n };\n }\n}\n\nfunction prepareTools(\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n },\n) {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n\n if (tools == null) {\n return undefined;\n }\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice?.type === 'none') {\n return undefined;\n }\n\n if (toolChoice == null || toolChoice.type === 'auto') {\n return [\n {\n functionDeclarations: tools.map(tool => ({\n name: tool.name,\n description: tool.description ?? '',\n parameters: prepareFunctionDeclarationSchema(tool.parameters),\n })),\n },\n ];\n }\n\n // forcing tool calls or a specific tool call is not supported by Vertex:\n throw new UnsupportedFunctionalityError({\n functionality: `toolChoice: ${toolChoice.type}`,\n });\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n}: {\n parts: Part[];\n generateId: () => string;\n}) {\n return parts.flatMap(part =>\n part.functionCall == null\n ? []\n : {\n toolCallType: 'function' as const,\n toolCallId: generateId(),\n toolName: part.functionCall.name,\n args: JSON.stringify(part.functionCall.args),\n },\n );\n}\n\nfunction getTextFromParts(parts: Part[]) {\n const textParts = parts.filter(part => 'text' in part) as Array<\n Part & { text: string }\n >;\n\n return textParts.length === 0\n ? undefined\n : textParts.map(part => part.text).join('');\n}\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport { Content, GenerateContentRequest } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n let systemInstruction: string | undefined = undefined;\n const contents: Content[] = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (systemInstruction != null) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Multiple system messages',\n });\n }\n\n systemInstruction = content;\n break;\n }\n\n case 'user': {\n contents.push({\n role: 'user',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'URL image parts',\n });\n } else {\n return {\n inlineData: {\n data: convertUint8ArrayToBase64(part.image),\n mimeType: part.mimeType ?? 'image/jpeg',\n },\n };\n }\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n contents.push({\n role: 'assistant',\n parts: content\n .filter(part => part.type !== 'text' || part.text.length > 0)\n .map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n\n case 'tool-call': {\n return {\n functionCall: {\n name: part.toolName,\n args: part.args as object,\n },\n };\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }),\n });\n\n break;\n }\n\n case 'tool': {\n contents.push({\n role: 'user',\n parts: content.map(part => ({\n functionResponse: {\n name: part.toolName,\n response: part.result as object,\n },\n })),\n });\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new UnsupportedFunctionalityError({\n functionality: `role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return {\n systemInstruction,\n contents,\n };\n}\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport { FinishReason } from '@google-cloud/vertexai';\n\nexport function mapGoogleVertexFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: FinishReason | undefined;\n hasToolCalls: boolean;\n}): LanguageModelV1FinishReason {\n switch (finishReason) {\n case 'STOP':\n return hasToolCalls ? 'tool-calls' : 'stop';\n case 'MAX_TOKENS':\n return 'length';\n case 'BLOCKLIST':\n case 'PROHIBITED_CONTENT':\n case 'SPII':\n case 'RECITATION':\n case 'SAFETY':\n return 'content-filter';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n","import { UnsupportedFunctionalityError } from '@ai-sdk/provider';\nimport {\n FunctionDeclarationSchema,\n FunctionDeclarationSchemaProperty,\n FunctionDeclarationSchemaType,\n} from '@google-cloud/vertexai';\nimport { JSONSchema7Definition } from 'json-schema';\n\nconst primitiveTypes = {\n string: FunctionDeclarationSchemaType.STRING,\n number: FunctionDeclarationSchemaType.NUMBER,\n integer: FunctionDeclarationSchemaType.INTEGER,\n boolean: FunctionDeclarationSchemaType.BOOLEAN,\n};\n\n/**\nConverts the tool parameters JSON schema to the format required by Vertex AI.\n */\nexport function prepareFunctionDeclarationSchema(\n jsonSchema: JSONSchema7Definition,\n): FunctionDeclarationSchema {\n if (typeof jsonSchema === 'boolean') {\n return {\n type: FunctionDeclarationSchemaType.BOOLEAN,\n properties: {},\n };\n }\n\n const type = jsonSchema.type;\n switch (type) {\n case 'number':\n case 'integer':\n case 'boolean':\n case 'string':\n return {\n type: primitiveTypes[type],\n description: jsonSchema.description,\n required: jsonSchema.required,\n properties: {},\n };\n\n case 'object':\n return {\n type: FunctionDeclarationSchemaType.OBJECT,\n properties: Object.entries(jsonSchema.properties ?? {}).reduce(\n (acc, [key, value]) => {\n acc[key] = prepareFunctionDeclarationSchemaProperty(value);\n return acc;\n },\n {} as Record<string, FunctionDeclarationSchemaProperty>,\n ),\n description: jsonSchema.description,\n required: jsonSchema.required,\n };\n\n case 'array':\n throw new UnsupportedFunctionalityError({\n functionality:\n 'arrays are not supported as root or as array parameters',\n });\n\n default: {\n throw new UnsupportedFunctionalityError({\n functionality: `json schema type: ${type}`,\n });\n }\n }\n}\n\nfunction prepareFunctionDeclarationSchemaProperty(\n jsonSchema: JSONSchema7Definition,\n): FunctionDeclarationSchemaProperty {\n if (typeof jsonSchema === 'boolean') {\n return {\n type: FunctionDeclarationSchemaType.BOOLEAN,\n };\n }\n\n const type = jsonSchema.type;\n\n switch (type) {\n // primitive types:\n case 'number':\n case 'integer':\n case 'boolean':\n case 'string': {\n return {\n type: primitiveTypes[type],\n description: jsonSchema.description,\n required: jsonSchema.required,\n };\n }\n // array:\n case 'array': {\n const items = jsonSchema.items;\n\n if (items == null) {\n throw new UnsupportedFunctionalityError({\n functionality:\n 'Array without items is not supported in tool parameters',\n });\n }\n\n if (Array.isArray(items)) {\n throw new UnsupportedFunctionalityError({\n functionality: 'Tuple arrays are not supported in tool parameters',\n });\n }\n\n return {\n type: FunctionDeclarationSchemaType.ARRAY,\n description: jsonSchema.description,\n required: jsonSchema.required,\n items: prepareFunctionDeclarationSchema(items),\n };\n }\n // nested object:\n case 'object':\n return {\n type: FunctionDeclarationSchemaType.OBJECT,\n properties: Object.entries(jsonSchema.properties ?? {}).reduce(\n (acc, [key, value]) => {\n acc[key] = prepareFunctionDeclarationSchema(value);\n return acc;\n },\n {} as Record<string, FunctionDeclarationSchema>,\n ),\n description: jsonSchema.description,\n required: jsonSchema.required,\n };\n default:\n throw new Error(`Unsupported type: ${type}`);\n }\n}\n"],"mappings":"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","names":["UnsupportedFunctionalityError","UnsupportedFunctionalityError","UnsupportedFunctionalityError","generateId","_a"]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@ai-sdk/google-vertex",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.4",
|
4
4
|
"license": "Apache-2.0",
|
5
5
|
"sideEffects": false,
|
6
6
|
"main": "./dist/index.js",
|
@@ -18,11 +18,13 @@
|
|
18
18
|
}
|
19
19
|
},
|
20
20
|
"dependencies": {
|
21
|
-
"@ai-sdk/provider": "0.0.
|
22
|
-
"@ai-sdk/provider-utils": "0.0.
|
23
|
-
"@google-cloud/vertexai": "
|
21
|
+
"@ai-sdk/provider": "0.0.8",
|
22
|
+
"@ai-sdk/provider-utils": "0.0.11",
|
23
|
+
"@google-cloud/vertexai": "1.2.0",
|
24
|
+
"json-schema": "0.4.0"
|
24
25
|
},
|
25
26
|
"devDependencies": {
|
27
|
+
"@types/json-schema": "7.0.15",
|
26
28
|
"@types/node": "^18",
|
27
29
|
"tsup": "^8",
|
28
30
|
"typescript": "5.1.3",
|