@multiplayer-app/ai-agent-node 0.1.0-beta.12 → 0.1.0-beta.15
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.
- package/dist/cjs/config.cjs +88 -50
- package/dist/cjs/config.cjs.map +1 -1
- package/dist/cjs/config.d.ts +58 -31
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/helpers/AIHelper.cjs +36 -38
- package/dist/cjs/helpers/AIHelper.cjs.map +1 -1
- package/dist/cjs/helpers/AIHelper.d.ts +16 -11
- package/dist/cjs/helpers/AIHelper.d.ts.map +1 -1
- package/dist/cjs/helpers/AIHelper.test.cjs +19 -12
- package/dist/cjs/helpers/AIHelper.test.cjs.map +1 -1
- package/dist/cjs/helpers/FileHelper.cjs +131 -151
- package/dist/cjs/helpers/FileHelper.cjs.map +1 -1
- package/dist/cjs/helpers/FileHelper.d.ts +19 -25
- package/dist/cjs/helpers/FileHelper.d.ts.map +1 -1
- package/dist/cjs/helpers/index.cjs +0 -1
- package/dist/cjs/helpers/index.cjs.map +1 -1
- package/dist/cjs/helpers/index.d.ts +0 -1
- package/dist/cjs/helpers/index.d.ts.map +1 -1
- package/dist/cjs/index.cjs +108 -26
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +37 -10
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/libs/s3/index.cjs +3 -39
- package/dist/cjs/libs/s3/index.cjs.map +1 -1
- package/dist/cjs/libs/s3/index.d.ts +1 -2
- package/dist/cjs/libs/s3/index.d.ts.map +1 -1
- package/dist/cjs/libs/s3/s3.lib.cjs +173 -186
- package/dist/cjs/libs/s3/s3.lib.cjs.map +1 -1
- package/dist/cjs/libs/s3/s3.lib.d.ts +29 -22
- package/dist/cjs/libs/s3/s3.lib.d.ts.map +1 -1
- package/dist/cjs/processors/ChatProcessor.cjs +40 -37
- package/dist/cjs/processors/ChatProcessor.cjs.map +1 -1
- package/dist/cjs/processors/ChatProcessor.d.ts +17 -1
- package/dist/cjs/processors/ChatProcessor.d.ts.map +1 -1
- package/dist/cjs/services/AIService.cjs +8 -8
- package/dist/cjs/services/AIService.cjs.map +1 -1
- package/dist/cjs/services/AIService.d.ts +3 -1
- package/dist/cjs/services/AIService.d.ts.map +1 -1
- package/dist/cjs/services/InternalEventsHandler.cjs +3 -3
- package/dist/cjs/services/InternalEventsHandler.cjs.map +1 -1
- package/dist/cjs/services/InternalEventsHandler.d.ts +3 -1
- package/dist/cjs/services/InternalEventsHandler.d.ts.map +1 -1
- package/dist/cjs/services/ModelFetcher.cjs +2 -8
- package/dist/cjs/services/ModelFetcher.cjs.map +1 -1
- package/dist/cjs/services/ModelFetcher.d.ts +2 -7
- package/dist/cjs/services/ModelFetcher.d.ts.map +1 -1
- package/dist/cjs/services/RedisService.cjs +20 -16
- package/dist/cjs/services/RedisService.cjs.map +1 -1
- package/dist/cjs/services/RedisService.d.ts +5 -2
- package/dist/cjs/services/RedisService.d.ts.map +1 -1
- package/dist/cjs/services/SocketService.cjs +6 -8
- package/dist/cjs/services/SocketService.cjs.map +1 -1
- package/dist/cjs/services/SocketService.d.ts +6 -3
- package/dist/cjs/services/SocketService.d.ts.map +1 -1
- package/dist/cjs/store/AgentStore.cjs +3 -4
- package/dist/cjs/store/AgentStore.cjs.map +1 -1
- package/dist/cjs/store/AgentStore.d.ts +2 -1
- package/dist/cjs/store/AgentStore.d.ts.map +1 -1
- package/dist/cjs/store/ConfigStore.cjs +1 -3
- package/dist/cjs/store/ConfigStore.cjs.map +1 -1
- package/dist/cjs/store/ConfigStore.d.ts.map +1 -1
- package/dist/cjs/tools/proposeFormValuesTool.d.ts +2 -2
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/config.d.ts +58 -31
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +88 -48
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/helpers/AIHelper.d.ts +16 -11
- package/dist/esm/helpers/AIHelper.d.ts.map +1 -1
- package/dist/esm/helpers/AIHelper.js +38 -38
- package/dist/esm/helpers/AIHelper.js.map +1 -1
- package/dist/esm/helpers/AIHelper.test.js +19 -12
- package/dist/esm/helpers/AIHelper.test.js.map +1 -1
- package/dist/esm/helpers/FileHelper.d.ts +19 -25
- package/dist/esm/helpers/FileHelper.d.ts.map +1 -1
- package/dist/esm/helpers/FileHelper.js +131 -146
- package/dist/esm/helpers/FileHelper.js.map +1 -1
- package/dist/esm/helpers/index.d.ts +0 -1
- package/dist/esm/helpers/index.d.ts.map +1 -1
- package/dist/esm/helpers/index.js +0 -1
- package/dist/esm/helpers/index.js.map +1 -1
- package/dist/esm/index.d.ts +37 -10
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +78 -10
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/libs/s3/index.d.ts +1 -2
- package/dist/esm/libs/s3/index.d.ts.map +1 -1
- package/dist/esm/libs/s3/index.js +1 -2
- package/dist/esm/libs/s3/index.js.map +1 -1
- package/dist/esm/libs/s3/s3.lib.d.ts +29 -22
- package/dist/esm/libs/s3/s3.lib.d.ts.map +1 -1
- package/dist/esm/libs/s3/s3.lib.js +177 -172
- package/dist/esm/libs/s3/s3.lib.js.map +1 -1
- package/dist/esm/processors/ChatProcessor.d.ts +17 -1
- package/dist/esm/processors/ChatProcessor.d.ts.map +1 -1
- package/dist/esm/processors/ChatProcessor.js +46 -39
- package/dist/esm/processors/ChatProcessor.js.map +1 -1
- package/dist/esm/services/AIService.d.ts +3 -1
- package/dist/esm/services/AIService.d.ts.map +1 -1
- package/dist/esm/services/AIService.js +12 -11
- package/dist/esm/services/AIService.js.map +1 -1
- package/dist/esm/services/InternalEventsHandler.d.ts +3 -1
- package/dist/esm/services/InternalEventsHandler.d.ts.map +1 -1
- package/dist/esm/services/InternalEventsHandler.js +4 -3
- package/dist/esm/services/InternalEventsHandler.js.map +1 -1
- package/dist/esm/services/ModelFetcher.d.ts +2 -7
- package/dist/esm/services/ModelFetcher.d.ts.map +1 -1
- package/dist/esm/services/ModelFetcher.js +2 -8
- package/dist/esm/services/ModelFetcher.js.map +1 -1
- package/dist/esm/services/RedisService.d.ts +5 -2
- package/dist/esm/services/RedisService.d.ts.map +1 -1
- package/dist/esm/services/RedisService.js +21 -14
- package/dist/esm/services/RedisService.js.map +1 -1
- package/dist/esm/services/SocketService.d.ts +6 -3
- package/dist/esm/services/SocketService.d.ts.map +1 -1
- package/dist/esm/services/SocketService.js +8 -6
- package/dist/esm/services/SocketService.js.map +1 -1
- package/dist/esm/store/AgentStore.d.ts +2 -1
- package/dist/esm/store/AgentStore.d.ts.map +1 -1
- package/dist/esm/store/AgentStore.js +4 -2
- package/dist/esm/store/AgentStore.js.map +1 -1
- package/dist/esm/store/ConfigStore.d.ts.map +1 -1
- package/dist/esm/store/ConfigStore.js +1 -3
- package/dist/esm/store/ConfigStore.js.map +1 -1
- package/dist/esm/tools/proposeFormValuesTool.d.ts +2 -2
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/cjs/helpers/SetupHelper.cjs +0 -34
- package/dist/cjs/helpers/SetupHelper.cjs.map +0 -1
- package/dist/cjs/helpers/SetupHelper.d.ts +0 -4
- package/dist/cjs/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/cjs/libs/logger/config.cjs +0 -9
- package/dist/cjs/libs/logger/config.cjs.map +0 -1
- package/dist/cjs/libs/logger/config.d.ts +0 -5
- package/dist/cjs/libs/logger/config.d.ts.map +0 -1
- package/dist/cjs/libs/s3/config.cjs +0 -8
- package/dist/cjs/libs/s3/config.cjs.map +0 -1
- package/dist/cjs/libs/s3/config.d.ts +0 -4
- package/dist/cjs/libs/s3/config.d.ts.map +0 -1
- package/dist/esm/helpers/SetupHelper.d.ts +0 -4
- package/dist/esm/helpers/SetupHelper.d.ts.map +0 -1
- package/dist/esm/helpers/SetupHelper.js +0 -29
- package/dist/esm/helpers/SetupHelper.js.map +0 -1
- package/dist/esm/libs/logger/config.d.ts +0 -5
- package/dist/esm/libs/logger/config.d.ts.map +0 -1
- package/dist/esm/libs/logger/config.js +0 -6
- package/dist/esm/libs/logger/config.js.map +0 -1
- package/dist/esm/libs/s3/config.d.ts +0 -4
- package/dist/esm/libs/s3/config.d.ts.map +0 -1
- package/dist/esm/libs/s3/config.js +0 -5
- package/dist/esm/libs/s3/config.js.map +0 -1
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
import { describe, it, expect, beforeAll } from 'vitest';
|
|
2
2
|
import { AIHelper } from './AIHelper';
|
|
3
|
+
import { FileHelper } from './FileHelper';
|
|
3
4
|
import { ModelStore } from '../store/ModelStore';
|
|
5
|
+
import { ConfigProvider } from '../config';
|
|
6
|
+
import { S3Lib } from '../libs/s3';
|
|
4
7
|
import { MessageRole, AgentToolCallStatus } from '@multiplayer-app/ai-agent-types';
|
|
5
8
|
describe('AIHelper.getAssistantResponse', () => {
|
|
6
9
|
let modelStore;
|
|
7
|
-
let
|
|
10
|
+
let aiHelper;
|
|
8
11
|
beforeAll(() => {
|
|
9
12
|
// Setup real ModelStore instance
|
|
10
13
|
modelStore = ModelStore.getInstance();
|
|
11
14
|
modelStore.setModels([
|
|
12
15
|
{ id: 'openai/gpt-4o', label: 'GPT-4o Mini', provider: 'openrouter' }
|
|
13
16
|
]);
|
|
17
|
+
const config = ConfigProvider.getInstance().getConfig();
|
|
18
|
+
const s3Lib = new S3Lib(config.s3);
|
|
19
|
+
const fileHelper = new FileHelper(s3Lib, config);
|
|
20
|
+
aiHelper = new AIHelper(fileHelper, config);
|
|
14
21
|
});
|
|
15
22
|
describe('with tool approval responses', () => {
|
|
16
23
|
it('should handle approved tool with successful execution', async () => {
|
|
@@ -36,7 +43,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
36
43
|
]
|
|
37
44
|
}
|
|
38
45
|
];
|
|
39
|
-
const response = await
|
|
46
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
40
47
|
// Verify we get a response (actual model call)
|
|
41
48
|
expect(response).toBeDefined();
|
|
42
49
|
expect(typeof response).toBe('string');
|
|
@@ -69,7 +76,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
69
76
|
]
|
|
70
77
|
}
|
|
71
78
|
];
|
|
72
|
-
const response = await
|
|
79
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
73
80
|
// Verify we get a response acknowledging the denial
|
|
74
81
|
expect(response).toBeDefined();
|
|
75
82
|
expect(typeof response).toBe('string');
|
|
@@ -109,7 +116,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
109
116
|
]
|
|
110
117
|
}
|
|
111
118
|
];
|
|
112
|
-
const response = await
|
|
119
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
113
120
|
// Verify we get a response handling both tool results
|
|
114
121
|
expect(response).toBeDefined();
|
|
115
122
|
expect(typeof response).toBe('string');
|
|
@@ -137,7 +144,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
137
144
|
]
|
|
138
145
|
}
|
|
139
146
|
];
|
|
140
|
-
const response = await
|
|
147
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
141
148
|
// Verify we get a response even when tool execution failed
|
|
142
149
|
expect(response).toBeDefined();
|
|
143
150
|
expect(typeof response).toBe('string');
|
|
@@ -167,7 +174,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
167
174
|
]
|
|
168
175
|
}
|
|
169
176
|
];
|
|
170
|
-
const response = await
|
|
177
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
171
178
|
// Verify we get a response when tool was not found
|
|
172
179
|
expect(response).toBeDefined();
|
|
173
180
|
expect(typeof response).toBe('string');
|
|
@@ -197,7 +204,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
197
204
|
]
|
|
198
205
|
}
|
|
199
206
|
];
|
|
200
|
-
const response = await
|
|
207
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
201
208
|
// Verify we get a response when tool execution had an error
|
|
202
209
|
expect(response).toBeDefined();
|
|
203
210
|
expect(typeof response).toBe('string');
|
|
@@ -214,7 +221,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
214
221
|
content: 'I am doing well, thank you!'
|
|
215
222
|
}
|
|
216
223
|
];
|
|
217
|
-
const response = await
|
|
224
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
218
225
|
// Verify we get a response for normal conversation
|
|
219
226
|
expect(response).toBeDefined();
|
|
220
227
|
expect(typeof response).toBe('string');
|
|
@@ -241,7 +248,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
241
248
|
]
|
|
242
249
|
}
|
|
243
250
|
];
|
|
244
|
-
const response = await
|
|
251
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
245
252
|
// Verify we get a response even when tool is pending approval
|
|
246
253
|
// (tool calls without output should not include tool-result in messages)
|
|
247
254
|
expect(response).toBeDefined();
|
|
@@ -287,7 +294,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
287
294
|
]
|
|
288
295
|
}
|
|
289
296
|
];
|
|
290
|
-
const response = await
|
|
297
|
+
const response = await aiHelper.getAssistantResponse(messages);
|
|
291
298
|
// Verify we get a response for sequential tool calls
|
|
292
299
|
expect(response).toBeDefined();
|
|
293
300
|
expect(typeof response).toBe('string');
|
|
@@ -301,7 +308,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
301
308
|
content: 'Test message'
|
|
302
309
|
}
|
|
303
310
|
];
|
|
304
|
-
const response = await
|
|
311
|
+
const response = await aiHelper.getAssistantResponse(messages, undefined, {
|
|
305
312
|
temperature: 0.9,
|
|
306
313
|
maxOutputTokens: 1000
|
|
307
314
|
});
|
|
@@ -320,7 +327,7 @@ describe('AIHelper.getAssistantResponse', () => {
|
|
|
320
327
|
];
|
|
321
328
|
const abortController = new AbortController();
|
|
322
329
|
const signal = abortController.signal;
|
|
323
|
-
const response = await
|
|
330
|
+
const response = await aiHelper.getAssistantResponse(messages, signal);
|
|
324
331
|
// Verify we get a response with abort signal passed through
|
|
325
332
|
expect(response).toBeDefined();
|
|
326
333
|
expect(typeof response).toBe('string');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AIHelper.test.js","sourceRoot":"","sources":["../../../src/helpers/AIHelper.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"AIHelper.test.js","sourceRoot":"","sources":["../../../src/helpers/AIHelper.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
import type { AgentAttachment } from '@multiplayer-app/ai-agent-types';
|
|
2
|
+
import { S3Lib } from '../libs/s3';
|
|
3
|
+
import { Config } from '../config';
|
|
2
4
|
export interface ProcessedAttachment extends AgentAttachment {
|
|
3
5
|
extractedText?: string;
|
|
4
6
|
processingStatus?: 'pending' | 'processed' | 'failed';
|
|
5
7
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* Prepares an image attachment for vision API
|
|
24
|
-
*/
|
|
25
|
-
export declare function prepareImageForVisionAPI(attachment: AgentAttachment): Promise<{
|
|
26
|
-
type: 'image_url';
|
|
27
|
-
image_url: {
|
|
28
|
-
url: string;
|
|
29
|
-
};
|
|
30
|
-
} | null>;
|
|
8
|
+
export declare class FileHelper {
|
|
9
|
+
private s3;
|
|
10
|
+
private config;
|
|
11
|
+
constructor(s3: S3Lib, config: Config);
|
|
12
|
+
isImage(attachment: AgentAttachment): boolean;
|
|
13
|
+
private isDocument;
|
|
14
|
+
extractTextFromDocument(attachment: AgentAttachment): Promise<string | undefined>;
|
|
15
|
+
private extractTextFromPDF;
|
|
16
|
+
private extractTextFromDOCX;
|
|
17
|
+
processAttachment(attachment: AgentAttachment): Promise<ProcessedAttachment>;
|
|
18
|
+
prepareImageForVisionAPI(attachment: AgentAttachment): Promise<{
|
|
19
|
+
type: 'image_url';
|
|
20
|
+
image_url: {
|
|
21
|
+
url: string;
|
|
22
|
+
};
|
|
23
|
+
} | null>;
|
|
24
|
+
}
|
|
31
25
|
//# sourceMappingURL=FileHelper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHelper.d.ts","sourceRoot":"","sources":["../../../src/helpers/FileHelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"FileHelper.d.ts","sourceRoot":"","sources":["../../../src/helpers/FileHelper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGvE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;CACvD;AAED,qBAAa,UAAU;IAErB,OAAO,CAAC,EAAE,CAAQ;IAClB,OAAO,CAAC,MAAM,CAAS;gBAEX,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IAKrC,OAAO,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO;IAM7C,OAAO,CAAC,UAAU;IAMZ,uBAAuB,CAC3B,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YA8ChB,kBAAkB;YAelB,mBAAmB;IAe3B,iBAAiB,CACrB,UAAU,EAAE,eAAe,GAC1B,OAAO,CAAC,mBAAmB,CAAC;IA8BzB,wBAAwB,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC;QACnE,IAAI,EAAE,WAAW,CAAC;QAClB,SAAS,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC;KAC5B,GAAG,IAAI,CAAC;CAuCV"}
|
|
@@ -1,173 +1,158 @@
|
|
|
1
1
|
import { AgentAttachmentType } from '@multiplayer-app/ai-agent-types';
|
|
2
|
-
import { s3 } from '../libs/s3';
|
|
3
2
|
import { logger } from '../libs/logger';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return false;
|
|
11
|
-
const mimeType = attachment.mimeType || '';
|
|
12
|
-
return mimeType.startsWith('image/');
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Checks if an attachment is a document that can have text extracted
|
|
16
|
-
*/
|
|
17
|
-
export function isDocument(attachment) {
|
|
18
|
-
if (attachment.type !== AgentAttachmentType.File)
|
|
19
|
-
return false;
|
|
20
|
-
const mimeType = attachment.mimeType || '';
|
|
21
|
-
return mimeType.startsWith('text/') || mimeType.startsWith('application/');
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Extracts text from a document attachment
|
|
25
|
-
*/
|
|
26
|
-
export async function extractTextFromDocument(attachment) {
|
|
27
|
-
if (!isDocument(attachment) || attachment.type !== AgentAttachmentType.File) {
|
|
28
|
-
logger.debug('Attachment is not a document or not a file type', {
|
|
29
|
-
attachmentId: attachment.id,
|
|
30
|
-
type: attachment.type,
|
|
31
|
-
mimeType: attachment.mimeType
|
|
32
|
-
});
|
|
33
|
-
return undefined;
|
|
3
|
+
export class FileHelper {
|
|
4
|
+
s3;
|
|
5
|
+
config;
|
|
6
|
+
constructor(s3, config) {
|
|
7
|
+
this.s3 = s3;
|
|
8
|
+
this.config = config;
|
|
34
9
|
}
|
|
35
|
-
|
|
10
|
+
isImage(attachment) {
|
|
11
|
+
if (attachment.type !== AgentAttachmentType.File)
|
|
12
|
+
return false;
|
|
36
13
|
const mimeType = attachment.mimeType || '';
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
14
|
+
return mimeType.startsWith('image/');
|
|
15
|
+
}
|
|
16
|
+
isDocument(attachment) {
|
|
17
|
+
if (attachment.type !== AgentAttachmentType.File)
|
|
18
|
+
return false;
|
|
19
|
+
const mimeType = attachment.mimeType || '';
|
|
20
|
+
return mimeType.startsWith('text/') || mimeType.startsWith('application/');
|
|
21
|
+
}
|
|
22
|
+
async extractTextFromDocument(attachment) {
|
|
23
|
+
if (!this.isDocument(attachment) || attachment.type !== AgentAttachmentType.File) {
|
|
24
|
+
logger.debug('Attachment is not a document or not a file type', {
|
|
25
|
+
attachmentId: attachment.id,
|
|
26
|
+
type: attachment.type,
|
|
27
|
+
mimeType: attachment.mimeType
|
|
28
|
+
});
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
const mimeType = attachment.mimeType || '';
|
|
33
|
+
// All files are stored in S3 (s3Key is in metadata)
|
|
34
|
+
if (attachment.metadata?.s3Key) {
|
|
35
|
+
const s3Key = attachment.metadata.s3Key;
|
|
36
|
+
const bucket = this.config.s3.bucket ?? '';
|
|
37
|
+
if (mimeType === 'application/pdf') {
|
|
38
|
+
const buffer = await this.s3.downloadFileAsByteArray(s3Key, bucket);
|
|
39
|
+
if (buffer) {
|
|
40
|
+
// Convert Uint8Array to Buffer
|
|
41
|
+
const nodeBuffer = Buffer.from(buffer);
|
|
42
|
+
return await this.extractTextFromPDF(nodeBuffer);
|
|
43
|
+
}
|
|
47
44
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
45
|
+
else if (mimeType === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') {
|
|
46
|
+
const buffer = await this.s3.downloadFileAsByteArray(s3Key, bucket);
|
|
47
|
+
if (buffer) {
|
|
48
|
+
// Convert Uint8Array to Buffer
|
|
49
|
+
const nodeBuffer = Buffer.from(buffer);
|
|
50
|
+
return await this.extractTextFromDOCX(nodeBuffer);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const text = await this.s3.downloadFileAsString(s3Key, bucket);
|
|
55
|
+
return text || undefined;
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
logger.error('Failed to extract text from document', { error, attachmentId: attachment.id });
|
|
62
|
+
return undefined;
|
|
61
63
|
}
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
logger.error('Failed to extract text from document', { error, attachmentId: attachment.id });
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Extracts text from PDF buffer
|
|
71
|
-
*/
|
|
72
|
-
async function extractTextFromPDF(buffer) {
|
|
73
|
-
try {
|
|
74
|
-
const { PDFParse } = await import('pdf-parse');
|
|
75
|
-
const parser = new PDFParse({ data: buffer });
|
|
76
|
-
const text = (await parser.getText()).text || '';
|
|
77
|
-
// Limit extracted text size
|
|
78
|
-
const maxSize = config.fileProcessing.maxExtractedTextSize;
|
|
79
|
-
return text.length > maxSize ? text.substring(0, maxSize) + '...' : text;
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
logger.warn('PDF text extraction failed (pdf-parse may not be installed)', { error });
|
|
83
|
-
return undefined;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Extracts text from DOCX buffer
|
|
88
|
-
*/
|
|
89
|
-
async function extractTextFromDOCX(buffer) {
|
|
90
|
-
try {
|
|
91
|
-
const mammoth = await import('mammoth');
|
|
92
|
-
const result = await mammoth.extractRawText({ buffer });
|
|
93
|
-
const text = result.value || '';
|
|
94
|
-
// Limit extracted text size
|
|
95
|
-
const maxSize = config.fileProcessing.maxExtractedTextSize;
|
|
96
|
-
return text.length > maxSize ? text.substring(0, maxSize) + '...' : text;
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
logger.warn('DOCX text extraction failed (mammoth may not be installed)', { error });
|
|
100
|
-
return undefined;
|
|
101
64
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
65
|
+
async extractTextFromPDF(buffer) {
|
|
66
|
+
try {
|
|
67
|
+
const { PDFParse } = await import('pdf-parse');
|
|
68
|
+
const parser = new PDFParse({ data: buffer });
|
|
69
|
+
const text = (await parser.getText()).text || '';
|
|
70
|
+
// Limit extracted text size
|
|
71
|
+
const maxSize = this.config.fileProcessing.maxExtractedTextSize ?? 10000;
|
|
72
|
+
return text.length > maxSize ? text.substring(0, maxSize) + '...' : text;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
logger.warn('PDF text extraction failed (pdf-parse may not be installed)', { error });
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
111
78
|
}
|
|
112
|
-
|
|
113
|
-
const enableTextExtraction = config.fileProcessing.enableTextExtraction;
|
|
114
|
-
if (enableTextExtraction && isDocument(attachment)) {
|
|
79
|
+
async extractTextFromDOCX(buffer) {
|
|
115
80
|
try {
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
else {
|
|
123
|
-
processed.processingStatus = 'failed';
|
|
124
|
-
}
|
|
81
|
+
const mammoth = await import('mammoth');
|
|
82
|
+
const result = await mammoth.extractRawText({ buffer });
|
|
83
|
+
const text = result.value || '';
|
|
84
|
+
// Limit extracted text size
|
|
85
|
+
const maxSize = this.config.fileProcessing.maxExtractedTextSize ?? 10000;
|
|
86
|
+
return text.length > maxSize ? text.substring(0, maxSize) + '...' : text;
|
|
125
87
|
}
|
|
126
88
|
catch (error) {
|
|
127
|
-
logger.
|
|
128
|
-
|
|
89
|
+
logger.warn('DOCX text extraction failed (mammoth may not be installed)', { error });
|
|
90
|
+
return undefined;
|
|
129
91
|
}
|
|
130
92
|
}
|
|
131
|
-
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
93
|
+
async processAttachment(attachment) {
|
|
94
|
+
const processed = { ...attachment };
|
|
95
|
+
// Only process file attachments
|
|
96
|
+
if (attachment.type !== AgentAttachmentType.File) {
|
|
97
|
+
return processed;
|
|
98
|
+
}
|
|
99
|
+
// Check if text extraction is enabled
|
|
100
|
+
const enableTextExtraction = this.config.fileProcessing.enableTextExtraction;
|
|
101
|
+
if (enableTextExtraction && this.isDocument(attachment)) {
|
|
102
|
+
try {
|
|
103
|
+
processed.processingStatus = 'pending';
|
|
104
|
+
const extractedText = await this.extractTextFromDocument(attachment);
|
|
105
|
+
if (extractedText) {
|
|
106
|
+
processed.extractedText = extractedText;
|
|
107
|
+
processed.processingStatus = 'processed';
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
processed.processingStatus = 'failed';
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
logger.error('Failed to process document attachment', { error, attachmentId: attachment.id });
|
|
115
|
+
processed.processingStatus = 'failed';
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return processed;
|
|
139
119
|
}
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
120
|
+
async prepareImageForVisionAPI(attachment) {
|
|
121
|
+
if (!this.isImage(attachment) || attachment.type !== AgentAttachmentType.File) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
// All files are stored in S3 - generate presigned download URL
|
|
125
|
+
if (attachment.metadata?.s3Key) {
|
|
126
|
+
try {
|
|
127
|
+
const s3Key = attachment.metadata.s3Key;
|
|
128
|
+
const bucket = this.config.s3.bucket ?? '';
|
|
129
|
+
const buffer = await this.s3.downloadFileAsByteArray(s3Key, bucket);
|
|
130
|
+
if (!buffer) {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
const mimeType = attachment.mimeType || 'image/png';
|
|
134
|
+
return {
|
|
135
|
+
type: 'image_url',
|
|
136
|
+
image_url: {
|
|
137
|
+
url: `data:${mimeType};base64,${Buffer.from(buffer).toString('base64')}`,
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
logger.error('Failed to generate presigned URL for S3 image', { error, attachmentId: attachment.id });
|
|
147
143
|
return null;
|
|
148
144
|
}
|
|
149
|
-
|
|
145
|
+
}
|
|
146
|
+
// Fallback: If we have a URL (backward compatibility)
|
|
147
|
+
if (attachment.url) {
|
|
150
148
|
return {
|
|
151
149
|
type: 'image_url',
|
|
152
150
|
image_url: {
|
|
153
|
-
url:
|
|
151
|
+
url: attachment.url,
|
|
154
152
|
},
|
|
155
153
|
};
|
|
156
154
|
}
|
|
157
|
-
|
|
158
|
-
logger.error('Failed to generate presigned URL for S3 image', { error, attachmentId: attachment.id });
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// Fallback: If we have a URL (backward compatibility)
|
|
163
|
-
if (attachment.url) {
|
|
164
|
-
return {
|
|
165
|
-
type: 'image_url',
|
|
166
|
-
image_url: {
|
|
167
|
-
url: attachment.url,
|
|
168
|
-
},
|
|
169
|
-
};
|
|
155
|
+
return null;
|
|
170
156
|
}
|
|
171
|
-
return null;
|
|
172
157
|
}
|
|
173
158
|
//# sourceMappingURL=FileHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileHelper.js","sourceRoot":"","sources":["../../../src/helpers/FileHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"FileHelper.js","sourceRoot":"","sources":["../../../src/helpers/FileHelper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
|