@theia/ai-google 1.67.0-next.86 → 1.68.0-next.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, ToolCallResult, LanguageModelStatus } from '@theia/ai-core';
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, FunctionResponse } from '@google/genai';
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":"AAgBA,OAAO,EACH,aAAa,EACb,oBAAoB,EAEpB,qBAAqB,EACrB,2BAA2B,EAE3B,yBAAyB,EACzB,iBAAiB,EACjB,WAAW,EAEX,cAAc,EACd,mBAAmB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,WAAW,EAAkD,OAAO,EAA0B,gBAAgB,EAAc,MAAM,eAAe,CAAC;AAE3J,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,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;IA6LvC,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;IA6CrC,SAAS,CAAC,gBAAgB,IAAI,WAAW;IAUzC;;;;;OAKG;YACW,SAAS;CAqC1B"}
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: { id: message.tool_use_id, name: message.name, response: { output: message.content } } }];
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 }, { text: message.thinking }];
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
- let currentContent = undefined;
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. MALFORMED_FUNCTION_CALL, SAFETY, MAX_TOKENS, ...
210
+ // e.g. SAFETY, MAX_TOKENS, RECITATION, LANGUAGE, ...
178
211
  // https://ai.google.dev/api/generate-content#FinishReason
179
212
  default:
180
- throw new Error('Unexpected finish reason: ' + finishReason);
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.text) {
185
- yield { content: chunk.text };
186
- }
187
- // Handle function calls from Gemini
188
- if (chunk.functionCalls && chunk.functionCalls.length > 0) {
189
- let functionIndex = 0;
190
- for (const functionCall of chunk.functionCalls) {
191
- const callId = (_c = functionCall.id) !== null && _c !== void 0 ? _c : node_crypto_1.webcrypto.randomUUID().replace(/-/g, '');
192
- let toolCall = toolCallMap[callId];
193
- if (toolCall === undefined) {
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
- // Update to existing tool call
214
- toolCall.args = functionCall.args ? JSON.stringify(functionCall.args) : '{}';
215
- yield {
216
- tool_calls: [{
217
- function: {
218
- arguments: toolCall.args
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: that.formatToolCallResult(call.result)
328
+ response: toFunctionResponse(call.result)
278
329
  }
279
330
  }));
280
331
  const responseMessage = { role: 'user', parts: toolResponses };
281
- const messages = [...(toolMessages !== null && toolMessages !== void 0 ? toolMessages : [])];
282
- if (currentContent) {
283
- messages.push(currentContent);
284
- }
285
- messages.push(responseMessage);
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
- const responseText = model.text;
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 !== null && responseText !== void 0 ? 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-next.86+03f92ff1d",
3
+ "version": "1.68.0-next.0+fa6de4563",
4
4
  "description": "Theia - Google AI Integration",
5
5
  "dependencies": {
6
- "@google/genai": "^1.16.0",
7
- "@theia/ai-core": "1.67.0-next.86+03f92ff1d",
8
- "@theia/core": "1.67.0-next.86+03f92ff1d"
6
+ "@google/genai": "^1.30.0",
7
+ "@theia/ai-core": "1.68.0-next.0+fa6de4563",
8
+ "@theia/core": "1.68.0-next.0+fa6de4563"
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.66.0"
47
+ "@theia/ext-scripts": "1.67.0"
48
48
  },
49
49
  "nyc": {
50
50
  "extends": "../../configs/nyc.json"
51
51
  },
52
- "gitHead": "03f92ff1d97dcb199de39b48e60a53535de22808"
52
+ "gitHead": "fa6de45637fb1cd821b642aa23e225abb1a13f06"
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: { id: message.tool_use_id, name: message.name, response: { output: message.content } } }];
53
-
69
+ return [{ functionResponse: { name: message.name, response: toFunctionResponse(message.content) } }];
54
70
  } else if (LanguageModelMessage.isThinkingMessage(message)) {
55
- return [{ thought: true }, { text: message.thinking }];
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
- let currentContent: Content | undefined = undefined;
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. MALFORMED_FUNCTION_CALL, SAFETY, MAX_TOKENS, ...
244
+ // e.g. SAFETY, MAX_TOKENS, RECITATION, LANGUAGE, ...
214
245
  // https://ai.google.dev/api/generate-content#FinishReason
215
246
  default:
216
- throw new Error('Unexpected finish reason: ' + finishReason);
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.text) {
221
- yield { content: chunk.text };
222
- }
223
-
224
- // Handle function calls from Gemini
225
- if (chunk.functionCalls && chunk.functionCalls.length > 0) {
226
- let functionIndex = 0;
227
- for (const functionCall of chunk.functionCalls) {
228
- const callId = functionCall.id ?? crypto.randomUUID().replace(/-/g, '');
229
- let toolCall = toolCallMap[callId];
230
- if (toolCall === undefined) {
231
- toolCall = {
232
- name: functionCall.name ?? '',
233
- args: functionCall.args ? JSON.stringify(functionCall.args) : '{}',
234
- id: callId,
235
- index: functionIndex++
236
- };
237
- toolCallMap[callId] = toolCall;
238
-
239
- yield {
240
- tool_calls: [{
241
- finished: false,
242
- id: toolCall.id,
243
- function: {
244
- name: toolCall.name,
245
- arguments: toolCall.args
246
- }
247
- }]
248
- };
249
- } else {
250
- // Update to existing tool call
251
- toolCall.args = functionCall.args ? JSON.stringify(functionCall.args) : '{}';
252
- yield {
253
- tool_calls: [{
254
- function: {
255
- arguments: toolCall.args
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: that.formatToolCallResult(call.result)
361
+ response: toFunctionResponse(call.result)
318
362
  }
319
363
  }));
320
364
  const responseMessage: Content = { role: 'user', parts: toolResponses };
321
365
 
322
- const messages = [...(toolMessages ?? [])];
323
- if (currentContent) {
324
- messages.push(currentContent);
325
- }
326
- messages.push(responseMessage);
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
- const responseText = model.text;
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
  }