@theia/ai-google 1.72.0-next.52 → 1.72.0-next.59
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 +1 -3
- package/lib/browser/google-frontend-application-contribution.d.ts.map +1 -1
- package/lib/browser/google-frontend-application-contribution.js +3 -26
- package/lib/browser/google-frontend-application-contribution.js.map +1 -1
- package/lib/node/google-language-model.d.ts +2 -1
- package/lib/node/google-language-model.d.ts.map +1 -1
- package/lib/node/google-language-model.js +2 -1
- package/lib/node/google-language-model.js.map +1 -1
- package/lib/node/google-language-models-manager-impl.d.ts +21 -1
- package/lib/node/google-language-models-manager-impl.d.ts.map +1 -1
- package/lib/node/google-language-models-manager-impl.js +98 -32
- package/lib/node/google-language-models-manager-impl.js.map +1 -1
- package/lib/node/google-language-models-manager-impl.spec.d.ts +2 -0
- package/lib/node/google-language-models-manager-impl.spec.d.ts.map +1 -0
- package/lib/node/google-language-models-manager-impl.spec.js +150 -0
- package/lib/node/google-language-models-manager-impl.spec.js.map +1 -0
- package/package.json +4 -4
- package/src/browser/google-frontend-application-contribution.ts +3 -32
- package/src/node/google-language-model.ts +2 -1
- package/src/node/google-language-models-manager-impl.spec.ts +183 -0
- package/src/node/google-language-models-manager-impl.ts +123 -44
|
@@ -6,11 +6,9 @@ export declare class GoogleFrontendApplicationContribution implements FrontendAp
|
|
|
6
6
|
protected manager: GoogleLanguageModelsManager;
|
|
7
7
|
protected prevModels: string[];
|
|
8
8
|
onStart(): void;
|
|
9
|
-
/**
|
|
10
|
-
* Called when the API key changes. Updates all Google models on the manager to ensure the new key is used.
|
|
11
|
-
*/
|
|
12
9
|
protected handleKeyChange(newApiKey: string | undefined): void;
|
|
13
10
|
protected handleModelChanges(newModels: string[]): void;
|
|
11
|
+
/** Reasoning capabilities are resolved by the backend from the Gemini /v1beta/models response. */
|
|
14
12
|
protected createGeminiModelDescription(modelId: string): GoogleModelDescription;
|
|
15
13
|
}
|
|
16
14
|
//# sourceMappingURL=google-frontend-application-contribution.d.ts.map
|
|
@@ -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,MAAM,yBAAyB,CAAC;
|
|
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,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIhD,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;IA+Bf,SAAS,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAM9D,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYvD,kGAAkG;IAClG,SAAS,CAAC,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB;CASlF"}
|
|
@@ -22,23 +22,6 @@ const common_1 = require("../common");
|
|
|
22
22
|
const google_preferences_1 = require("../common/google-preferences");
|
|
23
23
|
const core_1 = require("@theia/core");
|
|
24
24
|
const GOOGLE_PROVIDER_ID = 'google';
|
|
25
|
-
/** Gemini 3 uses `thinkingConfig.thinkingLevel`. */
|
|
26
|
-
const EFFORT_REASONING = /^gemini-3(?:\.|-)/i;
|
|
27
|
-
/** Gemini 2.5 uses `thinkingConfig.thinkingBudget` (integer; `-1` dynamic, `0` off). */
|
|
28
|
-
const BUDGET_REASONING = /^gemini-2\.5(?:-|$)/i;
|
|
29
|
-
const GEMINI_REASONING_SUPPORT = {
|
|
30
|
-
supportedLevels: ['off', 'minimal', 'low', 'medium', 'high', 'auto'],
|
|
31
|
-
defaultLevel: 'auto'
|
|
32
|
-
};
|
|
33
|
-
function reasoningApiFor(modelId) {
|
|
34
|
-
if (EFFORT_REASONING.test(modelId)) {
|
|
35
|
-
return 'effort';
|
|
36
|
-
}
|
|
37
|
-
if (BUDGET_REASONING.test(modelId)) {
|
|
38
|
-
return 'budget';
|
|
39
|
-
}
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
25
|
let GoogleFrontendApplicationContribution = class GoogleFrontendApplicationContribution {
|
|
43
26
|
constructor() {
|
|
44
27
|
this.prevModels = [];
|
|
@@ -74,9 +57,6 @@ let GoogleFrontendApplicationContribution = class GoogleFrontendApplicationContr
|
|
|
74
57
|
});
|
|
75
58
|
});
|
|
76
59
|
}
|
|
77
|
-
/**
|
|
78
|
-
* Called when the API key changes. Updates all Google models on the manager to ensure the new key is used.
|
|
79
|
-
*/
|
|
80
60
|
handleKeyChange(newApiKey) {
|
|
81
61
|
if (this.prevModels && this.prevModels.length > 0) {
|
|
82
62
|
this.manager.createOrUpdateLanguageModels(...this.prevModels.map(modelId => this.createGeminiModelDescription(modelId)));
|
|
@@ -91,18 +71,15 @@ let GoogleFrontendApplicationContribution = class GoogleFrontendApplicationContr
|
|
|
91
71
|
this.manager.createOrUpdateLanguageModels(...modelsToAdd.map(modelId => this.createGeminiModelDescription(modelId)));
|
|
92
72
|
this.prevModels = newModels;
|
|
93
73
|
}
|
|
74
|
+
/** Reasoning capabilities are resolved by the backend from the Gemini /v1beta/models response. */
|
|
94
75
|
createGeminiModelDescription(modelId) {
|
|
95
76
|
const id = `${GOOGLE_PROVIDER_ID}/${modelId}`;
|
|
96
|
-
|
|
97
|
-
const description = {
|
|
77
|
+
return {
|
|
98
78
|
id: id,
|
|
99
79
|
model: modelId,
|
|
100
80
|
apiKey: true,
|
|
101
|
-
enableStreaming: true
|
|
102
|
-
reasoningSupport: reasoningApi ? GEMINI_REASONING_SUPPORT : undefined,
|
|
103
|
-
reasoningApi
|
|
81
|
+
enableStreaming: true
|
|
104
82
|
};
|
|
105
|
-
return description;
|
|
106
83
|
}
|
|
107
84
|
};
|
|
108
85
|
exports.GoogleFrontendApplicationContribution = GoogleFrontendApplicationContribution;
|
|
@@ -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;;;;AAGhF,4DAAkE;
|
|
1
|
+
{"version":3,"file":"google-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/google-frontend-application-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,8 @@ export declare class GoogleModel implements LanguageModel {
|
|
|
16
16
|
retrySettings: () => GoogleLanguageModelRetrySettings;
|
|
17
17
|
reasoningSupport?: ReasoningSupport | undefined;
|
|
18
18
|
reasoningApi?: ReasoningApi | undefined;
|
|
19
|
-
|
|
19
|
+
maxInputTokens?: number | undefined;
|
|
20
|
+
constructor(id: string, model: string, status: LanguageModelStatus, enableStreaming: boolean, apiKey: () => string | undefined, retrySettings: () => GoogleLanguageModelRetrySettings, reasoningSupport?: ReasoningSupport | undefined, reasoningApi?: ReasoningApi | undefined, maxInputTokens?: number | undefined);
|
|
20
21
|
protected getSettings(request: LanguageModelRequest): Readonly<Record<string, unknown>>;
|
|
21
22
|
request(request: UserRequest, cancellationToken?: CancellationToken): Promise<LanguageModelResponse>;
|
|
22
23
|
protected handleStreamingRequest(genAI: GoogleGenAI, request: UserRequest, cancellationToken?: CancellationToken, toolMessages?: Content[]): Promise<LanguageModelStreamResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-language-model.d.ts","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"AAeA,OAAO,EAGH,aAAa,EAEb,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAE3B,yBAAyB,EACzB,YAAY,EACZ,gBAAgB,EAGhB,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAkD,OAAO,EAAwD,MAAM,eAAe,CAAC;AAE3J,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAwFzF,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAgBrE;;;GAGG;AACH,qBAAa,WAAY,YAAW,aAAa;aAGzB,EAAE,EAAE,MAAM;IACnB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,mBAAmB;IAC3B,eAAe,EAAE,OAAO;IACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAChC,aAAa,EAAE,MAAM,gCAAgC;IACrD,gBAAgB,CAAC,EAAE,gBAAgB;IACnC,YAAY,CAAC,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"google-language-model.d.ts","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"AAeA,OAAO,EAGH,aAAa,EAEb,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAE3B,yBAAyB,EACzB,YAAY,EACZ,gBAAgB,EAGhB,WAAW,EACd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAkD,OAAO,EAAwD,MAAM,eAAe,CAAC;AAE3J,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AAwFzF,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAgBrE;;;GAGG;AACH,qBAAa,WAAY,YAAW,aAAa;aAGzB,EAAE,EAAE,MAAM;IACnB,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,mBAAmB;IAC3B,eAAe,EAAE,OAAO;IACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAChC,aAAa,EAAE,MAAM,gCAAgC;IACrD,gBAAgB,CAAC,EAAE,gBAAgB;IACnC,YAAY,CAAC,EAAE,YAAY;IAC3B,cAAc,CAAC,EAAE,MAAM;gBARd,EAAE,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,mBAAmB,EAC3B,eAAe,EAAE,OAAO,EACxB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS,EAChC,aAAa,EAAE,MAAM,gCAAgC,EACrD,gBAAgB,CAAC,EAAE,gBAAgB,YAAA,EACnC,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,cAAc,CAAC,EAAE,MAAM,YAAA;IAGlC,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAOjF,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;IAuNvC,OAAO,CAAC,0BAA0B;cAYlB,yBAAyB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,yBAAyB,CAAC;IAkDrC,SAAS,CAAC,gBAAgB,IAAI,WAAW;IAUzC;;;;;OAKG;YACW,SAAS;CAqC1B"}
|
|
@@ -115,7 +115,7 @@ function toGoogleRole(message) {
|
|
|
115
115
|
* translation lives in {@link googleReasoningFor}.
|
|
116
116
|
*/
|
|
117
117
|
class GoogleModel {
|
|
118
|
-
constructor(id, model, status, enableStreaming, apiKey, retrySettings, reasoningSupport, reasoningApi) {
|
|
118
|
+
constructor(id, model, status, enableStreaming, apiKey, retrySettings, reasoningSupport, reasoningApi, maxInputTokens) {
|
|
119
119
|
this.id = id;
|
|
120
120
|
this.model = model;
|
|
121
121
|
this.status = status;
|
|
@@ -124,6 +124,7 @@ class GoogleModel {
|
|
|
124
124
|
this.retrySettings = retrySettings;
|
|
125
125
|
this.reasoningSupport = reasoningSupport;
|
|
126
126
|
this.reasoningApi = reasoningApi;
|
|
127
|
+
this.maxInputTokens = maxInputTokens;
|
|
127
128
|
}
|
|
128
129
|
getSettings(request) {
|
|
129
130
|
return {
|
|
@@ -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,21 +1,41 @@
|
|
|
1
|
-
import { LanguageModelRegistry, LanguageModelStatus } from '@theia/ai-core';
|
|
1
|
+
import { LanguageModelRegistry, LanguageModelStatus, ReasoningApi, ReasoningSupport } from '@theia/ai-core';
|
|
2
|
+
import { Model } from '@google/genai';
|
|
2
3
|
import { GoogleLanguageModelsManager, GoogleModelDescription } from '../common';
|
|
3
4
|
export interface GoogleLanguageModelRetrySettings {
|
|
4
5
|
maxRetriesOnErrors: number;
|
|
5
6
|
retryDelayOnRateLimitError: number;
|
|
6
7
|
retryDelayOnOtherErrors: number;
|
|
7
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Maps a Gemini model id to its reasoning API shape (Gemini 3 → `effort`, Gemini 2.5 → `budget`).
|
|
11
|
+
* Inferred from the id because /v1beta/models only exposes a single `thinking` boolean.
|
|
12
|
+
*/
|
|
13
|
+
export declare function reasoningApiFromModelId(modelId: string): ReasoningApi | undefined;
|
|
14
|
+
interface ResolvedModelMetadata {
|
|
15
|
+
maxInputTokens?: number;
|
|
16
|
+
reasoningSupport?: ReasoningSupport;
|
|
17
|
+
reasoningApi?: ReasoningApi;
|
|
18
|
+
}
|
|
8
19
|
export declare class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsManager {
|
|
9
20
|
protected _apiKey: string | undefined;
|
|
10
21
|
protected retrySettings: GoogleLanguageModelRetrySettings;
|
|
22
|
+
protected readonly modelInfoCache: Map<string, Promise<Model>>;
|
|
11
23
|
protected readonly languageModelRegistry: LanguageModelRegistry;
|
|
12
24
|
get apiKey(): string | undefined;
|
|
13
25
|
protected calculateStatus(effectiveApiKey: string | undefined): LanguageModelStatus;
|
|
14
26
|
createOrUpdateLanguageModels(...modelDescriptions: GoogleModelDescription[]): Promise<void>;
|
|
27
|
+
protected createOrUpdateLanguageModel(modelDescription: GoogleModelDescription): Promise<void>;
|
|
28
|
+
/** Description overrides win over the values derived from /v1beta/models. */
|
|
29
|
+
protected resolveMetadata(description: GoogleModelDescription, apiKey: string | undefined): Promise<ResolvedModelMetadata>;
|
|
30
|
+
protected fetchModelInfo(modelDescription: GoogleModelDescription, apiKey: string | undefined): Promise<Model | undefined>;
|
|
31
|
+
protected retrieveModelInfo(modelDescription: GoogleModelDescription, apiKey: string): Promise<Model>;
|
|
32
|
+
/** API `thinking=false` disables reasoning even when the model id suggests support. */
|
|
33
|
+
protected deriveReasoningApi(modelId: string, info: Model | undefined): ReasoningApi | undefined;
|
|
15
34
|
removeLanguageModels(...modelIds: string[]): void;
|
|
16
35
|
setApiKey(apiKey: string | undefined): void;
|
|
17
36
|
setMaxRetriesOnErrors(maxRetries: number): void;
|
|
18
37
|
setRetryDelayOnRateLimitError(retryDelay: number): void;
|
|
19
38
|
setRetryDelayOnOtherErrors(retryDelay: number): void;
|
|
20
39
|
}
|
|
40
|
+
export {};
|
|
21
41
|
//# 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,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;
|
|
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,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE5G,OAAO,EAAe,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD,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;AAOD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAQjF;AAED,UAAU,qBAAqB;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC/B;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,cAAc,8BAAqC;IAGtE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAEhE,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAE/B;IAED,SAAS,CAAC,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB;IAM7E,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;cAIjF,2BAA2B,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDpG,6EAA6E;cAC7D,eAAe,CAAC,WAAW,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAAC;cAUhH,cAAc,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAqBhI,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAKrG,uFAAuF;IACvF,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS;IAOhG,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"}
|
|
@@ -16,10 +16,29 @@
|
|
|
16
16
|
// *****************************************************************************
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.GoogleLanguageModelsManagerImpl = void 0;
|
|
19
|
+
exports.reasoningApiFromModelId = reasoningApiFromModelId;
|
|
19
20
|
const tslib_1 = require("tslib");
|
|
20
21
|
const ai_core_1 = require("@theia/ai-core");
|
|
21
22
|
const inversify_1 = require("@theia/core/shared/inversify");
|
|
23
|
+
const genai_1 = require("@google/genai");
|
|
22
24
|
const google_language_model_1 = require("./google-language-model");
|
|
25
|
+
const GEMINI_REASONING_SUPPORT = {
|
|
26
|
+
supportedLevels: ['off', 'minimal', 'low', 'medium', 'high', 'auto'],
|
|
27
|
+
defaultLevel: 'auto'
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Maps a Gemini model id to its reasoning API shape (Gemini 3 → `effort`, Gemini 2.5 → `budget`).
|
|
31
|
+
* Inferred from the id because /v1beta/models only exposes a single `thinking` boolean.
|
|
32
|
+
*/
|
|
33
|
+
function reasoningApiFromModelId(modelId) {
|
|
34
|
+
if (/^gemini-3(?:\.|-)/i.test(modelId)) {
|
|
35
|
+
return 'effort';
|
|
36
|
+
}
|
|
37
|
+
if (/^gemini-2\.5(?:-|$)/i.test(modelId)) {
|
|
38
|
+
return 'budget';
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
23
42
|
let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
|
|
24
43
|
constructor() {
|
|
25
44
|
this.retrySettings = {
|
|
@@ -27,6 +46,9 @@ let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
|
|
|
27
46
|
retryDelayOnRateLimitError: 60,
|
|
28
47
|
retryDelayOnOtherErrors: -1
|
|
29
48
|
};
|
|
49
|
+
// Cached `/v1beta/models` lookups keyed by model id. Successful lookups are kept for the process lifetime;
|
|
50
|
+
// failed lookups are evicted so the next call retries.
|
|
51
|
+
this.modelInfoCache = new Map();
|
|
30
52
|
}
|
|
31
53
|
get apiKey() {
|
|
32
54
|
return this._apiKey ?? process.env.GOOGLE_API_KEY ?? process.env.GEMINI_API_KEY;
|
|
@@ -37,41 +59,85 @@ let GoogleLanguageModelsManagerImpl = class GoogleLanguageModelsManagerImpl {
|
|
|
37
59
|
: { status: 'unavailable', message: 'No Google API key set' };
|
|
38
60
|
}
|
|
39
61
|
async createOrUpdateLanguageModels(...modelDescriptions) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return modelDescription.apiKey;
|
|
48
|
-
}
|
|
49
|
-
return undefined;
|
|
50
|
-
};
|
|
51
|
-
const retrySettingsProvider = () => this.retrySettings;
|
|
52
|
-
// Determine the effective API key for status
|
|
53
|
-
const status = this.calculateStatus(apiKeyProvider());
|
|
54
|
-
if (model) {
|
|
55
|
-
if (!(model instanceof google_language_model_1.GoogleModel)) {
|
|
56
|
-
console.warn(`Gemini: model ${modelDescription.id} is not a Gemini model`);
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
await this.languageModelRegistry.patchLanguageModel(modelDescription.id, {
|
|
60
|
-
model: modelDescription.model,
|
|
61
|
-
enableStreaming: modelDescription.enableStreaming,
|
|
62
|
-
apiKey: apiKeyProvider,
|
|
63
|
-
retrySettings: retrySettingsProvider,
|
|
64
|
-
status,
|
|
65
|
-
reasoningSupport: modelDescription.reasoningSupport,
|
|
66
|
-
reasoningApi: modelDescription.reasoningApi
|
|
67
|
-
});
|
|
62
|
+
await Promise.all(modelDescriptions.map(description => this.createOrUpdateLanguageModel(description)));
|
|
63
|
+
}
|
|
64
|
+
async createOrUpdateLanguageModel(modelDescription) {
|
|
65
|
+
const model = await this.languageModelRegistry.getLanguageModel(modelDescription.id);
|
|
66
|
+
const apiKeyProvider = () => {
|
|
67
|
+
if (modelDescription.apiKey === true) {
|
|
68
|
+
return this.apiKey;
|
|
68
69
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
new google_language_model_1.GoogleModel(modelDescription.id, modelDescription.model, status, modelDescription.enableStreaming, apiKeyProvider, retrySettingsProvider, modelDescription.reasoningSupport, modelDescription.reasoningApi)
|
|
72
|
-
]);
|
|
70
|
+
if (modelDescription.apiKey) {
|
|
71
|
+
return modelDescription.apiKey;
|
|
73
72
|
}
|
|
73
|
+
return undefined;
|
|
74
|
+
};
|
|
75
|
+
const retrySettingsProvider = () => this.retrySettings;
|
|
76
|
+
const apiKey = apiKeyProvider();
|
|
77
|
+
const status = this.calculateStatus(apiKey);
|
|
78
|
+
const metadata = await this.resolveMetadata(modelDescription, apiKey);
|
|
79
|
+
if (model) {
|
|
80
|
+
if (!(model instanceof google_language_model_1.GoogleModel)) {
|
|
81
|
+
console.warn(`Gemini: model ${modelDescription.id} is not a Gemini model`);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
await this.languageModelRegistry.patchLanguageModel(modelDescription.id, {
|
|
85
|
+
model: modelDescription.model,
|
|
86
|
+
enableStreaming: modelDescription.enableStreaming,
|
|
87
|
+
apiKey: apiKeyProvider,
|
|
88
|
+
retrySettings: retrySettingsProvider,
|
|
89
|
+
status,
|
|
90
|
+
reasoningSupport: metadata.reasoningSupport,
|
|
91
|
+
reasoningApi: metadata.reasoningApi,
|
|
92
|
+
maxInputTokens: metadata.maxInputTokens
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
this.languageModelRegistry.addLanguageModels([
|
|
97
|
+
new google_language_model_1.GoogleModel(modelDescription.id, modelDescription.model, status, modelDescription.enableStreaming, apiKeyProvider, retrySettingsProvider, metadata.reasoningSupport, metadata.reasoningApi, metadata.maxInputTokens)
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/** Description overrides win over the values derived from /v1beta/models. */
|
|
102
|
+
async resolveMetadata(description, apiKey) {
|
|
103
|
+
const info = await this.fetchModelInfo(description, apiKey);
|
|
104
|
+
const reasoningApi = description.reasoningApi ?? this.deriveReasoningApi(description.model, info);
|
|
105
|
+
return {
|
|
106
|
+
maxInputTokens: info?.inputTokenLimit,
|
|
107
|
+
reasoningSupport: description.reasoningSupport ?? (reasoningApi ? GEMINI_REASONING_SUPPORT : undefined),
|
|
108
|
+
reasoningApi
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async fetchModelInfo(modelDescription, apiKey) {
|
|
112
|
+
if (!apiKey) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
const cacheKey = modelDescription.model;
|
|
116
|
+
const cached = this.modelInfoCache.get(cacheKey);
|
|
117
|
+
if (cached) {
|
|
118
|
+
return cached;
|
|
119
|
+
}
|
|
120
|
+
const fetchPromise = this.retrieveModelInfo(modelDescription, apiKey);
|
|
121
|
+
this.modelInfoCache.set(cacheKey, fetchPromise);
|
|
122
|
+
try {
|
|
123
|
+
return await fetchPromise;
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
this.modelInfoCache.delete(cacheKey);
|
|
127
|
+
console.warn(`Gemini: failed to retrieve model info for '${modelDescription.id}':`, error instanceof Error ? error.message : error);
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
retrieveModelInfo(modelDescription, apiKey) {
|
|
132
|
+
const genAI = new genai_1.GoogleGenAI({ apiKey, vertexai: false });
|
|
133
|
+
return genAI.models.get({ model: modelDescription.model });
|
|
134
|
+
}
|
|
135
|
+
/** API `thinking=false` disables reasoning even when the model id suggests support. */
|
|
136
|
+
deriveReasoningApi(modelId, info) {
|
|
137
|
+
if (info?.thinking === false) {
|
|
138
|
+
return undefined;
|
|
74
139
|
}
|
|
140
|
+
return reasoningApiFromModelId(modelId);
|
|
75
141
|
}
|
|
76
142
|
removeLanguageModels(...modelIds) {
|
|
77
143
|
this.languageModelRegistry.removeLanguageModels(modelIds);
|
|
@@ -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
|
|
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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-language-models-manager-impl.spec.d.ts","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// *****************************************************************************
|
|
3
|
+
// Copyright (C) 2026 EclipseSource GmbH.
|
|
4
|
+
//
|
|
5
|
+
// This program and the accompanying materials are made available under the
|
|
6
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
7
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
8
|
+
//
|
|
9
|
+
// This Source Code may also be made available under the following Secondary
|
|
10
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
11
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
12
|
+
// with the GNU Classpath Exception which is available at
|
|
13
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
14
|
+
//
|
|
15
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
const chai_1 = require("chai");
|
|
19
|
+
const google_language_models_manager_impl_1 = require("./google-language-models-manager-impl");
|
|
20
|
+
class TestableGoogleManager extends google_language_models_manager_impl_1.GoogleLanguageModelsManagerImpl {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(...arguments);
|
|
23
|
+
this.retrieveCalls = [];
|
|
24
|
+
}
|
|
25
|
+
callDeriveReasoningApi(modelId, info) {
|
|
26
|
+
return this.deriveReasoningApi(modelId, info);
|
|
27
|
+
}
|
|
28
|
+
callFetchModelInfo(desc, apiKey) {
|
|
29
|
+
return this.fetchModelInfo(desc, apiKey);
|
|
30
|
+
}
|
|
31
|
+
async retrieveModelInfo(modelDescription, _apiKey) {
|
|
32
|
+
this.retrieveCalls.push(modelDescription.model);
|
|
33
|
+
if (this.stubbedInfo instanceof Error) {
|
|
34
|
+
throw this.stubbedInfo;
|
|
35
|
+
}
|
|
36
|
+
if (!this.stubbedInfo) {
|
|
37
|
+
throw new Error('No stub configured');
|
|
38
|
+
}
|
|
39
|
+
return this.stubbedInfo;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function description(model) {
|
|
43
|
+
return {
|
|
44
|
+
id: `google/${model}`,
|
|
45
|
+
model,
|
|
46
|
+
apiKey: true,
|
|
47
|
+
enableStreaming: true
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
describe('reasoningApiFromModelId', () => {
|
|
51
|
+
it('maps Gemini 3 family ids to "effort"', () => {
|
|
52
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-3-pro')).to.equal('effort');
|
|
53
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-3.0-pro')).to.equal('effort');
|
|
54
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-3-flash')).to.equal('effort');
|
|
55
|
+
});
|
|
56
|
+
it('maps Gemini 2.5 family ids to "budget"', () => {
|
|
57
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-2.5-pro')).to.equal('budget');
|
|
58
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-2.5-flash')).to.equal('budget');
|
|
59
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-2.5')).to.equal('budget');
|
|
60
|
+
});
|
|
61
|
+
it('returns undefined for non-reasoning families', () => {
|
|
62
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-1.5-pro')).to.equal(undefined);
|
|
63
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-2.0-flash')).to.equal(undefined);
|
|
64
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-pro')).to.equal(undefined);
|
|
65
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('text-bison')).to.equal(undefined);
|
|
66
|
+
});
|
|
67
|
+
it('does not match prefixes that only happen to start with gemini-2 or gemini-3', () => {
|
|
68
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-30-foo')).to.equal(undefined);
|
|
69
|
+
(0, chai_1.expect)((0, google_language_models_manager_impl_1.reasoningApiFromModelId)('gemini-2.55')).to.equal(undefined);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
describe('GoogleLanguageModelsManagerImpl - deriveReasoningApi', () => {
|
|
73
|
+
let manager;
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
manager = new TestableGoogleManager();
|
|
76
|
+
});
|
|
77
|
+
it('falls back to the model-id heuristic when info is missing', () => {
|
|
78
|
+
(0, chai_1.expect)(manager.callDeriveReasoningApi('gemini-3-pro', undefined)).to.equal('effort');
|
|
79
|
+
(0, chai_1.expect)(manager.callDeriveReasoningApi('gemini-2.5-pro', undefined)).to.equal('budget');
|
|
80
|
+
(0, chai_1.expect)(manager.callDeriveReasoningApi('gemini-1.5-pro', undefined)).to.equal(undefined);
|
|
81
|
+
});
|
|
82
|
+
it('uses the model-id heuristic when the API does not report thinking', () => {
|
|
83
|
+
const info = { thinking: undefined };
|
|
84
|
+
(0, chai_1.expect)(manager.callDeriveReasoningApi('gemini-3-pro', info)).to.equal('effort');
|
|
85
|
+
});
|
|
86
|
+
it('respects an explicit thinking=true from the API', () => {
|
|
87
|
+
const info = { thinking: true };
|
|
88
|
+
(0, chai_1.expect)(manager.callDeriveReasoningApi('gemini-2.5-pro', info)).to.equal('budget');
|
|
89
|
+
});
|
|
90
|
+
it('disables reasoning when the API explicitly reports thinking=false (overrides the model-id heuristic)', () => {
|
|
91
|
+
const info = { thinking: false };
|
|
92
|
+
(0, chai_1.expect)(manager.callDeriveReasoningApi('gemini-3-pro', info)).to.equal(undefined);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe('GoogleLanguageModelsManagerImpl - fetchModelInfo cache', () => {
|
|
96
|
+
let manager;
|
|
97
|
+
beforeEach(() => {
|
|
98
|
+
manager = new TestableGoogleManager();
|
|
99
|
+
});
|
|
100
|
+
it('returns undefined and skips the network when no API key is provided', async () => {
|
|
101
|
+
manager.stubbedInfo = { thinking: true };
|
|
102
|
+
const result = await manager.callFetchModelInfo(description('gemini-3-pro'), undefined);
|
|
103
|
+
(0, chai_1.expect)(result).to.equal(undefined);
|
|
104
|
+
(0, chai_1.expect)(manager.retrieveCalls).to.deep.equal([]);
|
|
105
|
+
});
|
|
106
|
+
it('fetches once per model and reuses the cached result', async () => {
|
|
107
|
+
manager.stubbedInfo = { thinking: true };
|
|
108
|
+
const desc = description('gemini-3-pro');
|
|
109
|
+
const first = await manager.callFetchModelInfo(desc, 'key');
|
|
110
|
+
const second = await manager.callFetchModelInfo(desc, 'key');
|
|
111
|
+
(0, chai_1.expect)(first).to.equal(manager.stubbedInfo);
|
|
112
|
+
(0, chai_1.expect)(second).to.equal(manager.stubbedInfo);
|
|
113
|
+
(0, chai_1.expect)(manager.retrieveCalls).to.deep.equal(['gemini-3-pro']);
|
|
114
|
+
});
|
|
115
|
+
it('keys the cache by model id', async () => {
|
|
116
|
+
manager.stubbedInfo = { thinking: true };
|
|
117
|
+
await manager.callFetchModelInfo(description('gemini-3-pro'), 'key');
|
|
118
|
+
await manager.callFetchModelInfo(description('gemini-2.5-pro'), 'key');
|
|
119
|
+
(0, chai_1.expect)(manager.retrieveCalls).to.deep.equal(['gemini-3-pro', 'gemini-2.5-pro']);
|
|
120
|
+
});
|
|
121
|
+
it('does not cache failures (next call retries)', async () => {
|
|
122
|
+
manager.stubbedInfo = new Error('boom');
|
|
123
|
+
const desc = description('gemini-3-pro');
|
|
124
|
+
const first = await manager.callFetchModelInfo(desc, 'key');
|
|
125
|
+
(0, chai_1.expect)(first).to.equal(undefined);
|
|
126
|
+
manager.stubbedInfo = { thinking: true };
|
|
127
|
+
const second = await manager.callFetchModelInfo(desc, 'key');
|
|
128
|
+
(0, chai_1.expect)(second).to.equal(manager.stubbedInfo);
|
|
129
|
+
(0, chai_1.expect)(manager.retrieveCalls).to.deep.equal(['gemini-3-pro', 'gemini-3-pro']);
|
|
130
|
+
});
|
|
131
|
+
it('shares an in-flight fetch between concurrent callers', async () => {
|
|
132
|
+
let resolve = () => undefined;
|
|
133
|
+
const pending = new Promise(r => { resolve = r; });
|
|
134
|
+
manager
|
|
135
|
+
.retrieveModelInfo = (modelDescription) => {
|
|
136
|
+
manager.retrieveCalls.push(modelDescription.model);
|
|
137
|
+
return pending;
|
|
138
|
+
};
|
|
139
|
+
const desc = description('gemini-3-pro');
|
|
140
|
+
const p1 = manager.callFetchModelInfo(desc, 'key');
|
|
141
|
+
const p2 = manager.callFetchModelInfo(desc, 'key');
|
|
142
|
+
const expectedInfo = { thinking: true };
|
|
143
|
+
resolve(expectedInfo);
|
|
144
|
+
const [r1, r2] = await Promise.all([p1, p2]);
|
|
145
|
+
(0, chai_1.expect)(r1).to.equal(expectedInfo);
|
|
146
|
+
(0, chai_1.expect)(r2).to.equal(expectedInfo);
|
|
147
|
+
(0, chai_1.expect)(manager.retrieveCalls).to.deep.equal(['gemini-3-pro']);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=google-language-models-manager-impl.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-language-models-manager-impl.spec.js","sourceRoot":"","sources":["../../src/node/google-language-models-manager-impl.spec.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.72.0-next.
|
|
3
|
+
"version": "1.72.0-next.59+044f7bfc5",
|
|
4
4
|
"description": "Theia - Google AI Integration",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@google/genai": "^1.51.0",
|
|
7
|
-
"@theia/ai-core": "1.72.0-next.
|
|
8
|
-
"@theia/core": "1.72.0-next.
|
|
7
|
+
"@theia/ai-core": "1.72.0-next.59+044f7bfc5",
|
|
8
|
+
"@theia/core": "1.72.0-next.59+044f7bfc5"
|
|
9
9
|
},
|
|
10
10
|
"publishConfig": {
|
|
11
11
|
"access": "public"
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"nyc": {
|
|
50
50
|
"extends": "../../configs/nyc.json"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "044f7bfc503932372f324434beabbf5422dc583f"
|
|
53
53
|
}
|
|
@@ -16,33 +16,12 @@
|
|
|
16
16
|
|
|
17
17
|
import { FrontendApplicationContribution } from '@theia/core/lib/browser';
|
|
18
18
|
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
19
|
-
import { ReasoningApi, ReasoningSupport } from '@theia/ai-core';
|
|
20
19
|
import { GoogleLanguageModelsManager, GoogleModelDescription } from '../common';
|
|
21
20
|
import { API_KEY_PREF, MODELS_PREF, MAX_RETRIES, RETRY_DELAY_OTHER_ERRORS, RETRY_DELAY_RATE_LIMIT } from '../common/google-preferences';
|
|
22
21
|
import { PreferenceService } from '@theia/core';
|
|
23
22
|
|
|
24
23
|
const GOOGLE_PROVIDER_ID = 'google';
|
|
25
24
|
|
|
26
|
-
/** Gemini 3 uses `thinkingConfig.thinkingLevel`. */
|
|
27
|
-
const EFFORT_REASONING = /^gemini-3(?:\.|-)/i;
|
|
28
|
-
/** Gemini 2.5 uses `thinkingConfig.thinkingBudget` (integer; `-1` dynamic, `0` off). */
|
|
29
|
-
const BUDGET_REASONING = /^gemini-2\.5(?:-|$)/i;
|
|
30
|
-
|
|
31
|
-
const GEMINI_REASONING_SUPPORT: ReasoningSupport = {
|
|
32
|
-
supportedLevels: ['off', 'minimal', 'low', 'medium', 'high', 'auto'],
|
|
33
|
-
defaultLevel: 'auto'
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
function reasoningApiFor(modelId: string): ReasoningApi | undefined {
|
|
37
|
-
if (EFFORT_REASONING.test(modelId)) {
|
|
38
|
-
return 'effort';
|
|
39
|
-
}
|
|
40
|
-
if (BUDGET_REASONING.test(modelId)) {
|
|
41
|
-
return 'budget';
|
|
42
|
-
}
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
25
|
@injectable()
|
|
47
26
|
export class GoogleFrontendApplicationContribution implements FrontendApplicationContribution {
|
|
48
27
|
|
|
@@ -85,9 +64,6 @@ export class GoogleFrontendApplicationContribution implements FrontendApplicatio
|
|
|
85
64
|
});
|
|
86
65
|
}
|
|
87
66
|
|
|
88
|
-
/**
|
|
89
|
-
* Called when the API key changes. Updates all Google models on the manager to ensure the new key is used.
|
|
90
|
-
*/
|
|
91
67
|
protected handleKeyChange(newApiKey: string | undefined): void {
|
|
92
68
|
if (this.prevModels && this.prevModels.length > 0) {
|
|
93
69
|
this.manager.createOrUpdateLanguageModels(...this.prevModels.map(modelId => this.createGeminiModelDescription(modelId)));
|
|
@@ -106,19 +82,14 @@ export class GoogleFrontendApplicationContribution implements FrontendApplicatio
|
|
|
106
82
|
this.prevModels = newModels;
|
|
107
83
|
}
|
|
108
84
|
|
|
85
|
+
/** Reasoning capabilities are resolved by the backend from the Gemini /v1beta/models response. */
|
|
109
86
|
protected createGeminiModelDescription(modelId: string): GoogleModelDescription {
|
|
110
87
|
const id = `${GOOGLE_PROVIDER_ID}/${modelId}`;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
const description: GoogleModelDescription = {
|
|
88
|
+
return {
|
|
114
89
|
id: id,
|
|
115
90
|
model: modelId,
|
|
116
91
|
apiKey: true,
|
|
117
|
-
enableStreaming: true
|
|
118
|
-
reasoningSupport: reasoningApi ? GEMINI_REASONING_SUPPORT : undefined,
|
|
119
|
-
reasoningApi
|
|
92
|
+
enableStreaming: true
|
|
120
93
|
};
|
|
121
|
-
|
|
122
|
-
return description;
|
|
123
94
|
}
|
|
124
95
|
}
|
|
@@ -151,7 +151,8 @@ export class GoogleModel implements LanguageModel {
|
|
|
151
151
|
public apiKey: () => string | undefined,
|
|
152
152
|
public retrySettings: () => GoogleLanguageModelRetrySettings,
|
|
153
153
|
public reasoningSupport?: ReasoningSupport,
|
|
154
|
-
public reasoningApi?: ReasoningApi
|
|
154
|
+
public reasoningApi?: ReasoningApi,
|
|
155
|
+
public maxInputTokens?: number
|
|
155
156
|
) { }
|
|
156
157
|
|
|
157
158
|
protected getSettings(request: LanguageModelRequest): Readonly<Record<string, unknown>> {
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
// *****************************************************************************
|
|
2
|
+
// Copyright (C) 2026 EclipseSource GmbH.
|
|
3
|
+
//
|
|
4
|
+
// This program and the accompanying materials are made available under the
|
|
5
|
+
// terms of the Eclipse Public License v. 2.0 which is available at
|
|
6
|
+
// http://www.eclipse.org/legal/epl-2.0.
|
|
7
|
+
//
|
|
8
|
+
// This Source Code may also be made available under the following Secondary
|
|
9
|
+
// Licenses when the conditions for such availability set forth in the Eclipse
|
|
10
|
+
// Public License v. 2.0 are satisfied: GNU General Public License, version 2
|
|
11
|
+
// with the GNU Classpath Exception which is available at
|
|
12
|
+
// https://www.gnu.org/software/classpath/license.html.
|
|
13
|
+
//
|
|
14
|
+
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
|
+
// *****************************************************************************
|
|
16
|
+
|
|
17
|
+
import { expect } from 'chai';
|
|
18
|
+
import type { Model } from '@google/genai';
|
|
19
|
+
import { ReasoningApi } from '@theia/ai-core';
|
|
20
|
+
import { GoogleLanguageModelsManagerImpl, reasoningApiFromModelId } from './google-language-models-manager-impl';
|
|
21
|
+
import { GoogleModelDescription } from '../common';
|
|
22
|
+
|
|
23
|
+
class TestableGoogleManager extends GoogleLanguageModelsManagerImpl {
|
|
24
|
+
public retrieveCalls: string[] = [];
|
|
25
|
+
public stubbedInfo: Model | Error | undefined;
|
|
26
|
+
|
|
27
|
+
public callDeriveReasoningApi(modelId: string, info: Model | undefined): ReasoningApi | undefined {
|
|
28
|
+
return this.deriveReasoningApi(modelId, info);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public callFetchModelInfo(
|
|
32
|
+
desc: GoogleModelDescription,
|
|
33
|
+
apiKey: string | undefined
|
|
34
|
+
): Promise<Model | undefined> {
|
|
35
|
+
return this.fetchModelInfo(desc, apiKey);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
protected override async retrieveModelInfo(modelDescription: GoogleModelDescription, _apiKey: string): Promise<Model> {
|
|
39
|
+
this.retrieveCalls.push(modelDescription.model);
|
|
40
|
+
if (this.stubbedInfo instanceof Error) {
|
|
41
|
+
throw this.stubbedInfo;
|
|
42
|
+
}
|
|
43
|
+
if (!this.stubbedInfo) {
|
|
44
|
+
throw new Error('No stub configured');
|
|
45
|
+
}
|
|
46
|
+
return this.stubbedInfo;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function description(model: string): GoogleModelDescription {
|
|
51
|
+
return {
|
|
52
|
+
id: `google/${model}`,
|
|
53
|
+
model,
|
|
54
|
+
apiKey: true,
|
|
55
|
+
enableStreaming: true
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
describe('reasoningApiFromModelId', () => {
|
|
60
|
+
it('maps Gemini 3 family ids to "effort"', () => {
|
|
61
|
+
expect(reasoningApiFromModelId('gemini-3-pro')).to.equal('effort');
|
|
62
|
+
expect(reasoningApiFromModelId('gemini-3.0-pro')).to.equal('effort');
|
|
63
|
+
expect(reasoningApiFromModelId('gemini-3-flash')).to.equal('effort');
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('maps Gemini 2.5 family ids to "budget"', () => {
|
|
67
|
+
expect(reasoningApiFromModelId('gemini-2.5-pro')).to.equal('budget');
|
|
68
|
+
expect(reasoningApiFromModelId('gemini-2.5-flash')).to.equal('budget');
|
|
69
|
+
expect(reasoningApiFromModelId('gemini-2.5')).to.equal('budget');
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('returns undefined for non-reasoning families', () => {
|
|
73
|
+
expect(reasoningApiFromModelId('gemini-1.5-pro')).to.equal(undefined);
|
|
74
|
+
expect(reasoningApiFromModelId('gemini-2.0-flash')).to.equal(undefined);
|
|
75
|
+
expect(reasoningApiFromModelId('gemini-pro')).to.equal(undefined);
|
|
76
|
+
expect(reasoningApiFromModelId('text-bison')).to.equal(undefined);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('does not match prefixes that only happen to start with gemini-2 or gemini-3', () => {
|
|
80
|
+
expect(reasoningApiFromModelId('gemini-30-foo')).to.equal(undefined);
|
|
81
|
+
expect(reasoningApiFromModelId('gemini-2.55')).to.equal(undefined);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
describe('GoogleLanguageModelsManagerImpl - deriveReasoningApi', () => {
|
|
86
|
+
let manager: TestableGoogleManager;
|
|
87
|
+
|
|
88
|
+
beforeEach(() => {
|
|
89
|
+
manager = new TestableGoogleManager();
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('falls back to the model-id heuristic when info is missing', () => {
|
|
93
|
+
expect(manager.callDeriveReasoningApi('gemini-3-pro', undefined)).to.equal('effort');
|
|
94
|
+
expect(manager.callDeriveReasoningApi('gemini-2.5-pro', undefined)).to.equal('budget');
|
|
95
|
+
expect(manager.callDeriveReasoningApi('gemini-1.5-pro', undefined)).to.equal(undefined);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('uses the model-id heuristic when the API does not report thinking', () => {
|
|
99
|
+
const info = { thinking: undefined } as unknown as Model;
|
|
100
|
+
expect(manager.callDeriveReasoningApi('gemini-3-pro', info)).to.equal('effort');
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('respects an explicit thinking=true from the API', () => {
|
|
104
|
+
const info = { thinking: true } as unknown as Model;
|
|
105
|
+
expect(manager.callDeriveReasoningApi('gemini-2.5-pro', info)).to.equal('budget');
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
it('disables reasoning when the API explicitly reports thinking=false (overrides the model-id heuristic)', () => {
|
|
109
|
+
const info = { thinking: false } as unknown as Model;
|
|
110
|
+
expect(manager.callDeriveReasoningApi('gemini-3-pro', info)).to.equal(undefined);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
describe('GoogleLanguageModelsManagerImpl - fetchModelInfo cache', () => {
|
|
115
|
+
let manager: TestableGoogleManager;
|
|
116
|
+
|
|
117
|
+
beforeEach(() => {
|
|
118
|
+
manager = new TestableGoogleManager();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it('returns undefined and skips the network when no API key is provided', async () => {
|
|
122
|
+
manager.stubbedInfo = { thinking: true } as unknown as Model;
|
|
123
|
+
const result = await manager.callFetchModelInfo(description('gemini-3-pro'), undefined);
|
|
124
|
+
expect(result).to.equal(undefined);
|
|
125
|
+
expect(manager.retrieveCalls).to.deep.equal([]);
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
it('fetches once per model and reuses the cached result', async () => {
|
|
129
|
+
manager.stubbedInfo = { thinking: true } as unknown as Model;
|
|
130
|
+
const desc = description('gemini-3-pro');
|
|
131
|
+
|
|
132
|
+
const first = await manager.callFetchModelInfo(desc, 'key');
|
|
133
|
+
const second = await manager.callFetchModelInfo(desc, 'key');
|
|
134
|
+
|
|
135
|
+
expect(first).to.equal(manager.stubbedInfo);
|
|
136
|
+
expect(second).to.equal(manager.stubbedInfo);
|
|
137
|
+
expect(manager.retrieveCalls).to.deep.equal(['gemini-3-pro']);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('keys the cache by model id', async () => {
|
|
141
|
+
manager.stubbedInfo = { thinking: true } as unknown as Model;
|
|
142
|
+
|
|
143
|
+
await manager.callFetchModelInfo(description('gemini-3-pro'), 'key');
|
|
144
|
+
await manager.callFetchModelInfo(description('gemini-2.5-pro'), 'key');
|
|
145
|
+
|
|
146
|
+
expect(manager.retrieveCalls).to.deep.equal(['gemini-3-pro', 'gemini-2.5-pro']);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
it('does not cache failures (next call retries)', async () => {
|
|
150
|
+
manager.stubbedInfo = new Error('boom');
|
|
151
|
+
const desc = description('gemini-3-pro');
|
|
152
|
+
|
|
153
|
+
const first = await manager.callFetchModelInfo(desc, 'key');
|
|
154
|
+
expect(first).to.equal(undefined);
|
|
155
|
+
|
|
156
|
+
manager.stubbedInfo = { thinking: true } as unknown as Model;
|
|
157
|
+
const second = await manager.callFetchModelInfo(desc, 'key');
|
|
158
|
+
|
|
159
|
+
expect(second).to.equal(manager.stubbedInfo);
|
|
160
|
+
expect(manager.retrieveCalls).to.deep.equal(['gemini-3-pro', 'gemini-3-pro']);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it('shares an in-flight fetch between concurrent callers', async () => {
|
|
164
|
+
let resolve: (info: Model) => void = () => undefined;
|
|
165
|
+
const pending = new Promise<Model>(r => { resolve = r; });
|
|
166
|
+
(manager as unknown as { retrieveModelInfo: (...args: unknown[]) => Promise<Model> })
|
|
167
|
+
.retrieveModelInfo = (modelDescription: GoogleModelDescription) => {
|
|
168
|
+
manager.retrieveCalls.push(modelDescription.model);
|
|
169
|
+
return pending;
|
|
170
|
+
};
|
|
171
|
+
const desc = description('gemini-3-pro');
|
|
172
|
+
|
|
173
|
+
const p1 = manager.callFetchModelInfo(desc, 'key');
|
|
174
|
+
const p2 = manager.callFetchModelInfo(desc, 'key');
|
|
175
|
+
const expectedInfo = { thinking: true } as unknown as Model;
|
|
176
|
+
resolve(expectedInfo);
|
|
177
|
+
|
|
178
|
+
const [r1, r2] = await Promise.all([p1, p2]);
|
|
179
|
+
expect(r1).to.equal(expectedInfo);
|
|
180
|
+
expect(r2).to.equal(expectedInfo);
|
|
181
|
+
expect(manager.retrieveCalls).to.deep.equal(['gemini-3-pro']);
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -14,8 +14,9 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import { LanguageModelRegistry, LanguageModelStatus } from '@theia/ai-core';
|
|
17
|
+
import { LanguageModelRegistry, LanguageModelStatus, ReasoningApi, ReasoningSupport } from '@theia/ai-core';
|
|
18
18
|
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
19
|
+
import { GoogleGenAI, Model } from '@google/genai';
|
|
19
20
|
import { GoogleModel } from './google-language-model';
|
|
20
21
|
import { GoogleLanguageModelsManager, GoogleModelDescription } from '../common';
|
|
21
22
|
|
|
@@ -25,6 +26,31 @@ export interface GoogleLanguageModelRetrySettings {
|
|
|
25
26
|
retryDelayOnOtherErrors: number;
|
|
26
27
|
}
|
|
27
28
|
|
|
29
|
+
const GEMINI_REASONING_SUPPORT: ReasoningSupport = {
|
|
30
|
+
supportedLevels: ['off', 'minimal', 'low', 'medium', 'high', 'auto'],
|
|
31
|
+
defaultLevel: 'auto'
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Maps a Gemini model id to its reasoning API shape (Gemini 3 → `effort`, Gemini 2.5 → `budget`).
|
|
36
|
+
* Inferred from the id because /v1beta/models only exposes a single `thinking` boolean.
|
|
37
|
+
*/
|
|
38
|
+
export function reasoningApiFromModelId(modelId: string): ReasoningApi | undefined {
|
|
39
|
+
if (/^gemini-3(?:\.|-)/i.test(modelId)) {
|
|
40
|
+
return 'effort';
|
|
41
|
+
}
|
|
42
|
+
if (/^gemini-2\.5(?:-|$)/i.test(modelId)) {
|
|
43
|
+
return 'budget';
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
interface ResolvedModelMetadata {
|
|
49
|
+
maxInputTokens?: number;
|
|
50
|
+
reasoningSupport?: ReasoningSupport;
|
|
51
|
+
reasoningApi?: ReasoningApi;
|
|
52
|
+
}
|
|
53
|
+
|
|
28
54
|
@injectable()
|
|
29
55
|
export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsManager {
|
|
30
56
|
protected _apiKey: string | undefined;
|
|
@@ -33,6 +59,9 @@ export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsMana
|
|
|
33
59
|
retryDelayOnRateLimitError: 60,
|
|
34
60
|
retryDelayOnOtherErrors: -1
|
|
35
61
|
};
|
|
62
|
+
// Cached `/v1beta/models` lookups keyed by model id. Successful lookups are kept for the process lifetime;
|
|
63
|
+
// failed lookups are evicted so the next call retries.
|
|
64
|
+
protected readonly modelInfoCache = new Map<string, Promise<Model>>();
|
|
36
65
|
|
|
37
66
|
@inject(LanguageModelRegistry)
|
|
38
67
|
protected readonly languageModelRegistry: LanguageModelRegistry;
|
|
@@ -48,51 +77,101 @@ export class GoogleLanguageModelsManagerImpl implements GoogleLanguageModelsMana
|
|
|
48
77
|
}
|
|
49
78
|
|
|
50
79
|
async createOrUpdateLanguageModels(...modelDescriptions: GoogleModelDescription[]): Promise<void> {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
apiKey: apiKeyProvider,
|
|
76
|
-
retrySettings: retrySettingsProvider,
|
|
77
|
-
status,
|
|
78
|
-
reasoningSupport: modelDescription.reasoningSupport,
|
|
79
|
-
reasoningApi: modelDescription.reasoningApi
|
|
80
|
-
});
|
|
81
|
-
} else {
|
|
82
|
-
this.languageModelRegistry.addLanguageModels([
|
|
83
|
-
new GoogleModel(
|
|
84
|
-
modelDescription.id,
|
|
85
|
-
modelDescription.model,
|
|
86
|
-
status,
|
|
87
|
-
modelDescription.enableStreaming,
|
|
88
|
-
apiKeyProvider,
|
|
89
|
-
retrySettingsProvider,
|
|
90
|
-
modelDescription.reasoningSupport,
|
|
91
|
-
modelDescription.reasoningApi
|
|
92
|
-
)
|
|
93
|
-
]);
|
|
80
|
+
await Promise.all(modelDescriptions.map(description => this.createOrUpdateLanguageModel(description)));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
protected async createOrUpdateLanguageModel(modelDescription: GoogleModelDescription): Promise<void> {
|
|
84
|
+
const model = await this.languageModelRegistry.getLanguageModel(modelDescription.id);
|
|
85
|
+
const apiKeyProvider = () => {
|
|
86
|
+
if (modelDescription.apiKey === true) {
|
|
87
|
+
return this.apiKey;
|
|
88
|
+
}
|
|
89
|
+
if (modelDescription.apiKey) {
|
|
90
|
+
return modelDescription.apiKey;
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
};
|
|
94
|
+
const retrySettingsProvider = () => this.retrySettings;
|
|
95
|
+
|
|
96
|
+
const apiKey = apiKeyProvider();
|
|
97
|
+
const status = this.calculateStatus(apiKey);
|
|
98
|
+
const metadata = await this.resolveMetadata(modelDescription, apiKey);
|
|
99
|
+
|
|
100
|
+
if (model) {
|
|
101
|
+
if (!(model instanceof GoogleModel)) {
|
|
102
|
+
console.warn(`Gemini: model ${modelDescription.id} is not a Gemini model`);
|
|
103
|
+
return;
|
|
94
104
|
}
|
|
105
|
+
await this.languageModelRegistry.patchLanguageModel<GoogleModel>(modelDescription.id, {
|
|
106
|
+
model: modelDescription.model,
|
|
107
|
+
enableStreaming: modelDescription.enableStreaming,
|
|
108
|
+
apiKey: apiKeyProvider,
|
|
109
|
+
retrySettings: retrySettingsProvider,
|
|
110
|
+
status,
|
|
111
|
+
reasoningSupport: metadata.reasoningSupport,
|
|
112
|
+
reasoningApi: metadata.reasoningApi,
|
|
113
|
+
maxInputTokens: metadata.maxInputTokens
|
|
114
|
+
});
|
|
115
|
+
} else {
|
|
116
|
+
this.languageModelRegistry.addLanguageModels([
|
|
117
|
+
new GoogleModel(
|
|
118
|
+
modelDescription.id,
|
|
119
|
+
modelDescription.model,
|
|
120
|
+
status,
|
|
121
|
+
modelDescription.enableStreaming,
|
|
122
|
+
apiKeyProvider,
|
|
123
|
+
retrySettingsProvider,
|
|
124
|
+
metadata.reasoningSupport,
|
|
125
|
+
metadata.reasoningApi,
|
|
126
|
+
metadata.maxInputTokens
|
|
127
|
+
)
|
|
128
|
+
]);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Description overrides win over the values derived from /v1beta/models. */
|
|
133
|
+
protected async resolveMetadata(description: GoogleModelDescription, apiKey: string | undefined): Promise<ResolvedModelMetadata> {
|
|
134
|
+
const info = await this.fetchModelInfo(description, apiKey);
|
|
135
|
+
const reasoningApi = description.reasoningApi ?? this.deriveReasoningApi(description.model, info);
|
|
136
|
+
return {
|
|
137
|
+
maxInputTokens: info?.inputTokenLimit,
|
|
138
|
+
reasoningSupport: description.reasoningSupport ?? (reasoningApi ? GEMINI_REASONING_SUPPORT : undefined),
|
|
139
|
+
reasoningApi
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
protected async fetchModelInfo(modelDescription: GoogleModelDescription, apiKey: string | undefined): Promise<Model | undefined> {
|
|
144
|
+
if (!apiKey) {
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
const cacheKey = modelDescription.model;
|
|
148
|
+
const cached = this.modelInfoCache.get(cacheKey);
|
|
149
|
+
if (cached) {
|
|
150
|
+
return cached;
|
|
151
|
+
}
|
|
152
|
+
const fetchPromise = this.retrieveModelInfo(modelDescription, apiKey);
|
|
153
|
+
this.modelInfoCache.set(cacheKey, fetchPromise);
|
|
154
|
+
try {
|
|
155
|
+
return await fetchPromise;
|
|
156
|
+
} catch (error) {
|
|
157
|
+
this.modelInfoCache.delete(cacheKey);
|
|
158
|
+
console.warn(`Gemini: failed to retrieve model info for '${modelDescription.id}':`,
|
|
159
|
+
error instanceof Error ? error.message : error);
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
protected retrieveModelInfo(modelDescription: GoogleModelDescription, apiKey: string): Promise<Model> {
|
|
165
|
+
const genAI = new GoogleGenAI({ apiKey, vertexai: false });
|
|
166
|
+
return genAI.models.get({ model: modelDescription.model });
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** API `thinking=false` disables reasoning even when the model id suggests support. */
|
|
170
|
+
protected deriveReasoningApi(modelId: string, info: Model | undefined): ReasoningApi | undefined {
|
|
171
|
+
if (info?.thinking === false) {
|
|
172
|
+
return undefined;
|
|
95
173
|
}
|
|
174
|
+
return reasoningApiFromModelId(modelId);
|
|
96
175
|
}
|
|
97
176
|
|
|
98
177
|
removeLanguageModels(...modelIds: string[]): void {
|