@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.
- package/lib/browser/google-frontend-application-contribution.d.ts.map +1 -1
- package/lib/browser/google-frontend-application-contribution.js +12 -0
- package/lib/browser/google-frontend-application-contribution.js.map +1 -1
- package/lib/browser/google-preferences.d.ts +3 -0
- package/lib/browser/google-preferences.d.ts.map +1 -1
- package/lib/browser/google-preferences.js +28 -2
- package/lib/browser/google-preferences.js.map +1 -1
- package/lib/common/google-language-models-manager.d.ts +3 -0
- package/lib/common/google-language-models-manager.d.ts.map +1 -1
- package/lib/node/google-language-model.d.ts +13 -3
- package/lib/node/google-language-model.d.ts.map +1 -1
- package/lib/node/google-language-model.js +68 -15
- package/lib/node/google-language-model.js.map +1 -1
- package/lib/node/google-language-models-manager-impl.d.ts +9 -0
- package/lib/node/google-language-models-manager-impl.d.ts.map +1 -1
- package/lib/node/google-language-models-manager-impl.js +19 -1
- package/lib/node/google-language-models-manager-impl.js.map +1 -1
- package/package.json +6 -6
- package/src/browser/google-frontend-application-contribution.ts +11 -1
- package/src/browser/google-preferences.ts +30 -1
- package/src/common/google-language-models-manager.ts +4 -0
- package/src/node/google-language-model.ts +89 -31
- package/src/node/google-language-models-manager-impl.ts +26 -1
|
@@ -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;
|
|
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":";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,qDAA6F;AAC7F,4DAAkE;AAClE,sCAAgF;AAChF,
|
|
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;
|
|
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.
|
|
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;
|
|
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;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
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:
|
|
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
|
-
|
|
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;
|
|
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;
|
|
1
|
+
{"version":3,"file":"google-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-google",
|
|
3
|
-
"version": "1.63.0
|
|
3
|
+
"version": "1.63.0",
|
|
4
4
|
"description": "Theia - Google AI Integration",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@google/genai": "
|
|
7
|
-
"@theia/ai-core": "1.63.0
|
|
8
|
-
"@theia/core": "1.63.0
|
|
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.
|
|
47
|
+
"@theia/ext-scripts": "1.63.0"
|
|
48
48
|
},
|
|
49
49
|
"nyc": {
|
|
50
50
|
"extends": "../../configs/nyc.json"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
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.
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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
|
-
|
|
167
|
-
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
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:
|
|
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
|
-
|
|
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
|
}
|