@roj-ai/sdk 0.1.13 → 0.1.14

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 (56) hide show
  1. package/dist/bootstrap.d.ts +12 -0
  2. package/dist/bootstrap.d.ts.map +1 -1
  3. package/dist/bootstrap.js +3 -1
  4. package/dist/bootstrap.js.map +1 -1
  5. package/dist/config.d.ts +2 -0
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/config.js +3 -0
  8. package/dist/config.js.map +1 -1
  9. package/dist/lib/utils/concurrency.d.ts +25 -0
  10. package/dist/lib/utils/concurrency.d.ts.map +1 -0
  11. package/dist/lib/utils/concurrency.js +69 -0
  12. package/dist/lib/utils/concurrency.js.map +1 -0
  13. package/dist/lib/utils/concurrency.test.d.ts +2 -0
  14. package/dist/lib/utils/concurrency.test.d.ts.map +1 -0
  15. package/dist/lib/utils/concurrency.test.js +135 -0
  16. package/dist/lib/utils/concurrency.test.js.map +1 -0
  17. package/dist/plugins/uploads/plugin.d.ts +12 -0
  18. package/dist/plugins/uploads/plugin.d.ts.map +1 -1
  19. package/dist/plugins/uploads/plugin.js +188 -44
  20. package/dist/plugins/uploads/plugin.js.map +1 -1
  21. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +9 -0
  22. package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -1
  23. package/dist/plugins/uploads/preprocessors/image-classifier.js +4 -1
  24. package/dist/plugins/uploads/preprocessors/image-classifier.js.map +1 -1
  25. package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts +2 -0
  26. package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts.map +1 -0
  27. package/dist/plugins/uploads/preprocessors/image-classifier.test.js +113 -0
  28. package/dist/plugins/uploads/preprocessors/image-classifier.test.js.map +1 -0
  29. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -1
  30. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js +8 -7
  31. package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js.map +1 -1
  32. package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -1
  33. package/dist/plugins/uploads/preprocessors/zip-preprocessor.js +35 -15
  34. package/dist/plugins/uploads/preprocessors/zip-preprocessor.js.map +1 -1
  35. package/dist/plugins/uploads/state.d.ts +1 -0
  36. package/dist/plugins/uploads/state.d.ts.map +1 -1
  37. package/dist/plugins/uploads/state.js +1 -1
  38. package/dist/plugins/uploads/state.js.map +1 -1
  39. package/dist/plugins/uploads/uploads.integration.test.js +97 -0
  40. package/dist/plugins/uploads/uploads.integration.test.js.map +1 -1
  41. package/dist/transport/http/routes/upload.d.ts.map +1 -1
  42. package/dist/transport/http/routes/upload.js +60 -0
  43. package/dist/transport/http/routes/upload.js.map +1 -1
  44. package/package.json +2 -2
  45. package/src/bootstrap.ts +3 -1
  46. package/src/config.ts +6 -0
  47. package/src/lib/utils/concurrency.test.ts +169 -0
  48. package/src/lib/utils/concurrency.ts +72 -0
  49. package/src/plugins/uploads/plugin.ts +212 -47
  50. package/src/plugins/uploads/preprocessors/image-classifier.test.ts +142 -0
  51. package/src/plugins/uploads/preprocessors/image-classifier.ts +13 -1
  52. package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +8 -8
  53. package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +37 -17
  54. package/src/plugins/uploads/state.ts +1 -1
  55. package/src/plugins/uploads/uploads.integration.test.ts +123 -0
  56. package/src/transport/http/routes/upload.ts +87 -0
@@ -5,6 +5,16 @@ import { Err, Ok } from '../../lib/utils/result.js';
5
5
  import { generateUploadId, UploadId } from './schema.js';
6
6
  import { uploadEvents } from './state.js';
7
7
  // ============================================================================
8
+ // Notification schemas
9
+ // ============================================================================
10
+ const statusChangedSchema = z.object({
11
+ sessionId: z.string(),
12
+ uploadId: z.string(),
13
+ status: z.enum(['processing', 'ready', 'failed']),
14
+ extractedContent: z.string().optional(),
15
+ error: z.string().optional(),
16
+ });
17
+ // ============================================================================
8
18
  // Constants
9
19
  // ============================================================================
10
20
  const MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
@@ -44,12 +54,57 @@ function formatUploadsForLLM(uploads, sessionRoot) {
44
54
  });
45
55
  return blocks.join('\n');
46
56
  }
57
+ /**
58
+ * Run preprocessor (with timeout) and persist final upload metadata to disk.
59
+ * Returns the resolved status + extracted/derived data for the caller to emit.
60
+ */
61
+ async function runPreprocessAndPersist(args) {
62
+ const preprocessor = args.preprocessorRegistry?.getForMimeType(args.mimeType);
63
+ let status = 'ready';
64
+ let extractedContent;
65
+ let derivedPaths;
66
+ let errorMessage;
67
+ if (preprocessor) {
68
+ const processPromise = preprocessor.process(args.filePath, args.mimeType, {
69
+ files: args.uploadStore,
70
+ });
71
+ const timeoutPromise = sleep(PROCESSING_TIMEOUT_MS).then(() => ({
72
+ ok: false,
73
+ error: new Error('Processing timeout'),
74
+ }));
75
+ const result = await Promise.race([processPromise, timeoutPromise]);
76
+ if (result.ok) {
77
+ extractedContent = result.value.extractedContent;
78
+ derivedPaths = result.value.derivedPaths;
79
+ }
80
+ else {
81
+ status = 'failed';
82
+ errorMessage = result.error.message;
83
+ }
84
+ }
85
+ const metadata = {
86
+ uploadId: UploadId(args.uploadId),
87
+ sessionId: args.sessionId,
88
+ filename: args.filename,
89
+ mimeType: args.mimeType,
90
+ size: args.size,
91
+ path: args.filePath,
92
+ status,
93
+ extractedContent,
94
+ derivedPaths,
95
+ createdAt: args.createdAt,
96
+ completedAt: Date.now(),
97
+ };
98
+ await args.uploadStore.write('meta.json', JSON.stringify(metadata, null, 2));
99
+ return { status, extractedContent, derivedPaths, error: errorMessage };
100
+ }
47
101
  // ============================================================================
48
102
  // Plugin
49
103
  // ============================================================================
50
104
  export const uploadsPlugin = definePlugin('uploads')
51
105
  .pluginConfig()
52
106
  .events([uploadEvents])
107
+ .notification('uploadStatusChanged', { schema: statusChangedSchema })
53
108
  .state({
54
109
  key: 'uploads',
55
110
  initial: () => ({ pending: [] }),
@@ -268,77 +323,166 @@ export const uploadsPlugin = definePlugin('uploads')
268
323
  }),
269
324
  handler: async (ctx, input) => {
270
325
  const { dataFileStore, preprocessorRegistry } = ctx.pluginConfig;
271
- // Validate
272
326
  if (input.size > MAX_FILE_SIZE) {
273
327
  return Err(ValidationErrors.invalid(`File too large: max ${MAX_FILE_SIZE / (1024 * 1024)}MB`));
274
328
  }
275
329
  if (!isAllowedMimeType(input.mimeType)) {
276
330
  return Err(ValidationErrors.invalid(`Unsupported file type: ${input.mimeType}`));
277
331
  }
278
- // Generate upload ID and scoped store
279
332
  const uploadId = generateUploadId();
280
333
  const uploadStore = dataFileStore.scoped(`sessions/${input.sessionId}/uploads/${uploadId}`);
281
- // Write file to disk
282
334
  const writeResult = await uploadStore.write(input.filename, input.fileBuffer);
283
335
  if (!writeResult.ok) {
284
336
  return Err(ValidationErrors.invalid('Failed to write file'));
285
337
  }
286
- const filePath = writeResult.value.path;
287
- // Run preprocessor (with timeout)
288
- let processingResult = 'skipped';
289
- let extractedContent;
290
- let derivedPaths;
291
- const preprocessor = preprocessorRegistry?.getForMimeType(input.mimeType);
292
- if (preprocessor) {
293
- const processPromise = preprocessor.process(filePath, input.mimeType, {
294
- files: uploadStore,
295
- });
296
- const timeoutPromise = sleep(PROCESSING_TIMEOUT_MS).then(() => ({
297
- ok: false,
298
- error: new Error('Processing timeout'),
299
- }));
300
- const result = await Promise.race([processPromise, timeoutPromise]);
301
- if (result.ok) {
302
- processingResult = 'success';
303
- extractedContent = result.value.extractedContent;
304
- derivedPaths = result.value.derivedPaths;
305
- }
306
- else {
307
- processingResult = 'failed';
308
- }
338
+ const result = await runPreprocessAndPersist({
339
+ uploadId: String(uploadId),
340
+ sessionId: ctx.sessionId,
341
+ uploadStore,
342
+ filePath: writeResult.value.path,
343
+ filename: input.filename,
344
+ mimeType: input.mimeType,
345
+ size: input.size,
346
+ createdAt: Date.now(),
347
+ preprocessorRegistry,
348
+ });
349
+ await ctx.emitEvent(uploadEvents.create('attachment_uploaded', {
350
+ uploadId,
351
+ filename: input.filename,
352
+ mimeType: input.mimeType,
353
+ size: input.size,
354
+ status: result.status,
355
+ extractedContent: result.extractedContent,
356
+ derivedPaths: result.derivedPaths,
357
+ error: result.error,
358
+ }));
359
+ return Ok({
360
+ uploadId: String(uploadId),
361
+ status: result.status,
362
+ extractedContent: result.extractedContent,
363
+ });
364
+ },
365
+ })
366
+ .method('uploadAsync', {
367
+ input: z.object({
368
+ sessionId: z.string(),
369
+ filename: z.string(),
370
+ mimeType: z.string(),
371
+ size: z.number(),
372
+ fileBuffer: z.custom(),
373
+ }),
374
+ output: z.object({
375
+ uploadId: z.string(),
376
+ status: z.enum(['processing']),
377
+ }),
378
+ handler: async (ctx, input) => {
379
+ const { dataFileStore, preprocessorRegistry } = ctx.pluginConfig;
380
+ if (input.size > MAX_FILE_SIZE) {
381
+ return Err(ValidationErrors.invalid(`File too large: max ${MAX_FILE_SIZE / (1024 * 1024)}MB`));
382
+ }
383
+ if (!isAllowedMimeType(input.mimeType)) {
384
+ return Err(ValidationErrors.invalid(`Unsupported file type: ${input.mimeType}`));
309
385
  }
310
- // Create upload metadata
311
- const now = Date.now();
312
- const uploadStatus = processingResult === 'failed' ? 'failed' : 'ready';
313
- const metadata = {
386
+ const uploadId = generateUploadId();
387
+ const uploadIdStr = String(uploadId);
388
+ const uploadStore = dataFileStore.scoped(`sessions/${input.sessionId}/uploads/${uploadId}`);
389
+ const writeResult = await uploadStore.write(input.filename, input.fileBuffer);
390
+ if (!writeResult.ok) {
391
+ return Err(ValidationErrors.invalid('Failed to write file'));
392
+ }
393
+ const filePath = writeResult.value.path;
394
+ const createdAt = Date.now();
395
+ // Persist initial 'processing' metadata so listPending sees it before preprocessor finishes.
396
+ const processingMeta = {
314
397
  uploadId,
315
398
  sessionId: ctx.sessionId,
316
399
  filename: input.filename,
317
400
  mimeType: input.mimeType,
318
401
  size: input.size,
319
402
  path: filePath,
320
- status: uploadStatus,
321
- extractedContent,
322
- derivedPaths,
323
- createdAt: now,
324
- completedAt: now,
403
+ status: 'processing',
404
+ createdAt,
405
+ completedAt: createdAt,
325
406
  };
326
- // Save metadata
327
- await uploadStore.write('meta.json', JSON.stringify(metadata, null, 2));
328
- // Emit event
407
+ await uploadStore.write('meta.json', JSON.stringify(processingMeta, null, 2));
329
408
  await ctx.emitEvent(uploadEvents.create('attachment_uploaded', {
330
409
  uploadId,
331
410
  filename: input.filename,
332
411
  mimeType: input.mimeType,
333
412
  size: input.size,
334
- status: uploadStatus,
335
- extractedContent,
336
- derivedPaths,
413
+ status: 'processing',
337
414
  }));
415
+ ctx.notify('uploadStatusChanged', {
416
+ sessionId: input.sessionId,
417
+ uploadId: uploadIdStr,
418
+ status: 'processing',
419
+ });
420
+ // Capture refs from ctx before the handler returns — `notify`/`emitEvent`
421
+ // closures stay valid for the lifetime of the session, which in roj
422
+ // outlives any single handler call.
423
+ const { emitEvent, notify, logger } = ctx;
424
+ const sessionId = ctx.sessionId;
425
+ void (async () => {
426
+ try {
427
+ const result = await runPreprocessAndPersist({
428
+ uploadId: uploadIdStr,
429
+ sessionId,
430
+ uploadStore,
431
+ filePath,
432
+ filename: input.filename,
433
+ mimeType: input.mimeType,
434
+ size: input.size,
435
+ createdAt,
436
+ preprocessorRegistry,
437
+ });
438
+ await emitEvent(uploadEvents.create('attachment_uploaded', {
439
+ uploadId,
440
+ filename: input.filename,
441
+ mimeType: input.mimeType,
442
+ size: input.size,
443
+ status: result.status,
444
+ extractedContent: result.extractedContent,
445
+ derivedPaths: result.derivedPaths,
446
+ error: result.error,
447
+ }));
448
+ notify('uploadStatusChanged', {
449
+ sessionId: input.sessionId,
450
+ uploadId: uploadIdStr,
451
+ status: result.status,
452
+ extractedContent: result.extractedContent,
453
+ error: result.error,
454
+ });
455
+ }
456
+ catch (err) {
457
+ const message = err instanceof Error ? err.message : String(err);
458
+ logger.error('Async upload processing crashed', err instanceof Error ? err : undefined, {
459
+ uploadId: uploadIdStr,
460
+ filename: input.filename,
461
+ });
462
+ try {
463
+ await emitEvent(uploadEvents.create('attachment_uploaded', {
464
+ uploadId,
465
+ filename: input.filename,
466
+ mimeType: input.mimeType,
467
+ size: input.size,
468
+ status: 'failed',
469
+ error: message,
470
+ }));
471
+ }
472
+ catch {
473
+ // Even event emission failed — best-effort; nothing useful left to do.
474
+ }
475
+ notify('uploadStatusChanged', {
476
+ sessionId: input.sessionId,
477
+ uploadId: uploadIdStr,
478
+ status: 'failed',
479
+ error: message,
480
+ });
481
+ }
482
+ })();
338
483
  return Ok({
339
- uploadId: String(uploadId),
340
- status: uploadStatus,
341
- extractedContent,
484
+ uploadId: uploadIdStr,
485
+ status: 'processing',
342
486
  });
343
487
  },
344
488
  })
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/plugins/uploads/plugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/plugins/uploads/plugin.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  * Falls back to basic metadata if vision is not available.
6
6
  */
7
7
  import type { LLMProvider } from '../../../core/llm/provider.js';
8
+ import type { Semaphore } from '../../../lib/utils/concurrency.js';
8
9
  import type { Result } from '../../../lib/utils/result.js';
9
10
  import type { FileSystem } from '../../../platform/fs.js';
10
11
  import type { Logger } from '../../../lib/logger/logger.js';
@@ -20,6 +21,13 @@ export interface ImageClassifierConfig {
20
21
  fs: FileSystem;
21
22
  /** Whether to skip vision and just return metadata */
22
23
  skipVision?: boolean;
24
+ /**
25
+ * Optional semaphore to bound concurrent vision LLM calls. All callers
26
+ * sharing one instance compete for the same set of permits — useful when
27
+ * recursive preprocessors (ZIP → docs → images) would otherwise fan out
28
+ * into many simultaneous inferences.
29
+ */
30
+ gate?: Semaphore;
23
31
  }
24
32
  /**
25
33
  * Image classifier preprocessor.
@@ -33,6 +41,7 @@ export declare class ImageClassifierPreprocessor implements Preprocessor {
33
41
  private readonly logger;
34
42
  private readonly fs;
35
43
  private readonly skipVision;
44
+ private readonly gate;
36
45
  constructor(config: ImageClassifierConfig);
37
46
  process(filePath: string, mimeType: string, ctx: PreprocessorContext): Promise<Result<PreprocessorResult, Error>>;
38
47
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"image-classifier.d.ts","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/image-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAM/F,MAAM,WAAW,qBAAqB;IACrC,wCAAwC;IACxC,WAAW,EAAE,WAAW,CAAA;IACxB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,EAAE,EAAE,UAAU,CAAA;IACd,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAMD;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,YAAY;IAC/D,QAAQ,CAAC,IAAI,sBAAqB;IAClC,QAAQ,CAAC,kBAAkB,WAAc;IAEzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,qBAAqB;IAQnC,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAsD7C;;;OAGG;YACW,aAAa;IAyC3B,OAAO,CAAC,UAAU;CAKlB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,qBAAqB,GAC3B,2BAA2B,CAE7B"}
1
+ {"version":3,"file":"image-classifier.d.ts","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/image-classifier.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAM/F,MAAM,WAAW,qBAAqB;IACrC,wCAAwC;IACxC,WAAW,EAAE,WAAW,CAAA;IACxB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,8DAA8D;IAC9D,EAAE,EAAE,UAAU,CAAA;IACd,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;CAChB;AAMD;;;GAGG;AACH,qBAAa,2BAA4B,YAAW,YAAY;IAC/D,QAAQ,CAAC,IAAI,sBAAqB;IAClC,QAAQ,CAAC,kBAAkB,WAAc;IAEzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;gBAEhC,MAAM,EAAE,qBAAqB;IASnC,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAsD7C;;;OAGG;YACW,aAAa;IA2C3B,OAAO,CAAC,UAAU;CAKlB;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,qBAAqB,GAC3B,2BAA2B,CAE7B"}
@@ -21,12 +21,14 @@ export class ImageClassifierPreprocessor {
21
21
  logger;
22
22
  fs;
23
23
  skipVision;
24
+ gate;
24
25
  constructor(config) {
25
26
  this.llmProvider = config.llmProvider;
26
27
  this.visionModel = config.visionModel ? ModelId(config.visionModel) : ModelId('anthropic/claude-haiku-4.5');
27
28
  this.logger = config.logger;
28
29
  this.fs = config.fs;
29
30
  this.skipVision = config.skipVision ?? false;
31
+ this.gate = config.gate;
30
32
  }
31
33
  async process(filePath, mimeType, ctx) {
32
34
  try {
@@ -77,7 +79,7 @@ export class ImageClassifierPreprocessor {
77
79
  async describeImage(filePath, mimeType) {
78
80
  try {
79
81
  // Use file:// URL - resolved to base64 lazily in LLM provider
80
- const result = await this.llmProvider.inference({
82
+ const inferenceCall = () => this.llmProvider.inference({
81
83
  model: this.visionModel,
82
84
  systemPrompt: 'You are an image description assistant. Describe images concisely in 1-2 sentences.',
83
85
  messages: [
@@ -98,6 +100,7 @@ export class ImageClassifierPreprocessor {
98
100
  maxTokens: 200,
99
101
  temperature: 0.3,
100
102
  });
103
+ const result = await (this.gate ? this.gate.run(inferenceCall) : inferenceCall());
101
104
  if (result.ok && result.value.content) {
102
105
  return result.value.content.trim();
103
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"image-classifier.js","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/image-classifier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-classifier.js","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/image-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=image-classifier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-classifier.test.d.ts","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/image-classifier.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,113 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from 'bun:test';
2
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
3
+ import { tmpdir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ import { SessionFileStore } from '../../../core/file-store/file-store.js';
6
+ import { MockLLMProvider } from '../../../core/llm/mock.js';
7
+ import { Semaphore } from '../../../lib/utils/concurrency.js';
8
+ import { silentLogger } from '../../../lib/logger/logger.js';
9
+ import { createNodePlatform } from '../../../testing/node-platform.js';
10
+ import { ImageClassifierPreprocessor } from './image-classifier.js';
11
+ function defer() {
12
+ let resolve;
13
+ const promise = new Promise((res) => {
14
+ resolve = res;
15
+ });
16
+ return { promise, resolve };
17
+ }
18
+ describe('ImageClassifierPreprocessor.gate', () => {
19
+ const platform = createNodePlatform();
20
+ let workDir;
21
+ beforeAll(async () => {
22
+ workDir = await mkdtemp(join(tmpdir(), 'roj-classifier-gate-'));
23
+ });
24
+ afterAll(async () => {
25
+ await rm(workDir, { recursive: true, force: true }).catch(() => { });
26
+ });
27
+ it('caps concurrent vision LLM calls when a gate is provided', async () => {
28
+ const N = 8;
29
+ const LIMIT = 3;
30
+ // Track concurrency inside the mock LLM handler — each call increments
31
+ // `active` on entry, awaits a release barrier, then decrements on exit.
32
+ let active = 0;
33
+ let peak = 0;
34
+ const release = defer();
35
+ const llmProvider = new MockLLMProvider(async () => {
36
+ active++;
37
+ peak = Math.max(peak, active);
38
+ await release.promise;
39
+ active--;
40
+ return {
41
+ content: 'desc',
42
+ toolCalls: [],
43
+ finishReason: 'stop',
44
+ metrics: MockLLMProvider.defaultMetrics(),
45
+ };
46
+ });
47
+ const gate = new Semaphore(LIMIT);
48
+ const classifier = new ImageClassifierPreprocessor({
49
+ llmProvider,
50
+ logger: silentLogger,
51
+ fs: platform.fs,
52
+ gate,
53
+ });
54
+ // Create N tiny dummy image files — content doesn't matter, classifier
55
+ // only stats them and hands the path to the (mocked) LLM.
56
+ const imagePaths = await Promise.all(Array.from({ length: N }, async (_, i) => {
57
+ const p = join(workDir, `img-${i}.png`);
58
+ await writeFile(p, Buffer.from([0x89, 0x50, 0x4e, 0x47]));
59
+ return p;
60
+ }));
61
+ const fileStore = new SessionFileStore(workDir, undefined, false, platform.fs, 'session');
62
+ const tasks = imagePaths.map((p, i) => classifier.process(p, 'image/png', { files: fileStore.scoped(`img-${i}-meta`) }));
63
+ // Let the workers queue up; the first LIMIT should be in-flight.
64
+ await new Promise(r => setTimeout(r, 20));
65
+ expect(active).toBeLessThanOrEqual(LIMIT);
66
+ expect(active).toBe(LIMIT);
67
+ // Release everyone; wait for completion and check peak.
68
+ release.resolve();
69
+ const results = await Promise.all(tasks);
70
+ expect(peak).toBe(LIMIT);
71
+ expect(active).toBe(0);
72
+ expect(llmProvider.getCallCount()).toBe(N);
73
+ for (const r of results) {
74
+ expect(r.ok).toBe(true);
75
+ }
76
+ });
77
+ it('does not gate when no semaphore is provided (all run concurrently)', async () => {
78
+ const N = 6;
79
+ let active = 0;
80
+ let peak = 0;
81
+ const release = defer();
82
+ const llmProvider = new MockLLMProvider(async () => {
83
+ active++;
84
+ peak = Math.max(peak, active);
85
+ await release.promise;
86
+ active--;
87
+ return {
88
+ content: 'desc',
89
+ toolCalls: [],
90
+ finishReason: 'stop',
91
+ metrics: MockLLMProvider.defaultMetrics(),
92
+ };
93
+ });
94
+ const classifier = new ImageClassifierPreprocessor({
95
+ llmProvider,
96
+ logger: silentLogger,
97
+ fs: platform.fs,
98
+ });
99
+ const imagePaths = await Promise.all(Array.from({ length: N }, async (_, i) => {
100
+ const p = join(workDir, `nogate-${i}.png`);
101
+ await writeFile(p, Buffer.from([0x89, 0x50, 0x4e, 0x47]));
102
+ return p;
103
+ }));
104
+ const fileStore = new SessionFileStore(workDir, undefined, false, platform.fs, 'session');
105
+ const tasks = imagePaths.map((p, i) => classifier.process(p, 'image/png', { files: fileStore.scoped(`nogate-${i}-meta`) }));
106
+ await new Promise(r => setTimeout(r, 20));
107
+ expect(active).toBe(N);
108
+ release.resolve();
109
+ await Promise.all(tasks);
110
+ expect(peak).toBe(N);
111
+ });
112
+ });
113
+ //# sourceMappingURL=image-classifier.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-classifier.test.js","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/image-classifier.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"markitdown-preprocessor.d.ts","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/markitdown-preprocessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AA2CrH,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,UAAU,CAAA;IACd,OAAO,EAAE,aAAa,CAAA;CACtB;AAED,qBAAa,sBAAuB,YAAW,YAAY;IAC1D,QAAQ,CAAC,IAAI,gBAAe;IAC5B,QAAQ,CAAC,kBAAkB,WAAuB;IAElD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8E;gBAEvF,MAAM,EAAE,4BAA4B;IAO1C,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YA2D/B,uBAAuB;YA+BvB,0BAA0B;CAiBxC;AAoBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAsB,uBAAuB,CAC5C,UAAU,EAAE,SAAS,EACrB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAgC/D"}
1
+ {"version":3,"file":"markitdown-preprocessor.d.ts","sourceRoot":"","sources":["../../../../src/plugins/uploads/preprocessors/markitdown-preprocessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AA4CrH,MAAM,WAAW,4BAA4B;IAC5C,QAAQ,EAAE,oBAAoB,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,EAAE,UAAU,CAAA;IACd,OAAO,EAAE,aAAa,CAAA;CACtB;AAED,qBAAa,sBAAuB,YAAW,YAAY;IAC1D,QAAQ,CAAC,IAAI,gBAAe;IAC5B,QAAQ,CAAC,kBAAkB,WAAuB;IAElD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA8E;gBAEvF,MAAM,EAAE,4BAA4B;IAO1C,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,mBAAmB,GACtB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;YA2D/B,uBAAuB;YA+BvB,0BAA0B;CAiBxC;AAoBD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAsB,uBAAuB,CAC5C,UAAU,EAAE,SAAS,EACrB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA8B/D"}
@@ -12,8 +12,10 @@
12
12
  * Full content is written to disk; extractedContent contains a structured manifest.
13
13
  */
14
14
  import { dirname } from 'node:path';
15
+ import { mapWithConcurrency } from '../../../lib/utils/concurrency.js';
15
16
  import { Err, Ok } from '../../../lib/utils/result.js';
16
17
  const MAX_IMAGES = 50;
18
+ const IMAGE_CLASSIFY_CONCURRENCY = 10;
17
19
  function makeExec(processRunner) {
18
20
  return (cmd, args) => processRunner.execFile(cmd, args, { timeout: 60_000, maxBuffer: 50 * 1024 * 1024 });
19
21
  }
@@ -174,18 +176,17 @@ export function guessImageMime(filename) {
174
176
  return IMAGE_MIME_MAP[ext ?? ''] ?? 'image/png';
175
177
  }
176
178
  export async function classifyExtractedImages(imageStore, relativePrefix, ctx, registry, logger) {
177
- const results = [];
178
179
  const listResult = await imageStore.list('', { maxDepth: 3 });
179
180
  if (!listResult.ok)
180
- return results;
181
+ return [];
181
182
  const imageFiles = listResult.value
182
183
  .filter(e => e.type === 'file' && IMAGE_EXT_RE.test(e.name))
183
184
  .sort((a, b) => a.name.localeCompare(b.name))
184
185
  .slice(0, MAX_IMAGES);
185
- for (const imgFile of imageFiles) {
186
+ const settled = await mapWithConcurrency(imageFiles, IMAGE_CLASSIFY_CONCURRENCY, async (imgFile) => {
186
187
  const imgPathResult = imageStore.realPath(imgFile.name);
187
188
  if (!imgPathResult.ok)
188
- continue;
189
+ return null;
189
190
  const imgMime = guessImageMime(imgFile.name);
190
191
  let description = imgMime;
191
192
  const classifier = registry.getForMimeType(imgMime);
@@ -197,8 +198,8 @@ export async function classifyExtractedImages(imageStore, relativePrefix, ctx, r
197
198
  description = classifyResult.value.extractedContent;
198
199
  }
199
200
  }
200
- results.push({ relativePath: `${relativePrefix}/${imgFile.name}`, description });
201
- }
202
- return results;
201
+ return { relativePath: `${relativePrefix}/${imgFile.name}`, description };
202
+ });
203
+ return settled.filter((r) => r !== null);
203
204
  }
204
205
  //# sourceMappingURL=markitdown-preprocessor.js.map