@mate-academy/llm-gateway 6.0.0 → 6.2.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 (103) hide show
  1. package/dist/LLMError.d.ts +12 -0
  2. package/dist/LLMError.js +36 -0
  3. package/dist/LLMError.js.map +1 -0
  4. package/dist/LLMService.constants.d.ts +792 -2
  5. package/dist/LLMService.constants.js +5 -1
  6. package/dist/LLMService.constants.js.map +1 -1
  7. package/dist/LLMService.typedefs.d.ts +24 -2
  8. package/dist/LLMService.typedefs.js +1 -0
  9. package/dist/LLMService.typedefs.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.js +1 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.d.ts +72 -0
  14. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.js +6 -0
  15. package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.js.map +1 -1
  16. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.d.ts +8 -7
  17. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js +217 -31
  18. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js.map +1 -1
  19. package/dist/providers/LLMAPI/LLMAPI.constants.d.ts +884 -0
  20. package/dist/providers/LLMAPI/LLMAPI.constants.js +282 -0
  21. package/dist/providers/LLMAPI/LLMAPI.constants.js.map +1 -0
  22. package/dist/providers/LLMAPI/LLMAPI.entity.d.ts +6 -0
  23. package/dist/providers/LLMAPI/LLMAPI.entity.js +49 -0
  24. package/dist/providers/LLMAPI/LLMAPI.entity.js.map +1 -0
  25. package/dist/providers/LLMAPI/LLMAPI.typedefs.d.ts +48 -0
  26. package/dist/providers/LLMAPI/LLMAPI.typedefs.js +46 -0
  27. package/dist/providers/LLMAPI/LLMAPI.typedefs.js.map +1 -0
  28. package/dist/providers/LLMAPI/LLMAPIService.factory.d.ts +6 -0
  29. package/dist/providers/LLMAPI/LLMAPIService.factory.js +19 -0
  30. package/dist/providers/LLMAPI/LLMAPIService.factory.js.map +1 -0
  31. package/dist/providers/LLMAPI/index.d.ts +6 -0
  32. package/dist/providers/LLMAPI/index.js +23 -0
  33. package/dist/providers/LLMAPI/index.js.map +1 -0
  34. package/dist/providers/LLMAPI/schemas/LLMAPISchemaAdapter.d.ts +3 -0
  35. package/dist/providers/LLMAPI/schemas/LLMAPISchemaAdapter.js +8 -0
  36. package/dist/providers/LLMAPI/schemas/LLMAPISchemaAdapter.js.map +1 -0
  37. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.d.ts +34 -0
  38. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.js +497 -0
  39. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.js.map +1 -0
  40. package/dist/providers/LLMAPI/services/LLMAPICompletion.service.d.ts +18 -0
  41. package/dist/providers/LLMAPI/services/LLMAPICompletion.service.js +138 -0
  42. package/dist/providers/LLMAPI/services/LLMAPICompletion.service.js.map +1 -0
  43. package/dist/providers/LLMAPI/services/index.d.ts +2 -0
  44. package/dist/providers/LLMAPI/services/index.js +19 -0
  45. package/dist/providers/LLMAPI/services/index.js.map +1 -0
  46. package/dist/providers/LLMAPI/utilities/LLMAPIJsonFixer.d.ts +22 -0
  47. package/dist/providers/LLMAPI/utilities/LLMAPIJsonFixer.js +228 -0
  48. package/dist/providers/LLMAPI/utilities/LLMAPIJsonFixer.js.map +1 -0
  49. package/dist/providers/LLMAPI/utilities/index.d.ts +1 -0
  50. package/dist/providers/LLMAPI/utilities/index.js +7 -0
  51. package/dist/providers/LLMAPI/utilities/index.js.map +1 -0
  52. package/dist/providers/OpenAI/OpenAI.constants.d.ts +165 -0
  53. package/dist/providers/OpenAI/OpenAI.constants.js +11 -0
  54. package/dist/providers/OpenAI/OpenAI.constants.js.map +1 -1
  55. package/dist/providers/OpenAI/OpenAI.typedefs.d.ts +6 -0
  56. package/dist/providers/OpenAI/OpenAI.typedefs.js +9 -1
  57. package/dist/providers/OpenAI/OpenAI.typedefs.js.map +1 -1
  58. package/dist/providers/OpenAI/services/OpenAIAssistance.service.d.ts +9 -7
  59. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js +209 -40
  60. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js.map +1 -1
  61. package/dist/providers/OpenAI/services/OpenAICompletion.service.d.ts +3 -13
  62. package/dist/providers/OpenAI/services/OpenAICompletion.service.js +2 -181
  63. package/dist/providers/OpenAI/services/OpenAICompletion.service.js.map +1 -1
  64. package/dist/providers/OpenAICompatible/OpenAICompatibleCompletion.service.d.ts +21 -0
  65. package/dist/providers/OpenAICompatible/OpenAICompatibleCompletion.service.js +204 -0
  66. package/dist/providers/OpenAICompatible/OpenAICompatibleCompletion.service.js.map +1 -0
  67. package/dist/providers/index.d.ts +1 -0
  68. package/dist/providers/index.js +1 -0
  69. package/dist/providers/index.js.map +1 -1
  70. package/dist/services/LLMAssistanceService.abstract.d.ts +8 -6
  71. package/dist/services/LLMAssistanceService.abstract.js +20 -0
  72. package/dist/services/LLMAssistanceService.abstract.js.map +1 -1
  73. package/dist/services/chatState/CompletionsChatState.d.ts +19 -0
  74. package/dist/services/chatState/CompletionsChatState.js +80 -0
  75. package/dist/services/chatState/CompletionsChatState.js.map +1 -0
  76. package/dist/services/chatState/index.d.ts +1 -0
  77. package/dist/services/chatState/index.js +6 -0
  78. package/dist/services/chatState/index.js.map +1 -0
  79. package/dist/services/fileStorage/FileStorageToolExecutor.d.ts +15 -0
  80. package/dist/services/fileStorage/FileStorageToolExecutor.js +172 -0
  81. package/dist/services/fileStorage/FileStorageToolExecutor.js.map +1 -0
  82. package/dist/services/fileStorage/InMemoryFileStorage.d.ts +20 -0
  83. package/dist/services/fileStorage/InMemoryFileStorage.js +67 -0
  84. package/dist/services/fileStorage/InMemoryFileStorage.js.map +1 -0
  85. package/dist/services/fileStorage/fileStorageTools.d.ts +26 -0
  86. package/dist/services/fileStorage/fileStorageTools.js +67 -0
  87. package/dist/services/fileStorage/fileStorageTools.js.map +1 -0
  88. package/dist/services/fileStorage/index.d.ts +4 -0
  89. package/dist/services/fileStorage/index.js +11 -0
  90. package/dist/services/fileStorage/index.js.map +1 -0
  91. package/dist/utilities/index.d.ts +1 -0
  92. package/dist/utilities/index.js +1 -0
  93. package/dist/utilities/index.js.map +1 -1
  94. package/dist/utilities/schema/SchemaAdapterRegistry.d.ts +2 -0
  95. package/dist/utilities/schema/SchemaAdapterRegistry.js +2 -0
  96. package/dist/utilities/schema/SchemaAdapterRegistry.js.map +1 -1
  97. package/dist/utilities/tools/LLMTool.d.ts +10 -0
  98. package/dist/utilities/tools/LLMTool.js +10 -0
  99. package/dist/utilities/tools/LLMTool.js.map +1 -0
  100. package/dist/utilities/tools/index.d.ts +1 -0
  101. package/dist/utilities/tools/index.js +6 -0
  102. package/dist/utilities/tools/index.js.map +1 -0
  103. package/package.json +1 -1
@@ -0,0 +1,497 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLMAPIAssistanceService = void 0;
4
+ const openai_1 = require("openai");
5
+ const uuid_1 = require("uuid");
6
+ const LLMService_typedefs_1 = require("../../../LLMService.typedefs");
7
+ const LLMService_constants_1 = require("../../../LLMService.constants");
8
+ const serializeError_1 = require("../../../utilities/serializeError");
9
+ const services_1 = require("../../../services");
10
+ const LLMAPI_typedefs_1 = require("../../../providers/LLMAPI/LLMAPI.typedefs");
11
+ const LLMAPI_entity_1 = require("../../../providers/LLMAPI/LLMAPI.entity");
12
+ const utilities_1 = require("../../../providers/LLMAPI/utilities");
13
+ const OpenAI_entity_1 = require("../../../providers/OpenAI/OpenAI.entity");
14
+ const fileStorage_1 = require("../../../services/fileStorage");
15
+ const chatState_1 = require("../../../services/chatState");
16
+ const FILE_STORAGE_TOOL_NAMES = Object.values(fileStorage_1.FileStorageToolName);
17
+ class LLMAPIAssistanceService extends services_1.LLMAssistanceService {
18
+ fileStorage = new fileStorage_1.InMemoryFileStorage();
19
+ chatState = new chatState_1.CompletionsChatState();
20
+ toolExecutor = new fileStorage_1.FileStorageToolExecutor(this.fileStorage);
21
+ jsonFixer;
22
+ fileContextInjectedChats = new Set();
23
+ constructor(logger, reporter, options) {
24
+ super(LLMService_typedefs_1.LLMProviders.LLMAPI, logger, reporter, options);
25
+ }
26
+ get instance() {
27
+ return this.getOrCreateInstance(() => new openai_1.OpenAI({
28
+ ...this.options,
29
+ baseURL: LLMAPI_typedefs_1.LLMAPI_BASE_URL,
30
+ }));
31
+ }
32
+ getJsonFixer() {
33
+ if (!this.jsonFixer) {
34
+ this.jsonFixer = new utilities_1.LLMAPIJsonFixer(this.instance, this.logger, this.reporter);
35
+ }
36
+ return this.jsonFixer;
37
+ }
38
+ async uploadFile(fileOptions) {
39
+ const { path, name, mimeType, abortSignal, reporterContext, } = fileOptions;
40
+ const writeMetrics = this.reporter
41
+ ?.initWriter(reporterContext);
42
+ try {
43
+ abortSignal?.throwIfAborted();
44
+ const existingFile = this.fileStorage
45
+ .getFileByPath(path);
46
+ if (existingFile) {
47
+ await this.writeSuccessMetrics({
48
+ method: this.getMethodName(this.uploadFile),
49
+ model: null,
50
+ usage: {},
51
+ writeMetrics,
52
+ });
53
+ return {
54
+ fileId: existingFile.fileId,
55
+ name: existingFile.name,
56
+ path: existingFile.path,
57
+ mimeType: existingFile.mimeType,
58
+ };
59
+ }
60
+ const storedFile = this.fileStorage
61
+ .addFile(path, name, mimeType);
62
+ const uploadedFileInfo = {
63
+ fileId: storedFile.fileId,
64
+ name: storedFile.name,
65
+ path: storedFile.path,
66
+ mimeType: storedFile.mimeType,
67
+ };
68
+ await this.writeSuccessMetrics({
69
+ method: this.getMethodName(this.uploadFile),
70
+ model: null,
71
+ usage: {},
72
+ writeMetrics,
73
+ });
74
+ return uploadedFileInfo;
75
+ }
76
+ catch (error) {
77
+ await this.writeErrorMetrics({
78
+ method: this.getMethodName(this.uploadFile),
79
+ model: null,
80
+ writeMetrics,
81
+ });
82
+ this.logger
83
+ ?.child(this.getMethodName(this.uploadFile))
84
+ .error('Error uploading file', {
85
+ error: (0, serializeError_1.serializeError)(error),
86
+ file: fileOptions,
87
+ });
88
+ return { error };
89
+ }
90
+ }
91
+ async getFile(path) {
92
+ const storedFile = this.fileStorage.getFileByPath(path);
93
+ if (!storedFile) {
94
+ return null;
95
+ }
96
+ return {
97
+ fileId: storedFile.fileId,
98
+ name: storedFile.name,
99
+ path: storedFile.path,
100
+ mimeType: storedFile.mimeType,
101
+ };
102
+ }
103
+ async deleteFile(fileId) {
104
+ this.fileStorage.removeFile(fileId);
105
+ }
106
+ async createFileStorage(options) {
107
+ const { uploadedFiles, abortSignal, reporterContext, } = options;
108
+ const writeMetrics = this.reporter
109
+ ?.initWriter(reporterContext);
110
+ try {
111
+ abortSignal?.throwIfAborted();
112
+ const storageId = this.fileStorage.createStorage(uploadedFiles.map((file) => file.fileId));
113
+ await this.writeSuccessMetrics({
114
+ method: this.getMethodName(this.createFileStorage),
115
+ model: null,
116
+ usage: {},
117
+ writeMetrics,
118
+ });
119
+ return { storageId };
120
+ }
121
+ catch (error) {
122
+ await this.writeErrorMetrics({
123
+ method: this.getMethodName(this.createFileStorage),
124
+ model: null,
125
+ writeMetrics,
126
+ });
127
+ this.logger
128
+ ?.child(this.getMethodName(this.createFileStorage))
129
+ .error('Error creating file storage', {
130
+ error: (0, serializeError_1.serializeError)(error),
131
+ uploadedFiles,
132
+ });
133
+ return { error };
134
+ }
135
+ }
136
+ async deleteFileStorage(storageId) {
137
+ this.fileStorage.removeStorage(storageId);
138
+ }
139
+ async createChat(options) {
140
+ const { instructions, history = [], storageId, abortSignal, reporterContext, } = options;
141
+ const writeMetrics = this.reporter
142
+ ?.initWriter(reporterContext);
143
+ try {
144
+ abortSignal?.throwIfAborted();
145
+ const chatId = (0, uuid_1.v4)();
146
+ const convertedHistory = LLMAPI_entity_1.LLMAPIEntity
147
+ .convertAssistanceHistoryToCompletions(history);
148
+ this.chatState.createChat(chatId, instructions, storageId, convertedHistory);
149
+ await this.writeSuccessMetrics({
150
+ method: this.getMethodName(this.createChat),
151
+ model: null,
152
+ usage: {},
153
+ writeMetrics,
154
+ });
155
+ return { chatId };
156
+ }
157
+ catch (error) {
158
+ await this.writeErrorMetrics({
159
+ method: this.getMethodName(this.createChat),
160
+ model: null,
161
+ writeMetrics,
162
+ });
163
+ this.logger
164
+ ?.child(this.getMethodName(this.createChat))
165
+ .error('Error creating chat', {
166
+ error: (0, serializeError_1.serializeError)(error),
167
+ options,
168
+ });
169
+ return { error };
170
+ }
171
+ }
172
+ async deleteChat(chatId) {
173
+ this.chatState.deleteChat(chatId);
174
+ this.fileContextInjectedChats.delete(chatId);
175
+ }
176
+ async countTokens(messages) {
177
+ const countTokensFn = OpenAI_entity_1.OpenAIEntity
178
+ .getCountTokensFn();
179
+ const messageContents = messages.flatMap((message) => message.content);
180
+ return countTokensFn(messageContents);
181
+ }
182
+ async assistInChatText(options) {
183
+ const { model, message, chatId, storageId: optionsStorageId, abortSignal, reporterContext, tools: customTools, maxToolIterations = LLMService_constants_1.DEFAULT_MAX_TOOL_ITERATIONS, } = options;
184
+ const writeMetrics = this.reporter
185
+ ?.initWriter(reporterContext);
186
+ try {
187
+ const chat = this.chatState.getChat(chatId);
188
+ if (!chat) {
189
+ throw new Error('Chat session not found');
190
+ }
191
+ const storageId = chat.storageId
192
+ ?? optionsStorageId;
193
+ const convertedMessage = LLMAPI_entity_1.LLMAPIEntity
194
+ .convertAssistanceMessageToCompletion(message);
195
+ this.appendConvertedUserMessage(chatId, convertedMessage);
196
+ this.injectFileContext(chatId, storageId);
197
+ const tools = this.buildToolsArray(storageId, customTools);
198
+ const { text: rawText, totalPromptTokens, totalCachedTokens, totalOutputTokens, totalReasoningTokens, } = await this.executeToolLoop({
199
+ chatId,
200
+ model,
201
+ tools,
202
+ storageId,
203
+ customTools,
204
+ maxToolIterations,
205
+ abortSignal,
206
+ });
207
+ const text = this.stripThinkingTags(rawText);
208
+ this.chatState.appendAssistantMessage(chatId, text);
209
+ const regularInputTokens = totalPromptTokens - totalCachedTokens;
210
+ await this.writeSuccessMetrics({
211
+ method: this.getMethodName(this.assistInChatText),
212
+ model,
213
+ usage: {
214
+ inputTextTokens: regularInputTokens,
215
+ inputCachedTextTokens: totalCachedTokens,
216
+ outputTextTokens: totalOutputTokens,
217
+ outputReasoningTokens: totalReasoningTokens,
218
+ },
219
+ writeMetrics,
220
+ });
221
+ return { text };
222
+ }
223
+ catch (error) {
224
+ await this.writeErrorMetrics({
225
+ method: this.getMethodName(this.assistInChatText),
226
+ model,
227
+ isAborted: abortSignal?.aborted,
228
+ writeMetrics,
229
+ });
230
+ this.logger
231
+ ?.child(this.getMethodName(this.assistInChatText))
232
+ .error('Error assisting in chat', {
233
+ error: (0, serializeError_1.serializeError)(error),
234
+ options,
235
+ });
236
+ return { error };
237
+ }
238
+ }
239
+ async assistInChatStructured(options) {
240
+ const { model, message, chatId, storageId: optionsStorageId, abortSignal, schema, reporterContext, tools: customTools, maxToolIterations = LLMService_constants_1.DEFAULT_MAX_TOOL_ITERATIONS, } = options;
241
+ const writeMetrics = this.reporter
242
+ ?.initWriter(reporterContext);
243
+ try {
244
+ const chat = this.chatState.getChat(chatId);
245
+ if (!chat) {
246
+ throw new Error('Chat session not found');
247
+ }
248
+ const storageId = chat.storageId
249
+ ?? optionsStorageId;
250
+ const convertedMessage = LLMAPI_entity_1.LLMAPIEntity
251
+ .convertAssistanceMessageToCompletion(message);
252
+ this.appendConvertedUserMessage(chatId, convertedMessage);
253
+ this.injectFileContext(chatId, storageId);
254
+ const jsonSchema = schema._toProviderSchema(LLMService_typedefs_1.LLMProviders.LLMAPI);
255
+ const schemaInstruction = 'You MUST respond with a valid JSON object'
256
+ + ' matching this JSON schema:\n'
257
+ + JSON.stringify(jsonSchema, null, 2);
258
+ const messages = this.chatState
259
+ .getMessages(chatId);
260
+ const systemMessageIndex = messages.findIndex((msg) => msg.role === 'system');
261
+ let originalSystemMessage;
262
+ if (systemMessageIndex >= 0) {
263
+ originalSystemMessage
264
+ = messages[systemMessageIndex];
265
+ const existingContent = typeof originalSystemMessage.content
266
+ === 'string'
267
+ ? originalSystemMessage.content
268
+ : '';
269
+ messages[systemMessageIndex] = {
270
+ role: 'system',
271
+ content: existingContent
272
+ ? `${existingContent}\n\n${schemaInstruction}`
273
+ : schemaInstruction,
274
+ };
275
+ }
276
+ else {
277
+ messages.unshift({
278
+ role: 'system',
279
+ content: schemaInstruction,
280
+ });
281
+ }
282
+ const tools = this.buildToolsArray(storageId, customTools);
283
+ const { text: rawText, totalPromptTokens, totalCachedTokens, totalOutputTokens, totalReasoningTokens, } = await this.executeToolLoop({
284
+ chatId,
285
+ model,
286
+ tools,
287
+ storageId,
288
+ customTools,
289
+ maxToolIterations,
290
+ abortSignal,
291
+ responseFormat: { type: 'json_object' },
292
+ });
293
+ const text = this.stripThinkingTags(rawText);
294
+ if (originalSystemMessage) {
295
+ messages[systemMessageIndex] =
296
+ originalSystemMessage;
297
+ }
298
+ else {
299
+ messages.shift();
300
+ }
301
+ this.chatState.appendAssistantMessage(chatId, text);
302
+ const regularInputTokens = totalPromptTokens - totalCachedTokens;
303
+ await this.writeSuccessMetrics({
304
+ method: this.getMethodName(this.assistInChatStructured),
305
+ model,
306
+ usage: {
307
+ inputTextTokens: regularInputTokens,
308
+ inputCachedTextTokens: totalCachedTokens,
309
+ outputTextTokens: totalOutputTokens,
310
+ outputReasoningTokens: totalReasoningTokens,
311
+ },
312
+ writeMetrics,
313
+ });
314
+ return this.getJsonFixer()
315
+ .parseStructuredResponse({
316
+ content: text,
317
+ schema,
318
+ jsonSchema,
319
+ reporterContext,
320
+ abortSignal,
321
+ });
322
+ }
323
+ catch (error) {
324
+ await this.writeErrorMetrics({
325
+ method: this.getMethodName(this.assistInChatStructured),
326
+ model,
327
+ isAborted: abortSignal?.aborted,
328
+ writeMetrics,
329
+ });
330
+ this.logger
331
+ ?.child(this.getMethodName(this.assistInChatStructured))
332
+ .error('Error assisting in chat with structured output', {
333
+ error: (0, serializeError_1.serializeError)(error),
334
+ options,
335
+ });
336
+ return {
337
+ text: '',
338
+ error: error instanceof Error
339
+ ? error
340
+ : new Error(String(error)),
341
+ parseError: 'Failed to get structured response'
342
+ + ' from LLMAPI',
343
+ };
344
+ }
345
+ }
346
+ appendConvertedUserMessage(chatId, convertedMessage) {
347
+ const content = convertedMessage.content;
348
+ if (typeof content === 'string') {
349
+ this.chatState.appendUserMessage(chatId, [{ type: 'text', text: content }]);
350
+ return;
351
+ }
352
+ if (Array.isArray(content)) {
353
+ this.chatState.appendUserMessage(chatId, content);
354
+ return;
355
+ }
356
+ this.chatState.appendUserMessage(chatId, [{ type: 'text', text: '' }]);
357
+ }
358
+ stripThinkingTags(text) {
359
+ return text.replace(/<think>[\s\S]*?<\/think>\s*/g, '').trim();
360
+ }
361
+ injectFileContext(chatId, storageId) {
362
+ if (!storageId) {
363
+ return;
364
+ }
365
+ if (this.fileContextInjectedChats.has(chatId)) {
366
+ return;
367
+ }
368
+ const files = this.fileStorage
369
+ .getStorageFiles(storageId);
370
+ if (files.length === 0) {
371
+ return;
372
+ }
373
+ const fileContents = files.map((file) => `--- File: ${file.name} ---\n`
374
+ + file.content
375
+ + '\n--- End of file ---').join('\n\n');
376
+ const fileContext = 'The following files have been uploaded'
377
+ + ' for reference:\n\n'
378
+ + fileContents;
379
+ const messages = this.chatState
380
+ .getMessages(chatId);
381
+ const systemMessage = messages.find((msg) => msg.role === 'system');
382
+ if (systemMessage && 'content' in systemMessage) {
383
+ const existingContent = typeof systemMessage.content === 'string'
384
+ ? systemMessage.content
385
+ : '';
386
+ systemMessage.content = existingContent
387
+ ? `${existingContent}\n\n${fileContext}`
388
+ : fileContext;
389
+ }
390
+ else {
391
+ messages.unshift({
392
+ role: 'system',
393
+ content: fileContext,
394
+ });
395
+ }
396
+ this.fileContextInjectedChats.add(chatId);
397
+ }
398
+ buildToolsArray(storageId, customTools) {
399
+ const tools = [];
400
+ if (customTools?.length) {
401
+ this.validateToolDefinitions(customTools);
402
+ if (storageId) {
403
+ tools.push(...(0, fileStorage_1.getFileStorageToolsForChatCompletions)());
404
+ }
405
+ for (const tool of customTools) {
406
+ tools.push({
407
+ type: 'function',
408
+ function: {
409
+ name: tool.name,
410
+ description: tool.description,
411
+ parameters: tool.parameters
412
+ ._toProviderSchema(LLMService_typedefs_1.LLMProviders.LLMAPI),
413
+ },
414
+ });
415
+ }
416
+ }
417
+ return tools;
418
+ }
419
+ async executeToolLoop(options) {
420
+ const { chatId, model, tools, storageId, customTools, maxToolIterations, abortSignal, responseFormat, } = options;
421
+ let totalPromptTokens = 0;
422
+ let totalCachedTokens = 0;
423
+ let totalOutputTokens = 0;
424
+ let totalReasoningTokens = 0;
425
+ let lastResponseText = '';
426
+ for (let iteration = 0; iteration < maxToolIterations; iteration++) {
427
+ abortSignal?.throwIfAborted();
428
+ const response = await this.instance
429
+ .chat.completions.create({
430
+ model: model.name,
431
+ messages: this.chatState
432
+ .getMessages(chatId),
433
+ ...model.config,
434
+ ...(tools.length > 0 && { tools }),
435
+ ...(responseFormat && {
436
+ response_format: responseFormat,
437
+ }),
438
+ }, { signal: abortSignal });
439
+ const choice = response.choices[0];
440
+ totalPromptTokens
441
+ += response.usage?.prompt_tokens ?? 0;
442
+ totalCachedTokens
443
+ += response.usage?.prompt_tokens_details
444
+ ?.cached_tokens ?? 0;
445
+ totalOutputTokens
446
+ += response.usage?.completion_tokens ?? 0;
447
+ totalReasoningTokens
448
+ += response.usage?.completion_tokens_details
449
+ ?.reasoning_tokens ?? 0;
450
+ const hasToolCalls = choice?.finish_reason === 'tool_calls'
451
+ && choice.message.tool_calls?.length;
452
+ if (!hasToolCalls) {
453
+ lastResponseText
454
+ = choice?.message.content ?? '';
455
+ break;
456
+ }
457
+ const toolCalls = choice.message
458
+ .tool_calls;
459
+ this.chatState.appendToolCallMessages(chatId, toolCalls);
460
+ const results = await Promise.all(toolCalls.map((toolCall) => this.dispatchToolCall(storageId, toolCall, customTools)));
461
+ for (let index = 0; index < toolCalls.length; index++) {
462
+ this.chatState.appendToolResult(chatId, toolCalls[index].id, results[index]);
463
+ }
464
+ }
465
+ return {
466
+ text: lastResponseText,
467
+ totalPromptTokens,
468
+ totalCachedTokens,
469
+ totalOutputTokens,
470
+ totalReasoningTokens,
471
+ };
472
+ }
473
+ async dispatchToolCall(storageId, toolCall, customTools) {
474
+ const toolName = toolCall.function.name;
475
+ const isFileStorageTool = FILE_STORAGE_TOOL_NAMES.includes(toolName);
476
+ if (isFileStorageTool && storageId) {
477
+ return this.toolExecutor.execute(storageId, toolName, toolCall.function.arguments);
478
+ }
479
+ const customTool = customTools?.find((tool) => tool.name === toolName);
480
+ if (!customTool) {
481
+ return `Unknown tool: '${toolName}'`;
482
+ }
483
+ try {
484
+ const parsedArguments = JSON.parse(toolCall.function.arguments);
485
+ return await customTool.execute(parsedArguments);
486
+ }
487
+ catch (error) {
488
+ const errorMessage = error instanceof Error
489
+ ? error.message
490
+ : String(error);
491
+ return `Error executing tool '${toolName}':`
492
+ + ` ${errorMessage}`;
493
+ }
494
+ }
495
+ }
496
+ exports.LLMAPIAssistanceService = LLMAPIAssistanceService;
497
+ //# sourceMappingURL=LLMAPIAssistance.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LLMAPIAssistance.service.js","sourceRoot":"","sources":["../../../../src/providers/LLMAPI/services/LLMAPIAssistance.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { OpenAI } from 'openai';
2
+ import type { LLMCompletionResult, LLMInstanceOptions, LLMSendMessageOptions, LLMStructuredResult } from '../../../LLMService.typedefs';
3
+ import { LLMProviders } from '../../../LLMService.typedefs';
4
+ import { type LLMLoggerInterface } from '../../../utilities/logger';
5
+ import { type LLMReporterInterface } from '../../../utilities/reporter';
6
+ import { OpenAICompatibleCompletionService } from '../../../providers/OpenAICompatible/OpenAICompatibleCompletion.service';
7
+ import { type LLMSchemaInterface } from '../../../utilities/schema';
8
+ export declare class LLMAPICompletionService<Reporter extends LLMReporterInterface<any> | undefined> extends OpenAICompatibleCompletionService<LLMProviders.LLMAPI, Reporter> {
9
+ private jsonFixer;
10
+ constructor(logger: LLMLoggerInterface | undefined, reporter: Reporter, options?: LLMInstanceOptions[LLMProviders.LLMAPI]);
11
+ get instance(): OpenAI;
12
+ private getJsonFixer;
13
+ private stripThinkingTags;
14
+ protected sendTextMessage(options: LLMSendMessageOptions<LLMProviders.LLMAPI, Reporter>): Promise<LLMCompletionResult>;
15
+ protected sendStructuredMessage(options: LLMSendMessageOptions<LLMProviders.LLMAPI, Reporter> & {
16
+ schema: LLMSchemaInterface;
17
+ }): Promise<LLMStructuredResult>;
18
+ }