@ai-sdk/google 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -30,19 +30,19 @@ import { google } from '@ai-sdk/google';
30
30
 
31
31
  ## Generative AI Models
32
32
 
33
- You can create models that call the [Google Generative AI API](https://ai.google.dev/api/rest) using the `.generativeAI()` factory method.
33
+ You can create models that call the [Google Generative AI API](https://ai.google.dev/api/rest) using the `.chat()` factory method.
34
34
  The first argument is the model id, e.g. `models/gemini-pro`.
35
35
  The models support tool calls and some have multi-modal capabilities.
36
36
 
37
37
  ```ts
38
- const model = google.generativeAI('models/gemini-pro');
38
+ const model = google.chat('models/gemini-pro');
39
39
  ```
40
40
 
41
41
  Google Generative AI models support also some model specific settings that are not part of the [standard call settings](/docs/ai-core/settings).
42
42
  You can pass them as an options argument:
43
43
 
44
44
  ```ts
45
- const model = google.generativeAI('models/gemini-pro', {
45
+ const model = google.chat('models/gemini-pro', {
46
46
  topK: 0.2,
47
47
  });
48
48
  ```
@@ -0,0 +1,67 @@
1
+ import { LanguageModelV1 } from '@ai-sdk/provider';
2
+
3
+ type GoogleGenerativeAIModelId = 'models/gemini-1.5-pro-latest' | 'models/gemini-pro' | 'models/gemini-pro-vision' | (string & {});
4
+ interface GoogleGenerativeAISettings {
5
+ topK?: number;
6
+ }
7
+
8
+ type GoogleGenerativeAIConfig = {
9
+ provider: string;
10
+ baseURL: string;
11
+ headers: () => Record<string, string | undefined>;
12
+ generateId: () => string;
13
+ };
14
+ declare class GoogleGenerativeAILanguageModel implements LanguageModelV1 {
15
+ readonly specificationVersion = "v1";
16
+ readonly defaultObjectGenerationMode: undefined;
17
+ readonly modelId: GoogleGenerativeAIModelId;
18
+ readonly settings: GoogleGenerativeAISettings;
19
+ private readonly config;
20
+ constructor(modelId: GoogleGenerativeAIModelId, settings: GoogleGenerativeAISettings, config: GoogleGenerativeAIConfig);
21
+ get provider(): string;
22
+ private getArgs;
23
+ doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
24
+ doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
25
+ }
26
+
27
+ /**
28
+ * Google provider.
29
+ */
30
+ declare class Google {
31
+ /**
32
+ * Base URL for the Google API calls.
33
+ */
34
+ readonly baseURL: string;
35
+ readonly apiKey?: string;
36
+ private readonly generateId;
37
+ /**
38
+ * Creates a new Google provider instance.
39
+ */
40
+ constructor(options?: {
41
+ /**
42
+ * Base URL for the Google API calls.
43
+ */
44
+ baseURL?: string;
45
+ /**
46
+ * @deprecated Use `baseURL` instead.
47
+ */
48
+ baseUrl?: string;
49
+ /**
50
+ * API key for authenticating requests.
51
+ */
52
+ apiKey?: string;
53
+ generateId?: () => string;
54
+ });
55
+ private get baseConfig();
56
+ /**
57
+ * @deprecated Use `chat()` instead.
58
+ */
59
+ generativeAI(modelId: GoogleGenerativeAIModelId, settings?: GoogleGenerativeAISettings): GoogleGenerativeAILanguageModel;
60
+ chat(modelId: GoogleGenerativeAIModelId, settings?: GoogleGenerativeAISettings): GoogleGenerativeAILanguageModel;
61
+ }
62
+ /**
63
+ * Default Google provider instance.
64
+ */
65
+ declare const google: Google;
66
+
67
+ export { Google, google };
@@ -0,0 +1,67 @@
1
+ import { LanguageModelV1 } from '@ai-sdk/provider';
2
+
3
+ type GoogleGenerativeAIModelId = 'models/gemini-1.5-pro-latest' | 'models/gemini-pro' | 'models/gemini-pro-vision' | (string & {});
4
+ interface GoogleGenerativeAISettings {
5
+ topK?: number;
6
+ }
7
+
8
+ type GoogleGenerativeAIConfig = {
9
+ provider: string;
10
+ baseURL: string;
11
+ headers: () => Record<string, string | undefined>;
12
+ generateId: () => string;
13
+ };
14
+ declare class GoogleGenerativeAILanguageModel implements LanguageModelV1 {
15
+ readonly specificationVersion = "v1";
16
+ readonly defaultObjectGenerationMode: undefined;
17
+ readonly modelId: GoogleGenerativeAIModelId;
18
+ readonly settings: GoogleGenerativeAISettings;
19
+ private readonly config;
20
+ constructor(modelId: GoogleGenerativeAIModelId, settings: GoogleGenerativeAISettings, config: GoogleGenerativeAIConfig);
21
+ get provider(): string;
22
+ private getArgs;
23
+ doGenerate(options: Parameters<LanguageModelV1['doGenerate']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>>;
24
+ doStream(options: Parameters<LanguageModelV1['doStream']>[0]): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>>;
25
+ }
26
+
27
+ /**
28
+ * Google provider.
29
+ */
30
+ declare class Google {
31
+ /**
32
+ * Base URL for the Google API calls.
33
+ */
34
+ readonly baseURL: string;
35
+ readonly apiKey?: string;
36
+ private readonly generateId;
37
+ /**
38
+ * Creates a new Google provider instance.
39
+ */
40
+ constructor(options?: {
41
+ /**
42
+ * Base URL for the Google API calls.
43
+ */
44
+ baseURL?: string;
45
+ /**
46
+ * @deprecated Use `baseURL` instead.
47
+ */
48
+ baseUrl?: string;
49
+ /**
50
+ * API key for authenticating requests.
51
+ */
52
+ apiKey?: string;
53
+ generateId?: () => string;
54
+ });
55
+ private get baseConfig();
56
+ /**
57
+ * @deprecated Use `chat()` instead.
58
+ */
59
+ generativeAI(modelId: GoogleGenerativeAIModelId, settings?: GoogleGenerativeAISettings): GoogleGenerativeAILanguageModel;
60
+ chat(modelId: GoogleGenerativeAIModelId, settings?: GoogleGenerativeAISettings): GoogleGenerativeAILanguageModel;
61
+ }
62
+ /**
63
+ * Default Google provider instance.
64
+ */
65
+ declare const google: Google;
66
+
67
+ export { Google, google };
package/dist/index.js ADDED
@@ -0,0 +1,478 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ Google: () => Google,
24
+ google: () => google
25
+ });
26
+ module.exports = __toCommonJS(src_exports);
27
+
28
+ // src/google-facade.ts
29
+ var import_provider_utils4 = require("@ai-sdk/provider-utils");
30
+
31
+ // src/google-generative-ai-language-model.ts
32
+ var import_provider2 = require("@ai-sdk/provider");
33
+ var import_provider_utils3 = require("@ai-sdk/provider-utils");
34
+ var import_zod2 = require("zod");
35
+
36
+ // src/convert-to-google-generative-ai-messages.ts
37
+ var import_provider = require("@ai-sdk/provider");
38
+ var import_provider_utils = require("@ai-sdk/provider-utils");
39
+ function convertToGoogleGenerativeAIMessages(prompt) {
40
+ const messages = [];
41
+ for (const { role, content } of prompt) {
42
+ switch (role) {
43
+ case "system": {
44
+ messages.push({ role: "user", parts: [{ text: content }] });
45
+ messages.push({ role: "model", parts: [{ text: "" }] });
46
+ break;
47
+ }
48
+ case "user": {
49
+ messages.push({
50
+ role: "user",
51
+ parts: content.map((part) => {
52
+ var _a;
53
+ switch (part.type) {
54
+ case "text": {
55
+ return { text: part.text };
56
+ }
57
+ case "image": {
58
+ if (part.image instanceof URL) {
59
+ throw new import_provider.UnsupportedFunctionalityError({
60
+ functionality: "URL image parts"
61
+ });
62
+ } else {
63
+ return {
64
+ inlineData: {
65
+ mimeType: (_a = part.mimeType) != null ? _a : "image/jpeg",
66
+ data: (0, import_provider_utils.convertUint8ArrayToBase64)(part.image)
67
+ }
68
+ };
69
+ }
70
+ }
71
+ }
72
+ })
73
+ });
74
+ break;
75
+ }
76
+ case "assistant": {
77
+ messages.push({
78
+ role: "model",
79
+ parts: content.map((part) => {
80
+ switch (part.type) {
81
+ case "text": {
82
+ return part.text.length === 0 ? void 0 : { text: part.text };
83
+ }
84
+ case "tool-call": {
85
+ return {
86
+ functionCall: {
87
+ name: part.toolName,
88
+ args: part.args
89
+ }
90
+ };
91
+ }
92
+ }
93
+ }).filter(
94
+ (part) => part !== void 0
95
+ )
96
+ });
97
+ break;
98
+ }
99
+ case "tool": {
100
+ messages.push({
101
+ role: "user",
102
+ parts: content.map((part) => ({
103
+ functionResponse: {
104
+ name: part.toolName,
105
+ response: part.result
106
+ }
107
+ }))
108
+ });
109
+ break;
110
+ }
111
+ default: {
112
+ const _exhaustiveCheck = role;
113
+ throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
114
+ }
115
+ }
116
+ }
117
+ return messages;
118
+ }
119
+
120
+ // src/google-error.ts
121
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
122
+ var import_zod = require("zod");
123
+ var googleErrorDataSchema = import_zod.z.object({
124
+ error: import_zod.z.object({
125
+ code: import_zod.z.number().nullable(),
126
+ message: import_zod.z.string(),
127
+ status: import_zod.z.string()
128
+ })
129
+ });
130
+ var googleFailedResponseHandler = (0, import_provider_utils2.createJsonErrorResponseHandler)({
131
+ errorSchema: googleErrorDataSchema,
132
+ errorToMessage: (data) => data.error.message
133
+ });
134
+
135
+ // src/map-google-generative-ai-finish-reason.ts
136
+ function mapGoogleGenerativeAIFinishReason({
137
+ finishReason,
138
+ hasToolCalls
139
+ }) {
140
+ switch (finishReason) {
141
+ case "STOP":
142
+ return hasToolCalls ? "tool-calls" : "stop";
143
+ case "MAX_TOKENS":
144
+ return "length";
145
+ case "RECITATION":
146
+ case "SAFETY":
147
+ return "content-filter";
148
+ case "FINISH_REASON_UNSPECIFIED":
149
+ case "OTHER":
150
+ default:
151
+ return "other";
152
+ }
153
+ }
154
+
155
+ // src/google-generative-ai-language-model.ts
156
+ var GoogleGenerativeAILanguageModel = class {
157
+ constructor(modelId, settings, config) {
158
+ this.specificationVersion = "v1";
159
+ this.defaultObjectGenerationMode = void 0;
160
+ this.modelId = modelId;
161
+ this.settings = settings;
162
+ this.config = config;
163
+ }
164
+ get provider() {
165
+ return this.config.provider;
166
+ }
167
+ getArgs({
168
+ mode,
169
+ prompt,
170
+ maxTokens,
171
+ temperature,
172
+ topP,
173
+ frequencyPenalty,
174
+ presencePenalty,
175
+ seed
176
+ }) {
177
+ var _a;
178
+ const type = mode.type;
179
+ const warnings = [];
180
+ if (frequencyPenalty != null) {
181
+ warnings.push({
182
+ type: "unsupported-setting",
183
+ setting: "frequencyPenalty"
184
+ });
185
+ }
186
+ if (presencePenalty != null) {
187
+ warnings.push({
188
+ type: "unsupported-setting",
189
+ setting: "presencePenalty"
190
+ });
191
+ }
192
+ if (seed != null) {
193
+ warnings.push({
194
+ type: "unsupported-setting",
195
+ setting: "seed"
196
+ });
197
+ }
198
+ const baseArgs = {
199
+ generationConfig: {
200
+ // model specific settings:
201
+ topK: this.settings.topK,
202
+ // standardized settings:
203
+ maxOutputTokens: maxTokens,
204
+ temperature,
205
+ topP
206
+ },
207
+ // prompt:
208
+ contents: convertToGoogleGenerativeAIMessages(prompt)
209
+ };
210
+ switch (type) {
211
+ case "regular": {
212
+ const functionDeclarations = (_a = mode.tools) == null ? void 0 : _a.map((tool) => {
213
+ var _a2;
214
+ return {
215
+ name: tool.name,
216
+ description: (_a2 = tool.description) != null ? _a2 : "",
217
+ parameters: prepareJsonSchema(tool.parameters)
218
+ };
219
+ });
220
+ return {
221
+ args: {
222
+ ...baseArgs,
223
+ tools: functionDeclarations == null ? void 0 : { functionDeclarations }
224
+ },
225
+ warnings
226
+ };
227
+ }
228
+ case "object-json": {
229
+ throw new import_provider2.UnsupportedFunctionalityError({
230
+ functionality: "object-json mode"
231
+ });
232
+ }
233
+ case "object-tool": {
234
+ throw new import_provider2.UnsupportedFunctionalityError({
235
+ functionality: "object-tool mode"
236
+ });
237
+ }
238
+ case "object-grammar": {
239
+ throw new import_provider2.UnsupportedFunctionalityError({
240
+ functionality: "object-grammar mode"
241
+ });
242
+ }
243
+ default: {
244
+ const _exhaustiveCheck = type;
245
+ throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
246
+ }
247
+ }
248
+ }
249
+ async doGenerate(options) {
250
+ var _a;
251
+ const { args, warnings } = this.getArgs(options);
252
+ const response = await (0, import_provider_utils3.postJsonToApi)({
253
+ url: `${this.config.baseURL}/${this.modelId}:generateContent`,
254
+ headers: this.config.headers(),
255
+ body: args,
256
+ failedResponseHandler: googleFailedResponseHandler,
257
+ successfulResponseHandler: (0, import_provider_utils3.createJsonResponseHandler)(responseSchema),
258
+ abortSignal: options.abortSignal
259
+ });
260
+ const { contents: rawPrompt, ...rawSettings } = args;
261
+ const candidate = response.candidates[0];
262
+ const toolCalls = getToolCallsFromParts({
263
+ parts: candidate.content.parts,
264
+ generateId: this.config.generateId
265
+ });
266
+ return {
267
+ text: getTextFromParts(candidate.content.parts),
268
+ toolCalls,
269
+ finishReason: mapGoogleGenerativeAIFinishReason({
270
+ finishReason: candidate.finishReason,
271
+ hasToolCalls: toolCalls != null && toolCalls.length > 0
272
+ }),
273
+ usage: {
274
+ promptTokens: NaN,
275
+ completionTokens: (_a = candidate.tokenCount) != null ? _a : NaN
276
+ },
277
+ rawCall: { rawPrompt, rawSettings },
278
+ warnings
279
+ };
280
+ }
281
+ async doStream(options) {
282
+ const { args, warnings } = this.getArgs(options);
283
+ const response = await (0, import_provider_utils3.postJsonToApi)({
284
+ url: `${this.config.baseURL}/${this.modelId}:streamGenerateContent?alt=sse`,
285
+ headers: this.config.headers(),
286
+ body: args,
287
+ failedResponseHandler: googleFailedResponseHandler,
288
+ successfulResponseHandler: (0, import_provider_utils3.createEventSourceResponseHandler)(chunkSchema),
289
+ abortSignal: options.abortSignal
290
+ });
291
+ const { contents: rawPrompt, ...rawSettings } = args;
292
+ let finishReason = "other";
293
+ let usage = {
294
+ promptTokens: Number.NaN,
295
+ completionTokens: Number.NaN
296
+ };
297
+ const generateId2 = this.config.generateId;
298
+ let hasToolCalls = false;
299
+ return {
300
+ stream: response.pipeThrough(
301
+ new TransformStream({
302
+ transform(chunk, controller) {
303
+ if (!chunk.success) {
304
+ controller.enqueue({ type: "error", error: chunk.error });
305
+ return;
306
+ }
307
+ const value = chunk.value;
308
+ const candidate = value.candidates[0];
309
+ if ((candidate == null ? void 0 : candidate.finishReason) != null) {
310
+ finishReason = mapGoogleGenerativeAIFinishReason({
311
+ finishReason: candidate.finishReason,
312
+ hasToolCalls
313
+ });
314
+ }
315
+ if (candidate.tokenCount != null) {
316
+ usage = {
317
+ promptTokens: NaN,
318
+ completionTokens: candidate.tokenCount
319
+ };
320
+ }
321
+ const content = candidate.content;
322
+ if (content == null) {
323
+ return;
324
+ }
325
+ const deltaText = getTextFromParts(content.parts);
326
+ if (deltaText != null) {
327
+ controller.enqueue({
328
+ type: "text-delta",
329
+ textDelta: deltaText
330
+ });
331
+ }
332
+ const toolCallDeltas = getToolCallsFromParts({
333
+ parts: content.parts,
334
+ generateId: generateId2
335
+ });
336
+ if (toolCallDeltas != null) {
337
+ for (const toolCall of toolCallDeltas) {
338
+ controller.enqueue({
339
+ type: "tool-call-delta",
340
+ toolCallType: "function",
341
+ toolCallId: toolCall.toolCallId,
342
+ toolName: toolCall.toolName,
343
+ argsTextDelta: toolCall.args
344
+ });
345
+ controller.enqueue({
346
+ type: "tool-call",
347
+ toolCallType: "function",
348
+ toolCallId: toolCall.toolCallId,
349
+ toolName: toolCall.toolName,
350
+ args: toolCall.args
351
+ });
352
+ hasToolCalls = true;
353
+ }
354
+ }
355
+ },
356
+ flush(controller) {
357
+ controller.enqueue({ type: "finish", finishReason, usage });
358
+ }
359
+ })
360
+ ),
361
+ rawCall: { rawPrompt, rawSettings },
362
+ warnings
363
+ };
364
+ }
365
+ };
366
+ function prepareJsonSchema(jsonSchema) {
367
+ if (typeof jsonSchema !== "object") {
368
+ return jsonSchema;
369
+ }
370
+ if (Array.isArray(jsonSchema)) {
371
+ return jsonSchema.map(prepareJsonSchema);
372
+ }
373
+ const result = {};
374
+ for (const [key, value] of Object.entries(jsonSchema)) {
375
+ if (key === "additionalProperties" || key === "$schema") {
376
+ continue;
377
+ }
378
+ result[key] = prepareJsonSchema(value);
379
+ }
380
+ return result;
381
+ }
382
+ function getToolCallsFromParts({
383
+ parts,
384
+ generateId: generateId2
385
+ }) {
386
+ const functionCallParts = parts.filter(
387
+ (part) => "functionCall" in part
388
+ );
389
+ return functionCallParts.length === 0 ? void 0 : functionCallParts.map((part) => ({
390
+ toolCallType: "function",
391
+ toolCallId: generateId2(),
392
+ toolName: part.functionCall.name,
393
+ args: JSON.stringify(part.functionCall.args)
394
+ }));
395
+ }
396
+ function getTextFromParts(parts) {
397
+ const textParts = parts.filter((part) => "text" in part);
398
+ return textParts.length === 0 ? void 0 : textParts.map((part) => part.text).join("");
399
+ }
400
+ var contentSchema = import_zod2.z.object({
401
+ role: import_zod2.z.string(),
402
+ parts: import_zod2.z.array(
403
+ import_zod2.z.union([
404
+ import_zod2.z.object({
405
+ text: import_zod2.z.string()
406
+ }),
407
+ import_zod2.z.object({
408
+ functionCall: import_zod2.z.object({
409
+ name: import_zod2.z.string(),
410
+ args: import_zod2.z.unknown()
411
+ })
412
+ })
413
+ ])
414
+ )
415
+ });
416
+ var responseSchema = import_zod2.z.object({
417
+ candidates: import_zod2.z.array(
418
+ import_zod2.z.object({
419
+ content: contentSchema,
420
+ finishReason: import_zod2.z.string().optional(),
421
+ tokenCount: import_zod2.z.number().optional()
422
+ })
423
+ )
424
+ });
425
+ var chunkSchema = import_zod2.z.object({
426
+ candidates: import_zod2.z.array(
427
+ import_zod2.z.object({
428
+ content: contentSchema.optional(),
429
+ finishReason: import_zod2.z.string().optional(),
430
+ tokenCount: import_zod2.z.number().optional()
431
+ })
432
+ )
433
+ });
434
+
435
+ // src/google-facade.ts
436
+ var Google = class {
437
+ /**
438
+ * Creates a new Google provider instance.
439
+ */
440
+ constructor(options = {}) {
441
+ var _a, _b, _c;
442
+ this.baseURL = (_b = (0, import_provider_utils4.withoutTrailingSlash)((_a = options.baseURL) != null ? _a : options.baseUrl)) != null ? _b : "https://generativelanguage.googleapis.com/v1beta";
443
+ this.apiKey = options.apiKey;
444
+ this.generateId = (_c = options.generateId) != null ? _c : import_provider_utils4.generateId;
445
+ }
446
+ get baseConfig() {
447
+ return {
448
+ baseURL: this.baseURL,
449
+ headers: () => ({
450
+ "x-goog-api-key": (0, import_provider_utils4.loadApiKey)({
451
+ apiKey: this.apiKey,
452
+ environmentVariableName: "GOOGLE_GENERATIVE_AI_API_KEY",
453
+ description: "Google Generative AI"
454
+ })
455
+ })
456
+ };
457
+ }
458
+ /**
459
+ * @deprecated Use `chat()` instead.
460
+ */
461
+ generativeAI(modelId, settings = {}) {
462
+ return this.chat(modelId, settings);
463
+ }
464
+ chat(modelId, settings = {}) {
465
+ return new GoogleGenerativeAILanguageModel(modelId, settings, {
466
+ provider: "google.generative-ai",
467
+ ...this.baseConfig,
468
+ generateId: this.generateId
469
+ });
470
+ }
471
+ };
472
+ var google = new Google();
473
+ // Annotate the CommonJS export names for ESM import in node:
474
+ 0 && (module.exports = {
475
+ Google,
476
+ google
477
+ });
478
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/google-facade.ts","../src/google-generative-ai-language-model.ts","../src/convert-to-google-generative-ai-messages.ts","../src/google-error.ts","../src/map-google-generative-ai-finish-reason.ts"],"sourcesContent":["export * from './google-facade';\n","import {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model';\nimport {\n GoogleGenerativeAIModelId,\n GoogleGenerativeAISettings,\n} from './google-generative-ai-settings';\n\n/**\n * Google provider.\n */\nexport class Google {\n /**\n * Base URL for the Google API calls.\n */\n readonly baseURL: string;\n\n readonly apiKey?: string;\n\n private readonly generateId: () => string;\n\n /**\n * Creates a new Google provider instance.\n */\n constructor(\n options: {\n /**\n * Base URL for the Google API calls.\n */\n baseURL?: string;\n\n /**\n * @deprecated Use `baseURL` instead.\n */\n baseUrl?: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n generateId?: () => string;\n } = {},\n ) {\n this.baseURL =\n withoutTrailingSlash(options.baseURL ?? options.baseUrl) ??\n 'https://generativelanguage.googleapis.com/v1beta';\n this.apiKey = options.apiKey;\n this.generateId = options.generateId ?? generateId;\n }\n\n private get baseConfig() {\n return {\n baseURL: this.baseURL,\n headers: () => ({\n 'x-goog-api-key': loadApiKey({\n apiKey: this.apiKey,\n environmentVariableName: 'GOOGLE_GENERATIVE_AI_API_KEY',\n description: 'Google Generative AI',\n }),\n }),\n };\n }\n\n /**\n * @deprecated Use `chat()` instead.\n */\n generativeAI(\n modelId: GoogleGenerativeAIModelId,\n settings: GoogleGenerativeAISettings = {},\n ) {\n return this.chat(modelId, settings);\n }\n\n chat(\n modelId: GoogleGenerativeAIModelId,\n settings: GoogleGenerativeAISettings = {},\n ) {\n return new GoogleGenerativeAILanguageModel(modelId, settings, {\n provider: 'google.generative-ai',\n ...this.baseConfig,\n generateId: this.generateId,\n });\n }\n}\n\n/**\n * Default Google provider instance.\n */\nexport const google = new Google();\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1StreamPart,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToGoogleGenerativeAIMessages } from './convert-to-google-generative-ai-messages';\nimport { googleFailedResponseHandler } from './google-error';\nimport { GoogleGenerativeAIContentPart } from './google-generative-ai-prompt';\nimport {\n GoogleGenerativeAIModelId,\n GoogleGenerativeAISettings,\n} from './google-generative-ai-settings';\nimport { mapGoogleGenerativeAIFinishReason } from './map-google-generative-ai-finish-reason';\n\ntype GoogleGenerativeAIConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n generateId: () => string;\n};\n\nexport class GoogleGenerativeAILanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: GoogleGenerativeAIModelId;\n readonly settings: GoogleGenerativeAISettings;\n\n private readonly config: GoogleGenerativeAIConfig;\n\n constructor(\n modelId: GoogleGenerativeAIModelId,\n settings: GoogleGenerativeAISettings,\n config: GoogleGenerativeAIConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n const baseArgs = {\n generationConfig: {\n // model specific settings:\n topK: this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n },\n\n // prompt:\n contents: convertToGoogleGenerativeAIMessages(prompt),\n };\n\n switch (type) {\n case 'regular': {\n const functionDeclarations = mode.tools?.map(tool => ({\n name: tool.name,\n description: tool.description ?? '',\n parameters: prepareJsonSchema(tool.parameters),\n }));\n\n return {\n args: {\n ...baseArgs,\n tools:\n functionDeclarations == null\n ? undefined\n : { functionDeclarations },\n },\n warnings,\n };\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { args, warnings } = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}:generateContent`,\n headers: this.config.headers(),\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(responseSchema),\n abortSignal: options.abortSignal,\n });\n\n const { contents: rawPrompt, ...rawSettings } = args;\n const candidate = response.candidates[0];\n\n const toolCalls = getToolCallsFromParts({\n parts: candidate.content.parts,\n generateId: this.config.generateId,\n });\n\n return {\n text: getTextFromParts(candidate.content.parts),\n toolCalls,\n finishReason: mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls: toolCalls != null && toolCalls.length > 0,\n }),\n usage: {\n promptTokens: NaN,\n completionTokens: candidate.tokenCount ?? NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { args, warnings } = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}:streamGenerateContent?alt=sse`,\n headers: this.config.headers(),\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(chunkSchema),\n abortSignal: options.abortSignal,\n });\n\n const { contents: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n\n const generateId = this.config.generateId;\n let hasToolCalls = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof chunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n const candidate = value.candidates[0];\n\n if (candidate?.finishReason != null) {\n finishReason = mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls,\n });\n }\n\n if (candidate.tokenCount != null) {\n usage = {\n promptTokens: NaN,\n completionTokens: candidate.tokenCount,\n };\n }\n\n const content = candidate.content;\n\n if (content == null) {\n return;\n }\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({ type: 'finish', finishReason, usage });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings,\n };\n }\n}\n\n// Removes all \"additionalProperty\" and \"$schema\" properties from the object (recursively)\n// (not supported by Google Generative AI)\nfunction prepareJsonSchema(jsonSchema: any): unknown {\n if (typeof jsonSchema !== 'object') {\n return jsonSchema;\n }\n\n if (Array.isArray(jsonSchema)) {\n return jsonSchema.map(prepareJsonSchema);\n }\n\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(jsonSchema)) {\n if (key === 'additionalProperties' || key === '$schema') {\n continue;\n }\n\n result[key] = prepareJsonSchema(value);\n }\n\n return result;\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n}: {\n parts: z.infer<typeof contentSchema>['parts'];\n generateId: () => string;\n}) {\n const functionCallParts = parts.filter(\n part => 'functionCall' in part,\n ) as Array<\n GoogleGenerativeAIContentPart & {\n functionCall: { name: string; args: unknown };\n }\n >;\n\n return functionCallParts.length === 0\n ? undefined\n : functionCallParts.map(part => ({\n toolCallType: 'function' as const,\n toolCallId: generateId(),\n toolName: part.functionCall.name,\n args: JSON.stringify(part.functionCall.args),\n }));\n}\n\nfunction getTextFromParts(parts: z.infer<typeof contentSchema>['parts']) {\n const textParts = parts.filter(part => 'text' in part) as Array<\n GoogleGenerativeAIContentPart & { text: string }\n >;\n\n return textParts.length === 0\n ? undefined\n : textParts.map(part => part.text).join('');\n}\n\nconst contentSchema = z.object({\n role: z.string(),\n parts: z.array(\n z.union([\n z.object({\n text: z.string(),\n }),\n z.object({\n functionCall: z.object({\n name: z.string(),\n args: z.unknown(),\n }),\n }),\n ]),\n ),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst responseSchema = z.object({\n candidates: z.array(\n z.object({\n content: contentSchema,\n finishReason: z.string().optional(),\n tokenCount: z.number().optional(),\n }),\n ),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst chunkSchema = z.object({\n candidates: z.array(\n z.object({\n content: contentSchema.optional(),\n finishReason: z.string().optional(),\n tokenCount: z.number().optional(),\n }),\n ),\n});\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport {\n GoogleGenerativeAIContentPart,\n GoogleGenerativeAIPrompt,\n} from './google-generative-ai-prompt';\n\nexport function convertToGoogleGenerativeAIMessages(\n prompt: LanguageModelV1Prompt,\n): GoogleGenerativeAIPrompt {\n const messages: GoogleGenerativeAIPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n // system message becomes user message:\n messages.push({ role: 'user', parts: [{ text: content }] });\n\n // required for to ensure turn-taking:\n messages.push({ role: 'model', parts: [{ text: '' }] });\n\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n case 'image': {\n if (part.image instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'URL image parts',\n });\n } else {\n return {\n inlineData: {\n mimeType: part.mimeType ?? 'image/jpeg',\n data: convertUint8ArrayToBase64(part.image),\n },\n };\n }\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n messages.push({\n role: 'model',\n parts: content\n .map(part => {\n switch (part.type) {\n case 'text': {\n return part.text.length === 0\n ? undefined\n : { text: part.text };\n }\n case 'tool-call': {\n return {\n functionCall: {\n name: part.toolName,\n args: part.args,\n },\n };\n }\n }\n })\n .filter(\n part => part !== undefined,\n ) as GoogleGenerativeAIContentPart[],\n });\n break;\n }\n\n case 'tool': {\n messages.push({\n role: 'user',\n parts: content.map(part => ({\n functionResponse: {\n name: part.toolName,\n response: part.result,\n },\n })),\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst googleErrorDataSchema = z.object({\n error: z.object({\n code: z.number().nullable(),\n message: z.string(),\n status: z.string(),\n }),\n});\n\nexport type GoogleErrorData = z.infer<typeof googleErrorDataSchema>;\n\nexport const googleFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: googleErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\n\nexport function mapGoogleGenerativeAIFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | 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 'RECITATION':\n case 'SAFETY':\n return 'content-filter';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider","import_provider_utils","import_zod","import_provider_utils","_a","generateId"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,462 @@
1
+ // src/google-facade.ts
2
+ import {
3
+ generateId,
4
+ loadApiKey,
5
+ withoutTrailingSlash
6
+ } from "@ai-sdk/provider-utils";
7
+
8
+ // src/google-generative-ai-language-model.ts
9
+ import {
10
+ UnsupportedFunctionalityError as UnsupportedFunctionalityError2
11
+ } from "@ai-sdk/provider";
12
+ import {
13
+ createEventSourceResponseHandler,
14
+ createJsonResponseHandler,
15
+ postJsonToApi
16
+ } from "@ai-sdk/provider-utils";
17
+ import { z as z2 } from "zod";
18
+
19
+ // src/convert-to-google-generative-ai-messages.ts
20
+ import {
21
+ UnsupportedFunctionalityError
22
+ } from "@ai-sdk/provider";
23
+ import { convertUint8ArrayToBase64 } from "@ai-sdk/provider-utils";
24
+ function convertToGoogleGenerativeAIMessages(prompt) {
25
+ const messages = [];
26
+ for (const { role, content } of prompt) {
27
+ switch (role) {
28
+ case "system": {
29
+ messages.push({ role: "user", parts: [{ text: content }] });
30
+ messages.push({ role: "model", parts: [{ text: "" }] });
31
+ break;
32
+ }
33
+ case "user": {
34
+ messages.push({
35
+ role: "user",
36
+ parts: content.map((part) => {
37
+ var _a;
38
+ switch (part.type) {
39
+ case "text": {
40
+ return { text: part.text };
41
+ }
42
+ case "image": {
43
+ if (part.image instanceof URL) {
44
+ throw new UnsupportedFunctionalityError({
45
+ functionality: "URL image parts"
46
+ });
47
+ } else {
48
+ return {
49
+ inlineData: {
50
+ mimeType: (_a = part.mimeType) != null ? _a : "image/jpeg",
51
+ data: convertUint8ArrayToBase64(part.image)
52
+ }
53
+ };
54
+ }
55
+ }
56
+ }
57
+ })
58
+ });
59
+ break;
60
+ }
61
+ case "assistant": {
62
+ messages.push({
63
+ role: "model",
64
+ parts: content.map((part) => {
65
+ switch (part.type) {
66
+ case "text": {
67
+ return part.text.length === 0 ? void 0 : { text: part.text };
68
+ }
69
+ case "tool-call": {
70
+ return {
71
+ functionCall: {
72
+ name: part.toolName,
73
+ args: part.args
74
+ }
75
+ };
76
+ }
77
+ }
78
+ }).filter(
79
+ (part) => part !== void 0
80
+ )
81
+ });
82
+ break;
83
+ }
84
+ case "tool": {
85
+ messages.push({
86
+ role: "user",
87
+ parts: content.map((part) => ({
88
+ functionResponse: {
89
+ name: part.toolName,
90
+ response: part.result
91
+ }
92
+ }))
93
+ });
94
+ break;
95
+ }
96
+ default: {
97
+ const _exhaustiveCheck = role;
98
+ throw new Error(`Unsupported role: ${_exhaustiveCheck}`);
99
+ }
100
+ }
101
+ }
102
+ return messages;
103
+ }
104
+
105
+ // src/google-error.ts
106
+ import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
107
+ import { z } from "zod";
108
+ var googleErrorDataSchema = z.object({
109
+ error: z.object({
110
+ code: z.number().nullable(),
111
+ message: z.string(),
112
+ status: z.string()
113
+ })
114
+ });
115
+ var googleFailedResponseHandler = createJsonErrorResponseHandler({
116
+ errorSchema: googleErrorDataSchema,
117
+ errorToMessage: (data) => data.error.message
118
+ });
119
+
120
+ // src/map-google-generative-ai-finish-reason.ts
121
+ function mapGoogleGenerativeAIFinishReason({
122
+ finishReason,
123
+ hasToolCalls
124
+ }) {
125
+ switch (finishReason) {
126
+ case "STOP":
127
+ return hasToolCalls ? "tool-calls" : "stop";
128
+ case "MAX_TOKENS":
129
+ return "length";
130
+ case "RECITATION":
131
+ case "SAFETY":
132
+ return "content-filter";
133
+ case "FINISH_REASON_UNSPECIFIED":
134
+ case "OTHER":
135
+ default:
136
+ return "other";
137
+ }
138
+ }
139
+
140
+ // src/google-generative-ai-language-model.ts
141
+ var GoogleGenerativeAILanguageModel = class {
142
+ constructor(modelId, settings, config) {
143
+ this.specificationVersion = "v1";
144
+ this.defaultObjectGenerationMode = void 0;
145
+ this.modelId = modelId;
146
+ this.settings = settings;
147
+ this.config = config;
148
+ }
149
+ get provider() {
150
+ return this.config.provider;
151
+ }
152
+ getArgs({
153
+ mode,
154
+ prompt,
155
+ maxTokens,
156
+ temperature,
157
+ topP,
158
+ frequencyPenalty,
159
+ presencePenalty,
160
+ seed
161
+ }) {
162
+ var _a;
163
+ const type = mode.type;
164
+ const warnings = [];
165
+ if (frequencyPenalty != null) {
166
+ warnings.push({
167
+ type: "unsupported-setting",
168
+ setting: "frequencyPenalty"
169
+ });
170
+ }
171
+ if (presencePenalty != null) {
172
+ warnings.push({
173
+ type: "unsupported-setting",
174
+ setting: "presencePenalty"
175
+ });
176
+ }
177
+ if (seed != null) {
178
+ warnings.push({
179
+ type: "unsupported-setting",
180
+ setting: "seed"
181
+ });
182
+ }
183
+ const baseArgs = {
184
+ generationConfig: {
185
+ // model specific settings:
186
+ topK: this.settings.topK,
187
+ // standardized settings:
188
+ maxOutputTokens: maxTokens,
189
+ temperature,
190
+ topP
191
+ },
192
+ // prompt:
193
+ contents: convertToGoogleGenerativeAIMessages(prompt)
194
+ };
195
+ switch (type) {
196
+ case "regular": {
197
+ const functionDeclarations = (_a = mode.tools) == null ? void 0 : _a.map((tool) => {
198
+ var _a2;
199
+ return {
200
+ name: tool.name,
201
+ description: (_a2 = tool.description) != null ? _a2 : "",
202
+ parameters: prepareJsonSchema(tool.parameters)
203
+ };
204
+ });
205
+ return {
206
+ args: {
207
+ ...baseArgs,
208
+ tools: functionDeclarations == null ? void 0 : { functionDeclarations }
209
+ },
210
+ warnings
211
+ };
212
+ }
213
+ case "object-json": {
214
+ throw new UnsupportedFunctionalityError2({
215
+ functionality: "object-json mode"
216
+ });
217
+ }
218
+ case "object-tool": {
219
+ throw new UnsupportedFunctionalityError2({
220
+ functionality: "object-tool mode"
221
+ });
222
+ }
223
+ case "object-grammar": {
224
+ throw new UnsupportedFunctionalityError2({
225
+ functionality: "object-grammar mode"
226
+ });
227
+ }
228
+ default: {
229
+ const _exhaustiveCheck = type;
230
+ throw new Error(`Unsupported type: ${_exhaustiveCheck}`);
231
+ }
232
+ }
233
+ }
234
+ async doGenerate(options) {
235
+ var _a;
236
+ const { args, warnings } = this.getArgs(options);
237
+ const response = await postJsonToApi({
238
+ url: `${this.config.baseURL}/${this.modelId}:generateContent`,
239
+ headers: this.config.headers(),
240
+ body: args,
241
+ failedResponseHandler: googleFailedResponseHandler,
242
+ successfulResponseHandler: createJsonResponseHandler(responseSchema),
243
+ abortSignal: options.abortSignal
244
+ });
245
+ const { contents: rawPrompt, ...rawSettings } = args;
246
+ const candidate = response.candidates[0];
247
+ const toolCalls = getToolCallsFromParts({
248
+ parts: candidate.content.parts,
249
+ generateId: this.config.generateId
250
+ });
251
+ return {
252
+ text: getTextFromParts(candidate.content.parts),
253
+ toolCalls,
254
+ finishReason: mapGoogleGenerativeAIFinishReason({
255
+ finishReason: candidate.finishReason,
256
+ hasToolCalls: toolCalls != null && toolCalls.length > 0
257
+ }),
258
+ usage: {
259
+ promptTokens: NaN,
260
+ completionTokens: (_a = candidate.tokenCount) != null ? _a : NaN
261
+ },
262
+ rawCall: { rawPrompt, rawSettings },
263
+ warnings
264
+ };
265
+ }
266
+ async doStream(options) {
267
+ const { args, warnings } = this.getArgs(options);
268
+ const response = await postJsonToApi({
269
+ url: `${this.config.baseURL}/${this.modelId}:streamGenerateContent?alt=sse`,
270
+ headers: this.config.headers(),
271
+ body: args,
272
+ failedResponseHandler: googleFailedResponseHandler,
273
+ successfulResponseHandler: createEventSourceResponseHandler(chunkSchema),
274
+ abortSignal: options.abortSignal
275
+ });
276
+ const { contents: rawPrompt, ...rawSettings } = args;
277
+ let finishReason = "other";
278
+ let usage = {
279
+ promptTokens: Number.NaN,
280
+ completionTokens: Number.NaN
281
+ };
282
+ const generateId2 = this.config.generateId;
283
+ let hasToolCalls = false;
284
+ return {
285
+ stream: response.pipeThrough(
286
+ new TransformStream({
287
+ transform(chunk, controller) {
288
+ if (!chunk.success) {
289
+ controller.enqueue({ type: "error", error: chunk.error });
290
+ return;
291
+ }
292
+ const value = chunk.value;
293
+ const candidate = value.candidates[0];
294
+ if ((candidate == null ? void 0 : candidate.finishReason) != null) {
295
+ finishReason = mapGoogleGenerativeAIFinishReason({
296
+ finishReason: candidate.finishReason,
297
+ hasToolCalls
298
+ });
299
+ }
300
+ if (candidate.tokenCount != null) {
301
+ usage = {
302
+ promptTokens: NaN,
303
+ completionTokens: candidate.tokenCount
304
+ };
305
+ }
306
+ const content = candidate.content;
307
+ if (content == null) {
308
+ return;
309
+ }
310
+ const deltaText = getTextFromParts(content.parts);
311
+ if (deltaText != null) {
312
+ controller.enqueue({
313
+ type: "text-delta",
314
+ textDelta: deltaText
315
+ });
316
+ }
317
+ const toolCallDeltas = getToolCallsFromParts({
318
+ parts: content.parts,
319
+ generateId: generateId2
320
+ });
321
+ if (toolCallDeltas != null) {
322
+ for (const toolCall of toolCallDeltas) {
323
+ controller.enqueue({
324
+ type: "tool-call-delta",
325
+ toolCallType: "function",
326
+ toolCallId: toolCall.toolCallId,
327
+ toolName: toolCall.toolName,
328
+ argsTextDelta: toolCall.args
329
+ });
330
+ controller.enqueue({
331
+ type: "tool-call",
332
+ toolCallType: "function",
333
+ toolCallId: toolCall.toolCallId,
334
+ toolName: toolCall.toolName,
335
+ args: toolCall.args
336
+ });
337
+ hasToolCalls = true;
338
+ }
339
+ }
340
+ },
341
+ flush(controller) {
342
+ controller.enqueue({ type: "finish", finishReason, usage });
343
+ }
344
+ })
345
+ ),
346
+ rawCall: { rawPrompt, rawSettings },
347
+ warnings
348
+ };
349
+ }
350
+ };
351
+ function prepareJsonSchema(jsonSchema) {
352
+ if (typeof jsonSchema !== "object") {
353
+ return jsonSchema;
354
+ }
355
+ if (Array.isArray(jsonSchema)) {
356
+ return jsonSchema.map(prepareJsonSchema);
357
+ }
358
+ const result = {};
359
+ for (const [key, value] of Object.entries(jsonSchema)) {
360
+ if (key === "additionalProperties" || key === "$schema") {
361
+ continue;
362
+ }
363
+ result[key] = prepareJsonSchema(value);
364
+ }
365
+ return result;
366
+ }
367
+ function getToolCallsFromParts({
368
+ parts,
369
+ generateId: generateId2
370
+ }) {
371
+ const functionCallParts = parts.filter(
372
+ (part) => "functionCall" in part
373
+ );
374
+ return functionCallParts.length === 0 ? void 0 : functionCallParts.map((part) => ({
375
+ toolCallType: "function",
376
+ toolCallId: generateId2(),
377
+ toolName: part.functionCall.name,
378
+ args: JSON.stringify(part.functionCall.args)
379
+ }));
380
+ }
381
+ function getTextFromParts(parts) {
382
+ const textParts = parts.filter((part) => "text" in part);
383
+ return textParts.length === 0 ? void 0 : textParts.map((part) => part.text).join("");
384
+ }
385
+ var contentSchema = z2.object({
386
+ role: z2.string(),
387
+ parts: z2.array(
388
+ z2.union([
389
+ z2.object({
390
+ text: z2.string()
391
+ }),
392
+ z2.object({
393
+ functionCall: z2.object({
394
+ name: z2.string(),
395
+ args: z2.unknown()
396
+ })
397
+ })
398
+ ])
399
+ )
400
+ });
401
+ var responseSchema = z2.object({
402
+ candidates: z2.array(
403
+ z2.object({
404
+ content: contentSchema,
405
+ finishReason: z2.string().optional(),
406
+ tokenCount: z2.number().optional()
407
+ })
408
+ )
409
+ });
410
+ var chunkSchema = z2.object({
411
+ candidates: z2.array(
412
+ z2.object({
413
+ content: contentSchema.optional(),
414
+ finishReason: z2.string().optional(),
415
+ tokenCount: z2.number().optional()
416
+ })
417
+ )
418
+ });
419
+
420
+ // src/google-facade.ts
421
+ var Google = class {
422
+ /**
423
+ * Creates a new Google provider instance.
424
+ */
425
+ constructor(options = {}) {
426
+ var _a, _b, _c;
427
+ this.baseURL = (_b = withoutTrailingSlash((_a = options.baseURL) != null ? _a : options.baseUrl)) != null ? _b : "https://generativelanguage.googleapis.com/v1beta";
428
+ this.apiKey = options.apiKey;
429
+ this.generateId = (_c = options.generateId) != null ? _c : generateId;
430
+ }
431
+ get baseConfig() {
432
+ return {
433
+ baseURL: this.baseURL,
434
+ headers: () => ({
435
+ "x-goog-api-key": loadApiKey({
436
+ apiKey: this.apiKey,
437
+ environmentVariableName: "GOOGLE_GENERATIVE_AI_API_KEY",
438
+ description: "Google Generative AI"
439
+ })
440
+ })
441
+ };
442
+ }
443
+ /**
444
+ * @deprecated Use `chat()` instead.
445
+ */
446
+ generativeAI(modelId, settings = {}) {
447
+ return this.chat(modelId, settings);
448
+ }
449
+ chat(modelId, settings = {}) {
450
+ return new GoogleGenerativeAILanguageModel(modelId, settings, {
451
+ provider: "google.generative-ai",
452
+ ...this.baseConfig,
453
+ generateId: this.generateId
454
+ });
455
+ }
456
+ };
457
+ var google = new Google();
458
+ export {
459
+ Google,
460
+ google
461
+ };
462
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/google-facade.ts","../src/google-generative-ai-language-model.ts","../src/convert-to-google-generative-ai-messages.ts","../src/google-error.ts","../src/map-google-generative-ai-finish-reason.ts"],"sourcesContent":["import {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { GoogleGenerativeAILanguageModel } from './google-generative-ai-language-model';\nimport {\n GoogleGenerativeAIModelId,\n GoogleGenerativeAISettings,\n} from './google-generative-ai-settings';\n\n/**\n * Google provider.\n */\nexport class Google {\n /**\n * Base URL for the Google API calls.\n */\n readonly baseURL: string;\n\n readonly apiKey?: string;\n\n private readonly generateId: () => string;\n\n /**\n * Creates a new Google provider instance.\n */\n constructor(\n options: {\n /**\n * Base URL for the Google API calls.\n */\n baseURL?: string;\n\n /**\n * @deprecated Use `baseURL` instead.\n */\n baseUrl?: string;\n\n /**\n * API key for authenticating requests.\n */\n apiKey?: string;\n\n generateId?: () => string;\n } = {},\n ) {\n this.baseURL =\n withoutTrailingSlash(options.baseURL ?? options.baseUrl) ??\n 'https://generativelanguage.googleapis.com/v1beta';\n this.apiKey = options.apiKey;\n this.generateId = options.generateId ?? generateId;\n }\n\n private get baseConfig() {\n return {\n baseURL: this.baseURL,\n headers: () => ({\n 'x-goog-api-key': loadApiKey({\n apiKey: this.apiKey,\n environmentVariableName: 'GOOGLE_GENERATIVE_AI_API_KEY',\n description: 'Google Generative AI',\n }),\n }),\n };\n }\n\n /**\n * @deprecated Use `chat()` instead.\n */\n generativeAI(\n modelId: GoogleGenerativeAIModelId,\n settings: GoogleGenerativeAISettings = {},\n ) {\n return this.chat(modelId, settings);\n }\n\n chat(\n modelId: GoogleGenerativeAIModelId,\n settings: GoogleGenerativeAISettings = {},\n ) {\n return new GoogleGenerativeAILanguageModel(modelId, settings, {\n provider: 'google.generative-ai',\n ...this.baseConfig,\n generateId: this.generateId,\n });\n }\n}\n\n/**\n * Default Google provider instance.\n */\nexport const google = new Google();\n","import {\n LanguageModelV1,\n LanguageModelV1CallWarning,\n LanguageModelV1FinishReason,\n LanguageModelV1StreamPart,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n ParseResult,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { convertToGoogleGenerativeAIMessages } from './convert-to-google-generative-ai-messages';\nimport { googleFailedResponseHandler } from './google-error';\nimport { GoogleGenerativeAIContentPart } from './google-generative-ai-prompt';\nimport {\n GoogleGenerativeAIModelId,\n GoogleGenerativeAISettings,\n} from './google-generative-ai-settings';\nimport { mapGoogleGenerativeAIFinishReason } from './map-google-generative-ai-finish-reason';\n\ntype GoogleGenerativeAIConfig = {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string | undefined>;\n generateId: () => string;\n};\n\nexport class GoogleGenerativeAILanguageModel implements LanguageModelV1 {\n readonly specificationVersion = 'v1';\n readonly defaultObjectGenerationMode = undefined;\n\n readonly modelId: GoogleGenerativeAIModelId;\n readonly settings: GoogleGenerativeAISettings;\n\n private readonly config: GoogleGenerativeAIConfig;\n\n constructor(\n modelId: GoogleGenerativeAIModelId,\n settings: GoogleGenerativeAISettings,\n config: GoogleGenerativeAIConfig,\n ) {\n this.modelId = modelId;\n this.settings = settings;\n this.config = config;\n }\n\n get provider(): string {\n return this.config.provider;\n }\n\n private getArgs({\n mode,\n prompt,\n maxTokens,\n temperature,\n topP,\n frequencyPenalty,\n presencePenalty,\n seed,\n }: Parameters<LanguageModelV1['doGenerate']>[0]) {\n const type = mode.type;\n\n const warnings: LanguageModelV1CallWarning[] = [];\n\n if (frequencyPenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n\n if (presencePenalty != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n });\n }\n\n const baseArgs = {\n generationConfig: {\n // model specific settings:\n topK: this.settings.topK,\n\n // standardized settings:\n maxOutputTokens: maxTokens,\n temperature,\n topP,\n },\n\n // prompt:\n contents: convertToGoogleGenerativeAIMessages(prompt),\n };\n\n switch (type) {\n case 'regular': {\n const functionDeclarations = mode.tools?.map(tool => ({\n name: tool.name,\n description: tool.description ?? '',\n parameters: prepareJsonSchema(tool.parameters),\n }));\n\n return {\n args: {\n ...baseArgs,\n tools:\n functionDeclarations == null\n ? undefined\n : { functionDeclarations },\n },\n warnings,\n };\n }\n\n case 'object-json': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-json mode',\n });\n }\n\n case 'object-tool': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-tool mode',\n });\n }\n\n case 'object-grammar': {\n throw new UnsupportedFunctionalityError({\n functionality: 'object-grammar mode',\n });\n }\n\n default: {\n const _exhaustiveCheck: never = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n\n async doGenerate(\n options: Parameters<LanguageModelV1['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doGenerate']>>> {\n const { args, warnings } = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}:generateContent`,\n headers: this.config.headers(),\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(responseSchema),\n abortSignal: options.abortSignal,\n });\n\n const { contents: rawPrompt, ...rawSettings } = args;\n const candidate = response.candidates[0];\n\n const toolCalls = getToolCallsFromParts({\n parts: candidate.content.parts,\n generateId: this.config.generateId,\n });\n\n return {\n text: getTextFromParts(candidate.content.parts),\n toolCalls,\n finishReason: mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls: toolCalls != null && toolCalls.length > 0,\n }),\n usage: {\n promptTokens: NaN,\n completionTokens: candidate.tokenCount ?? NaN,\n },\n rawCall: { rawPrompt, rawSettings },\n warnings,\n };\n }\n\n async doStream(\n options: Parameters<LanguageModelV1['doStream']>[0],\n ): Promise<Awaited<ReturnType<LanguageModelV1['doStream']>>> {\n const { args, warnings } = this.getArgs(options);\n\n const response = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}:streamGenerateContent?alt=sse`,\n headers: this.config.headers(),\n body: args,\n failedResponseHandler: googleFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(chunkSchema),\n abortSignal: options.abortSignal,\n });\n\n const { contents: rawPrompt, ...rawSettings } = args;\n\n let finishReason: LanguageModelV1FinishReason = 'other';\n let usage: { promptTokens: number; completionTokens: number } = {\n promptTokens: Number.NaN,\n completionTokens: Number.NaN,\n };\n\n const generateId = this.config.generateId;\n let hasToolCalls = false;\n\n return {\n stream: response.pipeThrough(\n new TransformStream<\n ParseResult<z.infer<typeof chunkSchema>>,\n LanguageModelV1StreamPart\n >({\n transform(chunk, controller) {\n if (!chunk.success) {\n controller.enqueue({ type: 'error', error: chunk.error });\n return;\n }\n\n const value = chunk.value;\n\n const candidate = value.candidates[0];\n\n if (candidate?.finishReason != null) {\n finishReason = mapGoogleGenerativeAIFinishReason({\n finishReason: candidate.finishReason,\n hasToolCalls,\n });\n }\n\n if (candidate.tokenCount != null) {\n usage = {\n promptTokens: NaN,\n completionTokens: candidate.tokenCount,\n };\n }\n\n const content = candidate.content;\n\n if (content == null) {\n return;\n }\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({ type: 'finish', finishReason, usage });\n },\n }),\n ),\n rawCall: { rawPrompt, rawSettings },\n warnings,\n };\n }\n}\n\n// Removes all \"additionalProperty\" and \"$schema\" properties from the object (recursively)\n// (not supported by Google Generative AI)\nfunction prepareJsonSchema(jsonSchema: any): unknown {\n if (typeof jsonSchema !== 'object') {\n return jsonSchema;\n }\n\n if (Array.isArray(jsonSchema)) {\n return jsonSchema.map(prepareJsonSchema);\n }\n\n const result: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(jsonSchema)) {\n if (key === 'additionalProperties' || key === '$schema') {\n continue;\n }\n\n result[key] = prepareJsonSchema(value);\n }\n\n return result;\n}\n\nfunction getToolCallsFromParts({\n parts,\n generateId,\n}: {\n parts: z.infer<typeof contentSchema>['parts'];\n generateId: () => string;\n}) {\n const functionCallParts = parts.filter(\n part => 'functionCall' in part,\n ) as Array<\n GoogleGenerativeAIContentPart & {\n functionCall: { name: string; args: unknown };\n }\n >;\n\n return functionCallParts.length === 0\n ? undefined\n : functionCallParts.map(part => ({\n toolCallType: 'function' as const,\n toolCallId: generateId(),\n toolName: part.functionCall.name,\n args: JSON.stringify(part.functionCall.args),\n }));\n}\n\nfunction getTextFromParts(parts: z.infer<typeof contentSchema>['parts']) {\n const textParts = parts.filter(part => 'text' in part) as Array<\n GoogleGenerativeAIContentPart & { text: string }\n >;\n\n return textParts.length === 0\n ? undefined\n : textParts.map(part => part.text).join('');\n}\n\nconst contentSchema = z.object({\n role: z.string(),\n parts: z.array(\n z.union([\n z.object({\n text: z.string(),\n }),\n z.object({\n functionCall: z.object({\n name: z.string(),\n args: z.unknown(),\n }),\n }),\n ]),\n ),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst responseSchema = z.object({\n candidates: z.array(\n z.object({\n content: contentSchema,\n finishReason: z.string().optional(),\n tokenCount: z.number().optional(),\n }),\n ),\n});\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst chunkSchema = z.object({\n candidates: z.array(\n z.object({\n content: contentSchema.optional(),\n finishReason: z.string().optional(),\n tokenCount: z.number().optional(),\n }),\n ),\n});\n","import {\n LanguageModelV1Prompt,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils';\nimport {\n GoogleGenerativeAIContentPart,\n GoogleGenerativeAIPrompt,\n} from './google-generative-ai-prompt';\n\nexport function convertToGoogleGenerativeAIMessages(\n prompt: LanguageModelV1Prompt,\n): GoogleGenerativeAIPrompt {\n const messages: GoogleGenerativeAIPrompt = [];\n\n for (const { role, content } of prompt) {\n switch (role) {\n case 'system': {\n // system message becomes user message:\n messages.push({ role: 'user', parts: [{ text: content }] });\n\n // required for to ensure turn-taking:\n messages.push({ role: 'model', parts: [{ text: '' }] });\n\n break;\n }\n\n case 'user': {\n messages.push({\n role: 'user',\n parts: content.map(part => {\n switch (part.type) {\n case 'text': {\n return { text: part.text };\n }\n case 'image': {\n if (part.image instanceof URL) {\n throw new UnsupportedFunctionalityError({\n functionality: 'URL image parts',\n });\n } else {\n return {\n inlineData: {\n mimeType: part.mimeType ?? 'image/jpeg',\n data: convertUint8ArrayToBase64(part.image),\n },\n };\n }\n }\n }\n }),\n });\n break;\n }\n\n case 'assistant': {\n messages.push({\n role: 'model',\n parts: content\n .map(part => {\n switch (part.type) {\n case 'text': {\n return part.text.length === 0\n ? undefined\n : { text: part.text };\n }\n case 'tool-call': {\n return {\n functionCall: {\n name: part.toolName,\n args: part.args,\n },\n };\n }\n }\n })\n .filter(\n part => part !== undefined,\n ) as GoogleGenerativeAIContentPart[],\n });\n break;\n }\n\n case 'tool': {\n messages.push({\n role: 'user',\n parts: content.map(part => ({\n functionResponse: {\n name: part.toolName,\n response: part.result,\n },\n })),\n });\n break;\n }\n default: {\n const _exhaustiveCheck: never = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n\n return messages;\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nconst googleErrorDataSchema = z.object({\n error: z.object({\n code: z.number().nullable(),\n message: z.string(),\n status: z.string(),\n }),\n});\n\nexport type GoogleErrorData = z.infer<typeof googleErrorDataSchema>;\n\nexport const googleFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: googleErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { LanguageModelV1FinishReason } from '@ai-sdk/provider';\n\nexport function mapGoogleGenerativeAIFinishReason({\n finishReason,\n hasToolCalls,\n}: {\n finishReason: string | null | 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 'RECITATION':\n case 'SAFETY':\n return 'content-filter';\n case 'FINISH_REASON_UNSPECIFIED':\n case 'OTHER':\n default:\n return 'other';\n }\n}\n"],"mappings":"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","names":["UnsupportedFunctionalityError","z","_a","UnsupportedFunctionalityError","generateId","z"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/google",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",