@adminforth/completion-adapter-google-gemini 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -8,30 +8,40 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { GoogleGenAI } from "@google/genai";
11
+ import pRetry from 'p-retry';
12
+ import { logger } from "adminforth";
11
13
  export default class CompletionAdapterGoogleGemini {
12
14
  constructor(options) {
13
15
  this.complete = (content_1, ...args_1) => __awaiter(this, [content_1, ...args_1], void 0, function* (content, stop = ["."], maxTokens = 50) {
14
- var _a, _b;
15
16
  const ai = new GoogleGenAI({
16
17
  apiKey: this.options.geminiApiKey,
17
18
  });
18
- try {
19
- const response = yield ai.models.generateContent({
20
- model: this.options.model || "gemini-3-flash-preview",
21
- contents: content,
22
- config: {
23
- temperature: (_b = (_a = this.options.expert) === null || _a === void 0 ? void 0 : _a.temperature) !== null && _b !== void 0 ? _b : 0.7,
24
- maxOutputTokens: maxTokens,
25
- stopSequences: stop,
26
- },
27
- });
28
- return {
29
- content: response.text,
30
- };
31
- }
32
- catch (error) {
33
- return { error: error.message };
34
- }
19
+ const tryToGenerate = () => __awaiter(this, void 0, void 0, function* () {
20
+ var _a, _b;
21
+ logger.debug("Making Google Gemini API call");
22
+ try {
23
+ const response = yield ai.models.generateContent({
24
+ model: this.options.model || "gemini-3-flash-preview",
25
+ contents: content,
26
+ config: Object.assign({ temperature: (_b = (_a = this.options.expert) === null || _a === void 0 ? void 0 : _a.temperature) !== null && _b !== void 0 ? _b : 0.7, maxOutputTokens: maxTokens, stopSequences: stop }, this.options.extraRequestBodyParameters),
27
+ });
28
+ logger.debug(`Google Gemini SUCCESSFUL API response: ${response}`);
29
+ return {
30
+ content: response.text,
31
+ };
32
+ }
33
+ catch (error) {
34
+ logger.error(`Error during Google Gemini API call: ${error}`);
35
+ throw new Error(`Error during Google Gemini API call: ${error}`);
36
+ }
37
+ });
38
+ const result = yield pRetry(tryToGenerate, {
39
+ retries: 5,
40
+ onFailedAttempt: ({ error, attemptNumber, retriesLeft, retriesConsumed }) => {
41
+ logger.debug(`Attempt ${attemptNumber} failed. ${retriesLeft} retries left. ${retriesConsumed} retries consumed.`);
42
+ },
43
+ });
44
+ return result;
35
45
  });
36
46
  this.options = options;
37
47
  }
package/index.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import type { AdapterOptions } from "./types.js";
2
2
  import type { CompletionAdapter } from "adminforth";
3
3
  import { GoogleGenAI } from "@google/genai";
4
-
4
+ import pRetry from 'p-retry';
5
+ import { logger } from "adminforth";
5
6
 
6
7
  export default class CompletionAdapterGoogleGemini
7
8
  implements CompletionAdapter
@@ -28,21 +29,34 @@ export default class CompletionAdapterGoogleGemini
28
29
  apiKey: this.options.geminiApiKey,
29
30
  });
30
31
 
31
- try {
32
- const response = await ai.models.generateContent({
33
- model: this.options.model || "gemini-3-flash-preview",
34
- contents: content,
35
- config: {
36
- temperature: this.options.expert?.temperature ?? 0.7,
37
- maxOutputTokens: maxTokens,
38
- stopSequences: stop,
39
- },
40
- });
41
- return {
42
- content: response.text,
43
- };
44
- } catch (error) {
45
- return { error: (error as Error).message };
32
+ const tryToGenerate = async () => {
33
+ logger.debug("Making Google Gemini API call");
34
+ try {
35
+ const response = await ai.models.generateContent({
36
+ model: this.options.model || "gemini-3-flash-preview",
37
+ contents: content,
38
+ config: {
39
+ temperature: this.options.expert?.temperature ?? 0.7,
40
+ maxOutputTokens: maxTokens,
41
+ stopSequences: stop,
42
+ ...this.options.extraRequestBodyParameters,
43
+ },
44
+ });
45
+ logger.debug(`Google Gemini SUCCESSFUL API response: ${response}`);
46
+ return {
47
+ content: response.text,
48
+ };
49
+ } catch (error) {
50
+ logger.error(`Error during Google Gemini API call: ${error}`);
51
+ throw new Error(`Error during Google Gemini API call: ${error}`);
52
+ }
46
53
  }
54
+ const result = await pRetry(tryToGenerate, {
55
+ retries: 5,
56
+ onFailedAttempt: ({error, attemptNumber, retriesLeft, retriesConsumed}) => {
57
+ logger.debug(`Attempt ${attemptNumber} failed. ${retriesLeft} retries left. ${retriesConsumed} retries consumed.`);
58
+ },
59
+ })
60
+ return result;
47
61
  };
48
62
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminforth/completion-adapter-google-gemini",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "type": "module",
@@ -15,6 +15,9 @@
15
15
  "description": "",
16
16
  "dependencies": {
17
17
  "@google/genai": "^1.35.0",
18
+ "p-retry": "^7.1.1"
19
+ },
20
+ "peerDependencies": {
18
21
  "adminforth": "next"
19
22
  },
20
23
  "devDependencies": {
package/types.ts CHANGED
@@ -11,6 +11,12 @@ export interface AdapterOptions {
11
11
  */
12
12
  model?: string;
13
13
 
14
+
15
+ /**
16
+ * Additional request body parameters to include in the API request.
17
+ */
18
+ extraRequestBodyParameters?: Record<string, unknown>;
19
+
14
20
  /**
15
21
  * Expert settings
16
22
  */