@theia/ai-google 1.63.0-next.24 → 1.63.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"google-frontend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/google-frontend-application-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAKhF,qBACa,qCAAsC,YAAW,+BAA+B;IAGzF,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAG/C,SAAS,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAE/C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAEpC,OAAO,IAAI,IAAI;IAmBf,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYvD,SAAS,CAAC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;CAYlF"}
1
+ {"version":3,"file":"google-frontend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/google-frontend-application-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,+BAA+B,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAKhF,qBACa,qCAAsC,YAAW,+BAA+B;IAGzF,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAG/C,SAAS,CAAC,OAAO,EAAE,2BAA2B,CAAC;IAE/C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IAEpC,OAAO,IAAI,IAAI;IA6Bf,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYvD,SAAS,CAAC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;CAYlF"}
@@ -30,6 +30,9 @@ let GoogleFrontendApplicationContribution = class GoogleFrontendApplicationContr
30
30
  this.preferenceService.ready.then(() => {
31
31
  const apiKey = this.preferenceService.get(google_preferences_1.API_KEY_PREF, undefined);
32
32
  this.manager.setApiKey(apiKey);
33
+ this.manager.setMaxRetriesOnErrors(this.preferenceService.get(google_preferences_1.MAX_RETRIES, 3));
34
+ this.manager.setRetryDelayOnRateLimitError(this.preferenceService.get(google_preferences_1.RETRY_DELAY_RATE_LIMIT, 60));
35
+ this.manager.setRetryDelayOnOtherErrors(this.preferenceService.get(google_preferences_1.RETRY_DELAY_OTHER_ERRORS, -1));
33
36
  const models = this.preferenceService.get(google_preferences_1.MODELS_PREF, []);
34
37
  this.manager.createOrUpdateLanguageModels(...models.map(modelId => this.createGeminiModelDescription(modelId)));
35
38
  this.prevModels = [...models];
@@ -37,6 +40,15 @@ let GoogleFrontendApplicationContribution = class GoogleFrontendApplicationContr
37
40
  if (event.preferenceName === google_preferences_1.API_KEY_PREF) {
38
41
  this.manager.setApiKey(event.newValue);
39
42
  }
43
+ else if (event.preferenceName === google_preferences_1.MAX_RETRIES) {
44
+ this.manager.setMaxRetriesOnErrors(event.newValue);
45
+ }
46
+ else if (event.preferenceName === google_preferences_1.RETRY_DELAY_RATE_LIMIT) {
47
+ this.manager.setRetryDelayOnRateLimitError(event.newValue);
48
+ }
49
+ else if (event.preferenceName === google_preferences_1.RETRY_DELAY_OTHER_ERRORS) {
50
+ this.manager.setRetryDelayOnOtherErrors(event.newValue);
51
+ }
40
52
  else if (event.preferenceName === google_preferences_1.MODELS_PREF) {
41
53
  this.handleModelChanges(event.newValue);
42
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/google-frontend-application-contribution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"google-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/google-frontend-application-contribution.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import { PreferenceSchema } from '@theia/core/lib/browser/preferences/preference-contribution';
2
2
  export declare const API_KEY_PREF = "ai-features.google.apiKey";
3
3
  export declare const MODELS_PREF = "ai-features.google.models";
4
+ export declare const MAX_RETRIES = "ai-features.google.maxRetriesOnErrors";
5
+ export declare const RETRY_DELAY_RATE_LIMIT = "ai-features.google.retryDelayOnRateLimitError";
6
+ export declare const RETRY_DELAY_OTHER_ERRORS = "ai-features.google.retryDelayOnOtherErrors";
4
7
  export declare const GooglePreferencesSchema: PreferenceSchema;
5
8
  //# sourceMappingURL=google-preferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google-preferences.d.ts","sourceRoot":"","sources":["../../src/browser/google-preferences.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAI/F,eAAO,MAAM,YAAY,8BAA8B,CAAC;AACxD,eAAO,MAAM,WAAW,8BAA8B,CAAC;AAEvD,eAAO,MAAM,uBAAuB,EAAE,gBAoBrC,CAAC"}
1
+ {"version":3,"file":"google-preferences.d.ts","sourceRoot":"","sources":["../../src/browser/google-preferences.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6DAA6D,CAAC;AAI/F,eAAO,MAAM,YAAY,8BAA8B,CAAC;AACxD,eAAO,MAAM,WAAW,8BAA8B,CAAC;AACvD,eAAO,MAAM,WAAW,0CAA0C,CAAC;AACnE,eAAO,MAAM,sBAAsB,kDAAkD,CAAC;AACtF,eAAO,MAAM,wBAAwB,+CAA+C,CAAC;AAErF,eAAO,MAAM,uBAAuB,EAAE,gBA8CrC,CAAC"}
@@ -15,11 +15,14 @@
15
15
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
16
  // *****************************************************************************
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.GooglePreferencesSchema = exports.MODELS_PREF = exports.API_KEY_PREF = void 0;
18
+ exports.GooglePreferencesSchema = exports.RETRY_DELAY_OTHER_ERRORS = exports.RETRY_DELAY_RATE_LIMIT = exports.MAX_RETRIES = exports.MODELS_PREF = exports.API_KEY_PREF = void 0;
19
19
  const ai_core_preferences_1 = require("@theia/ai-core/lib/browser/ai-core-preferences");
20
20
  const core_1 = require("@theia/core");
21
21
  exports.API_KEY_PREF = 'ai-features.google.apiKey';
22
22
  exports.MODELS_PREF = 'ai-features.google.models';
23
+ exports.MAX_RETRIES = 'ai-features.google.maxRetriesOnErrors';
24
+ exports.RETRY_DELAY_RATE_LIMIT = 'ai-features.google.retryDelayOnRateLimitError';
25
+ exports.RETRY_DELAY_OTHER_ERRORS = 'ai-features.google.retryDelayOnOtherErrors';
23
26
  exports.GooglePreferencesSchema = {
24
27
  type: 'object',
25
28
  properties: {
@@ -33,11 +36,34 @@ exports.GooglePreferencesSchema = {
33
36
  type: 'array',
34
37
  description: core_1.nls.localize('theia/ai/google/models/description', 'Official Google Gemini models to use'),
35
38
  title: ai_core_preferences_1.AI_CORE_PREFERENCES_TITLE,
36
- default: ['gemini-2.0-flash', 'gemini-2.5-flash-preview-04-17', 'gemini-2.5-pro-exp-03-25', 'gemini-2.0-pro-exp-02-05'],
39
+ default: ['gemini-1.5-flash', 'gemini-1.5-pro', 'gemini-2.0-flash', 'gemini-2.0-flash-lite', 'gemini-2.5-flash-preview-05-20', 'gemini-2.5-pro-preview-05-06'],
37
40
  items: {
38
41
  type: 'string'
39
42
  }
40
43
  },
44
+ [exports.MAX_RETRIES]: {
45
+ type: 'integer',
46
+ description: core_1.nls.localize('theia/ai/google/maxRetriesOnErrors/description', 'Maximum number of retries in case of errors. If smaller than 1, then the retry logic is disabled'),
47
+ title: ai_core_preferences_1.AI_CORE_PREFERENCES_TITLE,
48
+ default: 3,
49
+ minimum: 0
50
+ },
51
+ [exports.RETRY_DELAY_RATE_LIMIT]: {
52
+ type: 'number',
53
+ description: core_1.nls.localize('theia/ai/google/retryDelayOnRateLimitError/description', 'Delay in seconds between retries in case of rate limit errors. See https://ai.google.dev/gemini-api/docs/rate-limits'),
54
+ title: ai_core_preferences_1.AI_CORE_PREFERENCES_TITLE,
55
+ default: 60,
56
+ minimum: 0
57
+ },
58
+ [exports.RETRY_DELAY_OTHER_ERRORS]: {
59
+ type: 'number',
60
+ description: core_1.nls.localize('theia/ai/google/retryDelayOnOtherErrors/description', 'Delay in seconds between retries in case of other errors (sometimes the Google GenAI reports errors such as incomplete JSON syntax returned from the model \
61
+ or 500 Internal Server Error). Setting this to -1 prevents retries in these cases. Otherwise a retry happens either immediately (if set to 0) or after \
62
+ this delay in seconds (if set to a positive number).'),
63
+ title: ai_core_preferences_1.AI_CORE_PREFERENCES_TITLE,
64
+ default: -1,
65
+ minimum: -1
66
+ }
41
67
  }
42
68
  };
43
69
  //# sourceMappingURL=google-preferences.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"google-preferences.js","sourceRoot":"","sources":["../../src/browser/google-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAGhF,wFAA2F;AAC3F,sCAAkC;AAErB,QAAA,YAAY,GAAG,2BAA2B,CAAC;AAC3C,QAAA,WAAW,GAAG,2BAA2B,CAAC;AAE1C,QAAA,uBAAuB,GAAqB;IACrD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,oBAAY,CAAC,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE,UAAG,CAAC,QAAQ,CAAC,oCAAoC,EAClE;iHACiG,CAAC;YACtG,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,mBAAW,CAAC,EAAE;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,oCAAoC,EAAE,sCAAsC,CAAC;YACvG,KAAK,EAAE,+CAAyB;YAChC,OAAO,EAAE,CAAC,kBAAkB,EAAE,gCAAgC,EAAE,0BAA0B,EAAE,0BAA0B,CAAC;YACvH,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;SACJ;KACJ;CACJ,CAAC"}
1
+ {"version":3,"file":"google-preferences.js","sourceRoot":"","sources":["../../src/browser/google-preferences.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAGhF,wFAA2F;AAC3F,sCAAkC;AAErB,QAAA,YAAY,GAAG,2BAA2B,CAAC;AAC3C,QAAA,WAAW,GAAG,2BAA2B,CAAC;AAC1C,QAAA,WAAW,GAAG,uCAAuC,CAAC;AACtD,QAAA,sBAAsB,GAAG,+CAA+C,CAAC;AACzE,QAAA,wBAAwB,GAAG,4CAA4C,CAAC;AAExE,QAAA,uBAAuB,GAAqB;IACrD,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,CAAC,oBAAY,CAAC,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE,UAAG,CAAC,QAAQ,CAAC,oCAAoC,EAClE;iHACiG,CAAC;YACtG,KAAK,EAAE,+CAAyB;SACnC;QACD,CAAC,mBAAW,CAAC,EAAE;YACX,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,oCAAoC,EAAE,sCAAsC,CAAC;YACvG,KAAK,EAAE,+CAAyB;YAChC,OAAO,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,8BAA8B,CAAC;YAC9J,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;SACJ;QACD,CAAC,mBAAW,CAAC,EAAE;YACX,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,gDAAgD,EACtE,kGAAkG,CAAC;YACvG,KAAK,EAAE,+CAAyB;YAChC,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;SACb;QACD,CAAC,8BAAsB,CAAC,EAAE;YACtB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,wDAAwD,EAC9E,sHAAsH,CAAC;YAC3H,KAAK,EAAE,+CAAyB;YAChC,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,CAAC;SACb;QACD,CAAC,gCAAwB,CAAC,EAAE;YACxB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,qDAAqD,EAC3E;;qEAEqD,CAAC;YAC1D,KAAK,EAAE,+CAAyB;YAChC,OAAO,EAAE,CAAC,CAAC;YACX,OAAO,EAAE,CAAC,CAAC;SACd;KACJ;CACJ,CAAC"}
@@ -25,6 +25,9 @@ export interface GoogleModelDescription {
25
25
  export interface GoogleLanguageModelsManager {
26
26
  apiKey: string | undefined;
27
27
  setApiKey(key: string | undefined): void;
28
+ setMaxRetriesOnErrors(maxRetries: number): void;
29
+ setRetryDelayOnRateLimitError(retryDelay: number): void;
30
+ setRetryDelayOnOtherErrors(retryDelay: number): void;
28
31
  createOrUpdateLanguageModels(...models: GoogleModelDescription[]): Promise<void>;
29
32
  removeLanguageModels(...modelIds: string[]): void;
30
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"google-language-models-manager.d.ts","sourceRoot":"","sources":["../../src/common/google-language-models-manager.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,mCAAmC,4CAA4C,CAAC;AAC7F,eAAO,MAAM,2BAA2B,eAAwC,CAAC;AACjF,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CAEtB;AACD,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzC,4BAA4B,CAAC,GAAG,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CACpD"}
1
+ {"version":3,"file":"google-language-models-manager.d.ts","sourceRoot":"","sources":["../../src/common/google-language-models-manager.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,mCAAmC,4CAA4C,CAAC;AAC7F,eAAO,MAAM,2BAA2B,eAAwC,CAAC;AACjF,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CAEtB;AAED,MAAM,WAAW,2BAA2B;IACxC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACzC,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACxD,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,4BAA4B,CAAC,GAAG,MAAM,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CACpD"}
@@ -1,6 +1,7 @@
1
- import { LanguageModel, LanguageModelRequest, LanguageModelResponse, LanguageModelStreamResponse, LanguageModelTextResponse, TokenUsageService, UserRequest } from '@theia/ai-core';
1
+ import { LanguageModel, LanguageModelRequest, LanguageModelResponse, LanguageModelStreamResponse, LanguageModelTextResponse, TokenUsageService, UserRequest, ToolCallResult } from '@theia/ai-core';
2
2
  import { CancellationToken } from '@theia/core';
3
- import { GoogleGenAI, Content } from '@google/genai';
3
+ import { GoogleGenAI, Content, FunctionResponse } from '@google/genai';
4
+ import { GoogleLanguageModelRetrySettings } from './google-language-models-manager-impl';
4
5
  export declare const GoogleModelIdentifier: unique symbol;
5
6
  /**
6
7
  * Implements the Gemini language model integration for Theia
@@ -10,13 +11,22 @@ export declare class GoogleModel implements LanguageModel {
10
11
  model: string;
11
12
  enableStreaming: boolean;
12
13
  apiKey: () => string | undefined;
14
+ retrySettings: () => GoogleLanguageModelRetrySettings;
13
15
  protected readonly tokenUsageService?: TokenUsageService | undefined;
14
- constructor(id: string, model: string, enableStreaming: boolean, apiKey: () => string | undefined, tokenUsageService?: TokenUsageService | undefined);
16
+ constructor(id: string, model: string, enableStreaming: boolean, apiKey: () => string | undefined, retrySettings: () => GoogleLanguageModelRetrySettings, tokenUsageService?: TokenUsageService | undefined);
15
17
  protected getSettings(request: LanguageModelRequest): Readonly<Record<string, unknown>>;
16
18
  request(request: UserRequest, cancellationToken?: CancellationToken): Promise<LanguageModelResponse>;
17
19
  protected handleStreamingRequest(genAI: GoogleGenAI, request: UserRequest, cancellationToken?: CancellationToken, toolMessages?: Content[]): Promise<LanguageModelStreamResponse>;
20
+ protected formatToolCallResult(result: ToolCallResult): FunctionResponse['response'];
18
21
  private createFunctionDeclarations;
19
22
  protected handleNonStreamingRequest(genAI: GoogleGenAI, request: UserRequest): Promise<LanguageModelTextResponse>;
20
23
  protected initializeGemini(): GoogleGenAI;
24
+ /**
25
+ * Implements a retry mechanism for the handle(non)Streaming request functions.
26
+ * @param fn the wrapped function to which the retry logic should be applied.
27
+ * @param retrySettings the configuration settings for the retry mechanism.
28
+ * @returns the result of the wrapped function.
29
+ */
30
+ private withRetry;
21
31
  }
22
32
  //# sourceMappingURL=google-language-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google-language-model.d.ts","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,aAAa,EACb,oBAAoB,EAEpB,qBAAqB,EACrB,2BAA2B,EAE3B,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAkD,OAAO,EAA0B,MAAM,eAAe,CAAC;AAoE7H,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAgBrE;;GAEG;AACH,qBAAa,WAAY,YAAW,aAAa;aAGzB,EAAE,EAAE,MAAM;IACnB,KAAK,EAAE,MAAM;IACb,eAAe,EAAE,OAAO;IACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IACvC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBAJrB,EAAE,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS,EACpB,iBAAiB,CAAC,+BAAmB;IAG5D,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIjF,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;cAiB1F,sBAAsB,CAClC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,EACpB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,YAAY,CAAC,EAAE,OAAO,EAAE,GACzB,OAAO,CAAC,2BAA2B,CAAC;IA4KvC,OAAO,CAAC,0BAA0B;cAYlB,yBAAyB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,yBAAyB,CAAC;IA0CrC,SAAS,CAAC,gBAAgB,IAAI,WAAW;CAS5C"}
1
+ {"version":3,"file":"google-language-model.d.ts","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"AAgBA,OAAO,EACH,aAAa,EACb,oBAAoB,EAEpB,qBAAqB,EACrB,2BAA2B,EAE3B,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EAEX,cAAc,EACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAkD,OAAO,EAA0B,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE/I,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAsEzF,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAgBrE;;GAEG;AACH,qBAAa,WAAY,YAAW,aAAa;aAGzB,EAAE,EAAE,MAAM;IACnB,KAAK,EAAE,MAAM;IACb,eAAe,EAAE,OAAO;IACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAChC,aAAa,EAAE,MAAM,gCAAgC;IAC5D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBALrB,EAAE,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS,EAChC,aAAa,EAAE,MAAM,gCAAgC,EACzC,iBAAiB,CAAC,+BAAmB;IAG5D,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIjF,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;cAiB1F,sBAAsB,CAClC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,EACpB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,YAAY,CAAC,EAAE,OAAO,EAAE,GACzB,OAAO,CAAC,2BAA2B,CAAC;IA2KvC,SAAS,CAAC,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC,UAAU,CAAC;IAOpF,OAAO,CAAC,0BAA0B;cAYlB,yBAAyB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,yBAAyB,CAAC;IA2CrC,SAAS,CAAC,gBAAgB,IAAI,WAAW;IAUzC;;;;;OAKG;YACW,SAAS;CAqC1B"}
@@ -19,6 +19,7 @@ exports.GoogleModel = exports.GoogleModelIdentifier = void 0;
19
19
  const node_crypto_1 = require("node:crypto");
20
20
  const ai_core_1 = require("@theia/ai-core");
21
21
  const genai_1 = require("@google/genai");
22
+ const promise_util_1 = require("@theia/core/lib/common/promise-util");
22
23
  const convertMessageToPart = (message) => {
23
24
  if (ai_core_1.LanguageModelMessage.isTextMessage(message) && message.text.length > 0) {
24
25
  return [{ text: message.text }];
@@ -36,6 +37,9 @@ const convertMessageToPart = (message) => {
36
37
  else if (ai_core_1.LanguageModelMessage.isThinkingMessage(message)) {
37
38
  return [{ thought: true }, { text: message.thinking }];
38
39
  }
40
+ else if (ai_core_1.LanguageModelMessage.isImageMessage(message) && ai_core_1.ImageContent.isBase64(message.image)) {
41
+ return [{ inlineData: { data: message.image.base64data, mimeType: message.image.mimeType } }];
42
+ }
39
43
  };
40
44
  /**
41
45
  * Transforms Theia language model messages to Gemini API format
@@ -93,11 +97,12 @@ function toGoogleRole(message) {
93
97
  * Implements the Gemini language model integration for Theia
94
98
  */
95
99
  class GoogleModel {
96
- constructor(id, model, enableStreaming, apiKey, tokenUsageService) {
100
+ constructor(id, model, enableStreaming, apiKey, retrySettings, tokenUsageService) {
97
101
  this.id = id;
98
102
  this.model = model;
99
103
  this.enableStreaming = enableStreaming;
100
104
  this.apiKey = apiKey;
105
+ this.retrySettings = retrySettings;
101
106
  this.tokenUsageService = tokenUsageService;
102
107
  }
103
108
  getSettings(request) {
@@ -125,7 +130,8 @@ class GoogleModel {
125
130
  const settings = this.getSettings(request);
126
131
  const { contents: parts, systemMessage } = transformToGeminiMessages(request.messages);
127
132
  const functionDeclarations = this.createFunctionDeclarations(request);
128
- const stream = await genAI.models.generateContentStream({
133
+ // Wrap the API call in the retry mechanism
134
+ const stream = await this.withRetry(async () => genAI.models.generateContentStream({
129
135
  model: this.model,
130
136
  config: {
131
137
  systemInstruction: systemMessage,
@@ -142,7 +148,7 @@ class GoogleModel {
142
148
  ...settings
143
149
  },
144
150
  contents: [...parts, ...(toolMessages !== null && toolMessages !== void 0 ? toolMessages : [])]
145
- });
151
+ }));
146
152
  const that = this;
147
153
  const asyncIterator = {
148
154
  async *[Symbol.asyncIterator]() {
@@ -239,22 +245,19 @@ class GoogleModel {
239
245
  };
240
246
  }));
241
247
  // Generate tool call responses
242
- const calls = toolResult.map(tr => {
243
- const resultAsString = typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result);
244
- return {
245
- finished: true,
246
- id: tr.id,
247
- result: resultAsString,
248
- function: { name: tr.name, arguments: tr.arguments }
249
- };
250
- });
248
+ const calls = toolResult.map(tr => ({
249
+ finished: true,
250
+ id: tr.id,
251
+ result: tr.result,
252
+ function: { name: tr.name, arguments: tr.arguments }
253
+ }));
251
254
  yield { tool_calls: calls };
252
255
  // Format tool responses for Gemini
253
256
  const toolResponses = toolResult.map(call => ({
254
257
  functionResponse: {
255
258
  id: call.id,
256
259
  name: call.name,
257
- response: { output: call.result }
260
+ response: that.formatToolCallResult(call.result)
258
261
  }
259
262
  }));
260
263
  const responseMessage = { role: 'user', parts: toolResponses };
@@ -279,6 +282,12 @@ class GoogleModel {
279
282
  };
280
283
  return { stream: asyncIterator };
281
284
  }
285
+ formatToolCallResult(result) {
286
+ // If "output" and "error" keys are not specified, then whole "response" is treated as function output.
287
+ // There is no particular support for different types of output such as images so we use the structure provided by the tool call.
288
+ // Using the format that is used for image messages does not seem to yield any different results.
289
+ return { output: result };
290
+ }
282
291
  createFunctionDeclarations(request) {
283
292
  if (!request.tools || request.tools.length === 0) {
284
293
  return [];
@@ -293,7 +302,8 @@ class GoogleModel {
293
302
  const settings = this.getSettings(request);
294
303
  const { contents: parts, systemMessage } = transformToGeminiMessages(request.messages);
295
304
  const functionDeclarations = this.createFunctionDeclarations(request);
296
- const model = await genAI.models.generateContent({
305
+ // Wrap the API call in the retry mechanism
306
+ const model = await this.withRetry(async () => genAI.models.generateContent({
297
307
  model: this.model,
298
308
  config: {
299
309
  systemInstruction: systemMessage,
@@ -306,7 +316,7 @@ class GoogleModel {
306
316
  ...settings
307
317
  },
308
318
  contents: parts
309
- });
319
+ }));
310
320
  try {
311
321
  const responseText = model.text;
312
322
  // Record token usage if available
@@ -335,6 +345,49 @@ class GoogleModel {
335
345
  // TODO test vertexai
336
346
  return new genai_1.GoogleGenAI({ apiKey, vertexai: false });
337
347
  }
348
+ /**
349
+ * Implements a retry mechanism for the handle(non)Streaming request functions.
350
+ * @param fn the wrapped function to which the retry logic should be applied.
351
+ * @param retrySettings the configuration settings for the retry mechanism.
352
+ * @returns the result of the wrapped function.
353
+ */
354
+ async withRetry(fn) {
355
+ const { maxRetriesOnErrors, retryDelayOnRateLimitError, retryDelayOnOtherErrors } = this.retrySettings();
356
+ for (let i = 0; i <= maxRetriesOnErrors; i++) {
357
+ try {
358
+ return await fn();
359
+ }
360
+ catch (error) {
361
+ if (i === maxRetriesOnErrors) {
362
+ // no retries left - throw the original error
363
+ throw error;
364
+ }
365
+ const message = error.message;
366
+ // Check for rate limit exhaustion (usually, there is a rate limit per minute, so we can retry after a delay...)
367
+ if (message && message.includes('429 Too Many Requests')) {
368
+ if (retryDelayOnRateLimitError < 0) {
369
+ // rate limit error should not retried because of the setting
370
+ throw error;
371
+ }
372
+ const delayMs = retryDelayOnRateLimitError * 1000;
373
+ console.warn(`Received 429 (Too Many Requests). Retrying in ${retryDelayOnRateLimitError}s. Attempt ${i + 1} of ${maxRetriesOnErrors}.`);
374
+ await (0, promise_util_1.wait)(delayMs);
375
+ }
376
+ else if (retryDelayOnOtherErrors < 0) {
377
+ // Other errors should not retried because of the setting
378
+ throw error;
379
+ }
380
+ else {
381
+ const delayMs = retryDelayOnOtherErrors * 1000;
382
+ console.warn(`Request failed: ${message}. Retrying in ${retryDelayOnOtherErrors}s. Attempt ${i + 1} of ${maxRetriesOnErrors}.`);
383
+ await (0, promise_util_1.wait)(delayMs);
384
+ }
385
+ // -> reiterate the loop for the next attempt
386
+ }
387
+ }
388
+ // This should not be reached
389
+ throw new Error('Retry mechanism failed unexpectedly.');
390
+ }
338
391
  }
339
392
  exports.GoogleModel = GoogleModel;
340
393
  //# sourceMappingURL=google-language-model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"google-language-model.js","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"google-language-model.js","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,21 @@
1
1
  import { LanguageModelRegistry, TokenUsageService } from '@theia/ai-core';
2
2
  import { GoogleLanguageModelsManager, GoogleModelDescription } from '../common';
3
+ export interface GoogleLanguageModelRetrySettings {
4
+ maxRetriesOnErrors: number;
5
+ retryDelayOnRateLimitError: number;
6
+ retryDelayOnOtherErrors: number;
7
+ }
3
8
  export declare class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsManager {
4
9
  protected _apiKey: string | undefined;
10
+ protected retrySettings: GoogleLanguageModelRetrySettings;
5
11
  protected readonly languageModelRegistry: LanguageModelRegistry;
6
12
  protected readonly tokenUsageService: TokenUsageService;
7
13
  get apiKey(): string | undefined;
8
14
  createOrUpdateLanguageModels(...modelDescriptions: GoogleModelDescription[]): Promise<void>;
9
15
  removeLanguageModels(...modelIds: string[]): void;
10
16
  setApiKey(apiKey: string | undefined): void;
17
+ setMaxRetriesOnErrors(maxRetries: number): void;
18
+ setRetryDelayOnRateLimitError(retryDelay: number): void;
19
+ setRetryDelayOnOtherErrors(retryDelay: number): void;
11
20
  }
12
21
  //# sourceMappingURL=google-language-models-manager-impl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"google-language-models-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhF,qBACa,+BAAgC,YAAW,2BAA2B;IAE/E,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAGtC,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAEK,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCjG,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;CAO9C"}
1
+ {"version":3,"file":"google-language-models-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhF,MAAM,WAAW,gCAAgC;IAC7C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IACnC,uBAAuB,EAAE,MAAM,CAAC;CACnC;AAED,qBACa,+BAAgC,YAAW,2BAA2B;IAC/E,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,aAAa,EAAE,gCAAgC,CAIvD;IAGF,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAExD,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAEK,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjG,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIjD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAQ3C,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI/C,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvD,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAGvD"}
@@ -21,6 +21,13 @@ const ai_core_1 = require("@theia/ai-core");
21
21
  const inversify_1 = require("@theia/core/shared/inversify");
22
22
  const google_language_model_1 = require("./google-language-model");
23
23
  let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
24
+ constructor() {
25
+ this.retrySettings = {
26
+ maxRetriesOnErrors: 3,
27
+ retryDelayOnRateLimitError: 60,
28
+ retryDelayOnOtherErrors: -1
29
+ };
30
+ }
24
31
  get apiKey() {
25
32
  var _a, _b;
26
33
  return (_b = (_a = this._apiKey) !== null && _a !== void 0 ? _a : process.env.GOOGLE_API_KEY) !== null && _b !== void 0 ? _b : process.env.GEMINI_API_KEY;
@@ -37,6 +44,7 @@ let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
37
44
  }
38
45
  return undefined;
39
46
  };
47
+ const retrySettingsProvider = () => this.retrySettings;
40
48
  if (model) {
41
49
  if (!(model instanceof google_language_model_1.GoogleModel)) {
42
50
  console.warn(`Gemini: model ${modelDescription.id} is not a Gemini model`);
@@ -45,10 +53,11 @@ let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
45
53
  model.model = modelDescription.model;
46
54
  model.enableStreaming = modelDescription.enableStreaming;
47
55
  model.apiKey = apiKeyProvider;
56
+ model.retrySettings = retrySettingsProvider;
48
57
  }
49
58
  else {
50
59
  this.languageModelRegistry.addLanguageModels([
51
- new google_language_model_1.GoogleModel(modelDescription.id, modelDescription.model, modelDescription.enableStreaming, apiKeyProvider, this.tokenUsageService)
60
+ new google_language_model_1.GoogleModel(modelDescription.id, modelDescription.model, modelDescription.enableStreaming, apiKeyProvider, retrySettingsProvider, this.tokenUsageService)
52
61
  ]);
53
62
  }
54
63
  }
@@ -64,6 +73,15 @@ let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
64
73
  this._apiKey = undefined;
65
74
  }
66
75
  }
76
+ setMaxRetriesOnErrors(maxRetries) {
77
+ this.retrySettings.maxRetriesOnErrors = maxRetries;
78
+ }
79
+ setRetryDelayOnRateLimitError(retryDelay) {
80
+ this.retrySettings.retryDelayOnRateLimitError = retryDelay;
81
+ }
82
+ setRetryDelayOnOtherErrors(retryDelay) {
83
+ this.retrySettings.retryDelayOnOtherErrors = retryDelay;
84
+ }
67
85
  };
68
86
  exports.GoogleLanguageModelsManagerImpl = GoogleLanguageModelsManagerImpl;
69
87
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"google-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4CAA0E;AAC1E,4DAAkE;AAClE,mEAAsD;AAI/C,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAUxC,IAAI,MAAM;;QACN,OAAO,MAAA,MAAA,IAAI,CAAC,OAAO,mCAAI,OAAO,CAAC,GAAG,CAAC,cAAc,mCAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,GAAG,iBAA2C;QAC7E,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrF,MAAM,cAAc,GAAG,GAAG,EAAE;gBACxB,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC,MAAM,CAAC;gBACvB,CAAC;gBACD,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC1B,OAAO,gBAAgB,CAAC,MAAM,CAAC;gBACnC,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC;YAEF,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,CAAC,KAAK,YAAY,mCAAW,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CAAC,iBAAiB,gBAAgB,CAAC,EAAE,wBAAwB,CAAC,CAAC;oBAC3E,SAAS;gBACb,CAAC;gBACD,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;gBACrC,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC;gBACzD,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;oBACzC,IAAI,mCAAW,CACX,gBAAgB,CAAC,EAAE,EACnB,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,eAAe,EAChC,cAAc,EACd,IAAI,CAAC,iBAAiB,CACzB;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,GAAG,QAAkB;QACtC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,MAA0B;QAChC,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC7B,CAAC;IACL,CAAC;CACJ,CAAA;AA5DY,0EAA+B;AAKrB;IADlB,IAAA,kBAAM,EAAC,+BAAqB,CAAC;;8EACkC;AAG7C;IADlB,IAAA,kBAAM,EAAC,2BAAiB,CAAC;;0EAC8B;0CAR/C,+BAA+B;IAD3C,IAAA,sBAAU,GAAE;GACA,+BAA+B,CA4D3C"}
1
+ {"version":3,"file":"google-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4CAA0E;AAC1E,4DAAkE;AAClE,mEAAsD;AAU/C,IAAM,+BAA+B,GAArC,MAAM,+BAA+B;IAArC;QAEO,kBAAa,GAAqC;YACxD,kBAAkB,EAAE,CAAC;YACrB,0BAA0B,EAAE,EAAE;YAC9B,uBAAuB,EAAE,CAAC,CAAC;SAC9B,CAAC;IAyEN,CAAC;IAjEG,IAAI,MAAM;;QACN,OAAO,MAAA,MAAA,IAAI,CAAC,OAAO,mCAAI,OAAO,CAAC,GAAG,CAAC,cAAc,mCAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,4BAA4B,CAAC,GAAG,iBAA2C;QAC7E,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACrF,MAAM,cAAc,GAAG,GAAG,EAAE;gBACxB,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC,MAAM,CAAC;gBACvB,CAAC;gBACD,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC1B,OAAO,gBAAgB,CAAC,MAAM,CAAC;gBACnC,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC;YACF,MAAM,qBAAqB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;YAEvD,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,CAAC,KAAK,YAAY,mCAAW,CAAC,EAAE,CAAC;oBAClC,OAAO,CAAC,IAAI,CAAC,iBAAiB,gBAAgB,CAAC,EAAE,wBAAwB,CAAC,CAAC;oBAC3E,SAAS;gBACb,CAAC;gBACD,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC;gBACrC,KAAK,CAAC,eAAe,GAAG,gBAAgB,CAAC,eAAe,CAAC;gBACzD,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC;gBAC9B,KAAK,CAAC,aAAa,GAAG,qBAAqB,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC;oBACzC,IAAI,mCAAW,CACX,gBAAgB,CAAC,EAAE,EACnB,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,eAAe,EAChC,cAAc,EACd,qBAAqB,EACrB,IAAI,CAAC,iBAAiB,CACzB;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,GAAG,QAAkB;QACtC,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,MAA0B;QAChC,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,qBAAqB,CAAC,UAAkB;QACpC,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,UAAU,CAAC;IACvD,CAAC;IAED,6BAA6B,CAAC,UAAkB;QAC5C,IAAI,CAAC,aAAa,CAAC,0BAA0B,GAAG,UAAU,CAAC;IAC/D,CAAC;IAED,0BAA0B,CAAC,UAAkB;QACzC,IAAI,CAAC,aAAa,CAAC,uBAAuB,GAAG,UAAU,CAAC;IAC5D,CAAC;CACJ,CAAA;AA/EY,0EAA+B;AASrB;IADlB,IAAA,kBAAM,EAAC,+BAAqB,CAAC;;8EACkC;AAG7C;IADlB,IAAA,kBAAM,EAAC,2BAAiB,CAAC;;0EAC8B;0CAZ/C,+BAA+B;IAD3C,IAAA,sBAAU,GAAE;GACA,+BAA+B,CA+E3C"}
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@theia/ai-google",
3
- "version": "1.63.0-next.24+83b50cc66",
3
+ "version": "1.63.0",
4
4
  "description": "Theia - Google AI Integration",
5
5
  "dependencies": {
6
- "@google/genai": "latest",
7
- "@theia/ai-core": "1.63.0-next.24+83b50cc66",
8
- "@theia/core": "1.63.0-next.24+83b50cc66"
6
+ "@google/genai": "^1.3.0",
7
+ "@theia/ai-core": "1.63.0",
8
+ "@theia/core": "1.63.0"
9
9
  },
10
10
  "publishConfig": {
11
11
  "access": "public"
@@ -44,10 +44,10 @@
44
44
  "watch": "theiaext watch"
45
45
  },
46
46
  "devDependencies": {
47
- "@theia/ext-scripts": "1.62.0"
47
+ "@theia/ext-scripts": "1.63.0"
48
48
  },
49
49
  "nyc": {
50
50
  "extends": "../../configs/nyc.json"
51
51
  },
52
- "gitHead": "83b50cc66b001a5b9100ccd944dcace04cd4ae2e"
52
+ "gitHead": "facf442522991134333495a0b90cf56a56990280"
53
53
  }
@@ -17,7 +17,7 @@
17
17
  import { FrontendApplicationContribution, PreferenceService } from '@theia/core/lib/browser';
18
18
  import { inject, injectable } from '@theia/core/shared/inversify';
19
19
  import { GoogleLanguageModelsManager, GoogleModelDescription } from '../common';
20
- import { API_KEY_PREF, MODELS_PREF } from './google-preferences';
20
+ import { API_KEY_PREF, MODELS_PREF, MAX_RETRIES, RETRY_DELAY_OTHER_ERRORS, RETRY_DELAY_RATE_LIMIT } from './google-preferences';
21
21
 
22
22
  const GOOGLE_PROVIDER_ID = 'google';
23
23
 
@@ -37,6 +37,10 @@ export class GoogleFrontendApplicationContribution implements FrontendApplicatio
37
37
  const apiKey = this.preferenceService.get<string>(API_KEY_PREF, undefined);
38
38
  this.manager.setApiKey(apiKey);
39
39
 
40
+ this.manager.setMaxRetriesOnErrors(this.preferenceService.get<number>(MAX_RETRIES, 3));
41
+ this.manager.setRetryDelayOnRateLimitError(this.preferenceService.get<number>(RETRY_DELAY_RATE_LIMIT, 60));
42
+ this.manager.setRetryDelayOnOtherErrors(this.preferenceService.get<number>(RETRY_DELAY_OTHER_ERRORS, -1));
43
+
40
44
  const models = this.preferenceService.get<string[]>(MODELS_PREF, []);
41
45
  this.manager.createOrUpdateLanguageModels(...models.map(modelId => this.createGeminiModelDescription(modelId)));
42
46
  this.prevModels = [...models];
@@ -44,6 +48,12 @@ export class GoogleFrontendApplicationContribution implements FrontendApplicatio
44
48
  this.preferenceService.onPreferenceChanged(event => {
45
49
  if (event.preferenceName === API_KEY_PREF) {
46
50
  this.manager.setApiKey(event.newValue);
51
+ } else if (event.preferenceName === MAX_RETRIES) {
52
+ this.manager.setMaxRetriesOnErrors(event.newValue);
53
+ } else if (event.preferenceName === RETRY_DELAY_RATE_LIMIT) {
54
+ this.manager.setRetryDelayOnRateLimitError(event.newValue);
55
+ } else if (event.preferenceName === RETRY_DELAY_OTHER_ERRORS) {
56
+ this.manager.setRetryDelayOnOtherErrors(event.newValue);
47
57
  } else if (event.preferenceName === MODELS_PREF) {
48
58
  this.handleModelChanges(event.newValue as string[]);
49
59
  }
@@ -20,6 +20,9 @@ import { nls } from '@theia/core';
20
20
 
21
21
  export const API_KEY_PREF = 'ai-features.google.apiKey';
22
22
  export const MODELS_PREF = 'ai-features.google.models';
23
+ export const MAX_RETRIES = 'ai-features.google.maxRetriesOnErrors';
24
+ export const RETRY_DELAY_RATE_LIMIT = 'ai-features.google.retryDelayOnRateLimitError';
25
+ export const RETRY_DELAY_OTHER_ERRORS = 'ai-features.google.retryDelayOnOtherErrors';
23
26
 
24
27
  export const GooglePreferencesSchema: PreferenceSchema = {
25
28
  type: 'object',
@@ -35,10 +38,36 @@ export const GooglePreferencesSchema: PreferenceSchema = {
35
38
  type: 'array',
36
39
  description: nls.localize('theia/ai/google/models/description', 'Official Google Gemini models to use'),
37
40
  title: AI_CORE_PREFERENCES_TITLE,
38
- default: ['gemini-2.0-flash', 'gemini-2.5-flash-preview-04-17', 'gemini-2.5-pro-exp-03-25', 'gemini-2.0-pro-exp-02-05'],
41
+ default: ['gemini-1.5-flash', 'gemini-1.5-pro', 'gemini-2.0-flash', 'gemini-2.0-flash-lite', 'gemini-2.5-flash-preview-05-20', 'gemini-2.5-pro-preview-05-06'],
39
42
  items: {
40
43
  type: 'string'
41
44
  }
42
45
  },
46
+ [MAX_RETRIES]: {
47
+ type: 'integer',
48
+ description: nls.localize('theia/ai/google/maxRetriesOnErrors/description',
49
+ 'Maximum number of retries in case of errors. If smaller than 1, then the retry logic is disabled'),
50
+ title: AI_CORE_PREFERENCES_TITLE,
51
+ default: 3,
52
+ minimum: 0
53
+ },
54
+ [RETRY_DELAY_RATE_LIMIT]: {
55
+ type: 'number',
56
+ description: nls.localize('theia/ai/google/retryDelayOnRateLimitError/description',
57
+ 'Delay in seconds between retries in case of rate limit errors. See https://ai.google.dev/gemini-api/docs/rate-limits'),
58
+ title: AI_CORE_PREFERENCES_TITLE,
59
+ default: 60,
60
+ minimum: 0
61
+ },
62
+ [RETRY_DELAY_OTHER_ERRORS]: {
63
+ type: 'number',
64
+ description: nls.localize('theia/ai/google/retryDelayOnOtherErrors/description',
65
+ 'Delay in seconds between retries in case of other errors (sometimes the Google GenAI reports errors such as incomplete JSON syntax returned from the model \
66
+ or 500 Internal Server Error). Setting this to -1 prevents retries in these cases. Otherwise a retry happens either immediately (if set to 0) or after \
67
+ this delay in seconds (if set to a positive number).'),
68
+ title: AI_CORE_PREFERENCES_TITLE,
69
+ default: -1,
70
+ minimum: -1
71
+ }
43
72
  }
44
73
  };
@@ -38,9 +38,13 @@ export interface GoogleModelDescription {
38
38
  maxTokens?: number;
39
39
 
40
40
  }
41
+
41
42
  export interface GoogleLanguageModelsManager {
42
43
  apiKey: string | undefined;
43
44
  setApiKey(key: string | undefined): void;
45
+ setMaxRetriesOnErrors(maxRetries: number): void;
46
+ setRetryDelayOnRateLimitError(retryDelay: number): void;
47
+ setRetryDelayOnOtherErrors(retryDelay: number): void;
44
48
  createOrUpdateLanguageModels(...models: GoogleModelDescription[]): Promise<void>;
45
49
  removeLanguageModels(...modelIds: string[]): void
46
50
  }
@@ -23,10 +23,14 @@ import {
23
23
  LanguageModelStreamResponsePart,
24
24
  LanguageModelTextResponse,
25
25
  TokenUsageService,
26
- UserRequest
26
+ UserRequest,
27
+ ImageContent,
28
+ ToolCallResult
27
29
  } from '@theia/ai-core';
28
30
  import { CancellationToken } from '@theia/core';
29
- import { GoogleGenAI, FunctionCallingConfigMode, FunctionDeclaration, Content, Schema, Part, Modality } from '@google/genai';
31
+ import { GoogleGenAI, FunctionCallingConfigMode, FunctionDeclaration, Content, Schema, Part, Modality, FunctionResponse } from '@google/genai';
32
+ import { wait } from '@theia/core/lib/common/promise-util';
33
+ import { GoogleLanguageModelRetrySettings } from './google-language-models-manager-impl';
30
34
 
31
35
  interface ToolCallback {
32
36
  readonly name: string;
@@ -48,6 +52,8 @@ const convertMessageToPart = (message: LanguageModelMessage): Part[] | undefined
48
52
 
49
53
  } else if (LanguageModelMessage.isThinkingMessage(message)) {
50
54
  return [{ thought: true }, { text: message.thinking }];
55
+ } else if (LanguageModelMessage.isImageMessage(message) && ImageContent.isBase64(message.image)) {
56
+ return [{ inlineData: { data: message.image.base64data, mimeType: message.image.mimeType } }];
51
57
  }
52
58
  };
53
59
  /**
@@ -120,6 +126,7 @@ export class GoogleModel implements LanguageModel {
120
126
  public model: string,
121
127
  public enableStreaming: boolean,
122
128
  public apiKey: () => string | undefined,
129
+ public retrySettings: () => GoogleLanguageModelRetrySettings,
123
130
  protected readonly tokenUsageService?: TokenUsageService
124
131
  ) { }
125
132
 
@@ -154,24 +161,26 @@ export class GoogleModel implements LanguageModel {
154
161
  const { contents: parts, systemMessage } = transformToGeminiMessages(request.messages);
155
162
  const functionDeclarations = this.createFunctionDeclarations(request);
156
163
 
157
- const stream = await genAI.models.generateContentStream({
158
- model: this.model,
159
- config: {
160
- systemInstruction: systemMessage,
161
- toolConfig: {
162
- functionCallingConfig: {
163
- mode: FunctionCallingConfigMode.AUTO,
164
- }
164
+ // Wrap the API call in the retry mechanism
165
+ const stream = await this.withRetry(async () =>
166
+ genAI.models.generateContentStream({
167
+ model: this.model,
168
+ config: {
169
+ systemInstruction: systemMessage,
170
+ toolConfig: {
171
+ functionCallingConfig: {
172
+ mode: FunctionCallingConfigMode.AUTO,
173
+ }
174
+ },
175
+ responseModalities: [Modality.TEXT],
176
+ tools: [{
177
+ functionDeclarations
178
+ }],
179
+ temperature: 1,
180
+ ...settings
165
181
  },
166
- responseModalities: [Modality.TEXT],
167
- tools: [{
168
- functionDeclarations
169
- }],
170
- temperature: 1,
171
- ...settings
172
- },
173
- contents: [...parts, ...(toolMessages ?? [])]
174
- });
182
+ contents: [...parts, ...(toolMessages ?? [])]
183
+ }));
175
184
 
176
185
  const that = this;
177
186
 
@@ -272,15 +281,12 @@ export class GoogleModel implements LanguageModel {
272
281
  }));
273
282
 
274
283
  // Generate tool call responses
275
- const calls = toolResult.map(tr => {
276
- const resultAsString = typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result);
277
- return {
278
- finished: true,
279
- id: tr.id,
280
- result: resultAsString,
281
- function: { name: tr.name, arguments: tr.arguments }
282
- };
283
- });
284
+ const calls = toolResult.map(tr => ({
285
+ finished: true,
286
+ id: tr.id,
287
+ result: tr.result,
288
+ function: { name: tr.name, arguments: tr.arguments }
289
+ }));
284
290
  yield { tool_calls: calls };
285
291
 
286
292
  // Format tool responses for Gemini
@@ -288,7 +294,7 @@ export class GoogleModel implements LanguageModel {
288
294
  functionResponse: {
289
295
  id: call.id,
290
296
  name: call.name,
291
- response: { output: call.result }
297
+ response: that.formatToolCallResult(call.result)
292
298
  }
293
299
  }));
294
300
  const responseMessage: Content = { role: 'user', parts: toolResponses };
@@ -321,6 +327,13 @@ export class GoogleModel implements LanguageModel {
321
327
  return { stream: asyncIterator };
322
328
  }
323
329
 
330
+ protected formatToolCallResult(result: ToolCallResult): FunctionResponse['response'] {
331
+ // If "output" and "error" keys are not specified, then whole "response" is treated as function output.
332
+ // There is no particular support for different types of output such as images so we use the structure provided by the tool call.
333
+ // Using the format that is used for image messages does not seem to yield any different results.
334
+ return { output: result };
335
+ }
336
+
324
337
  private createFunctionDeclarations(request: LanguageModelRequest): FunctionDeclaration[] {
325
338
  if (!request.tools || request.tools.length === 0) {
326
339
  return [];
@@ -341,7 +354,8 @@ export class GoogleModel implements LanguageModel {
341
354
  const { contents: parts, systemMessage } = transformToGeminiMessages(request.messages);
342
355
  const functionDeclarations = this.createFunctionDeclarations(request);
343
356
 
344
- const model = await genAI.models.generateContent({
357
+ // Wrap the API call in the retry mechanism
358
+ const model = await this.withRetry(async () => genAI.models.generateContent({
345
359
  model: this.model,
346
360
  config: {
347
361
  systemInstruction: systemMessage,
@@ -354,7 +368,7 @@ export class GoogleModel implements LanguageModel {
354
368
  ...settings
355
369
  },
356
370
  contents: parts
357
- });
371
+ }));
358
372
 
359
373
  try {
360
374
  const responseText = model.text;
@@ -387,4 +401,48 @@ export class GoogleModel implements LanguageModel {
387
401
  // TODO test vertexai
388
402
  return new GoogleGenAI({ apiKey, vertexai: false });
389
403
  }
404
+
405
+ /**
406
+ * Implements a retry mechanism for the handle(non)Streaming request functions.
407
+ * @param fn the wrapped function to which the retry logic should be applied.
408
+ * @param retrySettings the configuration settings for the retry mechanism.
409
+ * @returns the result of the wrapped function.
410
+ */
411
+ private async withRetry<T>(fn: () => Promise<T>): Promise<T> {
412
+ const { maxRetriesOnErrors, retryDelayOnRateLimitError, retryDelayOnOtherErrors } = this.retrySettings();
413
+
414
+ for (let i = 0; i <= maxRetriesOnErrors; i++) {
415
+ try {
416
+ return await fn();
417
+ } catch (error) {
418
+ if (i === maxRetriesOnErrors) {
419
+ // no retries left - throw the original error
420
+ throw error;
421
+ }
422
+
423
+ const message = (error as Error).message;
424
+ // Check for rate limit exhaustion (usually, there is a rate limit per minute, so we can retry after a delay...)
425
+ if (message && message.includes('429 Too Many Requests')) {
426
+ if (retryDelayOnRateLimitError < 0) {
427
+ // rate limit error should not retried because of the setting
428
+ throw error;
429
+ }
430
+
431
+ const delayMs = retryDelayOnRateLimitError * 1000;
432
+ console.warn(`Received 429 (Too Many Requests). Retrying in ${retryDelayOnRateLimitError}s. Attempt ${i + 1} of ${maxRetriesOnErrors}.`);
433
+ await wait(delayMs);
434
+ } else if (retryDelayOnOtherErrors < 0) {
435
+ // Other errors should not retried because of the setting
436
+ throw error;
437
+ } else {
438
+ const delayMs = retryDelayOnOtherErrors * 1000;
439
+ console.warn(`Request failed: ${message}. Retrying in ${retryDelayOnOtherErrors}s. Attempt ${i + 1} of ${maxRetriesOnErrors}.`);
440
+ await wait(delayMs);
441
+ }
442
+ // -> reiterate the loop for the next attempt
443
+ }
444
+ }
445
+ // This should not be reached
446
+ throw new Error('Retry mechanism failed unexpectedly.');
447
+ }
390
448
  }
@@ -19,10 +19,20 @@ import { inject, injectable } from '@theia/core/shared/inversify';
19
19
  import { GoogleModel } from './google-language-model';
20
20
  import { GoogleLanguageModelsManager, GoogleModelDescription } from '../common';
21
21
 
22
+ export interface GoogleLanguageModelRetrySettings {
23
+ maxRetriesOnErrors: number;
24
+ retryDelayOnRateLimitError: number;
25
+ retryDelayOnOtherErrors: number;
26
+ }
27
+
22
28
  @injectable()
23
29
  export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsManager {
24
-
25
30
  protected _apiKey: string | undefined;
31
+ protected retrySettings: GoogleLanguageModelRetrySettings = {
32
+ maxRetriesOnErrors: 3,
33
+ retryDelayOnRateLimitError: 60,
34
+ retryDelayOnOtherErrors: -1
35
+ };
26
36
 
27
37
  @inject(LanguageModelRegistry)
28
38
  protected readonly languageModelRegistry: LanguageModelRegistry;
@@ -46,6 +56,7 @@ export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsMana
46
56
  }
47
57
  return undefined;
48
58
  };
59
+ const retrySettingsProvider = () => this.retrySettings;
49
60
 
50
61
  if (model) {
51
62
  if (!(model instanceof GoogleModel)) {
@@ -55,6 +66,7 @@ export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsMana
55
66
  model.model = modelDescription.model;
56
67
  model.enableStreaming = modelDescription.enableStreaming;
57
68
  model.apiKey = apiKeyProvider;
69
+ model.retrySettings = retrySettingsProvider;
58
70
  } else {
59
71
  this.languageModelRegistry.addLanguageModels([
60
72
  new GoogleModel(
@@ -62,6 +74,7 @@ export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsMana
62
74
  modelDescription.model,
63
75
  modelDescription.enableStreaming,
64
76
  apiKeyProvider,
77
+ retrySettingsProvider,
65
78
  this.tokenUsageService
66
79
  )
67
80
  ]);
@@ -80,4 +93,16 @@ export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsMana
80
93
  this._apiKey = undefined;
81
94
  }
82
95
  }
96
+
97
+ setMaxRetriesOnErrors(maxRetries: number): void {
98
+ this.retrySettings.maxRetriesOnErrors = maxRetries;
99
+ }
100
+
101
+ setRetryDelayOnRateLimitError(retryDelay: number): void {
102
+ this.retrySettings.retryDelayOnRateLimitError = retryDelay;
103
+ }
104
+
105
+ setRetryDelayOnOtherErrors(retryDelay: number): void {
106
+ this.retrySettings.retryDelayOnOtherErrors = retryDelay;
107
+ }
83
108
  }