@theia/ai-google 1.67.0-next.59 → 1.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { LanguageModel, LanguageModelRequest, LanguageModelResponse, LanguageModelStreamResponse, LanguageModelTextResponse, TokenUsageService, UserRequest,
|
|
1
|
+
import { LanguageModel, LanguageModelRequest, LanguageModelResponse, LanguageModelStreamResponse, LanguageModelTextResponse, TokenUsageService, UserRequest, LanguageModelStatus } from '@theia/ai-core';
|
|
2
2
|
import { CancellationToken } from '@theia/core';
|
|
3
|
-
import { GoogleGenAI, Content
|
|
3
|
+
import { GoogleGenAI, Content } from '@google/genai';
|
|
4
4
|
import { GoogleLanguageModelRetrySettings } from './google-language-models-manager-impl';
|
|
5
5
|
export declare const GoogleModelIdentifier: unique symbol;
|
|
6
6
|
/**
|
|
@@ -18,7 +18,6 @@ export declare class GoogleModel implements LanguageModel {
|
|
|
18
18
|
protected getSettings(request: LanguageModelRequest): Readonly<Record<string, unknown>>;
|
|
19
19
|
request(request: UserRequest, cancellationToken?: CancellationToken): Promise<LanguageModelResponse>;
|
|
20
20
|
protected handleStreamingRequest(genAI: GoogleGenAI, request: UserRequest, cancellationToken?: CancellationToken, toolMessages?: Content[]): Promise<LanguageModelStreamResponse>;
|
|
21
|
-
protected formatToolCallResult(result: ToolCallResult): FunctionResponse['response'];
|
|
22
21
|
private createFunctionDeclarations;
|
|
23
22
|
protected handleNonStreamingRequest(genAI: GoogleGenAI, request: UserRequest): Promise<LanguageModelTextResponse>;
|
|
24
23
|
protected initializeGemini(): GoogleGenAI;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"google-language-model.d.ts","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"google-language-model.d.ts","sourceRoot":"","sources":["../../src/node/google-language-model.ts"],"names":[],"mappings":"AAeA,OAAO,EACH,aAAa,EACb,oBAAoB,EAEpB,qBAAqB,EACrB,2BAA2B,EAE3B,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EAGX,mBAAmB,EACtB,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;AAuFzF,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAgBrE;;GAEG;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;IAC5D,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;gBANrB,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,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;IA2NvC,OAAO,CAAC,0BAA0B;cAYlB,yBAAyB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,WAAW,GACrB,OAAO,CAAC,yBAAyB,CAAC;IAsDrC,SAAS,CAAC,gBAAgB,IAAI,WAAW;IAUzC;;;;;OAKG;YACW,SAAS;CAqC1B"}
|
|
@@ -16,11 +16,28 @@ exports.GoogleModel = exports.GoogleModelIdentifier = void 0;
|
|
|
16
16
|
//
|
|
17
17
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
18
18
|
// *****************************************************************************
|
|
19
|
-
const node_crypto_1 = require("node:crypto");
|
|
20
19
|
const ai_core_1 = require("@theia/ai-core");
|
|
21
20
|
const genai_1 = require("@google/genai");
|
|
22
21
|
const promise_util_1 = require("@theia/core/lib/common/promise-util");
|
|
22
|
+
const coreutils_1 = require("@theia/core/shared/@lumino/coreutils");
|
|
23
|
+
/**
|
|
24
|
+
* Converts a tool call result to the Gemini FunctionResponse format.
|
|
25
|
+
* Gemini requires response to be an object, not an array or primitive.
|
|
26
|
+
*/
|
|
27
|
+
function toFunctionResponse(content) {
|
|
28
|
+
if (content === undefined) {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(content)) {
|
|
32
|
+
return { result: content };
|
|
33
|
+
}
|
|
34
|
+
if (typeof content === 'object') {
|
|
35
|
+
return content;
|
|
36
|
+
}
|
|
37
|
+
return { result: content };
|
|
38
|
+
}
|
|
23
39
|
const convertMessageToPart = (message) => {
|
|
40
|
+
var _a;
|
|
24
41
|
if (ai_core_1.LanguageModelMessage.isTextMessage(message) && message.text.length > 0) {
|
|
25
42
|
return [{ text: message.text }];
|
|
26
43
|
}
|
|
@@ -28,14 +45,15 @@ const convertMessageToPart = (message) => {
|
|
|
28
45
|
return [{
|
|
29
46
|
functionCall: {
|
|
30
47
|
id: message.id, name: message.name, args: message.input
|
|
31
|
-
}
|
|
48
|
+
},
|
|
49
|
+
thoughtSignature: (_a = message.data) === null || _a === void 0 ? void 0 : _a.thoughtSignature,
|
|
32
50
|
}];
|
|
33
51
|
}
|
|
34
52
|
else if (ai_core_1.LanguageModelMessage.isToolResultMessage(message)) {
|
|
35
|
-
return [{ functionResponse: {
|
|
53
|
+
return [{ functionResponse: { name: message.name, response: toFunctionResponse(message.content) } }];
|
|
36
54
|
}
|
|
37
55
|
else if (ai_core_1.LanguageModelMessage.isThinkingMessage(message)) {
|
|
38
|
-
return [{ thought: true
|
|
56
|
+
return [{ thought: true, text: message.thinking }];
|
|
39
57
|
}
|
|
40
58
|
else if (ai_core_1.LanguageModelMessage.isImageMessage(message) && ai_core_1.ImageContent.isBase64(message.image)) {
|
|
41
59
|
return [{ inlineData: { data: message.image.base64data, mimeType: message.image.mimeType } }];
|
|
@@ -149,6 +167,10 @@ class GoogleModel {
|
|
|
149
167
|
functionDeclarations
|
|
150
168
|
}]
|
|
151
169
|
}),
|
|
170
|
+
thinkingConfig: {
|
|
171
|
+
// https://ai.google.dev/gemini-api/docs/thinking#summaries
|
|
172
|
+
includeThoughts: true,
|
|
173
|
+
},
|
|
152
174
|
temperature: 1,
|
|
153
175
|
...settings
|
|
154
176
|
},
|
|
@@ -157,9 +179,9 @@ class GoogleModel {
|
|
|
157
179
|
const that = this;
|
|
158
180
|
const asyncIterator = {
|
|
159
181
|
async *[Symbol.asyncIterator]() {
|
|
160
|
-
var _a, _b, _c, _d;
|
|
182
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
161
183
|
const toolCallMap = {};
|
|
162
|
-
|
|
184
|
+
const collectedParts = [];
|
|
163
185
|
try {
|
|
164
186
|
for await (const chunk of stream) {
|
|
165
187
|
if (cancellationToken === null || cancellationToken === void 0 ? void 0 : cancellationToken.isCancellationRequested) {
|
|
@@ -167,61 +189,94 @@ class GoogleModel {
|
|
|
167
189
|
}
|
|
168
190
|
const finishReason = (_a = chunk.candidates) === null || _a === void 0 ? void 0 : _a[0].finishReason;
|
|
169
191
|
if (finishReason) {
|
|
170
|
-
currentContent = (_b = chunk.candidates) === null || _b === void 0 ? void 0 : _b[0].content;
|
|
171
192
|
switch (finishReason) {
|
|
172
193
|
// 'STOP' is the only valid (non-error) finishReason
|
|
173
194
|
// "Natural stop point of the model or provided stop sequence."
|
|
174
195
|
case 'STOP':
|
|
175
196
|
break;
|
|
197
|
+
// MALFORMED_FUNCTION_CALL: The model produced a malformed function call.
|
|
198
|
+
// Log warning but continue - there might still be usable text content.
|
|
199
|
+
case 'MALFORMED_FUNCTION_CALL':
|
|
200
|
+
console.warn('Gemini returned MALFORMED_FUNCTION_CALL finish reason.', {
|
|
201
|
+
finishReason,
|
|
202
|
+
candidate: (_b = chunk.candidates) === null || _b === void 0 ? void 0 : _b[0],
|
|
203
|
+
content: (_d = (_c = chunk.candidates) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.content,
|
|
204
|
+
parts: (_g = (_f = (_e = chunk.candidates) === null || _e === void 0 ? void 0 : _e[0]) === null || _f === void 0 ? void 0 : _f.content) === null || _g === void 0 ? void 0 : _g.parts,
|
|
205
|
+
text: chunk.text,
|
|
206
|
+
usageMetadata: chunk.usageMetadata
|
|
207
|
+
});
|
|
208
|
+
break;
|
|
176
209
|
// All other reasons are error-cases. Throw an Error.
|
|
177
|
-
// e.g.
|
|
210
|
+
// e.g. SAFETY, MAX_TOKENS, RECITATION, LANGUAGE, ...
|
|
178
211
|
// https://ai.google.dev/api/generate-content#FinishReason
|
|
179
212
|
default:
|
|
180
|
-
|
|
213
|
+
console.error('Gemini streaming ended with unexpected finish reason:', {
|
|
214
|
+
finishReason,
|
|
215
|
+
candidate: (_h = chunk.candidates) === null || _h === void 0 ? void 0 : _h[0],
|
|
216
|
+
content: (_k = (_j = chunk.candidates) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.content,
|
|
217
|
+
parts: (_o = (_m = (_l = chunk.candidates) === null || _l === void 0 ? void 0 : _l[0]) === null || _m === void 0 ? void 0 : _m.content) === null || _o === void 0 ? void 0 : _o.parts,
|
|
218
|
+
safetyRatings: (_q = (_p = chunk.candidates) === null || _p === void 0 ? void 0 : _p[0]) === null || _q === void 0 ? void 0 : _q.safetyRatings,
|
|
219
|
+
text: chunk.text,
|
|
220
|
+
usageMetadata: chunk.usageMetadata
|
|
221
|
+
});
|
|
222
|
+
throw new Error(`Unexpected finish reason: ${finishReason}`);
|
|
181
223
|
}
|
|
182
224
|
}
|
|
183
|
-
// Handle text content
|
|
184
|
-
if (chunk.
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
toolCall = {
|
|
195
|
-
name: (_d = functionCall.name) !== null && _d !== void 0 ? _d : '',
|
|
196
|
-
args: functionCall.args ? JSON.stringify(functionCall.args) : '{}',
|
|
197
|
-
id: callId,
|
|
198
|
-
index: functionIndex++
|
|
199
|
-
};
|
|
200
|
-
toolCallMap[callId] = toolCall;
|
|
201
|
-
yield {
|
|
202
|
-
tool_calls: [{
|
|
203
|
-
finished: false,
|
|
204
|
-
id: toolCall.id,
|
|
205
|
-
function: {
|
|
206
|
-
name: toolCall.name,
|
|
207
|
-
arguments: toolCall.args
|
|
208
|
-
}
|
|
209
|
-
}]
|
|
210
|
-
};
|
|
225
|
+
// Handle thinking, text content, and function calls from parts
|
|
226
|
+
if ((_t = (_s = (_r = chunk.candidates) === null || _r === void 0 ? void 0 : _r[0]) === null || _s === void 0 ? void 0 : _s.content) === null || _t === void 0 ? void 0 : _t.parts) {
|
|
227
|
+
for (const part of chunk.candidates[0].content.parts) {
|
|
228
|
+
collectedParts.push(part);
|
|
229
|
+
if (part.text) {
|
|
230
|
+
if (part.thought) {
|
|
231
|
+
yield { thought: part.text, signature: (_u = part.thoughtSignature) !== null && _u !== void 0 ? _u : '' };
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
yield { content: part.text };
|
|
235
|
+
}
|
|
211
236
|
}
|
|
212
|
-
else {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
237
|
+
else if (part.functionCall) {
|
|
238
|
+
const functionCall = part.functionCall;
|
|
239
|
+
// Gemini does not always provide a function call ID (unlike Anthropic/OpenAI).
|
|
240
|
+
// We need a stable ID to track calls in toolCallMap and correlate results.
|
|
241
|
+
const callId = (_v = functionCall.id) !== null && _v !== void 0 ? _v : coreutils_1.UUID.uuid4().replace(/-/g, '');
|
|
242
|
+
let toolCall = toolCallMap[callId];
|
|
243
|
+
if (toolCall === undefined) {
|
|
244
|
+
toolCall = {
|
|
245
|
+
name: (_w = functionCall.name) !== null && _w !== void 0 ? _w : '',
|
|
246
|
+
args: functionCall.args ? JSON.stringify(functionCall.args) : '{}',
|
|
247
|
+
id: callId,
|
|
248
|
+
};
|
|
249
|
+
toolCallMap[callId] = toolCall;
|
|
250
|
+
yield {
|
|
251
|
+
tool_calls: [{
|
|
252
|
+
finished: false,
|
|
253
|
+
id: toolCall.id,
|
|
254
|
+
function: {
|
|
255
|
+
name: toolCall.name,
|
|
256
|
+
arguments: toolCall.args
|
|
257
|
+
},
|
|
258
|
+
data: part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : undefined
|
|
259
|
+
}]
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// Update to existing tool call
|
|
264
|
+
toolCall.args = functionCall.args ? JSON.stringify(functionCall.args) : '{}';
|
|
265
|
+
yield {
|
|
266
|
+
tool_calls: [{
|
|
267
|
+
function: {
|
|
268
|
+
arguments: toolCall.args
|
|
269
|
+
},
|
|
270
|
+
data: part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : undefined
|
|
271
|
+
}]
|
|
272
|
+
};
|
|
273
|
+
}
|
|
222
274
|
}
|
|
223
275
|
}
|
|
224
276
|
}
|
|
277
|
+
else if (chunk.text) {
|
|
278
|
+
yield { content: chunk.text };
|
|
279
|
+
}
|
|
225
280
|
// Report token usage if available
|
|
226
281
|
if (chunk.usageMetadata && that.tokenUsageService && that.id) {
|
|
227
282
|
const promptTokens = chunk.usageMetadata.promptTokenCount;
|
|
@@ -235,12 +290,8 @@ class GoogleModel {
|
|
|
235
290
|
}
|
|
236
291
|
}
|
|
237
292
|
}
|
|
238
|
-
// Mark tool call as finished if it exists
|
|
239
|
-
const toolCalls = Object.values(toolCallMap);
|
|
240
|
-
for (const toolCall of toolCalls) {
|
|
241
|
-
yield { tool_calls: [{ finished: true, id: toolCall.id }] };
|
|
242
|
-
}
|
|
243
293
|
// Process tool calls if any exist
|
|
294
|
+
const toolCalls = Object.values(toolCallMap);
|
|
244
295
|
if (toolCalls.length > 0) {
|
|
245
296
|
// Collect tool results
|
|
246
297
|
const toolResult = await Promise.all(toolCalls.map(async (tc) => {
|
|
@@ -258,7 +309,7 @@ class GoogleModel {
|
|
|
258
309
|
name: tc.name,
|
|
259
310
|
result: result,
|
|
260
311
|
id: tc.id,
|
|
261
|
-
arguments: tc.args
|
|
312
|
+
arguments: tc.args,
|
|
262
313
|
};
|
|
263
314
|
}));
|
|
264
315
|
// Generate tool call responses
|
|
@@ -266,23 +317,23 @@ class GoogleModel {
|
|
|
266
317
|
finished: true,
|
|
267
318
|
id: tr.id,
|
|
268
319
|
result: tr.result,
|
|
269
|
-
function: { name: tr.name, arguments: tr.arguments }
|
|
320
|
+
function: { name: tr.name, arguments: tr.arguments },
|
|
270
321
|
}));
|
|
271
322
|
yield { tool_calls: calls };
|
|
272
323
|
// Format tool responses for Gemini
|
|
324
|
+
// According to Gemini docs, functionResponse needs name and response
|
|
273
325
|
const toolResponses = toolResult.map(call => ({
|
|
274
326
|
functionResponse: {
|
|
275
|
-
id: call.id,
|
|
276
327
|
name: call.name,
|
|
277
|
-
response:
|
|
328
|
+
response: toFunctionResponse(call.result)
|
|
278
329
|
}
|
|
279
330
|
}));
|
|
280
331
|
const responseMessage = { role: 'user', parts: toolResponses };
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
285
|
-
messages
|
|
332
|
+
// Build the model's response content from collected parts
|
|
333
|
+
// Exclude thinking parts as they should not be included in the conversation history sent back to the model
|
|
334
|
+
const modelResponseParts = collectedParts.filter(p => !p.thought);
|
|
335
|
+
const modelContent = { role: 'model', parts: modelResponseParts };
|
|
336
|
+
const messages = [...(toolMessages !== null && toolMessages !== void 0 ? toolMessages : []), modelContent, responseMessage];
|
|
286
337
|
// Continue the conversation with tool results
|
|
287
338
|
const continuedResponse = await that.handleStreamingRequest(genAI, request, cancellationToken, messages);
|
|
288
339
|
// Stream the continued response
|
|
@@ -299,12 +350,6 @@ class GoogleModel {
|
|
|
299
350
|
};
|
|
300
351
|
return { stream: asyncIterator };
|
|
301
352
|
}
|
|
302
|
-
formatToolCallResult(result) {
|
|
303
|
-
// If "output" and "error" keys are not specified, then whole "response" is treated as function output.
|
|
304
|
-
// There is no particular support for different types of output such as images so we use the structure provided by the tool call.
|
|
305
|
-
// Using the format that is used for image messages does not seem to yield any different results.
|
|
306
|
-
return { output: result };
|
|
307
|
-
}
|
|
308
353
|
createFunctionDeclarations(request) {
|
|
309
354
|
if (!request.tools || request.tools.length === 0) {
|
|
310
355
|
return [];
|
|
@@ -316,6 +361,7 @@ class GoogleModel {
|
|
|
316
361
|
}));
|
|
317
362
|
}
|
|
318
363
|
async handleNonStreamingRequest(genAI, request) {
|
|
364
|
+
var _a, _b, _c, _d;
|
|
319
365
|
const settings = this.getSettings(request);
|
|
320
366
|
const { contents: parts, systemMessage } = transformToGeminiMessages(request.messages);
|
|
321
367
|
const functionDeclarations = this.createFunctionDeclarations(request);
|
|
@@ -337,7 +383,18 @@ class GoogleModel {
|
|
|
337
383
|
contents: parts
|
|
338
384
|
}));
|
|
339
385
|
try {
|
|
340
|
-
|
|
386
|
+
let responseText = '';
|
|
387
|
+
// For non streaming requests we are always only interested in text parts
|
|
388
|
+
if ((_c = (_b = (_a = model.candidates) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.content) === null || _c === void 0 ? void 0 : _c.parts) {
|
|
389
|
+
for (const part of model.candidates[0].content.parts) {
|
|
390
|
+
if (part.text) {
|
|
391
|
+
responseText += part.text;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
responseText = (_d = model.text) !== null && _d !== void 0 ? _d : '';
|
|
397
|
+
}
|
|
341
398
|
// Record token usage if available
|
|
342
399
|
if (model.usageMetadata && this.tokenUsageService) {
|
|
343
400
|
const promptTokens = model.usageMetadata.promptTokenCount;
|
|
@@ -350,7 +407,7 @@ class GoogleModel {
|
|
|
350
407
|
});
|
|
351
408
|
}
|
|
352
409
|
}
|
|
353
|
-
return { text: responseText
|
|
410
|
+
return { text: responseText };
|
|
354
411
|
}
|
|
355
412
|
catch (error) {
|
|
356
413
|
throw new Error(`Failed to get response from Gemini API: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
@@ -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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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-google",
|
|
3
|
-
"version": "1.67.0
|
|
3
|
+
"version": "1.67.0",
|
|
4
4
|
"description": "Theia - Google AI Integration",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@google/genai": "^1.
|
|
7
|
-
"@theia/ai-core": "1.67.0
|
|
8
|
-
"@theia/core": "1.67.0
|
|
6
|
+
"@google/genai": "^1.30.0",
|
|
7
|
+
"@theia/ai-core": "1.67.0",
|
|
8
|
+
"@theia/core": "1.67.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.67.0"
|
|
48
48
|
},
|
|
49
49
|
"nyc": {
|
|
50
50
|
"extends": "../../configs/nyc.json"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "541860e34f1351442be3a1c998fb618472afcefd"
|
|
53
53
|
}
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
//
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
|
-
import { webcrypto as crypto } from 'node:crypto';
|
|
17
16
|
import {
|
|
18
17
|
LanguageModel,
|
|
19
18
|
LanguageModelRequest,
|
|
@@ -32,13 +31,30 @@ import { CancellationToken } from '@theia/core';
|
|
|
32
31
|
import { GoogleGenAI, FunctionCallingConfigMode, FunctionDeclaration, Content, Schema, Part, Modality, FunctionResponse, ToolConfig } from '@google/genai';
|
|
33
32
|
import { wait } from '@theia/core/lib/common/promise-util';
|
|
34
33
|
import { GoogleLanguageModelRetrySettings } from './google-language-models-manager-impl';
|
|
34
|
+
import { UUID } from '@theia/core/shared/@lumino/coreutils';
|
|
35
35
|
|
|
36
36
|
interface ToolCallback {
|
|
37
37
|
readonly name: string;
|
|
38
38
|
readonly id: string;
|
|
39
|
-
readonly index: number;
|
|
40
39
|
args: string;
|
|
41
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Converts a tool call result to the Gemini FunctionResponse format.
|
|
43
|
+
* Gemini requires response to be an object, not an array or primitive.
|
|
44
|
+
*/
|
|
45
|
+
function toFunctionResponse(content: ToolCallResult): FunctionResponse['response'] {
|
|
46
|
+
if (content === undefined) {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(content)) {
|
|
50
|
+
return { result: content };
|
|
51
|
+
}
|
|
52
|
+
if (typeof content === 'object') {
|
|
53
|
+
return content as FunctionResponse['response'];
|
|
54
|
+
}
|
|
55
|
+
return { result: content };
|
|
56
|
+
}
|
|
57
|
+
|
|
42
58
|
const convertMessageToPart = (message: LanguageModelMessage): Part[] | undefined => {
|
|
43
59
|
if (LanguageModelMessage.isTextMessage(message) && message.text.length > 0) {
|
|
44
60
|
return [{ text: message.text }];
|
|
@@ -46,13 +62,13 @@ const convertMessageToPart = (message: LanguageModelMessage): Part[] | undefined
|
|
|
46
62
|
return [{
|
|
47
63
|
functionCall: {
|
|
48
64
|
id: message.id, name: message.name, args: message.input as Record<string, unknown>
|
|
49
|
-
}
|
|
65
|
+
},
|
|
66
|
+
thoughtSignature: message.data?.thoughtSignature,
|
|
50
67
|
}];
|
|
51
68
|
} else if (LanguageModelMessage.isToolResultMessage(message)) {
|
|
52
|
-
return [{ functionResponse: {
|
|
53
|
-
|
|
69
|
+
return [{ functionResponse: { name: message.name, response: toFunctionResponse(message.content) } }];
|
|
54
70
|
} else if (LanguageModelMessage.isThinkingMessage(message)) {
|
|
55
|
-
return [{ thought: true
|
|
71
|
+
return [{ thought: true, text: message.thinking }];
|
|
56
72
|
} else if (LanguageModelMessage.isImageMessage(message) && ImageContent.isBase64(message.image)) {
|
|
57
73
|
return [{ inlineData: { data: message.image.base64data, mimeType: message.image.mimeType } }];
|
|
58
74
|
}
|
|
@@ -184,6 +200,10 @@ export class GoogleModel implements LanguageModel {
|
|
|
184
200
|
functionDeclarations
|
|
185
201
|
}]
|
|
186
202
|
}),
|
|
203
|
+
thinkingConfig: {
|
|
204
|
+
// https://ai.google.dev/gemini-api/docs/thinking#summaries
|
|
205
|
+
includeThoughts: true,
|
|
206
|
+
},
|
|
187
207
|
temperature: 1,
|
|
188
208
|
...settings
|
|
189
209
|
},
|
|
@@ -195,7 +215,7 @@ export class GoogleModel implements LanguageModel {
|
|
|
195
215
|
const asyncIterator = {
|
|
196
216
|
async *[Symbol.asyncIterator](): AsyncIterator<LanguageModelStreamResponsePart> {
|
|
197
217
|
const toolCallMap: { [key: string]: ToolCallback } = {};
|
|
198
|
-
|
|
218
|
+
const collectedParts: Part[] = [];
|
|
199
219
|
try {
|
|
200
220
|
for await (const chunk of stream) {
|
|
201
221
|
if (cancellationToken?.isCancellationRequested) {
|
|
@@ -203,61 +223,90 @@ export class GoogleModel implements LanguageModel {
|
|
|
203
223
|
}
|
|
204
224
|
const finishReason = chunk.candidates?.[0].finishReason;
|
|
205
225
|
if (finishReason) {
|
|
206
|
-
currentContent = chunk.candidates?.[0].content;
|
|
207
226
|
switch (finishReason) {
|
|
208
227
|
// 'STOP' is the only valid (non-error) finishReason
|
|
209
228
|
// "Natural stop point of the model or provided stop sequence."
|
|
210
229
|
case 'STOP':
|
|
211
230
|
break;
|
|
231
|
+
// MALFORMED_FUNCTION_CALL: The model produced a malformed function call.
|
|
232
|
+
// Log warning but continue - there might still be usable text content.
|
|
233
|
+
case 'MALFORMED_FUNCTION_CALL':
|
|
234
|
+
console.warn('Gemini returned MALFORMED_FUNCTION_CALL finish reason.', {
|
|
235
|
+
finishReason,
|
|
236
|
+
candidate: chunk.candidates?.[0],
|
|
237
|
+
content: chunk.candidates?.[0]?.content,
|
|
238
|
+
parts: chunk.candidates?.[0]?.content?.parts,
|
|
239
|
+
text: chunk.text,
|
|
240
|
+
usageMetadata: chunk.usageMetadata
|
|
241
|
+
});
|
|
242
|
+
break;
|
|
212
243
|
// All other reasons are error-cases. Throw an Error.
|
|
213
|
-
// e.g.
|
|
244
|
+
// e.g. SAFETY, MAX_TOKENS, RECITATION, LANGUAGE, ...
|
|
214
245
|
// https://ai.google.dev/api/generate-content#FinishReason
|
|
215
246
|
default:
|
|
216
|
-
|
|
247
|
+
console.error('Gemini streaming ended with unexpected finish reason:', {
|
|
248
|
+
finishReason,
|
|
249
|
+
candidate: chunk.candidates?.[0],
|
|
250
|
+
content: chunk.candidates?.[0]?.content,
|
|
251
|
+
parts: chunk.candidates?.[0]?.content?.parts,
|
|
252
|
+
safetyRatings: chunk.candidates?.[0]?.safetyRatings,
|
|
253
|
+
text: chunk.text,
|
|
254
|
+
usageMetadata: chunk.usageMetadata
|
|
255
|
+
});
|
|
256
|
+
throw new Error(`Unexpected finish reason: ${finishReason}`);
|
|
217
257
|
}
|
|
218
258
|
}
|
|
219
|
-
// Handle text content
|
|
220
|
-
if (chunk.
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
+
// Handle thinking, text content, and function calls from parts
|
|
260
|
+
if (chunk.candidates?.[0]?.content?.parts) {
|
|
261
|
+
for (const part of chunk.candidates[0].content.parts) {
|
|
262
|
+
collectedParts.push(part);
|
|
263
|
+
if (part.text) {
|
|
264
|
+
if (part.thought) {
|
|
265
|
+
yield { thought: part.text, signature: part.thoughtSignature ?? '' };
|
|
266
|
+
} else {
|
|
267
|
+
yield { content: part.text };
|
|
268
|
+
}
|
|
269
|
+
} else if (part.functionCall) {
|
|
270
|
+
const functionCall = part.functionCall;
|
|
271
|
+
// Gemini does not always provide a function call ID (unlike Anthropic/OpenAI).
|
|
272
|
+
// We need a stable ID to track calls in toolCallMap and correlate results.
|
|
273
|
+
const callId = functionCall.id ?? UUID.uuid4().replace(/-/g, '');
|
|
274
|
+
let toolCall = toolCallMap[callId];
|
|
275
|
+
if (toolCall === undefined) {
|
|
276
|
+
toolCall = {
|
|
277
|
+
name: functionCall.name ?? '',
|
|
278
|
+
args: functionCall.args ? JSON.stringify(functionCall.args) : '{}',
|
|
279
|
+
id: callId,
|
|
280
|
+
};
|
|
281
|
+
toolCallMap[callId] = toolCall;
|
|
282
|
+
|
|
283
|
+
yield {
|
|
284
|
+
tool_calls: [{
|
|
285
|
+
finished: false,
|
|
286
|
+
id: toolCall.id,
|
|
287
|
+
function: {
|
|
288
|
+
name: toolCall.name,
|
|
289
|
+
arguments: toolCall.args
|
|
290
|
+
},
|
|
291
|
+
data: part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : undefined
|
|
292
|
+
}]
|
|
293
|
+
};
|
|
294
|
+
} else {
|
|
295
|
+
// Update to existing tool call
|
|
296
|
+
toolCall.args = functionCall.args ? JSON.stringify(functionCall.args) : '{}';
|
|
297
|
+
yield {
|
|
298
|
+
tool_calls: [{
|
|
299
|
+
function: {
|
|
300
|
+
arguments: toolCall.args
|
|
301
|
+
},
|
|
302
|
+
data: part.thoughtSignature ? { thoughtSignature: part.thoughtSignature } : undefined
|
|
303
|
+
}]
|
|
304
|
+
};
|
|
305
|
+
}
|
|
259
306
|
}
|
|
260
307
|
}
|
|
308
|
+
} else if (chunk.text) {
|
|
309
|
+
yield { content: chunk.text };
|
|
261
310
|
}
|
|
262
311
|
|
|
263
312
|
// Report token usage if available
|
|
@@ -274,13 +323,8 @@ export class GoogleModel implements LanguageModel {
|
|
|
274
323
|
}
|
|
275
324
|
}
|
|
276
325
|
|
|
277
|
-
// Mark tool call as finished if it exists
|
|
278
|
-
const toolCalls = Object.values(toolCallMap);
|
|
279
|
-
for (const toolCall of toolCalls) {
|
|
280
|
-
yield { tool_calls: [{ finished: true, id: toolCall.id }] };
|
|
281
|
-
}
|
|
282
|
-
|
|
283
326
|
// Process tool calls if any exist
|
|
327
|
+
const toolCalls = Object.values(toolCallMap);
|
|
284
328
|
if (toolCalls.length > 0) {
|
|
285
329
|
// Collect tool results
|
|
286
330
|
const toolResult = await Promise.all(toolCalls.map(async tc => {
|
|
@@ -296,7 +340,7 @@ export class GoogleModel implements LanguageModel {
|
|
|
296
340
|
name: tc.name,
|
|
297
341
|
result: result,
|
|
298
342
|
id: tc.id,
|
|
299
|
-
arguments: tc.args
|
|
343
|
+
arguments: tc.args,
|
|
300
344
|
};
|
|
301
345
|
}));
|
|
302
346
|
|
|
@@ -305,25 +349,27 @@ export class GoogleModel implements LanguageModel {
|
|
|
305
349
|
finished: true,
|
|
306
350
|
id: tr.id,
|
|
307
351
|
result: tr.result,
|
|
308
|
-
function: { name: tr.name, arguments: tr.arguments }
|
|
352
|
+
function: { name: tr.name, arguments: tr.arguments },
|
|
309
353
|
}));
|
|
310
354
|
yield { tool_calls: calls };
|
|
311
355
|
|
|
312
356
|
// Format tool responses for Gemini
|
|
357
|
+
// According to Gemini docs, functionResponse needs name and response
|
|
313
358
|
const toolResponses: Part[] = toolResult.map(call => ({
|
|
314
359
|
functionResponse: {
|
|
315
|
-
id: call.id,
|
|
316
360
|
name: call.name,
|
|
317
|
-
response:
|
|
361
|
+
response: toFunctionResponse(call.result)
|
|
318
362
|
}
|
|
319
363
|
}));
|
|
320
364
|
const responseMessage: Content = { role: 'user', parts: toolResponses };
|
|
321
365
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
}
|
|
326
|
-
|
|
366
|
+
// Build the model's response content from collected parts
|
|
367
|
+
// Exclude thinking parts as they should not be included in the conversation history sent back to the model
|
|
368
|
+
const modelResponseParts = collectedParts.filter(p => !p.thought);
|
|
369
|
+
const modelContent: Content = { role: 'model', parts: modelResponseParts };
|
|
370
|
+
|
|
371
|
+
const messages = [...(toolMessages ?? []), modelContent, responseMessage];
|
|
372
|
+
|
|
327
373
|
// Continue the conversation with tool results
|
|
328
374
|
const continuedResponse = await that.handleStreamingRequest(
|
|
329
375
|
genAI,
|
|
@@ -347,13 +393,6 @@ export class GoogleModel implements LanguageModel {
|
|
|
347
393
|
return { stream: asyncIterator };
|
|
348
394
|
}
|
|
349
395
|
|
|
350
|
-
protected formatToolCallResult(result: ToolCallResult): FunctionResponse['response'] {
|
|
351
|
-
// If "output" and "error" keys are not specified, then whole "response" is treated as function output.
|
|
352
|
-
// There is no particular support for different types of output such as images so we use the structure provided by the tool call.
|
|
353
|
-
// Using the format that is used for image messages does not seem to yield any different results.
|
|
354
|
-
return { output: result };
|
|
355
|
-
}
|
|
356
|
-
|
|
357
396
|
private createFunctionDeclarations(request: LanguageModelRequest): FunctionDeclaration[] {
|
|
358
397
|
if (!request.tools || request.tools.length === 0) {
|
|
359
398
|
return [];
|
|
@@ -393,7 +432,17 @@ export class GoogleModel implements LanguageModel {
|
|
|
393
432
|
}));
|
|
394
433
|
|
|
395
434
|
try {
|
|
396
|
-
|
|
435
|
+
let responseText = '';
|
|
436
|
+
// For non streaming requests we are always only interested in text parts
|
|
437
|
+
if (model.candidates?.[0]?.content?.parts) {
|
|
438
|
+
for (const part of model.candidates[0].content.parts) {
|
|
439
|
+
if (part.text) {
|
|
440
|
+
responseText += part.text;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
} else {
|
|
444
|
+
responseText = model.text ?? '';
|
|
445
|
+
}
|
|
397
446
|
|
|
398
447
|
// Record token usage if available
|
|
399
448
|
if (model.usageMetadata && this.tokenUsageService) {
|
|
@@ -407,8 +456,7 @@ export class GoogleModel implements LanguageModel {
|
|
|
407
456
|
});
|
|
408
457
|
}
|
|
409
458
|
}
|
|
410
|
-
|
|
411
|
-
return { text: responseText ?? '' };
|
|
459
|
+
return { text: responseText };
|
|
412
460
|
} catch (error) {
|
|
413
461
|
throw new Error(`Failed to get response from Gemini API: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
414
462
|
}
|