@mate-academy/llm-gateway 6.1.0 → 6.2.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 (75) hide show
  1. package/dist/LLMService.constants.d.ts +291 -1
  2. package/dist/LLMService.constants.js +2 -1
  3. package/dist/LLMService.constants.js.map +1 -1
  4. package/dist/LLMService.typedefs.d.ts +9 -0
  5. package/dist/LLMService.typedefs.js.map +1 -1
  6. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.d.ts +12 -7
  7. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js +232 -64
  8. package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js.map +1 -1
  9. package/dist/providers/LLMAPI/LLMAPI.constants.d.ts +293 -4
  10. package/dist/providers/LLMAPI/LLMAPI.constants.js +3 -3
  11. package/dist/providers/LLMAPI/LLMAPI.constants.js.map +1 -1
  12. package/dist/providers/LLMAPI/LLMAPI.entity.d.ts +6 -0
  13. package/dist/providers/LLMAPI/LLMAPI.entity.js +48 -0
  14. package/dist/providers/LLMAPI/LLMAPI.entity.js.map +1 -0
  15. package/dist/providers/LLMAPI/LLMAPI.typedefs.js.map +1 -1
  16. package/dist/providers/LLMAPI/index.d.ts +1 -0
  17. package/dist/providers/LLMAPI/index.js +1 -0
  18. package/dist/providers/LLMAPI/index.js.map +1 -1
  19. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.d.ts +37 -0
  20. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.js +500 -0
  21. package/dist/providers/LLMAPI/services/LLMAPIAssistance.service.js.map +1 -0
  22. package/dist/providers/LLMAPI/services/LLMAPICompletion.service.d.ts +2 -1
  23. package/dist/providers/LLMAPI/services/LLMAPICompletion.service.js +23 -13
  24. package/dist/providers/LLMAPI/services/LLMAPICompletion.service.js.map +1 -1
  25. package/dist/providers/LLMAPI/services/index.d.ts +1 -0
  26. package/dist/providers/LLMAPI/services/index.js +1 -0
  27. package/dist/providers/LLMAPI/services/index.js.map +1 -1
  28. package/dist/providers/LLMAPI/utilities/LLMAPIJsonFixer.js +2 -4
  29. package/dist/providers/LLMAPI/utilities/LLMAPIJsonFixer.js.map +1 -1
  30. package/dist/providers/LLMAPI/utilities/index.d.ts +2 -0
  31. package/dist/providers/LLMAPI/utilities/index.js +5 -1
  32. package/dist/providers/LLMAPI/utilities/index.js.map +1 -1
  33. package/dist/providers/LLMAPI/utilities/parseXmlToolCalls.d.ts +7 -0
  34. package/dist/providers/LLMAPI/utilities/parseXmlToolCalls.js +35 -0
  35. package/dist/providers/LLMAPI/utilities/parseXmlToolCalls.js.map +1 -0
  36. package/dist/providers/LLMAPI/utilities/stripThinkingTags.d.ts +1 -0
  37. package/dist/providers/LLMAPI/utilities/stripThinkingTags.js +7 -0
  38. package/dist/providers/LLMAPI/utilities/stripThinkingTags.js.map +1 -0
  39. package/dist/providers/OpenAI/services/OpenAIAssistance.service.d.ts +12 -7
  40. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js +180 -67
  41. package/dist/providers/OpenAI/services/OpenAIAssistance.service.js.map +1 -1
  42. package/dist/providers/OpenAICompatible/OpenAICompatibleCompletion.service.d.ts +2 -0
  43. package/dist/providers/OpenAICompatible/OpenAICompatibleCompletion.service.js +60 -76
  44. package/dist/providers/OpenAICompatible/OpenAICompatibleCompletion.service.js.map +1 -1
  45. package/dist/services/LLMAssistanceService.abstract.d.ts +8 -6
  46. package/dist/services/LLMAssistanceService.abstract.js +20 -0
  47. package/dist/services/LLMAssistanceService.abstract.js.map +1 -1
  48. package/dist/services/chatState/CompletionsChatState.d.ts +19 -0
  49. package/dist/services/chatState/CompletionsChatState.js +80 -0
  50. package/dist/services/chatState/CompletionsChatState.js.map +1 -0
  51. package/dist/services/chatState/index.d.ts +1 -0
  52. package/dist/services/chatState/index.js +6 -0
  53. package/dist/services/chatState/index.js.map +1 -0
  54. package/dist/services/fileStorage/FileStorageToolExecutor.d.ts +15 -0
  55. package/dist/services/fileStorage/FileStorageToolExecutor.js +172 -0
  56. package/dist/services/fileStorage/FileStorageToolExecutor.js.map +1 -0
  57. package/dist/services/fileStorage/InMemoryFileStorage.d.ts +20 -0
  58. package/dist/services/fileStorage/InMemoryFileStorage.js +67 -0
  59. package/dist/services/fileStorage/InMemoryFileStorage.js.map +1 -0
  60. package/dist/services/fileStorage/fileStorageTools.d.ts +26 -0
  61. package/dist/services/fileStorage/fileStorageTools.js +68 -0
  62. package/dist/services/fileStorage/fileStorageTools.js.map +1 -0
  63. package/dist/services/fileStorage/index.d.ts +4 -0
  64. package/dist/services/fileStorage/index.js +11 -0
  65. package/dist/services/fileStorage/index.js.map +1 -0
  66. package/dist/utilities/index.d.ts +1 -0
  67. package/dist/utilities/index.js +1 -0
  68. package/dist/utilities/index.js.map +1 -1
  69. package/dist/utilities/tools/LLMTool.d.ts +10 -0
  70. package/dist/utilities/tools/LLMTool.js +10 -0
  71. package/dist/utilities/tools/LLMTool.js.map +1 -0
  72. package/dist/utilities/tools/index.d.ts +1 -0
  73. package/dist/utilities/tools/index.js +6 -0
  74. package/dist/utilities/tools/index.js.map +1 -0
  75. package/package.json +1 -1
@@ -24,32 +24,17 @@ class OpenAICompatibleCompletionService extends services_1.LLMCompletionService
24
24
  return countTokensFn(allContents);
25
25
  }
26
26
  async sendTextMessage(options) {
27
- const { model, message, history = [], instructions, abortSignal, reporterContext, } = options;
27
+ const { model, abortSignal, reporterContext, } = options;
28
28
  const writeMetrics = this.reporter?.initWriter(reporterContext);
29
29
  try {
30
30
  abortSignal?.throwIfAborted();
31
- const countTokensFn = OpenAI_entity_1.OpenAIEntity.getCountTokensFn();
32
- const combinedMessages = await OpenAI_entity_1.OpenAIEntity
33
- .combineMessagesWithLimit({
34
- history,
35
- message,
36
- model,
37
- countTokensFn,
38
- instance: this.instance,
39
- logger: this.logger,
40
- });
41
- const chatCompletionMessageParam = OpenAI_entity_1.OpenAIEntity
42
- .getChatCompletionMessageParam(combinedMessages, this.logger);
43
- const systemMessage = instructions
44
- ? [{ role: 'system', content: instructions }]
45
- : [];
31
+ const { systemMessage, chatMessages, } = await this.prepareCompletionMessages(options);
46
32
  abortSignal?.throwIfAborted();
47
- const completion = await this.instance.chat.completions
48
- .create({
33
+ const completion = await this.instance.chat.completions.create({
49
34
  model: model.name,
50
35
  messages: [
51
36
  ...systemMessage,
52
- ...chatCompletionMessageParam,
37
+ ...chatMessages,
53
38
  ],
54
39
  n: 1,
55
40
  ...model.config,
@@ -57,22 +42,11 @@ class OpenAICompatibleCompletionService extends services_1.LLMCompletionService
57
42
  signal: abortSignal,
58
43
  });
59
44
  abortSignal?.throwIfAborted();
60
- const promptTokens = completion.usage?.prompt_tokens ?? 0;
61
- const cachedTokens = completion.usage?.prompt_tokens_details
62
- ?.cached_tokens ?? 0;
63
- const regularInputTokens = promptTokens - cachedTokens;
64
- const outputTokens = completion.usage?.completion_tokens ?? 0;
65
- const reasoningTokens = completion.usage?.completion_tokens_details
66
- ?.reasoning_tokens ?? 0;
45
+ const usage = this.extractUsageFromCompletion(completion);
67
46
  await this.writeSuccessMetrics({
68
47
  method: this.getMethodName(this.sendTextMessage),
69
48
  model,
70
- usage: {
71
- inputTextTokens: regularInputTokens,
72
- inputCachedTextTokens: cachedTokens,
73
- outputTextTokens: outputTokens,
74
- outputReasoningTokens: reasoningTokens,
75
- },
49
+ usage,
76
50
  writeMetrics,
77
51
  });
78
52
  return {
@@ -86,43 +60,31 @@ class OpenAICompatibleCompletionService extends services_1.LLMCompletionService
86
60
  isAborted: abortSignal?.aborted,
87
61
  writeMetrics,
88
62
  });
89
- this.logger
90
- ?.child(this.getMethodName(this.sendTextMessage))
63
+ this.logger?.child(this.getMethodName(this.sendTextMessage))
91
64
  .error('Error sending text message', {
92
65
  error: (0, serializeError_1.serializeError)(error),
93
66
  options,
94
67
  });
95
- return { error };
68
+ return {
69
+ error: error instanceof Error
70
+ ? error
71
+ : new Error(String(error)),
72
+ };
96
73
  }
97
74
  }
98
75
  async sendStructuredMessage(options) {
99
- const { model, message, history = [], instructions, abortSignal, schema, reporterContext, } = options;
76
+ const { model, abortSignal, schema, reporterContext, } = options;
100
77
  const writeMetrics = this.reporter?.initWriter(reporterContext);
101
78
  try {
102
79
  abortSignal?.throwIfAborted();
103
- const countTokensFn = OpenAI_entity_1.OpenAIEntity.getCountTokensFn();
104
- const combinedMessages = await OpenAI_entity_1.OpenAIEntity
105
- .combineMessagesWithLimit({
106
- history,
107
- message,
108
- model,
109
- countTokensFn,
110
- instance: this.instance,
111
- logger: this.logger,
112
- });
113
- const chatCompletionMessageParam = OpenAI_entity_1.OpenAIEntity
114
- .getChatCompletionMessageParam(combinedMessages, this.logger);
115
- const systemMessage = instructions
116
- ? [{ role: 'system', content: instructions }]
117
- : [];
80
+ const { systemMessage, chatMessages, } = await this.prepareCompletionMessages(options);
118
81
  abortSignal?.throwIfAborted();
119
82
  const jsonSchema = schema._toProviderSchema(this.provider);
120
- const completion = await this.instance.chat.completions
121
- .create({
83
+ const completion = await this.instance.chat.completions.create({
122
84
  model: model.name,
123
85
  messages: [
124
86
  ...systemMessage,
125
- ...chatCompletionMessageParam,
87
+ ...chatMessages,
126
88
  ],
127
89
  n: 1,
128
90
  ...model.config,
@@ -145,22 +107,11 @@ class OpenAICompatibleCompletionService extends services_1.LLMCompletionService
145
107
  try {
146
108
  const parsed = JSON.parse(content);
147
109
  const validation = schema._parse(parsed);
148
- const promptTokens = completion.usage?.prompt_tokens ?? 0;
149
- const cachedTokens = completion.usage?.prompt_tokens_details
150
- ?.cached_tokens ?? 0;
151
- const regularInputTokens = promptTokens - cachedTokens;
152
- const outputTokens = completion.usage?.completion_tokens ?? 0;
153
- const reasoningTokens = completion.usage?.completion_tokens_details
154
- ?.reasoning_tokens ?? 0;
110
+ const usage = this.extractUsageFromCompletion(completion);
155
111
  await this.writeSuccessMetrics({
156
112
  method: this.getMethodName(this.sendStructuredMessage),
157
113
  model,
158
- usage: {
159
- inputTextTokens: regularInputTokens,
160
- inputCachedTextTokens: cachedTokens,
161
- outputTextTokens: outputTokens,
162
- outputReasoningTokens: reasoningTokens,
163
- },
114
+ usage,
164
115
  writeMetrics,
165
116
  });
166
117
  return {
@@ -170,11 +121,11 @@ class OpenAICompatibleCompletionService extends services_1.LLMCompletionService
170
121
  };
171
122
  }
172
123
  catch (parseError) {
173
- this.logger
174
- ?.child(this.getMethodName(this.sendStructuredMessage))
175
- .warn('Failed to parse JSON response', {
124
+ this.logger?.child(this.getMethodName(this.sendStructuredMessage)).warn('Failed to parse JSON response', {
176
125
  content,
177
- parseError: parseError.message,
126
+ parseError: parseError instanceof Error
127
+ ? parseError.message
128
+ : String(parseError),
178
129
  });
179
130
  throw parseError;
180
131
  }
@@ -186,19 +137,52 @@ class OpenAICompatibleCompletionService extends services_1.LLMCompletionService
186
137
  isAborted: abortSignal?.aborted,
187
138
  writeMetrics,
188
139
  });
189
- this.logger
190
- ?.child(this.getMethodName(this.sendStructuredMessage))
191
- .error('Error sending structured message', {
140
+ this.logger?.child(this.getMethodName(this.sendStructuredMessage)).error('Error sending structured message', {
192
141
  error: (0, serializeError_1.serializeError)(error),
193
142
  options,
194
143
  });
195
144
  return {
196
145
  text: '',
197
- error,
198
- parseError: `Failed to get structured response from ${this.provider}`,
146
+ error: error instanceof Error
147
+ ? error
148
+ : new Error(String(error)),
149
+ parseError: `Failed to get structured response`
150
+ + ` from ${this.provider}`,
199
151
  };
200
152
  }
201
153
  }
154
+ async prepareCompletionMessages(options) {
155
+ const { message, history = [], instructions, model, } = options;
156
+ const countTokensFn = OpenAI_entity_1.OpenAIEntity.getCountTokensFn();
157
+ const combinedMessages = await OpenAI_entity_1.OpenAIEntity.combineMessagesWithLimit({
158
+ history,
159
+ message,
160
+ model,
161
+ countTokensFn,
162
+ instance: this.instance,
163
+ logger: this.logger,
164
+ });
165
+ const chatMessages = OpenAI_entity_1.OpenAIEntity
166
+ .getChatCompletionMessageParam(combinedMessages, this.logger);
167
+ const systemMessage = instructions
168
+ ? [{ role: 'system', content: instructions }]
169
+ : [];
170
+ return { systemMessage, chatMessages };
171
+ }
172
+ extractUsageFromCompletion(completion) {
173
+ const promptTokens = completion.usage?.prompt_tokens ?? 0;
174
+ const cachedTokens = completion.usage?.prompt_tokens_details
175
+ ?.cached_tokens ?? 0;
176
+ const outputTokens = completion.usage?.completion_tokens ?? 0;
177
+ const reasoningTokens = completion.usage?.completion_tokens_details
178
+ ?.reasoning_tokens ?? 0;
179
+ return {
180
+ inputTextTokens: promptTokens - cachedTokens,
181
+ inputCachedTextTokens: cachedTokens,
182
+ outputTextTokens: outputTokens,
183
+ outputReasoningTokens: reasoningTokens,
184
+ };
185
+ }
202
186
  }
203
187
  exports.OpenAICompatibleCompletionService = OpenAICompatibleCompletionService;
204
188
  //# sourceMappingURL=OpenAICompatibleCompletion.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAICompatibleCompletion.service.js","sourceRoot":"","sources":["../../../src/providers/OpenAICompatible/OpenAICompatibleCompletion.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpenAICompatibleCompletion.service.js","sourceRoot":"","sources":["../../../src/providers/OpenAICompatible/OpenAICompatibleCompletion.service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { type LLMAssistanceOptions, type LLMAssistanceResult, type LLMAssistanceMessage, type LLMCreateChatOptions, type LLMCreateChatResult, type LLMCreateFileStorageOptions, type LLMCreateFileStorageResult, type LLMInstanceOptions, type LLMModel, type LLMProviders, LLMPurposes, type LLMUploadFileOptions, type LLMUploadFileResult, type LLMStructuredResult, type LLMUploadedFile } from '../LLMService.typedefs';
1
+ import { type LLMAssistanceOptions, type LLMAssistanceResult, type LLMAssistanceMessage, type LLMToolDefinition, type LLMCreateChatOptions, type LLMCreateChatResult, type LLMCreateFileStorageOptions, type LLMCreateFileStorageResult, type LLMInstanceOptions, type LLMModel, type LLMProviders, LLMPurposes, type LLMUploadFileOptions, type LLMUploadFileResult, type LLMStructuredResult, type LLMUploadedFile } from '../LLMService.typedefs';
2
2
  import { type LLMLoggerInterface } from '../utilities/logger';
3
3
  import { type LLMReporterInterface } from '../utilities/reporter';
4
4
  import { LLMBaseService } from '../services';
5
5
  import { type LLMSchemaInterface, type InferSchema } from '../utilities/schema';
6
6
  export declare abstract class LLMAssistanceService<Provider extends LLMProviders, Reporter extends LLMReporterInterface<any> | undefined> extends LLMBaseService<LLMPurposes.Assistance, Provider, Reporter> {
7
7
  constructor(provider: Provider, logger: LLMLoggerInterface | undefined, reporter: Reporter, options?: LLMInstanceOptions[Provider]);
8
+ protected validateToolDefinitions(tools: LLMToolDefinition[]): void;
8
9
  abstract uploadFile(options: LLMUploadFileOptions<Reporter>): Promise<LLMUploadFileResult>;
9
10
  abstract getFile(path: string): Promise<LLMUploadedFile | null>;
10
11
  abstract deleteFile(fileId: string): Promise<void>;
@@ -12,12 +13,13 @@ export declare abstract class LLMAssistanceService<Provider extends LLMProviders
12
13
  abstract deleteFileStorage(fileStorageId: string): Promise<void>;
13
14
  abstract createChat(options: LLMCreateChatOptions<Provider, Reporter>): Promise<LLMCreateChatResult>;
14
15
  abstract deleteChat(chatId: string): Promise<void>;
15
- abstract assistInChat<Schema extends LLMSchemaInterface>(options: LLMAssistanceOptions<Provider, Reporter> & {
16
+ assistInChat<Schema extends LLMSchemaInterface>(options: LLMAssistanceOptions<Provider, Reporter> & {
16
17
  schema: Schema;
17
18
  }): Promise<LLMStructuredResult<InferSchema<Schema>>>;
18
- abstract assistInChat(options: LLMAssistanceOptions<Provider, Reporter>): Promise<LLMAssistanceResult>;
19
- abstract assistInChat(options: LLMAssistanceOptions<Provider, Reporter> & {
20
- schema?: LLMSchemaInterface;
21
- }): Promise<LLMAssistanceResult | LLMStructuredResult>;
19
+ assistInChat(options: LLMAssistanceOptions<Provider, Reporter>): Promise<LLMAssistanceResult>;
20
+ protected abstract assistInChatText(options: LLMAssistanceOptions<Provider, Reporter>): Promise<LLMAssistanceResult>;
21
+ protected abstract assistInChatStructured(options: LLMAssistanceOptions<Provider, Reporter> & {
22
+ schema: LLMSchemaInterface;
23
+ }): Promise<LLMStructuredResult>;
22
24
  abstract countTokens(messages: LLMAssistanceMessage[], model: LLMModel<Provider>): Promise<number>;
23
25
  }
@@ -7,6 +7,26 @@ class LLMAssistanceService extends services_1.LLMBaseService {
7
7
  constructor(provider, logger, reporter, options) {
8
8
  super(provider, 'AssistanceService', LLMService_typedefs_1.LLMPurposes.Assistance, logger, reporter, options);
9
9
  }
10
+ validateToolDefinitions(tools) {
11
+ const namePattern = /^[a-zA-Z0-9_-]+$/;
12
+ const names = new Set();
13
+ for (const tool of tools) {
14
+ if (!namePattern.test(tool.name)) {
15
+ throw new Error(`Invalid tool name "${tool.name}":`
16
+ + ' must match [a-zA-Z0-9_-]+');
17
+ }
18
+ if (names.has(tool.name)) {
19
+ throw new Error(`Duplicate tool name "${tool.name}"`);
20
+ }
21
+ names.add(tool.name);
22
+ }
23
+ }
24
+ assistInChat(options) {
25
+ if (options.schema) {
26
+ return this.assistInChatStructured(options);
27
+ }
28
+ return this.assistInChatText(options);
29
+ }
10
30
  }
11
31
  exports.LLMAssistanceService = LLMAssistanceService;
12
32
  //# sourceMappingURL=LLMAssistanceService.abstract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LLMAssistanceService.abstract.js","sourceRoot":"","sources":["../../src/services/LLMAssistanceService.abstract.ts"],"names":[],"mappings":";;;AAAA,+DAgB+B;AAG/B,yCAA4C;AAG5C,MAAsB,oBAGpB,SAAQ,yBAIP;IACD,YACE,QAAkB,EAClB,MAAsC,EACtC,QAAkB,EAClB,OAAsC;QAEtC,KAAK,CACH,QAAQ,EACR,mBAAmB,EACnB,iCAAW,CAAC,UAAU,EACtB,MAAM,EACN,QAAQ,EACR,OAAO,CACR,CAAC;IACJ,CAAC;CA+CF;AArED,oDAqEC"}
1
+ {"version":3,"file":"LLMAssistanceService.abstract.js","sourceRoot":"","sources":["../../src/services/LLMAssistanceService.abstract.ts"],"names":[],"mappings":";;;AAAA,+DAiB+B;AAG/B,yCAA4C;AAG5C,MAAsB,oBAGpB,SAAQ,yBAIP;IACD,YACE,QAAkB,EAClB,MAAsC,EACtC,QAAkB,EAClB,OAAsC;QAEtC,KAAK,CACH,QAAQ,EACR,mBAAmB,EACnB,iCAAW,CAAC,UAAU,EACtB,MAAM,EACN,QAAQ,EACR,OAAO,CACR,CAAC;IACJ,CAAC;IAES,uBAAuB,CAC/B,KAA0B;QAE1B,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACvC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,IAAI,IAAI;sBACjC,4BAA4B,CAC/B,CAAC;YACJ,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,wBAAwB,IAAI,CAAC,IAAI,GAAG,CACrC,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAuCD,YAAY,CACV,OACmC;QAEnC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,sBAAsB,CAChC,OACkC,CACnC,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CAeF;AAhHD,oDAgHC"}
@@ -0,0 +1,19 @@
1
+ import type { ChatCompletionMessageParam, ChatCompletionMessageToolCall } from 'openai/resources/chat';
2
+ import type { ChatCompletionContentPart } from 'openai/resources/chat';
3
+ interface ChatStateEntry {
4
+ instructions: string | undefined;
5
+ storageId: string | undefined;
6
+ messages: ChatCompletionMessageParam[];
7
+ }
8
+ export declare class CompletionsChatState {
9
+ private chats;
10
+ createChat(chatId: string, instructions?: string, storageId?: string, history?: ChatCompletionMessageParam[]): void;
11
+ getChat(chatId: string): ChatStateEntry | null;
12
+ appendUserMessage(chatId: string, content: ChatCompletionContentPart[]): void;
13
+ appendAssistantMessage(chatId: string, content: string): void;
14
+ appendToolCallMessages(chatId: string, toolCalls: ChatCompletionMessageToolCall[]): void;
15
+ appendToolResult(chatId: string, toolCallId: string, content: string): void;
16
+ getMessages(chatId: string): ChatCompletionMessageParam[];
17
+ deleteChat(chatId: string): void;
18
+ }
19
+ export {};
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompletionsChatState = void 0;
4
+ class CompletionsChatState {
5
+ chats = new Map();
6
+ createChat(chatId, instructions, storageId, history) {
7
+ const messages = [];
8
+ if (instructions) {
9
+ messages.push({
10
+ role: 'system',
11
+ content: instructions,
12
+ });
13
+ }
14
+ if (history) {
15
+ messages.push(...history);
16
+ }
17
+ this.chats.set(chatId, {
18
+ instructions,
19
+ storageId,
20
+ messages,
21
+ });
22
+ }
23
+ getChat(chatId) {
24
+ return this.chats.get(chatId) ?? null;
25
+ }
26
+ appendUserMessage(chatId, content) {
27
+ const chat = this.chats.get(chatId);
28
+ if (!chat) {
29
+ return;
30
+ }
31
+ chat.messages.push({
32
+ role: 'user',
33
+ content,
34
+ });
35
+ }
36
+ appendAssistantMessage(chatId, content) {
37
+ const chat = this.chats.get(chatId);
38
+ if (!chat) {
39
+ return;
40
+ }
41
+ chat.messages.push({
42
+ role: 'assistant',
43
+ content,
44
+ });
45
+ }
46
+ appendToolCallMessages(chatId, toolCalls) {
47
+ const chat = this.chats.get(chatId);
48
+ if (!chat) {
49
+ return;
50
+ }
51
+ chat.messages.push({
52
+ role: 'assistant',
53
+ content: null,
54
+ tool_calls: toolCalls,
55
+ });
56
+ }
57
+ appendToolResult(chatId, toolCallId, content) {
58
+ const chat = this.chats.get(chatId);
59
+ if (!chat) {
60
+ return;
61
+ }
62
+ chat.messages.push({
63
+ role: 'tool',
64
+ tool_call_id: toolCallId,
65
+ content,
66
+ });
67
+ }
68
+ getMessages(chatId) {
69
+ const chat = this.chats.get(chatId);
70
+ if (!chat) {
71
+ return [];
72
+ }
73
+ return chat.messages;
74
+ }
75
+ deleteChat(chatId) {
76
+ this.chats.delete(chatId);
77
+ }
78
+ }
79
+ exports.CompletionsChatState = CompletionsChatState;
80
+ //# sourceMappingURL=CompletionsChatState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompletionsChatState.js","sourceRoot":"","sources":["../../../src/services/chatState/CompletionsChatState.ts"],"names":[],"mappings":";;;AAYA,MAAa,oBAAoB;IACvB,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,UAAU,CACR,MAAc,EACd,YAAqB,EACrB,SAAkB,EAClB,OAAsC;QAEtC,MAAM,QAAQ,GAAiC,EAAE,CAAC;QAElD,IAAI,YAAY,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,YAAY;aACtB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE;YACrB,YAAY;YACZ,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACxC,CAAC;IAED,iBAAiB,CACf,MAAc,EACd,OAAoC;QAEpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,MAAM;YACZ,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CACpB,MAAc,EACd,OAAe;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,sBAAsB,CACpB,MAAc,EACd,SAA0C;QAE1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CACd,MAAc,EACd,UAAkB,EAClB,OAAe;QAEf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,UAAU;YACxB,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF;AAjHD,oDAiHC"}
@@ -0,0 +1 @@
1
+ export { CompletionsChatState } from './CompletionsChatState';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompletionsChatState = void 0;
4
+ var CompletionsChatState_1 = require("./CompletionsChatState");
5
+ Object.defineProperty(exports, "CompletionsChatState", { enumerable: true, get: function () { return CompletionsChatState_1.CompletionsChatState; } });
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/chatState/index.ts"],"names":[],"mappings":";;;AAAA,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,15 @@
1
+ import { type InMemoryFileStorage } from './InMemoryFileStorage';
2
+ export declare class FileStorageToolExecutor {
3
+ private storage;
4
+ constructor(storage: InMemoryFileStorage);
5
+ execute(storageId: string, toolName: string, rawArguments: string): string;
6
+ private listFiles;
7
+ private searchFiles;
8
+ private mergeContextRanges;
9
+ private readFile;
10
+ private readFileLines;
11
+ private resolveLineRange;
12
+ private findFileByPath;
13
+ private fileNotFoundMessage;
14
+ private formatLinesWithNumbers;
15
+ }
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileStorageToolExecutor = void 0;
4
+ const fileStorageTools_1 = require("./fileStorageTools");
5
+ const MAX_OUTPUT_LENGTH = 50_000;
6
+ class FileStorageToolExecutor {
7
+ storage;
8
+ constructor(storage) {
9
+ this.storage = storage;
10
+ }
11
+ execute(storageId, toolName, rawArguments) {
12
+ switch (toolName) {
13
+ case fileStorageTools_1.FileStorageToolName.ListFiles:
14
+ return this.listFiles(storageId);
15
+ case fileStorageTools_1.FileStorageToolName.SearchFiles:
16
+ return this.searchFiles(storageId, JSON.parse(rawArguments));
17
+ case fileStorageTools_1.FileStorageToolName.ReadFile:
18
+ return this.readFile(storageId, JSON.parse(rawArguments));
19
+ case fileStorageTools_1.FileStorageToolName.ReadFileLines:
20
+ return this.readFileLines(storageId, JSON.parse(rawArguments));
21
+ default:
22
+ return `Unknown tool: '${toolName}'`;
23
+ }
24
+ }
25
+ listFiles(storageId) {
26
+ const files = this.storage.getStorageFiles(storageId);
27
+ if (files.length === 0) {
28
+ return 'No files in storage.';
29
+ }
30
+ return files
31
+ .map((file) => {
32
+ const lineCount = file.content.split('\n').length;
33
+ return `${file.name} (${file.path}) - ${lineCount} lines`;
34
+ })
35
+ .join('\n');
36
+ }
37
+ searchFiles(storageId, arguments_) {
38
+ const files = this.storage.getStorageFiles(storageId);
39
+ const contextLines = arguments_.context_lines ?? 3;
40
+ const lowerQuery = arguments_.query.toLowerCase();
41
+ const filteredFiles = arguments_.path
42
+ ? files.filter((file) => file.path.includes(arguments_.path))
43
+ : files;
44
+ const results = [];
45
+ for (const file of filteredFiles) {
46
+ if (!file.content.toLowerCase().includes(lowerQuery)) {
47
+ continue;
48
+ }
49
+ const lines = file.content.split('\n');
50
+ const matchingLineIndices = [];
51
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
52
+ if (lines[lineIndex].toLowerCase().includes(lowerQuery)) {
53
+ matchingLineIndices.push(lineIndex);
54
+ }
55
+ }
56
+ if (matchingLineIndices.length === 0) {
57
+ continue;
58
+ }
59
+ const ranges = this.mergeContextRanges(matchingLineIndices, contextLines, lines.length);
60
+ for (const range of ranges) {
61
+ for (let lineIndex = range.start; lineIndex <= range.end; lineIndex++) {
62
+ results.push(`${file.path}:${lineIndex + 1}: ${lines[lineIndex]}`);
63
+ }
64
+ }
65
+ }
66
+ if (results.length === 0) {
67
+ return `No matches found for '${arguments_.query}'`;
68
+ }
69
+ const output = results.join('\n');
70
+ if (output.length > MAX_OUTPUT_LENGTH) {
71
+ return output.slice(0, MAX_OUTPUT_LENGTH)
72
+ + '\n... (output truncated)';
73
+ }
74
+ return output;
75
+ }
76
+ mergeContextRanges(matchingIndices, contextLines, totalLines) {
77
+ const ranges = [];
78
+ for (const matchIndex of matchingIndices) {
79
+ const start = Math.max(0, matchIndex - contextLines);
80
+ const end = Math.min(totalLines - 1, matchIndex + contextLines);
81
+ const lastRange = ranges[ranges.length - 1];
82
+ if (lastRange && start <= lastRange.end + 1) {
83
+ lastRange.end = end;
84
+ }
85
+ else {
86
+ ranges.push({ start, end });
87
+ }
88
+ }
89
+ return ranges;
90
+ }
91
+ readFile(storageId, arguments_) {
92
+ const file = this.findFileByPath(storageId, arguments_.path);
93
+ if (!file) {
94
+ return this.fileNotFoundMessage(storageId, arguments_.path);
95
+ }
96
+ const lines = file.content.split('\n');
97
+ return this.formatLinesWithNumbers(lines, 1);
98
+ }
99
+ readFileLines(storageId, arguments_) {
100
+ const file = this.findFileByPath(storageId, arguments_.path);
101
+ if (!file) {
102
+ return this.fileNotFoundMessage(storageId, arguments_.path);
103
+ }
104
+ const lines = file.content.split('\n');
105
+ const { startIndex, endIndex } = this.resolveLineRange(lines.length, arguments_.start_line, arguments_.end_line);
106
+ const selectedLines = lines.slice(startIndex, endIndex);
107
+ return this.formatLinesWithNumbers(selectedLines, startIndex + 1);
108
+ }
109
+ resolveLineRange(totalLines, startLine, endLine) {
110
+ if (startLine !== undefined && endLine !== undefined) {
111
+ return {
112
+ startIndex: Math.max(0, startLine - 1),
113
+ endIndex: Math.min(totalLines, endLine),
114
+ };
115
+ }
116
+ if (startLine !== undefined) {
117
+ return {
118
+ startIndex: Math.max(0, startLine - 1),
119
+ endIndex: totalLines,
120
+ };
121
+ }
122
+ if (endLine !== undefined && endLine < 0) {
123
+ return {
124
+ startIndex: Math.max(0, totalLines + endLine),
125
+ endIndex: totalLines,
126
+ };
127
+ }
128
+ if (endLine !== undefined) {
129
+ return {
130
+ startIndex: 0,
131
+ endIndex: Math.min(totalLines, endLine),
132
+ };
133
+ }
134
+ return {
135
+ startIndex: 0,
136
+ endIndex: totalLines,
137
+ };
138
+ }
139
+ findFileByPath(storageId, path) {
140
+ const files = this.storage.getStorageFiles(storageId);
141
+ const exactMatch = files.find((file) => file.path === path);
142
+ if (exactMatch) {
143
+ return exactMatch;
144
+ }
145
+ const endsWithMatch = files.find((file) => file.path.endsWith(path));
146
+ if (endsWithMatch) {
147
+ return endsWithMatch;
148
+ }
149
+ const includesMatch = files.find((file) => file.path.includes(path));
150
+ return includesMatch ?? null;
151
+ }
152
+ fileNotFoundMessage(storageId, path) {
153
+ const files = this.storage.getStorageFiles(storageId);
154
+ const availablePaths = files
155
+ .map((file) => file.path)
156
+ .join(', ');
157
+ return `File not found: '${path}'. Available files: ${availablePaths}`;
158
+ }
159
+ formatLinesWithNumbers(lines, startLineNumber) {
160
+ const lastLineNumber = startLineNumber + lines.length - 1;
161
+ const maxWidth = String(lastLineNumber).length;
162
+ return lines
163
+ .map((line, index) => {
164
+ const lineNumber = String(startLineNumber + index)
165
+ .padStart(maxWidth, ' ');
166
+ return `${lineNumber}: ${line}`;
167
+ })
168
+ .join('\n');
169
+ }
170
+ }
171
+ exports.FileStorageToolExecutor = FileStorageToolExecutor;
172
+ //# sourceMappingURL=FileStorageToolExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileStorageToolExecutor.js","sourceRoot":"","sources":["../../../src/services/fileStorage/FileStorageToolExecutor.ts"],"names":[],"mappings":"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"}