@aituber-onair/core 0.6.0 → 0.8.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.
Files changed (81) hide show
  1. package/README.md +639 -7
  2. package/dist/constants/gemini.d.ts +1 -1
  3. package/dist/constants/gemini.js +1 -1
  4. package/dist/constants/gemini.js.map +1 -1
  5. package/dist/core/AITuberOnAirCore.d.ts +32 -1
  6. package/dist/core/AITuberOnAirCore.js +37 -1
  7. package/dist/core/AITuberOnAirCore.js.map +1 -1
  8. package/dist/core/ChatProcessor.d.ts +9 -1
  9. package/dist/core/ChatProcessor.js +116 -51
  10. package/dist/core/ChatProcessor.js.map +1 -1
  11. package/dist/core/MemoryManager.js +10 -9
  12. package/dist/core/MemoryManager.js.map +1 -1
  13. package/dist/core/ToolExecutor.d.ts +9 -0
  14. package/dist/core/ToolExecutor.js +39 -0
  15. package/dist/core/ToolExecutor.js.map +1 -0
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +1 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/services/chat/ChatService.d.ts +13 -0
  20. package/dist/services/chat/providers/claude/ClaudeChatService.d.ts +45 -4
  21. package/dist/services/chat/providers/claude/ClaudeChatService.js +227 -180
  22. package/dist/services/chat/providers/claude/ClaudeChatService.js.map +1 -1
  23. package/dist/services/chat/providers/claude/ClaudeChatServiceProvider.js +1 -1
  24. package/dist/services/chat/providers/claude/ClaudeChatServiceProvider.js.map +1 -1
  25. package/dist/services/chat/providers/gemini/GeminiChatService.d.ts +19 -16
  26. package/dist/services/chat/providers/gemini/GeminiChatService.js +376 -157
  27. package/dist/services/chat/providers/gemini/GeminiChatService.js.map +1 -1
  28. package/dist/services/chat/providers/gemini/GeminiChatServiceProvider.js +1 -1
  29. package/dist/services/chat/providers/gemini/GeminiChatServiceProvider.js.map +1 -1
  30. package/dist/services/chat/providers/openai/OpenAIChatService.d.ts +21 -3
  31. package/dist/services/chat/providers/openai/OpenAIChatService.js +205 -114
  32. package/dist/services/chat/providers/openai/OpenAIChatService.js.map +1 -1
  33. package/dist/services/chat/providers/openai/OpenAIChatServiceProvider.js +3 -1
  34. package/dist/services/chat/providers/openai/OpenAIChatServiceProvider.js.map +1 -1
  35. package/dist/services/voice/VoiceEngineAdapter.js +1 -3
  36. package/dist/services/voice/VoiceEngineAdapter.js.map +1 -1
  37. package/dist/services/voice/VoiceService.d.ts +2 -2
  38. package/dist/services/voice/engines/VoiceEngineFactory.d.ts +2 -2
  39. package/dist/services/voice/engines/VoicePeakEngine.js +2 -0
  40. package/dist/services/voice/engines/VoicePeakEngine.js.map +1 -1
  41. package/dist/services/voice/messages.js +2 -0
  42. package/dist/services/voice/messages.js.map +1 -1
  43. package/dist/types/chat.d.ts +2 -2
  44. package/dist/types/index.d.ts +1 -0
  45. package/dist/types/index.js +2 -0
  46. package/dist/types/index.js.map +1 -1
  47. package/dist/types/toolChat.d.ts +46 -0
  48. package/dist/types/toolChat.js +2 -0
  49. package/dist/types/toolChat.js.map +1 -0
  50. package/dist/types/voice.d.ts +3 -3
  51. package/dist/types/voice.js +1 -1
  52. package/dist/types/voice.js.map +1 -1
  53. package/dist/types/voiceEngine.d.ts +1 -1
  54. package/package.json +1 -1
  55. package/dist/constants/api.d.ts +0 -4
  56. package/dist/constants/api.js +0 -13
  57. package/dist/constants/api.js.map +0 -1
  58. package/dist/constants/openaiApi.d.ts +0 -15
  59. package/dist/constants/openaiApi.js +0 -15
  60. package/dist/constants/openaiApi.js.map +0 -1
  61. package/dist/services/chat/ClaudeChatService.d.ts +0 -64
  62. package/dist/services/chat/ClaudeChatService.js +0 -237
  63. package/dist/services/chat/ClaudeChatService.js.map +0 -1
  64. package/dist/services/chat/GeminiChatService.d.ts +0 -63
  65. package/dist/services/chat/GeminiChatService.js +0 -314
  66. package/dist/services/chat/GeminiChatService.js.map +0 -1
  67. package/dist/services/chat/OpenAIChatService.d.ts +0 -39
  68. package/dist/services/chat/OpenAIChatService.js +0 -171
  69. package/dist/services/chat/OpenAIChatService.js.map +0 -1
  70. package/dist/services/chat/OpenAISummarizer.d.ts +0 -25
  71. package/dist/services/chat/OpenAISummarizer.js +0 -70
  72. package/dist/services/chat/OpenAISummarizer.js.map +0 -1
  73. package/dist/services/chat/providers/ClaudeChatServiceProvider.d.ts +0 -39
  74. package/dist/services/chat/providers/ClaudeChatServiceProvider.js +0 -57
  75. package/dist/services/chat/providers/ClaudeChatServiceProvider.js.map +0 -1
  76. package/dist/services/chat/providers/GeminiChatServiceProvider.d.ts +0 -39
  77. package/dist/services/chat/providers/GeminiChatServiceProvider.js +0 -57
  78. package/dist/services/chat/providers/GeminiChatServiceProvider.js.map +0 -1
  79. package/dist/services/chat/providers/OpenAIChatServiceProvider.d.ts +0 -39
  80. package/dist/services/chat/providers/OpenAIChatServiceProvider.js +0 -57
  81. package/dist/services/chat/providers/OpenAIChatServiceProvider.js.map +0 -1
@@ -1,314 +0,0 @@
1
- import { ENDPOINT_GEMINI_API, MODEL_GEMINI_2_0_FLASH_LITE, GEMINI_VISION_SUPPORTED_MODELS } from '../../constants';
2
- /**
3
- * Gemini implementation of ChatService
4
- */
5
- export class GeminiChatService {
6
- /**
7
- * Constructor
8
- * @param apiKey Google API key
9
- * @param model Name of the model to use
10
- * @param visionModel Name of the vision model
11
- */
12
- constructor(apiKey, model = MODEL_GEMINI_2_0_FLASH_LITE, visionModel = MODEL_GEMINI_2_0_FLASH_LITE) {
13
- /** Provider name */
14
- this.provider = 'gemini';
15
- this.apiKey = apiKey;
16
- this.model = model;
17
- this.visionModel = visionModel;
18
- }
19
- /**
20
- * Get the current model name
21
- * @returns Model name
22
- */
23
- getModel() {
24
- return this.model;
25
- }
26
- /**
27
- * Process chat messages
28
- * @param messages Array of messages to send
29
- * @param onPartialResponse Callback to receive each part of streaming response
30
- * @param onCompleteResponse Callback to execute when response is complete
31
- */
32
- async processChat(messages, onPartialResponse, onCompleteResponse) {
33
- try {
34
- // Convert messages to Gemini format
35
- const geminiMessages = this.convertMessagesToGeminiFormat(messages);
36
- // Create the endpoint URL with API key
37
- const apiUrl = `${ENDPOINT_GEMINI_API}/models/${this.model}:streamGenerateContent?key=${this.apiKey}`;
38
- // Request to Gemini API
39
- const response = await fetch(apiUrl, {
40
- method: 'POST',
41
- headers: {
42
- 'Content-Type': 'application/json',
43
- },
44
- body: JSON.stringify({
45
- contents: geminiMessages,
46
- generationConfig: {
47
- temperature: 0.7,
48
- topK: 40,
49
- topP: 0.95,
50
- maxOutputTokens: 1000,
51
- },
52
- }),
53
- });
54
- if (!response.ok) {
55
- const errorData = await response.json();
56
- throw new Error(`Gemini API error: ${errorData.error?.message || response.statusText}`);
57
- }
58
- // Process streaming response
59
- const reader = response.body?.getReader();
60
- const decoder = new TextDecoder('utf-8');
61
- let fullText = '';
62
- if (!reader) {
63
- throw new Error('Failed to get response reader');
64
- }
65
- // get full response
66
- let responseText = '';
67
- while (true) {
68
- const { done, value } = await reader.read();
69
- if (done)
70
- break;
71
- const chunk = decoder.decode(value);
72
- responseText += chunk;
73
- }
74
- // parse response
75
- try {
76
- const responseArray = JSON.parse(responseText);
77
- // process each response
78
- for (const item of responseArray) {
79
- if (item.candidates && item.candidates.length > 0) {
80
- const content = item.candidates[0].content;
81
- if (content && content.parts && content.parts.length > 0) {
82
- const text = content.parts[0].text || '';
83
- if (text) {
84
- fullText += text;
85
- onPartialResponse(text);
86
- }
87
- }
88
- }
89
- }
90
- }
91
- catch (err) {
92
- console.error('Error parsing Gemini response:', err);
93
- throw new Error(`Failed to parse Gemini response: ${err.message}`);
94
- }
95
- // Complete response callback
96
- await onCompleteResponse(fullText);
97
- }
98
- catch (error) {
99
- console.error('Error in processChat:', error);
100
- throw error;
101
- }
102
- }
103
- /**
104
- * Process chat messages with images
105
- * @param messages Array of messages to send (including images)
106
- * @param onPartialResponse Callback to receive each part of streaming response
107
- * @param onCompleteResponse Callback to execute when response is complete
108
- * @throws Error if the selected model doesn't support vision
109
- */
110
- async processVisionChat(messages, onPartialResponse, onCompleteResponse) {
111
- try {
112
- // Check if the vision model supports vision capabilities
113
- if (!GEMINI_VISION_SUPPORTED_MODELS.includes(this.visionModel)) {
114
- throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);
115
- }
116
- // Convert messages to Gemini vision format
117
- const geminiMessages = await this.convertVisionMessagesToGeminiFormat(messages);
118
- // Create the endpoint URL with API key
119
- const apiUrl = `${ENDPOINT_GEMINI_API}/models/${this.visionModel}:streamGenerateContent?key=${this.apiKey}`;
120
- // Request to Gemini API
121
- const response = await fetch(apiUrl, {
122
- method: 'POST',
123
- headers: {
124
- 'Content-Type': 'application/json',
125
- },
126
- body: JSON.stringify({
127
- contents: geminiMessages,
128
- generationConfig: {
129
- temperature: 0.7,
130
- topK: 40,
131
- topP: 0.95,
132
- maxOutputTokens: 1000,
133
- },
134
- }),
135
- });
136
- if (!response.ok) {
137
- const errorData = await response.json();
138
- throw new Error(`Gemini API error: ${errorData.error?.message || response.statusText}`);
139
- }
140
- // Process streaming response
141
- const reader = response.body?.getReader();
142
- const decoder = new TextDecoder('utf-8');
143
- let fullText = '';
144
- if (!reader) {
145
- throw new Error('Failed to get response reader');
146
- }
147
- // get full response
148
- let responseText = '';
149
- while (true) {
150
- const { done, value } = await reader.read();
151
- if (done)
152
- break;
153
- const chunk = decoder.decode(value);
154
- responseText += chunk;
155
- }
156
- // parse response
157
- try {
158
- const responseArray = JSON.parse(responseText);
159
- // process each response
160
- for (const item of responseArray) {
161
- if (item.candidates && item.candidates.length > 0) {
162
- const content = item.candidates[0].content;
163
- if (content && content.parts && content.parts.length > 0) {
164
- const text = content.parts[0].text || '';
165
- if (text) {
166
- fullText += text;
167
- onPartialResponse(text);
168
- }
169
- }
170
- }
171
- }
172
- }
173
- catch (err) {
174
- console.error('Error parsing Gemini response:', err);
175
- throw new Error(`Failed to parse Gemini response: ${err.message}`);
176
- }
177
- // Complete response callback
178
- await onCompleteResponse(fullText);
179
- }
180
- catch (error) {
181
- console.error('Error in processVisionChat:', error);
182
- throw error;
183
- }
184
- }
185
- /**
186
- * Convert AITuber OnAir messages to Gemini format
187
- * @param messages Array of messages
188
- * @returns Gemini formatted messages
189
- */
190
- convertMessagesToGeminiFormat(messages) {
191
- const geminiMessages = [];
192
- let currentRole = null;
193
- let currentParts = [];
194
- for (const msg of messages) {
195
- // Map AITuber OnAir roles to Gemini roles
196
- const role = this.mapRoleToGemini(msg.role);
197
- // If role changes, start a new message
198
- if (role !== currentRole && currentParts.length > 0) {
199
- geminiMessages.push({
200
- role: currentRole,
201
- parts: [...currentParts],
202
- });
203
- currentParts = [];
204
- }
205
- currentRole = role;
206
- currentParts.push({ text: msg.content });
207
- }
208
- // Add the last message
209
- if (currentRole && currentParts.length > 0) {
210
- geminiMessages.push({
211
- role: currentRole,
212
- parts: [...currentParts],
213
- });
214
- }
215
- return geminiMessages;
216
- }
217
- /**
218
- * Convert AITuber OnAir vision messages to Gemini format
219
- * @param messages Array of vision messages
220
- * @returns Gemini formatted vision messages
221
- */
222
- async convertVisionMessagesToGeminiFormat(messages) {
223
- const geminiMessages = [];
224
- let currentRole = null;
225
- let currentParts = [];
226
- for (const msg of messages) {
227
- // Map AITuber OnAir roles to Gemini roles
228
- const role = this.mapRoleToGemini(msg.role);
229
- // If role changes, start a new message
230
- if (role !== currentRole && currentParts.length > 0) {
231
- geminiMessages.push({
232
- role: currentRole,
233
- parts: [...currentParts],
234
- });
235
- currentParts = [];
236
- }
237
- currentRole = role;
238
- // If the message has content blocks, process them
239
- if (typeof msg.content === 'string') {
240
- currentParts.push({ text: msg.content });
241
- }
242
- else if (Array.isArray(msg.content)) {
243
- // Process each content block (text or image)
244
- for (const block of msg.content) {
245
- if (block.type === 'text') {
246
- currentParts.push({ text: block.text });
247
- }
248
- else if (block.type === 'image_url') {
249
- try {
250
- // Fetch the image data from URL
251
- const imageResponse = await fetch(block.image_url.url);
252
- if (!imageResponse.ok) {
253
- throw new Error(`Failed to fetch image: ${imageResponse.statusText}`);
254
- }
255
- // Convert image to blob and then to base64
256
- const imageBlob = await imageResponse.blob();
257
- const base64Data = await this.blobToBase64(imageBlob);
258
- // Add image data in Gemini format
259
- currentParts.push({
260
- inlineData: {
261
- mimeType: imageBlob.type || 'image/jpeg',
262
- data: base64Data.split(',')[1] // Remove the "data:image/jpeg;base64," prefix
263
- },
264
- });
265
- }
266
- catch (error) {
267
- console.error('Error processing image:', error);
268
- throw new Error(`Failed to process image: ${error.message}`);
269
- }
270
- }
271
- }
272
- }
273
- }
274
- // Add the last message
275
- if (currentRole && currentParts.length > 0) {
276
- geminiMessages.push({
277
- role: currentRole,
278
- parts: [...currentParts],
279
- });
280
- }
281
- return geminiMessages;
282
- }
283
- /**
284
- * Convert Blob to Base64 string
285
- * @param blob Image blob
286
- * @returns Promise with base64 encoded string
287
- */
288
- blobToBase64(blob) {
289
- return new Promise((resolve, reject) => {
290
- const reader = new FileReader();
291
- reader.onloadend = () => resolve(reader.result);
292
- reader.onerror = reject;
293
- reader.readAsDataURL(blob);
294
- });
295
- }
296
- /**
297
- * Map AITuber OnAir roles to Gemini roles
298
- * @param role AITuber OnAir role
299
- * @returns Gemini role
300
- */
301
- mapRoleToGemini(role) {
302
- switch (role) {
303
- case 'system':
304
- return 'model'; // Gemini uses 'model' for system messages
305
- case 'user':
306
- return 'user';
307
- case 'assistant':
308
- return 'model';
309
- default:
310
- return 'user';
311
- }
312
- }
313
- }
314
- //# sourceMappingURL=GeminiChatService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GeminiChatService.js","sourceRoot":"","sources":["../../../src/services/chat/GeminiChatService.ts"],"names":[],"mappings":"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"}
@@ -1,39 +0,0 @@
1
- import { ChatService } from './ChatService';
2
- import { Message, MessageWithVision } from '../../types';
3
- /**
4
- * OpenAI implementation of ChatService
5
- */
6
- export declare class OpenAIChatService implements ChatService {
7
- private apiKey;
8
- private model;
9
- private visionModel;
10
- /** Provider name */
11
- readonly provider: string;
12
- /**
13
- * Constructor
14
- * @param apiKey OpenAI API key
15
- * @param model Name of the model to use
16
- * @param visionModel Name of the vision model
17
- */
18
- constructor(apiKey: string, model?: string, visionModel?: string);
19
- /**
20
- * Get the current model name
21
- * @returns Model name
22
- */
23
- getModel(): string;
24
- /**
25
- * Process chat messages
26
- * @param messages Array of messages to send
27
- * @param onPartialResponse Callback to receive each part of streaming response
28
- * @param onCompleteResponse Callback to execute when response is complete
29
- */
30
- processChat(messages: Message[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
31
- /**
32
- * Process chat messages with images
33
- * @param messages Array of messages to send (including images)
34
- * @param onPartialResponse Callback to receive each part of streaming response
35
- * @param onCompleteResponse Callback to execute when response is complete
36
- * @throws Error if the selected model doesn't support vision
37
- */
38
- processVisionChat(messages: MessageWithVision[], onPartialResponse: (text: string) => void, onCompleteResponse: (text: string) => Promise<void>): Promise<void>;
39
- }
@@ -1,171 +0,0 @@
1
- import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, MODEL_GPT_4O_MINI, VISION_SUPPORTED_MODELS } from '../../constants';
2
- /**
3
- * OpenAI implementation of ChatService
4
- */
5
- export class OpenAIChatService {
6
- /**
7
- * Constructor
8
- * @param apiKey OpenAI API key
9
- * @param model Name of the model to use
10
- * @param visionModel Name of the vision model
11
- */
12
- constructor(apiKey, model = MODEL_GPT_4O_MINI, visionModel = MODEL_GPT_4O_MINI) {
13
- /** Provider name */
14
- this.provider = 'openai';
15
- this.apiKey = apiKey;
16
- this.model = model;
17
- this.visionModel = visionModel;
18
- }
19
- /**
20
- * Get the current model name
21
- * @returns Model name
22
- */
23
- getModel() {
24
- return this.model;
25
- }
26
- /**
27
- * Process chat messages
28
- * @param messages Array of messages to send
29
- * @param onPartialResponse Callback to receive each part of streaming response
30
- * @param onCompleteResponse Callback to execute when response is complete
31
- */
32
- async processChat(messages, onPartialResponse, onCompleteResponse) {
33
- try {
34
- // Convert messages to API request format
35
- const apiMessages = messages.map((msg) => ({
36
- role: msg.role,
37
- content: msg.content,
38
- }));
39
- // Request to OpenAI API
40
- const response = await fetch(ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, {
41
- method: 'POST',
42
- headers: {
43
- 'Content-Type': 'application/json',
44
- Authorization: `Bearer ${this.apiKey}`,
45
- },
46
- body: JSON.stringify({
47
- model: this.model,
48
- messages: apiMessages,
49
- stream: true,
50
- }),
51
- });
52
- if (!response.ok) {
53
- const errorData = await response.json();
54
- throw new Error(`OpenAI API error: ${errorData.error?.message || response.statusText}`);
55
- }
56
- // Process streaming response
57
- const reader = response.body?.getReader();
58
- const decoder = new TextDecoder('utf-8');
59
- let fullText = '';
60
- if (!reader) {
61
- throw new Error('Failed to get response reader');
62
- }
63
- while (true) {
64
- const { done, value } = await reader.read();
65
- if (done)
66
- break;
67
- const chunk = decoder.decode(value);
68
- const lines = chunk
69
- .split('\n')
70
- .filter((line) => line.trim() !== '' && line.trim() !== 'data: [DONE]');
71
- for (const line of lines) {
72
- try {
73
- if (!line.startsWith('data: '))
74
- continue;
75
- const jsonStr = line.slice(6); // Remove 'data: ' prefix
76
- if (jsonStr === '[DONE]')
77
- continue;
78
- const json = JSON.parse(jsonStr);
79
- const content = json.choices[0]?.delta?.content || '';
80
- if (content) {
81
- fullText += content;
82
- onPartialResponse(content);
83
- }
84
- }
85
- catch (e) {
86
- console.error('Error parsing stream:', e);
87
- }
88
- }
89
- }
90
- // Complete response callback
91
- await onCompleteResponse(fullText);
92
- }
93
- catch (error) {
94
- console.error('Error in processChat:', error);
95
- throw error;
96
- }
97
- }
98
- /**
99
- * Process chat messages with images
100
- * @param messages Array of messages to send (including images)
101
- * @param onPartialResponse Callback to receive each part of streaming response
102
- * @param onCompleteResponse Callback to execute when response is complete
103
- * @throws Error if the selected model doesn't support vision
104
- */
105
- async processVisionChat(messages, onPartialResponse, onCompleteResponse) {
106
- try {
107
- // Check if the vision model supports vision capabilities
108
- if (!VISION_SUPPORTED_MODELS.includes(this.visionModel)) {
109
- throw new Error(`Model ${this.visionModel} does not support vision capabilities.`);
110
- }
111
- const response = await fetch(ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, {
112
- method: 'POST',
113
- headers: {
114
- 'Content-Type': 'application/json',
115
- Authorization: `Bearer ${this.apiKey}`,
116
- },
117
- body: JSON.stringify({
118
- model: this.visionModel,
119
- messages: messages,
120
- max_tokens: 1000,
121
- stream: true,
122
- }),
123
- });
124
- if (!response.ok) {
125
- const errorData = await response.json();
126
- throw new Error(`OpenAI API error: ${errorData.error?.message || response.statusText}`);
127
- }
128
- // Process streaming response
129
- const reader = response.body?.getReader();
130
- const decoder = new TextDecoder('utf-8');
131
- let fullText = '';
132
- if (!reader) {
133
- throw new Error('Failed to get response reader');
134
- }
135
- while (true) {
136
- const { done, value } = await reader.read();
137
- if (done)
138
- break;
139
- const chunk = decoder.decode(value);
140
- const lines = chunk
141
- .split('\n')
142
- .filter((line) => line.trim() !== '' && line.trim() !== 'data: [DONE]');
143
- for (const line of lines) {
144
- try {
145
- if (!line.startsWith('data: '))
146
- continue;
147
- const jsonStr = line.slice(6); // Remove 'data: ' prefix
148
- if (jsonStr === '[DONE]')
149
- continue;
150
- const json = JSON.parse(jsonStr);
151
- const content = json.choices[0]?.delta?.content || '';
152
- if (content) {
153
- fullText += content;
154
- onPartialResponse(content);
155
- }
156
- }
157
- catch (e) {
158
- console.error('Error parsing stream:', e);
159
- }
160
- }
161
- }
162
- // Complete response callback
163
- await onCompleteResponse(fullText);
164
- }
165
- catch (error) {
166
- console.error('Error in processVisionChat:', error);
167
- throw error;
168
- }
169
- }
170
- }
171
- //# sourceMappingURL=OpenAIChatService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAIChatService.js","sourceRoot":"","sources":["../../../src/services/chat/OpenAIChatService.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { Message } from '../../types';
2
- import { Summarizer } from '../../core/MemoryManager';
3
- /**
4
- * Implementation of summarization functionality using OpenAI
5
- */
6
- export declare class OpenAISummarizer implements Summarizer {
7
- private apiKey;
8
- private model;
9
- private defaultPromptTemplate;
10
- /**
11
- * Constructor
12
- * @param apiKey OpenAI API key
13
- * @param model Name of the model to use
14
- * @param defaultPromptTemplate Default prompt template for summarization
15
- */
16
- constructor(apiKey: string, model?: string, defaultPromptTemplate?: string);
17
- /**
18
- * Summarize chat messages
19
- * @param messages Array of messages to summarize
20
- * @param maxLength Maximum number of characters (default 256)
21
- * @param customPrompt Custom prompt template for summarization (optional)
22
- * @returns Summarized text
23
- */
24
- summarize(messages: Message[], maxLength?: number, customPrompt?: string): Promise<string>;
25
- }
@@ -1,70 +0,0 @@
1
- import { ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, MODEL_GPT_4O_MINI, } from '../../constants';
2
- import { DEFAULT_SUMMARY_PROMPT_TEMPLATE } from '../../constants/prompts';
3
- /**
4
- * Implementation of summarization functionality using OpenAI
5
- */
6
- export class OpenAISummarizer {
7
- /**
8
- * Constructor
9
- * @param apiKey OpenAI API key
10
- * @param model Name of the model to use
11
- * @param defaultPromptTemplate Default prompt template for summarization
12
- */
13
- constructor(apiKey, model = MODEL_GPT_4O_MINI, defaultPromptTemplate = DEFAULT_SUMMARY_PROMPT_TEMPLATE) {
14
- this.apiKey = apiKey;
15
- this.model = model;
16
- this.defaultPromptTemplate = defaultPromptTemplate;
17
- }
18
- /**
19
- * Summarize chat messages
20
- * @param messages Array of messages to summarize
21
- * @param maxLength Maximum number of characters (default 256)
22
- * @param customPrompt Custom prompt template for summarization (optional)
23
- * @returns Summarized text
24
- */
25
- async summarize(messages, maxLength = 256, customPrompt) {
26
- try {
27
- // Create system prompt
28
- const promptTemplate = customPrompt || this.defaultPromptTemplate;
29
- const systemPrompt = promptTemplate.replace('{maxLength}', maxLength.toString());
30
- // Join message content
31
- const conversationText = messages
32
- .map((msg) => `${msg.role}: ${msg.content}`)
33
- .join('\n');
34
- // API request
35
- const response = await fetch(ENDPOINT_OPENAI_CHAT_COMPLETIONS_API, {
36
- method: 'POST',
37
- headers: {
38
- 'Content-Type': 'application/json',
39
- Authorization: `Bearer ${this.apiKey}`,
40
- },
41
- body: JSON.stringify({
42
- model: this.model,
43
- messages: [
44
- {
45
- role: 'system',
46
- content: systemPrompt,
47
- },
48
- {
49
- role: 'user',
50
- content: conversationText,
51
- },
52
- ],
53
- max_tokens: maxLength,
54
- }),
55
- });
56
- if (!response.ok) {
57
- const errorData = await response.json();
58
- throw new Error(`OpenAI API error: ${errorData.error?.message || response.statusText}`);
59
- }
60
- const data = await response.json();
61
- return data.choices[0]?.message?.content || '';
62
- }
63
- catch (error) {
64
- console.error('Error in summarize:', error);
65
- // Error fallback - simple summary
66
- return `${messages.length} messages. Latest topic: ${messages[messages.length - 1]?.content.substring(0, 50) || 'none'}...`;
67
- }
68
- }
69
- }
70
- //# sourceMappingURL=OpenAISummarizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAISummarizer.js","sourceRoot":"","sources":["../../../src/services/chat/OpenAISummarizer.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oCAAoC,EACpC,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAE1E;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAK3B;;;;;OAKG;IACH,YACE,MAAc,EACd,QAAgB,iBAAiB,EACjC,wBAAgC,+BAA+B;QAE/D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,SAAS,CACb,QAAmB,EACnB,YAAoB,GAAG,EACvB,YAAqB;QAErB,IAAI,CAAC;YACH,uBAAuB;YACvB,MAAM,cAAc,GAAG,YAAY,IAAI,IAAI,CAAC,qBAAqB,CAAC;YAClE,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CACzC,aAAa,EACb,SAAS,CAAC,QAAQ,EAAE,CACrB,CAAC;YAEF,uBAAuB;YACvB,MAAM,gBAAgB,GAAG,QAAQ;iBAC9B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;iBAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,cAAc;YACd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oCAAoC,EAAE;gBACjE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,QAAQ;4BACd,OAAO,EAAE,YAAY;yBACtB;wBACD;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE,gBAAgB;yBAC1B;qBACF;oBACD,UAAU,EAAE,SAAS;iBACtB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CACb,qBAAqB,SAAS,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAC5C,kCAAkC;YAClC,OAAO,GAAG,QAAQ,CAAC,MAAM,4BACvB,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAC7D,KAAK,CAAC;QACR,CAAC;IACH,CAAC;CACF"}