@ai-sdk/google-vertex 0.0.38 → 0.0.40

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ai-sdk/google-vertex
2
2
 
3
+ ## 0.0.40
4
+
5
+ ### Patch Changes
6
+
7
+ - 8efa1c5: chore (provider/vertex): update GoogleVertexModelId
8
+
9
+ ## 0.0.39
10
+
11
+ ### Patch Changes
12
+
13
+ - 465189a: feat (provider/vertex): add schema support
14
+ - 33ba542: feat (provider/vertex): support frequencyPenalty setting
15
+ - 20ffa73: feat (provider/vertex): tool choice support & object generation with tool mode
16
+
3
17
  ## 0.0.38
4
18
 
5
19
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ProviderV1, LanguageModelV1 } from '@ai-sdk/provider';
2
2
  import { VertexInit, VertexAI } from '@google-cloud/vertexai';
3
3
 
4
- type GoogleVertexModelId = 'gemini-1.5-flash' | 'gemini-1.5-pro' | 'gemini-1.0-pro' | 'gemini-1.0-pro-vision' | (string & {});
4
+ type GoogleVertexModelId = 'gemini-1.5-flash-001' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro-001' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro-001' | 'gemini-1.0-pro-vision-001' | '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.
@@ -14,6 +14,15 @@ interface GoogleVertexSettings {
14
14
  */
15
15
  topK?: number;
16
16
  /**
17
+ * Optional. Enable structured output. Default is true.
18
+ *
19
+ * This is useful when the JSON Schema contains elements that are
20
+ * not supported by the OpenAPI schema version that
21
+ * Google Generative AI uses. You can use this to disable
22
+ * structured outputs if you need to.
23
+ */
24
+ structuredOutputs?: boolean;
25
+ /**
17
26
  Optional. A list of unique safety settings for blocking unsafe content.
18
27
  */
19
28
  safetySettings?: Array<{
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { ProviderV1, LanguageModelV1 } from '@ai-sdk/provider';
2
2
  import { VertexInit, VertexAI } from '@google-cloud/vertexai';
3
3
 
4
- type GoogleVertexModelId = 'gemini-1.5-flash' | 'gemini-1.5-pro' | 'gemini-1.0-pro' | 'gemini-1.0-pro-vision' | (string & {});
4
+ type GoogleVertexModelId = 'gemini-1.5-flash-001' | 'gemini-1.5-flash-002' | 'gemini-1.5-pro-001' | 'gemini-1.5-pro-002' | 'gemini-1.0-pro-001' | 'gemini-1.0-pro-vision-001' | '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.
@@ -14,6 +14,15 @@ interface GoogleVertexSettings {
14
14
  */
15
15
  topK?: number;
16
16
  /**
17
+ * Optional. Enable structured output. Default is true.
18
+ *
19
+ * This is useful when the JSON Schema contains elements that are
20
+ * not supported by the OpenAPI schema version that
21
+ * Google Generative AI uses. You can use this to disable
22
+ * structured outputs if you need to.
23
+ */
24
+ structuredOutputs?: boolean;
25
+ /**
17
26
  Optional. A list of unique safety settings for blocking unsafe content.
18
27
  */
19
28
  safetySettings?: Array<{
package/dist/index.js CHANGED
@@ -26,13 +26,82 @@ __export(src_exports, {
26
26
  module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/google-vertex-provider.ts
29
- var import_provider4 = require("@ai-sdk/provider");
29
+ var import_provider3 = require("@ai-sdk/provider");
30
30
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
31
31
  var import_vertexai2 = require("@google-cloud/vertexai");
32
32
 
33
33
  // src/google-vertex-language-model.ts
34
- var import_provider3 = require("@ai-sdk/provider");
34
+ var import_provider2 = require("@ai-sdk/provider");
35
35
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
36
+ var import_vertexai = require("@google-cloud/vertexai");
37
+
38
+ // src/convert-json-schema-to-openapi-schema.ts
39
+ function convertJSONSchemaToOpenAPISchema(jsonSchema) {
40
+ if (typeof jsonSchema === "boolean") {
41
+ return { type: "boolean", properties: {} };
42
+ }
43
+ const {
44
+ type,
45
+ description,
46
+ required,
47
+ properties,
48
+ items,
49
+ allOf,
50
+ anyOf,
51
+ oneOf,
52
+ format,
53
+ const: constValue,
54
+ minLength
55
+ } = jsonSchema;
56
+ const result = {};
57
+ if (description)
58
+ result.description = description;
59
+ if (required)
60
+ result.required = required;
61
+ if (format)
62
+ result.format = format;
63
+ if (constValue !== void 0) {
64
+ result.enum = [constValue];
65
+ }
66
+ if (type) {
67
+ if (Array.isArray(type)) {
68
+ if (type.includes("null")) {
69
+ result.type = type.filter((t) => t !== "null")[0];
70
+ result.nullable = true;
71
+ } else {
72
+ result.type = type;
73
+ }
74
+ } else if (type === "null") {
75
+ result.type = "null";
76
+ } else {
77
+ result.type = type;
78
+ }
79
+ }
80
+ if (properties) {
81
+ result.properties = Object.entries(properties).reduce(
82
+ (acc, [key, value]) => {
83
+ acc[key] = convertJSONSchemaToOpenAPISchema(value);
84
+ return acc;
85
+ },
86
+ {}
87
+ );
88
+ }
89
+ if (items) {
90
+ result.items = Array.isArray(items) ? items.map(convertJSONSchemaToOpenAPISchema) : convertJSONSchemaToOpenAPISchema(items);
91
+ }
92
+ if (allOf) {
93
+ result.allOf = allOf.map(convertJSONSchemaToOpenAPISchema);
94
+ }
95
+ if (anyOf) {
96
+ result.anyOf = anyOf.map(convertJSONSchemaToOpenAPISchema);
97
+ }
98
+ if (oneOf) {
99
+ result.oneOf = oneOf.map(convertJSONSchemaToOpenAPISchema);
100
+ }
101
+ if (minLength !== void 0)
102
+ result.minLength = minLength;
103
+ return result;
104
+ }
36
105
 
37
106
  // src/convert-to-google-vertex-content-request.ts
38
107
  var import_provider = require("@ai-sdk/provider");
@@ -177,115 +246,6 @@ function mapGoogleVertexFinishReason({
177
246
  }
178
247
  }
179
248
 
180
- // src/prepare-function-declaration-schema.ts
181
- var import_provider2 = require("@ai-sdk/provider");
182
- var import_vertexai = require("@google-cloud/vertexai");
183
- var primitiveTypes = {
184
- string: import_vertexai.FunctionDeclarationSchemaType.STRING,
185
- number: import_vertexai.FunctionDeclarationSchemaType.NUMBER,
186
- integer: import_vertexai.FunctionDeclarationSchemaType.INTEGER,
187
- boolean: import_vertexai.FunctionDeclarationSchemaType.BOOLEAN
188
- };
189
- function prepareFunctionDeclarationSchema(jsonSchema) {
190
- var _a;
191
- if (typeof jsonSchema === "boolean") {
192
- return {
193
- type: import_vertexai.FunctionDeclarationSchemaType.BOOLEAN,
194
- properties: {}
195
- };
196
- }
197
- const type = jsonSchema.type;
198
- switch (type) {
199
- case "number":
200
- case "integer":
201
- case "boolean":
202
- case "string":
203
- return {
204
- type: primitiveTypes[type],
205
- description: jsonSchema.description,
206
- required: jsonSchema.required,
207
- properties: {}
208
- };
209
- case "object":
210
- return {
211
- type: import_vertexai.FunctionDeclarationSchemaType.OBJECT,
212
- properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
213
- (acc, [key, value]) => {
214
- acc[key] = prepareFunctionDeclarationSchemaProperty(value);
215
- return acc;
216
- },
217
- {}
218
- ),
219
- description: jsonSchema.description,
220
- required: jsonSchema.required
221
- };
222
- case "array":
223
- throw new import_provider2.UnsupportedFunctionalityError({
224
- functionality: "arrays are not supported as root or as array parameters"
225
- });
226
- default: {
227
- throw new import_provider2.UnsupportedFunctionalityError({
228
- functionality: `json schema type: ${type}`
229
- });
230
- }
231
- }
232
- }
233
- function prepareFunctionDeclarationSchemaProperty(jsonSchema) {
234
- var _a;
235
- if (typeof jsonSchema === "boolean") {
236
- return {
237
- type: import_vertexai.FunctionDeclarationSchemaType.BOOLEAN
238
- };
239
- }
240
- const type = jsonSchema.type;
241
- switch (type) {
242
- case "number":
243
- case "integer":
244
- case "boolean":
245
- case "string": {
246
- return {
247
- type: primitiveTypes[type],
248
- description: jsonSchema.description,
249
- required: jsonSchema.required
250
- };
251
- }
252
- case "array": {
253
- const items = jsonSchema.items;
254
- if (items == null) {
255
- throw new import_provider2.UnsupportedFunctionalityError({
256
- functionality: "Array without items is not supported in tool parameters"
257
- });
258
- }
259
- if (Array.isArray(items)) {
260
- throw new import_provider2.UnsupportedFunctionalityError({
261
- functionality: "Tuple arrays are not supported in tool parameters"
262
- });
263
- }
264
- return {
265
- type: import_vertexai.FunctionDeclarationSchemaType.ARRAY,
266
- description: jsonSchema.description,
267
- required: jsonSchema.required,
268
- items: prepareFunctionDeclarationSchema(items)
269
- };
270
- }
271
- case "object":
272
- return {
273
- type: import_vertexai.FunctionDeclarationSchemaType.OBJECT,
274
- properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
275
- (acc, [key, value]) => {
276
- acc[key] = prepareFunctionDeclarationSchema(value);
277
- return acc;
278
- },
279
- {}
280
- ),
281
- description: jsonSchema.description,
282
- required: jsonSchema.required
283
- };
284
- default:
285
- throw new Error(`Unsupported type: ${type}`);
286
- }
287
- }
288
-
289
249
  // src/google-vertex-language-model.ts
290
250
  var GoogleVertexLanguageModel = class {
291
251
  constructor(modelId, settings, config) {
@@ -297,6 +257,9 @@ var GoogleVertexLanguageModel = class {
297
257
  this.settings = settings;
298
258
  this.config = config;
299
259
  }
260
+ get supportsObjectGeneration() {
261
+ return this.settings.structuredOutputs !== false;
262
+ }
300
263
  async getArgs({
301
264
  mode,
302
265
  prompt,
@@ -311,14 +274,8 @@ var GoogleVertexLanguageModel = class {
311
274
  seed,
312
275
  headers
313
276
  }) {
314
- var _a;
277
+ var _a, _b;
315
278
  const warnings = [];
316
- if (frequencyPenalty != null) {
317
- warnings.push({
318
- type: "unsupported-setting",
319
- setting: "frequencyPenalty"
320
- });
321
- }
322
279
  if (presencePenalty != null) {
323
280
  warnings.push({
324
281
  type: "unsupported-setting",
@@ -342,25 +299,32 @@ var GoogleVertexLanguageModel = class {
342
299
  topK: topK != null ? topK : this.settings.topK,
343
300
  // standardized settings:
344
301
  maxOutputTokens: maxTokens,
302
+ frequencyPenalty,
345
303
  temperature,
346
304
  topP,
347
305
  stopSequences,
348
- responseMimeType: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? "application/json" : void 0
306
+ // response format:
307
+ responseMimeType: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? "application/json" : void 0,
308
+ responseSchema: (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && // Google Vertex does not support all OpenAPI Schema features,
309
+ // so this is needed as an escape hatch:
310
+ this.supportsObjectGeneration ? convertJSONSchemaToOpenAPISchema(
311
+ responseFormat.schema
312
+ ) : void 0
349
313
  };
350
314
  const type = mode.type;
351
315
  switch (type) {
352
316
  case "regular": {
353
- const conf = {
317
+ const configuration = {
354
318
  model: this.modelId,
355
319
  generationConfig,
356
- tools: prepareTools({
320
+ ...prepareToolsAndToolConfig({
357
321
  mode,
358
322
  useSearchGrounding: (_a = this.settings.useSearchGrounding) != null ? _a : false
359
323
  }),
360
324
  safetySettings: this.settings.safetySettings
361
325
  };
362
326
  return {
363
- model: this.config.vertexAI.getGenerativeModel(conf),
327
+ model: this.config.vertexAI.getGenerativeModel(configuration),
364
328
  contentRequest: convertToGoogleVertexContentRequest(prompt),
365
329
  warnings
366
330
  };
@@ -371,7 +335,12 @@ var GoogleVertexLanguageModel = class {
371
335
  model: this.modelId,
372
336
  generationConfig: {
373
337
  ...generationConfig,
374
- responseMimeType: "application/json"
338
+ responseMimeType: "application/json",
339
+ responseSchema: mode.schema != null && // Google Vertex does not support all OpenAPI Schema features,
340
+ // so this is needed as an escape hatch:
341
+ this.supportsObjectGeneration ? convertJSONSchemaToOpenAPISchema(
342
+ mode.schema
343
+ ) : void 0
375
344
  },
376
345
  safetySettings: this.settings.safetySettings
377
346
  }),
@@ -380,9 +349,32 @@ var GoogleVertexLanguageModel = class {
380
349
  };
381
350
  }
382
351
  case "object-tool": {
383
- throw new import_provider3.UnsupportedFunctionalityError({
384
- functionality: "object-tool mode"
385
- });
352
+ const configuration = {
353
+ model: this.modelId,
354
+ generationConfig,
355
+ tools: [
356
+ {
357
+ functionDeclarations: [
358
+ {
359
+ name: mode.tool.name,
360
+ description: (_b = mode.tool.description) != null ? _b : "",
361
+ parameters: convertJSONSchemaToOpenAPISchema(
362
+ mode.tool.parameters
363
+ )
364
+ }
365
+ ]
366
+ }
367
+ ],
368
+ toolConfig: {
369
+ functionCallingConfig: { mode: import_vertexai.FunctionCallingMode.ANY }
370
+ },
371
+ safetySettings: this.settings.safetySettings
372
+ };
373
+ return {
374
+ model: this.config.vertexAI.getGenerativeModel(configuration),
375
+ contentRequest: convertToGoogleVertexContentRequest(prompt),
376
+ warnings
377
+ };
386
378
  }
387
379
  default: {
388
380
  const _exhaustiveCheck = type;
@@ -396,7 +388,7 @@ var GoogleVertexLanguageModel = class {
396
388
  const { response } = await model.generateContent(contentRequest);
397
389
  const firstCandidate = (_a = response.candidates) == null ? void 0 : _a[0];
398
390
  if (firstCandidate == null) {
399
- throw new import_provider3.NoContentGeneratedError({ message: "No candidates returned" });
391
+ throw new import_provider2.NoContentGeneratedError({ message: "No candidates returned" });
400
392
  }
401
393
  const parts = firstCandidate.content.parts;
402
394
  const usageMetadata = response.usageMetadata;
@@ -505,37 +497,75 @@ var GoogleVertexLanguageModel = class {
505
497
  };
506
498
  }
507
499
  };
508
- function prepareTools({
500
+ function prepareToolsAndToolConfig({
509
501
  useSearchGrounding,
510
502
  mode
511
503
  }) {
512
504
  var _a;
513
505
  const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
506
+ const mappedTools = tools == null ? [] : [
507
+ {
508
+ functionDeclarations: tools.map((tool) => {
509
+ var _a2;
510
+ return {
511
+ name: tool.name,
512
+ description: (_a2 = tool.description) != null ? _a2 : "",
513
+ parameters: convertJSONSchemaToOpenAPISchema(
514
+ tool.parameters
515
+ )
516
+ };
517
+ })
518
+ }
519
+ ];
520
+ if (useSearchGrounding) {
521
+ mappedTools.push({ googleSearchRetrieval: {} });
522
+ }
523
+ const finalTools = mappedTools.length > 0 ? mappedTools : void 0;
514
524
  const toolChoice = mode.toolChoice;
515
- if ((toolChoice == null ? void 0 : toolChoice.type) === "none") {
516
- return void 0;
525
+ if (toolChoice == null) {
526
+ return {
527
+ tools: finalTools,
528
+ toolConfig: void 0
529
+ };
517
530
  }
518
- if (toolChoice == null || toolChoice.type === "auto") {
519
- const mappedTools = tools != null ? [
520
- {
521
- functionDeclarations: tools.map((tool) => {
522
- var _a2;
523
- return {
524
- name: tool.name,
525
- description: (_a2 = tool.description) != null ? _a2 : "",
526
- parameters: prepareFunctionDeclarationSchema(tool.parameters)
527
- };
528
- })
529
- }
530
- ] : [];
531
- if (useSearchGrounding) {
532
- mappedTools.push({ googleSearchRetrieval: {} });
531
+ const type = toolChoice.type;
532
+ switch (type) {
533
+ case "auto":
534
+ return {
535
+ tools: finalTools,
536
+ toolConfig: {
537
+ functionCallingConfig: { mode: import_vertexai.FunctionCallingMode.AUTO }
538
+ }
539
+ };
540
+ case "none":
541
+ return {
542
+ tools: finalTools,
543
+ toolConfig: {
544
+ functionCallingConfig: { mode: import_vertexai.FunctionCallingMode.NONE }
545
+ }
546
+ };
547
+ case "required":
548
+ return {
549
+ tools: finalTools,
550
+ toolConfig: {
551
+ functionCallingConfig: { mode: import_vertexai.FunctionCallingMode.ANY }
552
+ }
553
+ };
554
+ case "tool":
555
+ return {
556
+ tools: finalTools,
557
+ toolConfig: {
558
+ functionCallingConfig: {
559
+ mode: import_vertexai.FunctionCallingMode.ANY,
560
+ allowedFunctionNames: [toolChoice.toolName]
561
+ }
562
+ }
563
+ };
564
+ default: {
565
+ const _exhaustiveCheck = type;
566
+ throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);
533
567
  }
534
- return mappedTools.length > 0 ? mappedTools : void 0;
535
568
  }
536
- throw new import_provider3.UnsupportedFunctionalityError({
537
- functionality: `toolChoice: ${toolChoice.type}`
538
- });
539
569
  }
540
570
  function getToolCallsFromParts({
541
571
  parts,
@@ -599,7 +629,7 @@ function createVertex(options = {}) {
599
629
  };
600
630
  provider.languageModel = createChatModel;
601
631
  provider.textEmbeddingModel = (modelId) => {
602
- throw new import_provider4.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
632
+ throw new import_provider3.NoSuchModelError({ modelId, modelType: "textEmbeddingModel" });
603
633
  };
604
634
  return provider;
605
635
  }
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","../src/prepare-function-declaration-schema.ts"],"sourcesContent":["export { createVertex, vertex } from './google-vertex-provider';\nexport type {\n GoogleVertexProvider,\n GoogleVertexProviderSettings,\n} from './google-vertex-provider';\n","import {\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport { 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 extends ProviderV1 {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): LanguageModelV1;\n\n languageModel: (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) => LanguageModelV1;\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.languageModel = createChatModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\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 SafetySetting,\n VertexAI,\n Tool as GoogleTool,\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 = 'json';\n readonly supportsImageUrls = false;\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 async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n headers,\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 if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: topK ?? this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n stopSequences,\n responseMimeType:\n responseFormat?.type === 'json' ? 'application/json' : undefined,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n const conf = {\n model: this.modelId,\n generationConfig,\n tools: prepareTools({\n mode,\n useSearchGrounding: this.settings.useSearchGrounding ?? false,\n }),\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n };\n\n return {\n model: this.config.vertexAI.getGenerativeModel(conf),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig: {\n ...generationConfig,\n responseMimeType: 'application/json',\n },\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool 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 } = await 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 } = await this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\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 return; // ignored (this can happen when using grounding)\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 useSearchGrounding,\n mode,\n}: {\n useSearchGrounding: boolean;\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n };\n}): GoogleTool[] | undefined {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n const toolChoice = mode.toolChoice;\n\n if (toolChoice?.type === 'none') {\n return undefined;\n }\n\n if (toolChoice == null || toolChoice.type === 'auto') {\n const mappedTools: GoogleTool[] =\n tools != null\n ? [\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 if (useSearchGrounding) {\n mappedTools.push({ googleSearchRetrieval: {} });\n }\n\n return mappedTools.length > 0 ? mappedTools : undefined;\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 if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\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[] | undefined) {\n if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\n\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, Part } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n const systemInstructionParts: Part[] = [];\n const contents: Content[] = [];\n let systemMessagesAllowed = true;\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (!systemMessagesAllowed) {\n throw new UnsupportedFunctionalityError({\n functionality: 'system messages after first user message',\n });\n }\n systemInstructionParts.push({ text: content });\n break;\n }\n\n case 'user': {\n systemMessagesAllowed = false;\n\n const parts: Content['parts'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n parts.push({ text: part.text });\n break;\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: {\n mimeType: part.mimeType ?? 'image/jpeg',\n data: convertUint8ArrayToBase64(part.image),\n },\n });\n\n break;\n }\n\n case 'file': {\n if (part.data instanceof URL) {\n // The AI SDK automatically downloads files for user file parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'File URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: { mimeType: part.mimeType, data: part.data },\n });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n contents.push({ role: 'user', parts });\n break;\n }\n\n case 'assistant': {\n systemMessagesAllowed = false;\n\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 systemMessagesAllowed = false;\n\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 systemInstructionParts.length > 0\n ? { role: 'system', parts: systemInstructionParts }\n : undefined,\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 return 'other';\n default:\n return 'unknown';\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","import_provider_utils","import_vertexai","import_provider","import_provider_utils","import_provider","generateId","_a"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/google-vertex-provider.ts","../src/google-vertex-language-model.ts","../src/convert-json-schema-to-openapi-schema.ts","../src/convert-to-google-vertex-content-request.ts","../src/map-google-vertex-finish-reason.ts"],"sourcesContent":["export { createVertex, vertex } from './google-vertex-provider';\nexport type {\n GoogleVertexProvider,\n GoogleVertexProviderSettings,\n} from './google-vertex-provider';\n","import {\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport { 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 extends ProviderV1 {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): LanguageModelV1;\n\n languageModel: (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) => LanguageModelV1;\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.languageModel = createChatModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\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} from '@ai-sdk/provider';\nimport { convertAsyncGeneratorToReadableStream } from '@ai-sdk/provider-utils';\nimport {\n FunctionCallingMode,\n FunctionDeclarationSchema,\n GenerateContentResponse,\n GenerationConfig,\n Part,\n ResponseSchema,\n SafetySetting,\n Tool,\n ToolConfig,\n VertexAI,\n} from '@google-cloud/vertexai';\nimport { convertJSONSchemaToOpenAPISchema } from './convert-json-schema-to-openapi-schema';\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';\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 = 'json';\n readonly supportsImageUrls = false;\n\n get supportsObjectGeneration() {\n return this.settings.structuredOutputs !== false;\n }\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 async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n headers,\n }: LanguageModelV1CallOptions) {\n const warnings: LanguageModelV1CallWarning[] = [];\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 if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: topK ?? this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n frequencyPenalty,\n temperature,\n topP,\n stopSequences,\n\n // response format:\n responseMimeType:\n responseFormat?.type === 'json' ? 'application/json' : undefined,\n responseSchema:\n responseFormat?.type === 'json' &&\n responseFormat.schema != null &&\n // Google Vertex does not support all OpenAPI Schema features,\n // so this is needed as an escape hatch:\n this.supportsObjectGeneration\n ? (convertJSONSchemaToOpenAPISchema(\n responseFormat.schema,\n ) as ResponseSchema)\n : undefined,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n const configuration = {\n model: this.modelId,\n generationConfig,\n ...prepareToolsAndToolConfig({\n mode,\n useSearchGrounding: this.settings.useSearchGrounding ?? false,\n }),\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n };\n\n return {\n model: this.config.vertexAI.getGenerativeModel(configuration),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig: {\n ...generationConfig,\n responseMimeType: 'application/json',\n responseSchema:\n mode.schema != null &&\n // Google Vertex does not support all OpenAPI Schema features,\n // so this is needed as an escape hatch:\n this.supportsObjectGeneration\n ? (convertJSONSchemaToOpenAPISchema(\n mode.schema,\n ) as ResponseSchema)\n : undefined,\n },\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-tool': {\n const configuration = {\n model: this.modelId,\n generationConfig,\n tools: [\n {\n functionDeclarations: [\n {\n name: mode.tool.name,\n description: mode.tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(\n mode.tool.parameters,\n ) as FunctionDeclarationSchema,\n },\n ],\n },\n ],\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.ANY },\n },\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n };\n\n return {\n model: this.config.vertexAI.getGenerativeModel(configuration),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\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 } = await 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 } = await this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\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 return; // ignored (this can happen when using grounding)\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 prepareToolsAndToolConfig({\n useSearchGrounding,\n mode,\n}: {\n useSearchGrounding: boolean;\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n };\n}): {\n tools: Tool[] | undefined;\n toolConfig: ToolConfig | undefined;\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 const mappedTools: Tool[] =\n tools == null\n ? []\n : [\n {\n functionDeclarations: tools.map(tool => ({\n name: tool.name,\n description: tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(\n tool.parameters,\n ) as FunctionDeclarationSchema,\n })),\n },\n ];\n\n if (useSearchGrounding) {\n mappedTools.push({ googleSearchRetrieval: {} });\n }\n\n const finalTools = mappedTools.length > 0 ? mappedTools : undefined;\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return {\n tools: finalTools,\n toolConfig: undefined,\n };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.AUTO },\n },\n };\n case 'none':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.NONE },\n },\n };\n case 'required':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.ANY },\n },\n };\n case 'tool':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: {\n mode: FunctionCallingMode.ANY,\n allowedFunctionNames: [toolChoice.toolName],\n },\n },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n}: {\n parts: Part[];\n generateId: () => string;\n}) {\n if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\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[] | undefined) {\n if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\n\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 { JSONSchema7Definition } from 'json-schema';\n\n/**\n * Converts JSON Schema 7 to OpenAPI Schema 3.0\n */\nexport function convertJSONSchemaToOpenAPISchema(\n jsonSchema: JSONSchema7Definition,\n): unknown {\n if (typeof jsonSchema === 'boolean') {\n return { type: 'boolean', properties: {} };\n }\n\n const {\n type,\n description,\n required,\n properties,\n items,\n allOf,\n anyOf,\n oneOf,\n format,\n const: constValue,\n minLength,\n } = jsonSchema;\n\n const result: Record<string, unknown> = {};\n\n if (description) result.description = description;\n if (required) result.required = required;\n if (format) result.format = format;\n\n if (constValue !== undefined) {\n result.enum = [constValue];\n }\n\n // Handle type\n if (type) {\n if (Array.isArray(type)) {\n if (type.includes('null')) {\n result.type = type.filter(t => t !== 'null')[0];\n result.nullable = true;\n } else {\n result.type = type;\n }\n } else if (type === 'null') {\n result.type = 'null';\n } else {\n result.type = type;\n }\n }\n\n if (properties) {\n result.properties = Object.entries(properties).reduce(\n (acc, [key, value]) => {\n acc[key] = convertJSONSchemaToOpenAPISchema(value);\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n if (items) {\n result.items = Array.isArray(items)\n ? items.map(convertJSONSchemaToOpenAPISchema)\n : convertJSONSchemaToOpenAPISchema(items);\n }\n\n if (allOf) {\n result.allOf = allOf.map(convertJSONSchemaToOpenAPISchema);\n }\n if (anyOf) {\n result.anyOf = anyOf.map(convertJSONSchemaToOpenAPISchema);\n }\n if (oneOf) {\n result.oneOf = oneOf.map(convertJSONSchemaToOpenAPISchema);\n }\n\n if (minLength !== undefined) result.minLength = minLength;\n\n return result;\n}\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport { Content, GenerateContentRequest, Part } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n const systemInstructionParts: Part[] = [];\n const contents: Content[] = [];\n let systemMessagesAllowed = true;\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (!systemMessagesAllowed) {\n throw new UnsupportedFunctionalityError({\n functionality: 'system messages after first user message',\n });\n }\n systemInstructionParts.push({ text: content });\n break;\n }\n\n case 'user': {\n systemMessagesAllowed = false;\n\n const parts: Content['parts'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n parts.push({ text: part.text });\n break;\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: {\n mimeType: part.mimeType ?? 'image/jpeg',\n data: convertUint8ArrayToBase64(part.image),\n },\n });\n\n break;\n }\n\n case 'file': {\n if (part.data instanceof URL) {\n // The AI SDK automatically downloads files for user file parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'File URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: { mimeType: part.mimeType, data: part.data },\n });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n contents.push({ role: 'user', parts });\n break;\n }\n\n case 'assistant': {\n systemMessagesAllowed = false;\n\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 systemMessagesAllowed = false;\n\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 systemInstructionParts.length > 0\n ? { role: 'system', parts: systemInstructionParts }\n : undefined,\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 return 'other';\n default:\n return 'unknown';\n }\n}\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_vertexai","import_provider","import_provider_utils","generateId","_a"]}
package/dist/index.mjs CHANGED
@@ -3,14 +3,84 @@ import {
3
3
  NoSuchModelError
4
4
  } from "@ai-sdk/provider";
5
5
  import { generateId, loadSetting } from "@ai-sdk/provider-utils";
6
- import { VertexAI } from "@google-cloud/vertexai";
6
+ import { VertexAI as VertexAI2 } from "@google-cloud/vertexai";
7
7
 
8
8
  // src/google-vertex-language-model.ts
9
9
  import {
10
- NoContentGeneratedError,
11
- UnsupportedFunctionalityError as UnsupportedFunctionalityError3
10
+ NoContentGeneratedError
12
11
  } from "@ai-sdk/provider";
13
12
  import { convertAsyncGeneratorToReadableStream } from "@ai-sdk/provider-utils";
13
+ import {
14
+ FunctionCallingMode
15
+ } from "@google-cloud/vertexai";
16
+
17
+ // src/convert-json-schema-to-openapi-schema.ts
18
+ function convertJSONSchemaToOpenAPISchema(jsonSchema) {
19
+ if (typeof jsonSchema === "boolean") {
20
+ return { type: "boolean", properties: {} };
21
+ }
22
+ const {
23
+ type,
24
+ description,
25
+ required,
26
+ properties,
27
+ items,
28
+ allOf,
29
+ anyOf,
30
+ oneOf,
31
+ format,
32
+ const: constValue,
33
+ minLength
34
+ } = jsonSchema;
35
+ const result = {};
36
+ if (description)
37
+ result.description = description;
38
+ if (required)
39
+ result.required = required;
40
+ if (format)
41
+ result.format = format;
42
+ if (constValue !== void 0) {
43
+ result.enum = [constValue];
44
+ }
45
+ if (type) {
46
+ if (Array.isArray(type)) {
47
+ if (type.includes("null")) {
48
+ result.type = type.filter((t) => t !== "null")[0];
49
+ result.nullable = true;
50
+ } else {
51
+ result.type = type;
52
+ }
53
+ } else if (type === "null") {
54
+ result.type = "null";
55
+ } else {
56
+ result.type = type;
57
+ }
58
+ }
59
+ if (properties) {
60
+ result.properties = Object.entries(properties).reduce(
61
+ (acc, [key, value]) => {
62
+ acc[key] = convertJSONSchemaToOpenAPISchema(value);
63
+ return acc;
64
+ },
65
+ {}
66
+ );
67
+ }
68
+ if (items) {
69
+ result.items = Array.isArray(items) ? items.map(convertJSONSchemaToOpenAPISchema) : convertJSONSchemaToOpenAPISchema(items);
70
+ }
71
+ if (allOf) {
72
+ result.allOf = allOf.map(convertJSONSchemaToOpenAPISchema);
73
+ }
74
+ if (anyOf) {
75
+ result.anyOf = anyOf.map(convertJSONSchemaToOpenAPISchema);
76
+ }
77
+ if (oneOf) {
78
+ result.oneOf = oneOf.map(convertJSONSchemaToOpenAPISchema);
79
+ }
80
+ if (minLength !== void 0)
81
+ result.minLength = minLength;
82
+ return result;
83
+ }
14
84
 
15
85
  // src/convert-to-google-vertex-content-request.ts
16
86
  import {
@@ -157,117 +227,6 @@ function mapGoogleVertexFinishReason({
157
227
  }
158
228
  }
159
229
 
160
- // src/prepare-function-declaration-schema.ts
161
- import { UnsupportedFunctionalityError as UnsupportedFunctionalityError2 } from "@ai-sdk/provider";
162
- import {
163
- FunctionDeclarationSchemaType
164
- } from "@google-cloud/vertexai";
165
- var primitiveTypes = {
166
- string: FunctionDeclarationSchemaType.STRING,
167
- number: FunctionDeclarationSchemaType.NUMBER,
168
- integer: FunctionDeclarationSchemaType.INTEGER,
169
- boolean: FunctionDeclarationSchemaType.BOOLEAN
170
- };
171
- function prepareFunctionDeclarationSchema(jsonSchema) {
172
- var _a;
173
- if (typeof jsonSchema === "boolean") {
174
- return {
175
- type: FunctionDeclarationSchemaType.BOOLEAN,
176
- properties: {}
177
- };
178
- }
179
- const type = jsonSchema.type;
180
- switch (type) {
181
- case "number":
182
- case "integer":
183
- case "boolean":
184
- case "string":
185
- return {
186
- type: primitiveTypes[type],
187
- description: jsonSchema.description,
188
- required: jsonSchema.required,
189
- properties: {}
190
- };
191
- case "object":
192
- return {
193
- type: FunctionDeclarationSchemaType.OBJECT,
194
- properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
195
- (acc, [key, value]) => {
196
- acc[key] = prepareFunctionDeclarationSchemaProperty(value);
197
- return acc;
198
- },
199
- {}
200
- ),
201
- description: jsonSchema.description,
202
- required: jsonSchema.required
203
- };
204
- case "array":
205
- throw new UnsupportedFunctionalityError2({
206
- functionality: "arrays are not supported as root or as array parameters"
207
- });
208
- default: {
209
- throw new UnsupportedFunctionalityError2({
210
- functionality: `json schema type: ${type}`
211
- });
212
- }
213
- }
214
- }
215
- function prepareFunctionDeclarationSchemaProperty(jsonSchema) {
216
- var _a;
217
- if (typeof jsonSchema === "boolean") {
218
- return {
219
- type: FunctionDeclarationSchemaType.BOOLEAN
220
- };
221
- }
222
- const type = jsonSchema.type;
223
- switch (type) {
224
- case "number":
225
- case "integer":
226
- case "boolean":
227
- case "string": {
228
- return {
229
- type: primitiveTypes[type],
230
- description: jsonSchema.description,
231
- required: jsonSchema.required
232
- };
233
- }
234
- case "array": {
235
- const items = jsonSchema.items;
236
- if (items == null) {
237
- throw new UnsupportedFunctionalityError2({
238
- functionality: "Array without items is not supported in tool parameters"
239
- });
240
- }
241
- if (Array.isArray(items)) {
242
- throw new UnsupportedFunctionalityError2({
243
- functionality: "Tuple arrays are not supported in tool parameters"
244
- });
245
- }
246
- return {
247
- type: FunctionDeclarationSchemaType.ARRAY,
248
- description: jsonSchema.description,
249
- required: jsonSchema.required,
250
- items: prepareFunctionDeclarationSchema(items)
251
- };
252
- }
253
- case "object":
254
- return {
255
- type: FunctionDeclarationSchemaType.OBJECT,
256
- properties: Object.entries((_a = jsonSchema.properties) != null ? _a : {}).reduce(
257
- (acc, [key, value]) => {
258
- acc[key] = prepareFunctionDeclarationSchema(value);
259
- return acc;
260
- },
261
- {}
262
- ),
263
- description: jsonSchema.description,
264
- required: jsonSchema.required
265
- };
266
- default:
267
- throw new Error(`Unsupported type: ${type}`);
268
- }
269
- }
270
-
271
230
  // src/google-vertex-language-model.ts
272
231
  var GoogleVertexLanguageModel = class {
273
232
  constructor(modelId, settings, config) {
@@ -279,6 +238,9 @@ var GoogleVertexLanguageModel = class {
279
238
  this.settings = settings;
280
239
  this.config = config;
281
240
  }
241
+ get supportsObjectGeneration() {
242
+ return this.settings.structuredOutputs !== false;
243
+ }
282
244
  async getArgs({
283
245
  mode,
284
246
  prompt,
@@ -293,14 +255,8 @@ var GoogleVertexLanguageModel = class {
293
255
  seed,
294
256
  headers
295
257
  }) {
296
- var _a;
258
+ var _a, _b;
297
259
  const warnings = [];
298
- if (frequencyPenalty != null) {
299
- warnings.push({
300
- type: "unsupported-setting",
301
- setting: "frequencyPenalty"
302
- });
303
- }
304
260
  if (presencePenalty != null) {
305
261
  warnings.push({
306
262
  type: "unsupported-setting",
@@ -324,25 +280,32 @@ var GoogleVertexLanguageModel = class {
324
280
  topK: topK != null ? topK : this.settings.topK,
325
281
  // standardized settings:
326
282
  maxOutputTokens: maxTokens,
283
+ frequencyPenalty,
327
284
  temperature,
328
285
  topP,
329
286
  stopSequences,
330
- responseMimeType: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? "application/json" : void 0
287
+ // response format:
288
+ responseMimeType: (responseFormat == null ? void 0 : responseFormat.type) === "json" ? "application/json" : void 0,
289
+ responseSchema: (responseFormat == null ? void 0 : responseFormat.type) === "json" && responseFormat.schema != null && // Google Vertex does not support all OpenAPI Schema features,
290
+ // so this is needed as an escape hatch:
291
+ this.supportsObjectGeneration ? convertJSONSchemaToOpenAPISchema(
292
+ responseFormat.schema
293
+ ) : void 0
331
294
  };
332
295
  const type = mode.type;
333
296
  switch (type) {
334
297
  case "regular": {
335
- const conf = {
298
+ const configuration = {
336
299
  model: this.modelId,
337
300
  generationConfig,
338
- tools: prepareTools({
301
+ ...prepareToolsAndToolConfig({
339
302
  mode,
340
303
  useSearchGrounding: (_a = this.settings.useSearchGrounding) != null ? _a : false
341
304
  }),
342
305
  safetySettings: this.settings.safetySettings
343
306
  };
344
307
  return {
345
- model: this.config.vertexAI.getGenerativeModel(conf),
308
+ model: this.config.vertexAI.getGenerativeModel(configuration),
346
309
  contentRequest: convertToGoogleVertexContentRequest(prompt),
347
310
  warnings
348
311
  };
@@ -353,7 +316,12 @@ var GoogleVertexLanguageModel = class {
353
316
  model: this.modelId,
354
317
  generationConfig: {
355
318
  ...generationConfig,
356
- responseMimeType: "application/json"
319
+ responseMimeType: "application/json",
320
+ responseSchema: mode.schema != null && // Google Vertex does not support all OpenAPI Schema features,
321
+ // so this is needed as an escape hatch:
322
+ this.supportsObjectGeneration ? convertJSONSchemaToOpenAPISchema(
323
+ mode.schema
324
+ ) : void 0
357
325
  },
358
326
  safetySettings: this.settings.safetySettings
359
327
  }),
@@ -362,9 +330,32 @@ var GoogleVertexLanguageModel = class {
362
330
  };
363
331
  }
364
332
  case "object-tool": {
365
- throw new UnsupportedFunctionalityError3({
366
- functionality: "object-tool mode"
367
- });
333
+ const configuration = {
334
+ model: this.modelId,
335
+ generationConfig,
336
+ tools: [
337
+ {
338
+ functionDeclarations: [
339
+ {
340
+ name: mode.tool.name,
341
+ description: (_b = mode.tool.description) != null ? _b : "",
342
+ parameters: convertJSONSchemaToOpenAPISchema(
343
+ mode.tool.parameters
344
+ )
345
+ }
346
+ ]
347
+ }
348
+ ],
349
+ toolConfig: {
350
+ functionCallingConfig: { mode: FunctionCallingMode.ANY }
351
+ },
352
+ safetySettings: this.settings.safetySettings
353
+ };
354
+ return {
355
+ model: this.config.vertexAI.getGenerativeModel(configuration),
356
+ contentRequest: convertToGoogleVertexContentRequest(prompt),
357
+ warnings
358
+ };
368
359
  }
369
360
  default: {
370
361
  const _exhaustiveCheck = type;
@@ -487,37 +478,75 @@ var GoogleVertexLanguageModel = class {
487
478
  };
488
479
  }
489
480
  };
490
- function prepareTools({
481
+ function prepareToolsAndToolConfig({
491
482
  useSearchGrounding,
492
483
  mode
493
484
  }) {
494
485
  var _a;
495
486
  const tools = ((_a = mode.tools) == null ? void 0 : _a.length) ? mode.tools : void 0;
487
+ const mappedTools = tools == null ? [] : [
488
+ {
489
+ functionDeclarations: tools.map((tool) => {
490
+ var _a2;
491
+ return {
492
+ name: tool.name,
493
+ description: (_a2 = tool.description) != null ? _a2 : "",
494
+ parameters: convertJSONSchemaToOpenAPISchema(
495
+ tool.parameters
496
+ )
497
+ };
498
+ })
499
+ }
500
+ ];
501
+ if (useSearchGrounding) {
502
+ mappedTools.push({ googleSearchRetrieval: {} });
503
+ }
504
+ const finalTools = mappedTools.length > 0 ? mappedTools : void 0;
496
505
  const toolChoice = mode.toolChoice;
497
- if ((toolChoice == null ? void 0 : toolChoice.type) === "none") {
498
- return void 0;
506
+ if (toolChoice == null) {
507
+ return {
508
+ tools: finalTools,
509
+ toolConfig: void 0
510
+ };
499
511
  }
500
- if (toolChoice == null || toolChoice.type === "auto") {
501
- const mappedTools = tools != null ? [
502
- {
503
- functionDeclarations: tools.map((tool) => {
504
- var _a2;
505
- return {
506
- name: tool.name,
507
- description: (_a2 = tool.description) != null ? _a2 : "",
508
- parameters: prepareFunctionDeclarationSchema(tool.parameters)
509
- };
510
- })
511
- }
512
- ] : [];
513
- if (useSearchGrounding) {
514
- mappedTools.push({ googleSearchRetrieval: {} });
512
+ const type = toolChoice.type;
513
+ switch (type) {
514
+ case "auto":
515
+ return {
516
+ tools: finalTools,
517
+ toolConfig: {
518
+ functionCallingConfig: { mode: FunctionCallingMode.AUTO }
519
+ }
520
+ };
521
+ case "none":
522
+ return {
523
+ tools: finalTools,
524
+ toolConfig: {
525
+ functionCallingConfig: { mode: FunctionCallingMode.NONE }
526
+ }
527
+ };
528
+ case "required":
529
+ return {
530
+ tools: finalTools,
531
+ toolConfig: {
532
+ functionCallingConfig: { mode: FunctionCallingMode.ANY }
533
+ }
534
+ };
535
+ case "tool":
536
+ return {
537
+ tools: finalTools,
538
+ toolConfig: {
539
+ functionCallingConfig: {
540
+ mode: FunctionCallingMode.ANY,
541
+ allowedFunctionNames: [toolChoice.toolName]
542
+ }
543
+ }
544
+ };
545
+ default: {
546
+ const _exhaustiveCheck = type;
547
+ throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);
515
548
  }
516
- return mappedTools.length > 0 ? mappedTools : void 0;
517
549
  }
518
- throw new UnsupportedFunctionalityError3({
519
- functionality: `toolChoice: ${toolChoice.type}`
520
- });
521
550
  }
522
551
  function getToolCallsFromParts({
523
552
  parts,
@@ -562,7 +591,7 @@ function createVertex(options = {}) {
562
591
  }),
563
592
  googleAuthOptions: options.googleAuthOptions
564
593
  };
565
- return (_b = (_a = options.createVertexAI) == null ? void 0 : _a.call(options, config)) != null ? _b : new VertexAI(config);
594
+ return (_b = (_a = options.createVertexAI) == null ? void 0 : _a.call(options, config)) != null ? _b : new VertexAI2(config);
566
595
  };
567
596
  const createChatModel = (modelId, settings = {}) => {
568
597
  var _a;
@@ -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","../src/prepare-function-declaration-schema.ts"],"sourcesContent":["import {\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport { 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 extends ProviderV1 {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): LanguageModelV1;\n\n languageModel: (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) => LanguageModelV1;\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.languageModel = createChatModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\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 SafetySetting,\n VertexAI,\n Tool as GoogleTool,\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 = 'json';\n readonly supportsImageUrls = false;\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 async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n headers,\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 if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: topK ?? this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n stopSequences,\n responseMimeType:\n responseFormat?.type === 'json' ? 'application/json' : undefined,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n const conf = {\n model: this.modelId,\n generationConfig,\n tools: prepareTools({\n mode,\n useSearchGrounding: this.settings.useSearchGrounding ?? false,\n }),\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n };\n\n return {\n model: this.config.vertexAI.getGenerativeModel(conf),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig: {\n ...generationConfig,\n responseMimeType: 'application/json',\n },\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool 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 } = await 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 } = await this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\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 return; // ignored (this can happen when using grounding)\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 useSearchGrounding,\n mode,\n}: {\n useSearchGrounding: boolean;\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n };\n}): GoogleTool[] | undefined {\n // when the tools array is empty, change it to undefined to prevent errors:\n const tools = mode.tools?.length ? mode.tools : undefined;\n const toolChoice = mode.toolChoice;\n\n if (toolChoice?.type === 'none') {\n return undefined;\n }\n\n if (toolChoice == null || toolChoice.type === 'auto') {\n const mappedTools: GoogleTool[] =\n tools != null\n ? [\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 if (useSearchGrounding) {\n mappedTools.push({ googleSearchRetrieval: {} });\n }\n\n return mappedTools.length > 0 ? mappedTools : undefined;\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 if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\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[] | undefined) {\n if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\n\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, Part } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n const systemInstructionParts: Part[] = [];\n const contents: Content[] = [];\n let systemMessagesAllowed = true;\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (!systemMessagesAllowed) {\n throw new UnsupportedFunctionalityError({\n functionality: 'system messages after first user message',\n });\n }\n systemInstructionParts.push({ text: content });\n break;\n }\n\n case 'user': {\n systemMessagesAllowed = false;\n\n const parts: Content['parts'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n parts.push({ text: part.text });\n break;\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: {\n mimeType: part.mimeType ?? 'image/jpeg',\n data: convertUint8ArrayToBase64(part.image),\n },\n });\n\n break;\n }\n\n case 'file': {\n if (part.data instanceof URL) {\n // The AI SDK automatically downloads files for user file parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'File URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: { mimeType: part.mimeType, data: part.data },\n });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n contents.push({ role: 'user', parts });\n break;\n }\n\n case 'assistant': {\n systemMessagesAllowed = false;\n\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 systemMessagesAllowed = false;\n\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 systemInstructionParts.length > 0\n ? { role: 'system', parts: systemInstructionParts }\n : undefined,\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 return 'other';\n default:\n return 'unknown';\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"]}
1
+ {"version":3,"sources":["../src/google-vertex-provider.ts","../src/google-vertex-language-model.ts","../src/convert-json-schema-to-openapi-schema.ts","../src/convert-to-google-vertex-content-request.ts","../src/map-google-vertex-finish-reason.ts"],"sourcesContent":["import {\n LanguageModelV1,\n NoSuchModelError,\n ProviderV1,\n} from '@ai-sdk/provider';\nimport { 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 extends ProviderV1 {\n /**\nCreates a model for text generation.\n */\n (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ): LanguageModelV1;\n\n languageModel: (\n modelId: GoogleVertexModelId,\n settings?: GoogleVertexSettings,\n ) => LanguageModelV1;\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.languageModel = createChatModel;\n provider.textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n };\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} from '@ai-sdk/provider';\nimport { convertAsyncGeneratorToReadableStream } from '@ai-sdk/provider-utils';\nimport {\n FunctionCallingMode,\n FunctionDeclarationSchema,\n GenerateContentResponse,\n GenerationConfig,\n Part,\n ResponseSchema,\n SafetySetting,\n Tool,\n ToolConfig,\n VertexAI,\n} from '@google-cloud/vertexai';\nimport { convertJSONSchemaToOpenAPISchema } from './convert-json-schema-to-openapi-schema';\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';\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 = 'json';\n readonly supportsImageUrls = false;\n\n get supportsObjectGeneration() {\n return this.settings.structuredOutputs !== false;\n }\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 async getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n headers,\n }: LanguageModelV1CallOptions) {\n const warnings: LanguageModelV1CallWarning[] = [];\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 if (headers != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'headers',\n });\n }\n\n const generationConfig: GenerationConfig = {\n // model specific settings:\n topK: topK ?? this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n frequencyPenalty,\n temperature,\n topP,\n stopSequences,\n\n // response format:\n responseMimeType:\n responseFormat?.type === 'json' ? 'application/json' : undefined,\n responseSchema:\n responseFormat?.type === 'json' &&\n responseFormat.schema != null &&\n // Google Vertex does not support all OpenAPI Schema features,\n // so this is needed as an escape hatch:\n this.supportsObjectGeneration\n ? (convertJSONSchemaToOpenAPISchema(\n responseFormat.schema,\n ) as ResponseSchema)\n : undefined,\n };\n\n const type = mode.type;\n\n switch (type) {\n case 'regular': {\n const configuration = {\n model: this.modelId,\n generationConfig,\n ...prepareToolsAndToolConfig({\n mode,\n useSearchGrounding: this.settings.useSearchGrounding ?? false,\n }),\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n };\n\n return {\n model: this.config.vertexAI.getGenerativeModel(configuration),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-json': {\n return {\n model: this.config.vertexAI.getGenerativeModel({\n model: this.modelId,\n generationConfig: {\n ...generationConfig,\n responseMimeType: 'application/json',\n responseSchema:\n mode.schema != null &&\n // Google Vertex does not support all OpenAPI Schema features,\n // so this is needed as an escape hatch:\n this.supportsObjectGeneration\n ? (convertJSONSchemaToOpenAPISchema(\n mode.schema,\n ) as ResponseSchema)\n : undefined,\n },\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n }),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\n };\n }\n\n case 'object-tool': {\n const configuration = {\n model: this.modelId,\n generationConfig,\n tools: [\n {\n functionDeclarations: [\n {\n name: mode.tool.name,\n description: mode.tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(\n mode.tool.parameters,\n ) as FunctionDeclarationSchema,\n },\n ],\n },\n ],\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.ANY },\n },\n safetySettings: this.settings.safetySettings as\n | undefined\n | Array<SafetySetting>,\n };\n\n return {\n model: this.config.vertexAI.getGenerativeModel(configuration),\n contentRequest: convertToGoogleVertexContentRequest(prompt),\n warnings,\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 } = await 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 } = await this.getArgs(options);\n const { stream } = await model.generateContentStream(contentRequest);\n\n let finishReason: LanguageModelV1FinishReason = 'unknown';\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 return; // ignored (this can happen when using grounding)\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 prepareToolsAndToolConfig({\n useSearchGrounding,\n mode,\n}: {\n useSearchGrounding: boolean;\n mode: Parameters<LanguageModelV1['doGenerate']>[0]['mode'] & {\n type: 'regular';\n };\n}): {\n tools: Tool[] | undefined;\n toolConfig: ToolConfig | undefined;\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 const mappedTools: Tool[] =\n tools == null\n ? []\n : [\n {\n functionDeclarations: tools.map(tool => ({\n name: tool.name,\n description: tool.description ?? '',\n parameters: convertJSONSchemaToOpenAPISchema(\n tool.parameters,\n ) as FunctionDeclarationSchema,\n })),\n },\n ];\n\n if (useSearchGrounding) {\n mappedTools.push({ googleSearchRetrieval: {} });\n }\n\n const finalTools = mappedTools.length > 0 ? mappedTools : undefined;\n\n const toolChoice = mode.toolChoice;\n\n if (toolChoice == null) {\n return {\n tools: finalTools,\n toolConfig: undefined,\n };\n }\n\n const type = toolChoice.type;\n\n switch (type) {\n case 'auto':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.AUTO },\n },\n };\n case 'none':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.NONE },\n },\n };\n case 'required':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: { mode: FunctionCallingMode.ANY },\n },\n };\n case 'tool':\n return {\n tools: finalTools,\n toolConfig: {\n functionCallingConfig: {\n mode: FunctionCallingMode.ANY,\n allowedFunctionNames: [toolChoice.toolName],\n },\n },\n };\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported tool choice type: ${_exhaustiveCheck}`);\n }\n }\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n}: {\n parts: Part[];\n generateId: () => string;\n}) {\n if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\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[] | undefined) {\n if (parts == null) {\n return undefined; // parts are sometimes undefined when using safety settings\n }\n\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 { JSONSchema7Definition } from 'json-schema';\n\n/**\n * Converts JSON Schema 7 to OpenAPI Schema 3.0\n */\nexport function convertJSONSchemaToOpenAPISchema(\n jsonSchema: JSONSchema7Definition,\n): unknown {\n if (typeof jsonSchema === 'boolean') {\n return { type: 'boolean', properties: {} };\n }\n\n const {\n type,\n description,\n required,\n properties,\n items,\n allOf,\n anyOf,\n oneOf,\n format,\n const: constValue,\n minLength,\n } = jsonSchema;\n\n const result: Record<string, unknown> = {};\n\n if (description) result.description = description;\n if (required) result.required = required;\n if (format) result.format = format;\n\n if (constValue !== undefined) {\n result.enum = [constValue];\n }\n\n // Handle type\n if (type) {\n if (Array.isArray(type)) {\n if (type.includes('null')) {\n result.type = type.filter(t => t !== 'null')[0];\n result.nullable = true;\n } else {\n result.type = type;\n }\n } else if (type === 'null') {\n result.type = 'null';\n } else {\n result.type = type;\n }\n }\n\n if (properties) {\n result.properties = Object.entries(properties).reduce(\n (acc, [key, value]) => {\n acc[key] = convertJSONSchemaToOpenAPISchema(value);\n return acc;\n },\n {} as Record<string, unknown>,\n );\n }\n\n if (items) {\n result.items = Array.isArray(items)\n ? items.map(convertJSONSchemaToOpenAPISchema)\n : convertJSONSchemaToOpenAPISchema(items);\n }\n\n if (allOf) {\n result.allOf = allOf.map(convertJSONSchemaToOpenAPISchema);\n }\n if (anyOf) {\n result.anyOf = anyOf.map(convertJSONSchemaToOpenAPISchema);\n }\n if (oneOf) {\n result.oneOf = oneOf.map(convertJSONSchemaToOpenAPISchema);\n }\n\n if (minLength !== undefined) result.minLength = minLength;\n\n return result;\n}\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport { Content, GenerateContentRequest, Part } from '@google-cloud/vertexai';\n\nexport function convertToGoogleVertexContentRequest(\n prompt: LanguageModelV1Prompt,\n): GenerateContentRequest {\n const systemInstructionParts: Part[] = [];\n const contents: Content[] = [];\n let systemMessagesAllowed = true;\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n if (!systemMessagesAllowed) {\n throw new UnsupportedFunctionalityError({\n functionality: 'system messages after first user message',\n });\n }\n systemInstructionParts.push({ text: content });\n break;\n }\n\n case 'user': {\n systemMessagesAllowed = false;\n\n const parts: Content['parts'] = [];\n\n for (const part of content) {\n switch (part.type) {\n case 'text': {\n parts.push({ text: part.text });\n break;\n }\n\n case 'image': {\n if (part.image instanceof URL) {\n // The AI SDK automatically downloads images for user image parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'Image URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: {\n mimeType: part.mimeType ?? 'image/jpeg',\n data: convertUint8ArrayToBase64(part.image),\n },\n });\n\n break;\n }\n\n case 'file': {\n if (part.data instanceof URL) {\n // The AI SDK automatically downloads files for user file parts with URLs\n throw new UnsupportedFunctionalityError({\n functionality: 'File URLs in user messages',\n });\n }\n\n parts.push({\n inlineData: { mimeType: part.mimeType, data: part.data },\n });\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = part;\n throw new UnsupportedFunctionalityError({\n functionality: `prompt part: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n contents.push({ role: 'user', parts });\n break;\n }\n\n case 'assistant': {\n systemMessagesAllowed = false;\n\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 systemMessagesAllowed = false;\n\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 systemInstructionParts.length > 0\n ? { role: 'system', parts: systemInstructionParts }\n : undefined,\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 return 'other';\n default:\n return 'unknown';\n }\n}\n"],"mappings":";AAAA;AAAA,EAEE;AAAA,OAEK;AACP,SAAS,YAAY,mBAAmB;AACxC,SAAS,YAAAA,iBAA4B;;;ACNrC;AAAA,EAME;AAAA,OACK;AACP,SAAS,6CAA6C;AACtD;AAAA,EACE;AAAA,OAUK;;;ACfA,SAAS,iCACd,YACS;AACT,MAAI,OAAO,eAAe,WAAW;AACnC,WAAO,EAAE,MAAM,WAAW,YAAY,CAAC,EAAE;AAAA,EAC3C;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP;AAAA,EACF,IAAI;AAEJ,QAAM,SAAkC,CAAC;AAEzC,MAAI;AAAa,WAAO,cAAc;AACtC,MAAI;AAAU,WAAO,WAAW;AAChC,MAAI;AAAQ,WAAO,SAAS;AAE5B,MAAI,eAAe,QAAW;AAC5B,WAAO,OAAO,CAAC,UAAU;AAAA,EAC3B;AAGA,MAAI,MAAM;AACR,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,UAAI,KAAK,SAAS,MAAM,GAAG;AACzB,eAAO,OAAO,KAAK,OAAO,OAAK,MAAM,MAAM,EAAE,CAAC;AAC9C,eAAO,WAAW;AAAA,MACpB,OAAO;AACL,eAAO,OAAO;AAAA,MAChB;AAAA,IACF,WAAW,SAAS,QAAQ;AAC1B,aAAO,OAAO;AAAA,IAChB,OAAO;AACL,aAAO,OAAO;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,YAAY;AACd,WAAO,aAAa,OAAO,QAAQ,UAAU,EAAE;AAAA,MAC7C,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AACrB,YAAI,GAAG,IAAI,iCAAiC,KAAK;AACjD,eAAO;AAAA,MACT;AAAA,MACA,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,OAAO;AACT,WAAO,QAAQ,MAAM,QAAQ,KAAK,IAC9B,MAAM,IAAI,gCAAgC,IAC1C,iCAAiC,KAAK;AAAA,EAC5C;AAEA,MAAI,OAAO;AACT,WAAO,QAAQ,MAAM,IAAI,gCAAgC;AAAA,EAC3D;AACA,MAAI,OAAO;AACT,WAAO,QAAQ,MAAM,IAAI,gCAAgC;AAAA,EAC3D;AACA,MAAI,OAAO;AACT,WAAO,QAAQ,MAAM,IAAI,gCAAgC;AAAA,EAC3D;AAEA,MAAI,cAAc;AAAW,WAAO,YAAY;AAEhD,SAAO;AACT;;;ACjFA;AAAA,EAEE;AAAA,OACK;AACP,SAAS,iCAAiC;AAGnC,SAAS,oCACd,QACwB;AAT1B;AAUE,QAAM,yBAAiC,CAAC;AACxC,QAAM,WAAsB,CAAC;AAC7B,MAAI,wBAAwB;AAE5B,aAAW,EAAE,MAAM,QAAQ,KAAK,QAAQ;AACtC,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,YAAI,CAAC,uBAAuB;AAC1B,gBAAM,IAAI,8BAA8B;AAAA,YACtC,eAAe;AAAA,UACjB,CAAC;AAAA,QACH;AACA,+BAAuB,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC7C;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,gCAAwB;AAExB,cAAM,QAA0B,CAAC;AAEjC,mBAAW,QAAQ,SAAS;AAC1B,kBAAQ,KAAK,MAAM;AAAA,YACjB,KAAK,QAAQ;AACX,oBAAM,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC;AAC9B;AAAA,YACF;AAAA,YAEA,KAAK,SAAS;AACZ,kBAAI,KAAK,iBAAiB,KAAK;AAE7B,sBAAM,IAAI,8BAA8B;AAAA,kBACtC,eAAe;AAAA,gBACjB,CAAC;AAAA,cACH;AAEA,oBAAM,KAAK;AAAA,gBACT,YAAY;AAAA,kBACV,WAAU,UAAK,aAAL,YAAiB;AAAA,kBAC3B,MAAM,0BAA0B,KAAK,KAAK;AAAA,gBAC5C;AAAA,cACF,CAAC;AAED;AAAA,YACF;AAAA,YAEA,KAAK,QAAQ;AACX,kBAAI,KAAK,gBAAgB,KAAK;AAE5B,sBAAM,IAAI,8BAA8B;AAAA,kBACtC,eAAe;AAAA,gBACjB,CAAC;AAAA,cACH;AAEA,oBAAM,KAAK;AAAA,gBACT,YAAY,EAAE,UAAU,KAAK,UAAU,MAAM,KAAK,KAAK;AAAA,cACzD,CAAC;AAED;AAAA,YACF;AAAA,YAEA,SAAS;AACP,oBAAM,mBAA0B;AAChC,oBAAM,IAAI,8BAA8B;AAAA,gBACtC,eAAe,gBAAgB,gBAAgB;AAAA,cACjD,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK,EAAE,MAAM,QAAQ,MAAM,CAAC;AACrC;AAAA,MACF;AAAA,MAEA,KAAK,aAAa;AAChB,gCAAwB;AAExB,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,OAAO,QACJ,OAAO,UAAQ,KAAK,SAAS,UAAU,KAAK,KAAK,SAAS,CAAC,EAC3D,IAAI,UAAQ;AACX,oBAAQ,KAAK,MAAM;AAAA,cACjB,KAAK,QAAQ;AACX,uBAAO,EAAE,MAAM,KAAK,KAAK;AAAA,cAC3B;AAAA,cAEA,KAAK,aAAa;AAChB,uBAAO;AAAA,kBACL,cAAc;AAAA,oBACZ,MAAM,KAAK;AAAA,oBACX,MAAM,KAAK;AAAA,kBACb;AAAA,gBACF;AAAA,cACF;AAAA,cAEA,SAAS;AACP,sBAAM,mBAA0B;AAChC,sBAAM,IAAI,8BAA8B;AAAA,kBACtC,eAAe,gBAAgB,gBAAgB;AAAA,gBACjD,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACL,CAAC;AAED;AAAA,MACF;AAAA,MAEA,KAAK,QAAQ;AACX,gCAAwB;AAExB,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,OAAO,QAAQ,IAAI,WAAS;AAAA,YAC1B,kBAAkB;AAAA,cAChB,MAAM,KAAK;AAAA,cACX,UAAU,KAAK;AAAA,YACjB;AAAA,UACF,EAAE;AAAA,QACJ,CAAC;AACD;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,8BAA8B;AAAA,UACtC,eAAe,SAAS,gBAAgB;AAAA,QAC1C,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,mBACE,uBAAuB,SAAS,IAC5B,EAAE,MAAM,UAAU,OAAO,uBAAuB,IAChD;AAAA,IACN;AAAA,EACF;AACF;;;ACnJO,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AACF,GAGgC;AAC9B,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAO,eAAe,eAAe;AAAA,IACvC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;;;AHMO,IAAM,4BAAN,MAA2D;AAAA,EAehE,YACE,SACA,UACA,QACA;AAlBF,SAAS,uBAAuB;AAChC,SAAS,WAAW;AACpB,SAAS,8BAA8B;AACvC,SAAS,oBAAoB;AAgB3B,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAChB;AAAA,EAjBA,IAAI,2BAA2B;AAC7B,WAAO,KAAK,SAAS,sBAAsB;AAAA,EAC7C;AAAA,EAiBA,MAAc,QAAQ;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAA+B;AAvEjC;AAwEI,UAAM,WAAyC,CAAC;AAEhD,QAAI,mBAAmB,MAAM;AAC3B,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,WAAW,MAAM;AACnB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,UAAM,mBAAqC;AAAA;AAAA,MAEzC,MAAM,sBAAQ,KAAK,SAAS;AAAA;AAAA,MAG5B,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MAGA,mBACE,iDAAgB,UAAS,SAAS,qBAAqB;AAAA,MACzD,iBACE,iDAAgB,UAAS,UACzB,eAAe,UAAU;AAAA;AAAA,MAGzB,KAAK,2BACA;AAAA,QACC,eAAe;AAAA,MACjB,IACA;AAAA,IACR;AAEA,UAAM,OAAO,KAAK;AAElB,YAAQ,MAAM;AAAA,MACZ,KAAK,WAAW;AACd,cAAM,gBAAgB;AAAA,UACpB,OAAO,KAAK;AAAA,UACZ;AAAA,UACA,GAAG,0BAA0B;AAAA,YAC3B;AAAA,YACA,qBAAoB,UAAK,SAAS,uBAAd,YAAoC;AAAA,UAC1D,CAAC;AAAA,UACD,gBAAgB,KAAK,SAAS;AAAA,QAGhC;AAEA,eAAO;AAAA,UACL,OAAO,KAAK,OAAO,SAAS,mBAAmB,aAAa;AAAA,UAC5D,gBAAgB,oCAAoC,MAAM;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,eAAO;AAAA,UACL,OAAO,KAAK,OAAO,SAAS,mBAAmB;AAAA,YAC7C,OAAO,KAAK;AAAA,YACZ,kBAAkB;AAAA,cAChB,GAAG;AAAA,cACH,kBAAkB;AAAA,cAClB,gBACE,KAAK,UAAU;AAAA;AAAA,cAGf,KAAK,2BACA;AAAA,gBACC,KAAK;AAAA,cACP,IACA;AAAA,YACR;AAAA,YACA,gBAAgB,KAAK,SAAS;AAAA,UAGhC,CAAC;AAAA,UACD,gBAAgB,oCAAoC,MAAM;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK,eAAe;AAClB,cAAM,gBAAgB;AAAA,UACpB,OAAO,KAAK;AAAA,UACZ;AAAA,UACA,OAAO;AAAA,YACL;AAAA,cACE,sBAAsB;AAAA,gBACpB;AAAA,kBACE,MAAM,KAAK,KAAK;AAAA,kBAChB,cAAa,UAAK,KAAK,gBAAV,YAAyB;AAAA,kBACtC,YAAY;AAAA,oBACV,KAAK,KAAK;AAAA,kBACZ;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,YAAY;AAAA,YACV,uBAAuB,EAAE,MAAM,oBAAoB,IAAI;AAAA,UACzD;AAAA,UACA,gBAAgB,KAAK,SAAS;AAAA,QAGhC;AAEA,eAAO;AAAA,UACL,OAAO,KAAK,OAAO,SAAS,mBAAmB,aAAa;AAAA,UAC5D,gBAAgB,oCAAoC,MAAM;AAAA,UAC1D;AAAA,QACF;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,mBAA0B;AAChC,cAAM,IAAI,MAAM,qBAAqB,gBAAgB,EAAE;AAAA,MACzD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,SAC6D;AAnNjE;AAoNI,UAAM,EAAE,OAAO,gBAAgB,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACtE,UAAM,EAAE,SAAS,IAAI,MAAM,MAAM,gBAAgB,cAAc;AAE/D,UAAM,kBAAiB,cAAS,eAAT,mBAAsB;AAE7C,QAAI,kBAAkB,MAAM;AAC1B,YAAM,IAAI,wBAAwB,EAAE,SAAS,yBAAyB,CAAC;AAAA,IACzE;AAEA,UAAM,QAAQ,eAAe,QAAQ;AACrC,UAAM,gBAAgB,SAAS;AAE/B,UAAM,YAAY,sBAAsB;AAAA,MACtC;AAAA,MACA,YAAY,KAAK,OAAO;AAAA,IAC1B,CAAC;AAED,WAAO;AAAA,MACL,MAAM,iBAAiB,KAAK;AAAA,MAC5B;AAAA,MACA,cAAc,4BAA4B;AAAA,QACxC,cAAc,eAAe;AAAA,QAC7B,cAAc,aAAa,QAAQ,UAAU,SAAS;AAAA,MACxD,CAAC;AAAA,MACD,OAAO;AAAA,QACL,eAAc,oDAAe,qBAAf,YAAmC;AAAA,QACjD,mBAAkB,oDAAe,yBAAf,YAAuC;AAAA,MAC3D;AAAA,MACA,SAAS;AAAA,QACP,WAAW;AAAA,QACX,aAAa,CAAC;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SACJ,SAC2D;AAC3D,UAAM,EAAE,OAAO,gBAAgB,SAAS,IAAI,MAAM,KAAK,QAAQ,OAAO;AACtE,UAAM,EAAE,OAAO,IAAI,MAAM,MAAM,sBAAsB,cAAc;AAEnE,QAAI,eAA4C;AAChD,QAAI,QAA4D;AAAA,MAC9D,cAAc,OAAO;AAAA,MACrB,kBAAkB,OAAO;AAAA,IAC3B;AAEA,UAAMC,cAAa,KAAK,OAAO;AAC/B,QAAI,eAAe;AAEnB,WAAO;AAAA,MACL,QAAQ,sCAAsC,MAAM,EAAE;AAAA,QACpD,IAAI;AAAA,UACF;AAAA,YACE,UAAU,OAAO,YAAY;AA3QzC;AA4Qc,oBAAM,gBAAgB,MAAM;AAC5B,kBAAI,iBAAiB,MAAM;AACzB,wBAAQ;AAAA,kBACN,eAAc,mBAAc,qBAAd,YAAkC;AAAA,kBAChD,mBAAkB,mBAAc,yBAAd,YAAsC;AAAA,gBAC1D;AAAA,cACF;AAEA,oBAAM,aAAY,WAAM,eAAN,mBAAmB;AAErC,kBAAI,aAAa,MAAM;AACrB;AAAA,cACF;AAEA,kBAAI,UAAU,gBAAgB,MAAM;AAClC,+BAAe,4BAA4B;AAAA,kBACzC,cAAc,UAAU;AAAA,kBACxB;AAAA,gBACF,CAAC;AAAA,cACH;AAEA,oBAAM,UAAU,UAAU;AAE1B,oBAAM,YAAY,iBAAiB,QAAQ,KAAK;AAChD,kBAAI,aAAa,MAAM;AACrB,2BAAW,QAAQ;AAAA,kBACjB,MAAM;AAAA,kBACN,WAAW;AAAA,gBACb,CAAC;AAAA,cACH;AAEA,oBAAM,iBAAiB,sBAAsB;AAAA,gBAC3C,OAAO,QAAQ;AAAA,gBACf,YAAAA;AAAA,cACF,CAAC;AAED,kBAAI,kBAAkB,MAAM;AAC1B,2BAAW,YAAY,gBAAgB;AACrC,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,cAAc;AAAA,oBACd,YAAY,SAAS;AAAA,oBACrB,UAAU,SAAS;AAAA,oBACnB,eAAe,SAAS;AAAA,kBAC1B,CAAC;AAED,6BAAW,QAAQ;AAAA,oBACjB,MAAM;AAAA,oBACN,cAAc;AAAA,oBACd,YAAY,SAAS;AAAA,oBACrB,UAAU,SAAS;AAAA,oBACnB,MAAM,SAAS;AAAA,kBACjB,CAAC;AAED,iCAAe;AAAA,gBACjB;AAAA,cACF;AAAA,YACF;AAAA,YAEA,MAAM,YAAY;AAChB,yBAAW,QAAQ;AAAA,gBACjB,MAAM;AAAA,gBACN;AAAA,gBACA;AAAA,cACF,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,WAAW;AAAA,QACX,aAAa,CAAC;AAAA,MAChB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AACF,GAQE;AArWF;AAuWE,QAAM,UAAQ,UAAK,UAAL,mBAAY,UAAS,KAAK,QAAQ;AAEhD,QAAM,cACJ,SAAS,OACL,CAAC,IACD;AAAA,IACE;AAAA,MACE,sBAAsB,MAAM,IAAI,UAAK;AA9WjD,YAAAC;AA8WqD;AAAA,UACvC,MAAM,KAAK;AAAA,UACX,cAAaA,MAAA,KAAK,gBAAL,OAAAA,MAAoB;AAAA,UACjC,YAAY;AAAA,YACV,KAAK;AAAA,UACP;AAAA,QACF;AAAA,OAAE;AAAA,IACJ;AAAA,EACF;AAEN,MAAI,oBAAoB;AACtB,gBAAY,KAAK,EAAE,uBAAuB,CAAC,EAAE,CAAC;AAAA,EAChD;AAEA,QAAM,aAAa,YAAY,SAAS,IAAI,cAAc;AAE1D,QAAM,aAAa,KAAK;AAExB,MAAI,cAAc,MAAM;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,YAAY;AAAA,IACd;AAAA,EACF;AAEA,QAAM,OAAO,WAAW;AAExB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,UACV,uBAAuB,EAAE,MAAM,oBAAoB,KAAK;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,UACV,uBAAuB,EAAE,MAAM,oBAAoB,KAAK;AAAA,QAC1D;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,UACV,uBAAuB,EAAE,MAAM,oBAAoB,IAAI;AAAA,QACzD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,UACV,uBAAuB;AAAA,YACrB,MAAM,oBAAoB;AAAA,YAC1B,sBAAsB,CAAC,WAAW,QAAQ;AAAA,UAC5C;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS;AACP,YAAM,mBAA0B;AAChC,YAAM,IAAI,MAAM,iCAAiC,gBAAgB,EAAE;AAAA,IACrE;AAAA,EACF;AACF;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA,YAAAD;AACF,GAGG;AACD,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,MAAM;AAAA,IAAQ,UACnB,KAAK,gBAAgB,OACjB,CAAC,IACD;AAAA,MACE,cAAc;AAAA,MACd,YAAYA,YAAW;AAAA,MACvB,UAAU,KAAK,aAAa;AAAA,MAC5B,MAAM,KAAK,UAAU,KAAK,aAAa,IAAI;AAAA,IAC7C;AAAA,EACN;AACF;AAEA,SAAS,iBAAiB,OAA2B;AACnD,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,MAAM,OAAO,UAAQ,UAAU,IAAI;AAIrD,SAAO,UAAU,WAAW,IACxB,SACA,UAAU,IAAI,UAAQ,KAAK,IAAI,EAAE,KAAK,EAAE;AAC9C;;;ADpZO,SAAS,aACd,UAAwC,CAAC,GACnB;AACtB,QAAM,iBAAiB,MAAM;AAlE/B;AAmEI,UAAM,SAAS;AAAA,MACb,SAAS,YAAY;AAAA,QACnB,cAAc,QAAQ;AAAA,QACtB,aAAa;AAAA,QACb,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC;AAAA,MACD,UAAU,YAAY;AAAA,QACpB,cAAc,QAAQ;AAAA,QACtB,aAAa;AAAA,QACb,yBAAyB;AAAA,QACzB,aAAa;AAAA,MACf,CAAC;AAAA,MACD,mBAAmB,QAAQ;AAAA,IAC7B;AAEA,YAAO,mBAAQ,mBAAR,iCAAyB,YAAzB,YAAoC,IAAIE,UAAS,MAAM;AAAA,EAChE;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAiC,CAAC,MAClC;AAzFJ;AA0FI,eAAI,0BAA0B,SAAS,UAAU;AAAA,MAC/C,UAAU,eAAe;AAAA,MACzB,aAAY,aAAQ,eAAR,YAAsB;AAAA,IACpC,CAAC;AAAA;AAEH,QAAM,WAAW,SACf,SACA,UACA;AACA,QAAI,YAAY;AACd,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,gBAAgB,SAAS,QAAQ;AAAA,EAC1C;AAEA,WAAS,gBAAgB;AACzB,WAAS,qBAAqB,CAAC,YAAoB;AACjD,UAAM,IAAI,iBAAiB,EAAE,SAAS,WAAW,qBAAqB,CAAC;AAAA,EACzE;AAEA,SAAO;AACT;AAKO,IAAM,SAAS,aAAa;","names":["VertexAI","generateId","_a","VertexAI"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/google-vertex",
3
- "version": "0.0.38",
3
+ "version": "0.0.40",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -24,7 +24,7 @@
24
24
  "json-schema": "0.4.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@google-cloud/vertexai": "^1.4.0",
27
+ "@google-cloud/vertexai": "^1.6.0",
28
28
  "@types/json-schema": "7.0.15",
29
29
  "@types/node": "^18",
30
30
  "tsup": "^8",
@@ -32,7 +32,7 @@
32
32
  "@vercel/ai-tsconfig": "0.0.0"
33
33
  },
34
34
  "peerDependencies": {
35
- "@google-cloud/vertexai": "^1.4.0"
35
+ "@google-cloud/vertexai": "^1.6.0"
36
36
  },
37
37
  "engines": {
38
38
  "node": ">=18"