@aituber-onair/core 0.16.1 → 0.17.1

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.
Files changed (97) hide show
  1. package/README.md +0 -2
  2. package/dist/constants/index.d.ts +0 -5
  3. package/dist/constants/index.js +0 -5
  4. package/dist/constants/index.js.map +1 -1
  5. package/dist/core/AITuberOnAirCore.d.ts +3 -3
  6. package/dist/core/AITuberOnAirCore.js +8 -4
  7. package/dist/core/AITuberOnAirCore.js.map +1 -1
  8. package/dist/core/ChatProcessor.d.ts +1 -4
  9. package/dist/core/ChatProcessor.js +1 -3
  10. package/dist/core/ChatProcessor.js.map +1 -1
  11. package/dist/core/MemoryManager.d.ts +2 -1
  12. package/dist/core/MemoryManager.js.map +1 -1
  13. package/dist/core/ToolExecutor.d.ts +28 -2
  14. package/dist/core/ToolExecutor.js +88 -0
  15. package/dist/core/ToolExecutor.js.map +1 -1
  16. package/dist/index.d.ts +5 -12
  17. package/dist/index.js +21 -8
  18. package/dist/index.js.map +1 -1
  19. package/dist/services/chat/providers/claude/ClaudeSummarizer.d.ts +1 -1
  20. package/dist/services/chat/providers/claude/ClaudeSummarizer.js +1 -2
  21. package/dist/services/chat/providers/claude/ClaudeSummarizer.js.map +1 -1
  22. package/dist/services/chat/providers/gemini/GeminiSummarizer.d.ts +1 -1
  23. package/dist/services/chat/providers/gemini/GeminiSummarizer.js +1 -2
  24. package/dist/services/chat/providers/gemini/GeminiSummarizer.js.map +1 -1
  25. package/dist/services/chat/providers/openai/OpenAISummarizer.d.ts +1 -1
  26. package/dist/services/chat/providers/openai/OpenAISummarizer.js +2 -3
  27. package/dist/services/chat/providers/openai/OpenAISummarizer.js.map +1 -1
  28. package/dist/types/index.d.ts +0 -3
  29. package/dist/types/index.js +0 -4
  30. package/dist/types/index.js.map +1 -1
  31. package/dist/utils/index.d.ts +1 -4
  32. package/dist/utils/index.js +2 -4
  33. package/dist/utils/index.js.map +1 -1
  34. package/package.json +2 -1
  35. package/dist/constants/chat.d.ts +0 -17
  36. package/dist/constants/chat.js +0 -18
  37. package/dist/constants/chat.js.map +0 -1
  38. package/dist/constants/claude.d.ts +0 -8
  39. package/dist/constants/claude.js +0 -17
  40. package/dist/constants/claude.js.map +0 -1
  41. package/dist/constants/gemini.d.ts +0 -10
  42. package/dist/constants/gemini.js +0 -23
  43. package/dist/constants/gemini.js.map +0 -1
  44. package/dist/constants/openai.d.ts +0 -12
  45. package/dist/constants/openai.js +0 -25
  46. package/dist/constants/openai.js.map +0 -1
  47. package/dist/constants/prompts.d.ts +0 -2
  48. package/dist/constants/prompts.js +0 -13
  49. package/dist/constants/prompts.js.map +0 -1
  50. package/dist/services/chat/ChatService.d.ts +0 -50
  51. package/dist/services/chat/ChatService.js +0 -2
  52. package/dist/services/chat/ChatService.js.map +0 -1
  53. package/dist/services/chat/ChatServiceFactory.d.ts +0 -38
  54. package/dist/services/chat/ChatServiceFactory.js +0 -61
  55. package/dist/services/chat/ChatServiceFactory.js.map +0 -1
  56. package/dist/services/chat/providers/ChatServiceProvider.d.ts +0 -48
  57. package/dist/services/chat/providers/ChatServiceProvider.js +0 -2
  58. package/dist/services/chat/providers/ChatServiceProvider.js.map +0 -1
  59. package/dist/services/chat/providers/claude/ClaudeChatService.d.ts +0 -139
  60. package/dist/services/chat/providers/claude/ClaudeChatService.js +0 -493
  61. package/dist/services/chat/providers/claude/ClaudeChatService.js.map +0 -1
  62. package/dist/services/chat/providers/claude/ClaudeChatServiceProvider.d.ts +0 -39
  63. package/dist/services/chat/providers/claude/ClaudeChatServiceProvider.js +0 -62
  64. package/dist/services/chat/providers/claude/ClaudeChatServiceProvider.js.map +0 -1
  65. package/dist/services/chat/providers/gemini/GeminiChatService.d.ts +0 -71
  66. package/dist/services/chat/providers/gemini/GeminiChatService.js +0 -537
  67. package/dist/services/chat/providers/gemini/GeminiChatService.js.map +0 -1
  68. package/dist/services/chat/providers/gemini/GeminiChatServiceProvider.d.ts +0 -39
  69. package/dist/services/chat/providers/gemini/GeminiChatServiceProvider.js +0 -61
  70. package/dist/services/chat/providers/gemini/GeminiChatServiceProvider.js.map +0 -1
  71. package/dist/services/chat/providers/openai/OpenAIChatService.d.ts +0 -107
  72. package/dist/services/chat/providers/openai/OpenAIChatService.js +0 -530
  73. package/dist/services/chat/providers/openai/OpenAIChatService.js.map +0 -1
  74. package/dist/services/chat/providers/openai/OpenAIChatServiceProvider.d.ts +0 -39
  75. package/dist/services/chat/providers/openai/OpenAIChatServiceProvider.js +0 -66
  76. package/dist/services/chat/providers/openai/OpenAIChatServiceProvider.js.map +0 -1
  77. package/dist/types/chat.d.ts +0 -54
  78. package/dist/types/chat.js +0 -5
  79. package/dist/types/chat.js.map +0 -1
  80. package/dist/types/mcp.d.ts +0 -36
  81. package/dist/types/mcp.js +0 -5
  82. package/dist/types/mcp.js.map +0 -1
  83. package/dist/types/toolChat.d.ts +0 -41
  84. package/dist/types/toolChat.js +0 -2
  85. package/dist/types/toolChat.js.map +0 -1
  86. package/dist/utils/chatServiceHttpClient.d.ts +0 -46
  87. package/dist/utils/chatServiceHttpClient.js +0 -126
  88. package/dist/utils/chatServiceHttpClient.js.map +0 -1
  89. package/dist/utils/emotionParser.d.ts +0 -45
  90. package/dist/utils/emotionParser.js +0 -55
  91. package/dist/utils/emotionParser.js.map +0 -1
  92. package/dist/utils/screenplay.d.ts +0 -19
  93. package/dist/utils/screenplay.js +0 -36
  94. package/dist/utils/screenplay.js.map +0 -1
  95. package/dist/utils/streamTextAccumulator.d.ts +0 -24
  96. package/dist/utils/streamTextAccumulator.js +0 -43
  97. package/dist/utils/streamTextAccumulator.js.map +0 -1
@@ -1,71 +0,0 @@
1
- import { ChatService } from '../../ChatService';
2
- import { Message, MessageWithVision, ToolChatCompletion, ToolDefinition } from '../../../../types';
3
- /**
4
- * Gemini implementation of ChatService
5
- */
6
- export declare class GeminiChatService implements ChatService {
7
- /** Provider name */
8
- readonly provider: string;
9
- private apiKey;
10
- private model;
11
- private visionModel;
12
- private tools;
13
- /** id(OpenAI) → name(Gemini) mapping */
14
- private callIdMap;
15
- private safeJsonParse;
16
- private normalizeToolResult;
17
- /**
18
- * camelCase → snake_case conversion (v1beta)
19
- */
20
- private adaptKeysForApi;
21
- /**
22
- * Constructor
23
- * @param apiKey Google API key
24
- * @param model Name of the model to use
25
- * @param visionModel Name of the vision model
26
- */
27
- constructor(apiKey: string, model?: string, visionModel?: string, tools?: ToolDefinition[]);
28
- /**
29
- * Get the current model name
30
- * @returns Model name
31
- */
32
- getModel(): string;
33
- /**
34
- * Get the current vision model name
35
- * @returns Vision model name
36
- */
37
- getVisionModel(): string;
38
- /**
39
- * Process chat messages
40
- * @param messages Array of messages to send
41
- * @param onPartialResponse Callback to receive each part of streaming response
42
- * @param onCompleteResponse Callback to execute when response is complete
43
- */
44
- processChat(messages: Message[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
45
- processVisionChat(messages: MessageWithVision[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
46
- private convertMessagesToGeminiFormat;
47
- private callGemini;
48
- /**
49
- * Convert AITuber OnAir vision messages to Gemini format
50
- * @param messages Array of vision messages
51
- * @returns Gemini formatted vision messages
52
- */
53
- private convertVisionMessagesToGeminiFormat;
54
- /**
55
- * Convert Blob to Base64 string
56
- * @param blob Image blob
57
- * @returns Promise with base64 encoded string
58
- */
59
- private blobToBase64;
60
- /**
61
- * Map AITuber OnAir roles to Gemini roles
62
- * @param role AITuber OnAir role
63
- * @returns Gemini role
64
- */
65
- private mapRoleToGemini;
66
- private parseStream;
67
- private parseOneShot;
68
- chatOnce(messages: Message[], stream?: boolean, onPartialResponse?: (t: string) => void, maxTokens?: number): Promise<ToolChatCompletion>;
69
- visionChatOnce(messages: MessageWithVision[], stream?: boolean, onPartialResponse?: (t: string) => void, maxTokens?: number): Promise<ToolChatCompletion>;
70
- private genUUID;
71
- }
@@ -1,537 +0,0 @@
1
- import { ENDPOINT_GEMINI_API, MODEL_GEMINI_2_0_FLASH_LITE, GEMINI_VISION_SUPPORTED_MODELS, DEFAULT_MAX_TOKENS, } from '../../../../constants';
2
- import { StreamTextAccumulator } from '../../../../utils/streamTextAccumulator';
3
- import { ChatServiceHttpClient } from '../../../../utils/chatServiceHttpClient';
4
- /**
5
- * Gemini implementation of ChatService
6
- */
7
- export class GeminiChatService {
8
- /* ────────────────────────────────── */
9
- /* Utilities */
10
- /* ────────────────────────────────── */
11
- safeJsonParse(str) {
12
- try {
13
- return JSON.parse(str);
14
- }
15
- catch {
16
- return str; // keep as string
17
- }
18
- }
19
- normalizeToolResult(val) {
20
- if (val === null)
21
- return { content: null };
22
- if (typeof val === 'object')
23
- return val;
24
- return { content: val }; // wrap primitive
25
- }
26
- /**
27
- * camelCase → snake_case conversion (v1beta)
28
- */
29
- adaptKeysForApi(obj) {
30
- const map = {
31
- toolConfig: 'tool_config',
32
- functionCallingConfig: 'function_calling_config',
33
- functionDeclarations: 'function_declarations',
34
- functionCall: 'function_call',
35
- functionResponse: 'function_response',
36
- };
37
- if (Array.isArray(obj))
38
- return obj.map((v) => this.adaptKeysForApi(v));
39
- if (obj && typeof obj === 'object') {
40
- return Object.fromEntries(Object.entries(obj).map(([k, v]) => [
41
- map[k] ?? k,
42
- this.adaptKeysForApi(v),
43
- ]));
44
- }
45
- return obj;
46
- }
47
- /**
48
- * Constructor
49
- * @param apiKey Google API key
50
- * @param model Name of the model to use
51
- * @param visionModel Name of the vision model
52
- */
53
- constructor(apiKey, model = MODEL_GEMINI_2_0_FLASH_LITE, visionModel = MODEL_GEMINI_2_0_FLASH_LITE, tools = []) {
54
- /** Provider name */
55
- this.provider = 'gemini';
56
- /** id(OpenAI) → name(Gemini) mapping */
57
- this.callIdMap = new Map();
58
- this.apiKey = apiKey;
59
- this.model = model;
60
- // check if the vision model is supported
61
- if (!GEMINI_VISION_SUPPORTED_MODELS.includes(visionModel)) {
62
- throw new Error(`Model ${visionModel} does not support vision capabilities.`);
63
- }
64
- this.visionModel = visionModel;
65
- this.tools = tools;
66
- }
67
- /**
68
- * Get the current model name
69
- * @returns Model name
70
- */
71
- getModel() {
72
- return this.model;
73
- }
74
- /**
75
- * Get the current vision model name
76
- * @returns Vision model name
77
- */
78
- getVisionModel() {
79
- return this.visionModel;
80
- }
81
- /**
82
- * Process chat messages
83
- * @param messages Array of messages to send
84
- * @param onPartialResponse Callback to receive each part of streaming response
85
- * @param onCompleteResponse Callback to execute when response is complete
86
- */
87
- async processChat(messages, onPartialResponse, onCompleteResponse) {
88
- try {
89
- // not use tools
90
- if (this.tools.length === 0) {
91
- const res = await this.callGemini(messages, this.model, true);
92
- const { blocks } = await this.parseStream(res, onPartialResponse);
93
- const full = blocks
94
- .filter((b) => b.type === 'text')
95
- .map((b) => b.text)
96
- .join('');
97
- await onCompleteResponse(full);
98
- return;
99
- }
100
- /* with tools (1 turn) */
101
- const { blocks, stop_reason } = await this.chatOnce(messages, true, onPartialResponse);
102
- if (stop_reason === 'end') {
103
- const full = blocks
104
- .filter((b) => b.type === 'text')
105
- .map((b) => b.text)
106
- .join('');
107
- await onCompleteResponse(full);
108
- return;
109
- }
110
- throw new Error('Received functionCall. Use chatOnce() loop when tools are enabled.');
111
- }
112
- catch (err) {
113
- console.error('Error in processChat:', err);
114
- throw err;
115
- }
116
- }
117
- async processVisionChat(messages, onPartialResponse, onCompleteResponse) {
118
- try {
119
- if (this.tools.length === 0) {
120
- const res = await this.callGemini(messages, this.visionModel, true);
121
- const { blocks } = await this.parseStream(res, onPartialResponse);
122
- const full = blocks
123
- .filter((b) => b.type === 'text')
124
- .map((b) => b.text)
125
- .join('');
126
- await onCompleteResponse(full);
127
- return;
128
- }
129
- const { blocks, stop_reason } = await this.visionChatOnce(messages);
130
- blocks
131
- .filter((b) => b.type === 'text')
132
- .forEach((b) => onPartialResponse(b.text));
133
- if (stop_reason === 'end') {
134
- const full = blocks
135
- .filter((b) => b.type === 'text')
136
- .map((b) => b.text)
137
- .join('');
138
- await onCompleteResponse(full);
139
- return;
140
- }
141
- throw new Error('Received functionCall. Use visionChatOnce() loop when tools are enabled.');
142
- }
143
- catch (err) {
144
- console.error('Error in processVisionChat:', err);
145
- throw err;
146
- }
147
- }
148
- /* ────────────────────────────────── */
149
- /* OpenAI → Gemini conversion */
150
- /* ────────────────────────────────── */
151
- convertMessagesToGeminiFormat(messages) {
152
- const gemini = [];
153
- let currentRole = null;
154
- let currentParts = [];
155
- const pushCurrent = () => {
156
- if (currentRole && currentParts.length) {
157
- gemini.push({ role: currentRole, parts: [...currentParts] });
158
- currentParts = [];
159
- }
160
- };
161
- for (const msg of messages) {
162
- const role = this.mapRoleToGemini(msg.role);
163
- /* assistant: tool_calls -> functionCall */
164
- if (msg.tool_calls) {
165
- pushCurrent();
166
- for (const call of msg.tool_calls) {
167
- this.callIdMap.set(call.id, call.function.name);
168
- gemini.push({
169
- role: 'model',
170
- parts: [
171
- {
172
- functionCall: {
173
- name: call.function.name,
174
- args: JSON.parse(call.function.arguments || '{}'),
175
- },
176
- },
177
- ],
178
- });
179
- }
180
- continue;
181
- }
182
- /* tool → functionResponse */
183
- if (msg.role === 'tool') {
184
- pushCurrent();
185
- const funcName = msg.name ??
186
- this.callIdMap.get(msg.tool_call_id) ??
187
- 'result';
188
- gemini.push({
189
- role: 'user',
190
- parts: [
191
- {
192
- functionResponse: {
193
- name: funcName,
194
- response: this.normalizeToolResult(this.safeJsonParse(msg.content)),
195
- },
196
- },
197
- ],
198
- });
199
- continue;
200
- }
201
- /* normal text */
202
- if (role !== currentRole)
203
- pushCurrent();
204
- currentRole = role;
205
- currentParts.push({ text: msg.content });
206
- }
207
- pushCurrent();
208
- return gemini;
209
- }
210
- /* ────────────────────────────────── */
211
- /* HTTP call */
212
- /* ────────────────────────────────── */
213
- async callGemini(messages, model, stream = false, maxTokens) {
214
- const hasVision = messages.some((m) => Array.isArray(m.content) &&
215
- m.content.some((b) => b?.type === 'image_url' || b?.inlineData));
216
- const contents = hasVision
217
- ? await this.convertVisionMessagesToGeminiFormat(messages)
218
- : this.convertMessagesToGeminiFormat(messages);
219
- const body = {
220
- contents,
221
- generationConfig: {
222
- maxOutputTokens: maxTokens !== undefined ? maxTokens : DEFAULT_MAX_TOKENS,
223
- },
224
- };
225
- if (this.tools.length) {
226
- body.tools = [
227
- {
228
- functionDeclarations: this.tools.map((t) => ({
229
- name: t.name,
230
- description: t.description,
231
- parameters: t.parameters,
232
- })),
233
- },
234
- ];
235
- body.toolConfig = { functionCallingConfig: { mode: 'AUTO' } };
236
- }
237
- const fetchOnce = async (ver, payload) => {
238
- const fn = stream ? 'streamGenerateContent' : 'generateContent';
239
- const alt = stream ? '?alt=sse' : '';
240
- const url = `${ENDPOINT_GEMINI_API}/${ver}/models/${model}:${fn}${alt}${alt ? '&' : '?'}key=${this.apiKey}`;
241
- return ChatServiceHttpClient.post(url, payload);
242
- };
243
- const isLite = /flash[-_]lite/.test(model);
244
- const isGemini25 = /gemini-2\.5/.test(model);
245
- const firstVer = isLite || isGemini25 ? 'v1beta' : 'v1';
246
- const tryApi = async () => {
247
- try {
248
- const payload = firstVer === 'v1' ? body : this.adaptKeysForApi(body); // snake_case conversion
249
- return await fetchOnce(firstVer, payload);
250
- }
251
- catch (e) {
252
- // Only retry v1beta if camel/snake case mismatch error occurs in models that don't require v1beta
253
- if (!(isLite || isGemini25) &&
254
- /Unknown name|Cannot find field|404/.test(e.message)) {
255
- return await fetchOnce('v1beta', this.adaptKeysForApi(body));
256
- }
257
- throw e; // otherwise, throw to upper layer
258
- }
259
- };
260
- const res = await tryApi();
261
- if (!res.ok)
262
- throw new Error(`Gemini HTTP ${res.status}`);
263
- return res;
264
- }
265
- /**
266
- * Convert AITuber OnAir vision messages to Gemini format
267
- * @param messages Array of vision messages
268
- * @returns Gemini formatted vision messages
269
- */
270
- async convertVisionMessagesToGeminiFormat(messages) {
271
- const geminiMessages = [];
272
- let currentRole = null;
273
- let currentParts = [];
274
- for (const msg of messages) {
275
- // Map AITuber OnAir roles to Gemini roles
276
- const role = this.mapRoleToGemini(msg.role);
277
- /* ----------- OpenAI compatible tool metadata ----------- */
278
- // assistant: { tool_calls:[{id,name,function:{arguments}}] }
279
- if (msg.tool_calls) {
280
- for (const call of msg.tool_calls) {
281
- // Gemini does not need id. Insert functionCall into parts
282
- geminiMessages.push({
283
- role: 'model',
284
- parts: [
285
- {
286
- functionCall: {
287
- name: call.function.name,
288
- args: JSON.parse(call.function.arguments || '{}'),
289
- },
290
- },
291
- ],
292
- });
293
- }
294
- continue;
295
- }
296
- // tool role → user role + functionResponse
297
- if (msg.role === 'tool') {
298
- const funcName = msg.name ??
299
- this.callIdMap.get(msg.tool_call_id) ??
300
- 'result';
301
- geminiMessages.push({
302
- role: 'user',
303
- parts: [
304
- {
305
- functionResponse: {
306
- name: funcName,
307
- response: this.normalizeToolResult(this.safeJsonParse(msg.content)),
308
- },
309
- },
310
- ],
311
- });
312
- continue;
313
- }
314
- // If role changes, start a new message
315
- if (role !== currentRole && currentParts.length > 0) {
316
- geminiMessages.push({
317
- role: currentRole,
318
- parts: [...currentParts],
319
- });
320
- currentParts = [];
321
- }
322
- currentRole = role;
323
- // If the message has content blocks, process them
324
- if (typeof msg.content === 'string') {
325
- currentParts.push({ text: msg.content });
326
- }
327
- else if (Array.isArray(msg.content)) {
328
- // Process each content block (text or image)
329
- for (const block of msg.content) {
330
- if (block.type === 'text') {
331
- currentParts.push({ text: block.text });
332
- }
333
- else if (block.type === 'image_url') {
334
- try {
335
- // Fetch the image data from URL
336
- const imageResponse = await ChatServiceHttpClient.get(block.image_url.url);
337
- // Convert image to blob and then to base64
338
- const imageBlob = await imageResponse.blob();
339
- const base64Data = await this.blobToBase64(imageBlob);
340
- // Add image data in Gemini format
341
- currentParts.push({
342
- inlineData: {
343
- mimeType: imageBlob.type || 'image/jpeg',
344
- data: base64Data.split(',')[1], // Remove the "data:image/jpeg;base64," prefix
345
- },
346
- });
347
- }
348
- catch (error) {
349
- console.error('Error processing image:', error);
350
- throw new Error(`Failed to process image: ${error.message}`);
351
- }
352
- }
353
- }
354
- }
355
- }
356
- // Add the last message
357
- if (currentRole && currentParts.length > 0) {
358
- geminiMessages.push({
359
- role: currentRole,
360
- parts: [...currentParts],
361
- });
362
- }
363
- return geminiMessages;
364
- }
365
- /**
366
- * Convert Blob to Base64 string
367
- * @param blob Image blob
368
- * @returns Promise with base64 encoded string
369
- */
370
- blobToBase64(blob) {
371
- return new Promise((resolve, reject) => {
372
- const reader = new FileReader();
373
- reader.onloadend = () => resolve(reader.result);
374
- reader.onerror = reject;
375
- reader.readAsDataURL(blob);
376
- });
377
- }
378
- /**
379
- * Map AITuber OnAir roles to Gemini roles
380
- * @param role AITuber OnAir role
381
- * @returns Gemini role
382
- */
383
- mapRoleToGemini(role) {
384
- switch (role) {
385
- case 'system':
386
- return 'model'; // Gemini uses 'model' for system messages
387
- case 'user':
388
- return 'user';
389
- case 'assistant':
390
- return 'model';
391
- default:
392
- return 'user';
393
- }
394
- }
395
- /* ────────────────────────────────────────────────────────── */
396
- /* Convert NDJSON stream to common format */
397
- /* ────────────────────────────────────────────────────────── */
398
- async parseStream(res, onPartial) {
399
- const reader = res.body.getReader();
400
- const dec = new TextDecoder();
401
- const textBlocks = [];
402
- const toolBlocks = [];
403
- let buf = '';
404
- const flush = (payload) => {
405
- if (!payload || payload === '[DONE]')
406
- return;
407
- let obj;
408
- try {
409
- obj = JSON.parse(payload);
410
- }
411
- catch {
412
- return;
413
- }
414
- for (const cand of obj.candidates ?? []) {
415
- for (const part of cand.content?.parts ?? []) {
416
- if (part.text) {
417
- onPartial(part.text);
418
- StreamTextAccumulator.addTextBlock(textBlocks, part.text);
419
- }
420
- if (part.functionCall) {
421
- toolBlocks.push({
422
- type: 'tool_use',
423
- id: this.genUUID(),
424
- name: part.functionCall.name,
425
- input: part.functionCall.args ?? {},
426
- });
427
- }
428
- if (part.functionResponse) {
429
- toolBlocks.push({
430
- type: 'tool_result',
431
- tool_use_id: part.functionResponse.name,
432
- content: JSON.stringify(part.functionResponse.response),
433
- });
434
- }
435
- }
436
- }
437
- };
438
- while (true) {
439
- const { done, value } = await reader.read();
440
- if (done)
441
- break;
442
- buf += dec.decode(value, { stream: true });
443
- let nl;
444
- while ((nl = buf.indexOf('\n')) !== -1) {
445
- let line = buf.slice(0, nl);
446
- buf = buf.slice(nl + 1);
447
- if (line.endsWith('\r'))
448
- line = line.slice(0, -1); // CRLF support
449
- if (!line.trim()) {
450
- flush('');
451
- continue;
452
- } // keep-alive empty line
453
- if (line.startsWith('data:'))
454
- line = line.slice(5).trim();
455
- if (!line)
456
- continue;
457
- flush(line);
458
- }
459
- }
460
- if (buf)
461
- flush(buf);
462
- const blocks = [...textBlocks, ...toolBlocks];
463
- return {
464
- blocks,
465
- stop_reason: toolBlocks.some((b) => b.type === 'tool_use')
466
- ? 'tool_use'
467
- : 'end',
468
- };
469
- }
470
- /* ────────────────────────────────────────────────────────── */
471
- /* Convert JSON of non-stream (= generateContent) */
472
- /* ────────────────────────────────────────────────────────── */
473
- parseOneShot(data) {
474
- const textBlocks = [];
475
- const toolBlocks = [];
476
- for (const cand of data.candidates ?? []) {
477
- for (const part of cand.content?.parts ?? []) {
478
- if (part.text) {
479
- textBlocks.push({ type: 'text', text: part.text });
480
- }
481
- if (part.functionCall) {
482
- toolBlocks.push({
483
- type: 'tool_use',
484
- id: this.genUUID(),
485
- name: part.functionCall.name,
486
- input: part.functionCall.args ?? {},
487
- });
488
- }
489
- if (part.functionResponse) {
490
- toolBlocks.push({
491
- type: 'tool_result',
492
- tool_use_id: part.functionResponse.name,
493
- content: JSON.stringify(part.functionResponse.response),
494
- });
495
- }
496
- }
497
- }
498
- const blocks = [...textBlocks, ...toolBlocks];
499
- return {
500
- blocks,
501
- stop_reason: toolBlocks.some((b) => b.type === 'tool_use')
502
- ? 'tool_use'
503
- : 'end',
504
- };
505
- }
506
- /* ────────────────────────────────────────────────────────── */
507
- /* chatOnce (text) */
508
- /* ────────────────────────────────────────────────────────── */
509
- async chatOnce(messages, stream = true, onPartialResponse = () => { }, maxTokens) {
510
- const res = await this.callGemini(messages, this.model, stream, maxTokens);
511
- return stream
512
- ? this.parseStream(res, onPartialResponse)
513
- : this.parseOneShot(await res.json());
514
- }
515
- /* ────────────────────────────────────────────────────────── */
516
- /* visionChatOnce (images) */
517
- /* ────────────────────────────────────────────────────────── */
518
- async visionChatOnce(messages, stream = false, onPartialResponse = () => { }, maxTokens) {
519
- const res = await this.callGemini(messages, this.visionModel, stream, maxTokens);
520
- return stream
521
- ? this.parseStream(res, onPartialResponse)
522
- : this.parseOneShot(await res.json());
523
- }
524
- /* ────────────────────────────────────────────────────────── */
525
- /* UUID helper */
526
- /* ────────────────────────────────────────────────────────── */
527
- genUUID() {
528
- return typeof crypto !== 'undefined' && crypto.randomUUID
529
- ? crypto.randomUUID()
530
- : 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
531
- const r = (Math.random() * 16) | 0;
532
- const v = c === 'x' ? r : (r & 0x3) | 0x8;
533
- return v.toString(16);
534
- });
535
- }
536
- }
537
- //# sourceMappingURL=GeminiChatService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GeminiChatService.js","sourceRoot":"","sources":["../../../../../src/services/chat/providers/gemini/GeminiChatService.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { ChatService } from '../../ChatService';
2
- import { ChatServiceOptions, ChatServiceProvider } from '../ChatServiceProvider';
3
- /**
4
- * Gemini API provider implementation
5
- */
6
- export declare class GeminiChatServiceProvider implements ChatServiceProvider {
7
- /**
8
- * Create a chat service instance
9
- * @param options Service options
10
- * @returns GeminiChatService instance
11
- */
12
- createChatService(options: ChatServiceOptions): ChatService;
13
- /**
14
- * Get the provider name
15
- * @returns Provider name ('gemini')
16
- */
17
- getProviderName(): string;
18
- /**
19
- * Get the list of supported models
20
- * @returns Array of supported model names
21
- */
22
- getSupportedModels(): string[];
23
- /**
24
- * Get the default model
25
- * @returns Default model name
26
- */
27
- getDefaultModel(): string;
28
- /**
29
- * Check if this provider supports vision (image processing)
30
- * @returns Vision support status (true)
31
- */
32
- supportsVision(): boolean;
33
- /**
34
- * Check if a specific model supports vision capabilities
35
- * @param model The model name to check
36
- * @returns True if the model supports vision, false otherwise
37
- */
38
- supportsVisionForModel(model: string): boolean;
39
- }