@aleph-alpha/chat-kit 2.0.0 → 2.1.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.
@@ -3,6 +3,6 @@ import { createDocumentUploadProvider } from './useFileUploadWrapper';
3
3
  export declare const defaultDocumentUploadConfig: DocumentUploadConfig;
4
4
  declare const useDocumentUploadWithDefaultConfig: (conversationIdRef: import("vue").MaybeRef<string>) => import("./types").DocumentUploadReturn;
5
5
  export { useDocumentUploadWithDefaultConfig, createDocumentUploadProvider };
6
- export type { DocumentUploadConfig, DocumentUploadProvider, FileEntry, FileStatus, } from './types';
6
+ export type { DocumentUploadConfig, DocumentUploadProvider, DocumentUploadReturn, HandleFilesSelectedOptions, FileEntry, FileStatus, } from './types';
7
7
  export { SdkError, defaultEndpoints } from './types';
8
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAItE,eAAO,MAAM,2BAA2B,EAAE,oBAsEzC,CAAC;AAEF,QAAA,MAA2B,kCAAkC,+FACF,CAAC;AAE5D,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;AAE5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAItE,eAAO,MAAM,2BAA2B,EAAE,oBAsEzC,CAAC;AAEF,QAAA,MAA2B,kCAAkC,+FACF,CAAC;AAE5D,OAAO,EAAE,kCAAkC,EAAE,4BAA4B,EAAE,CAAC;AAE5E,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,EAC1B,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
@@ -245,6 +245,7 @@ export interface DocumentUploadConfig {
245
245
  workflowConfig: Record<string, unknown>;
246
246
  persist?: boolean;
247
247
  maxConcurrency?: number;
248
+ maxFilesPerUpload?: number;
248
249
  headers?: Record<string, string>;
249
250
  onEvent?: (event: UploadEvent) => void;
250
251
  }
@@ -255,13 +256,21 @@ export interface DocumentUploadReturn {
255
256
  upload: UseFileUploadReturn;
256
257
  storeId: Ref<string>;
257
258
  fileInput: Ref<HTMLInputElement | null>;
259
+ maxFilesPerUpload: number;
258
260
  uploadFiles: (files: File[]) => Promise<UploadResult | undefined>;
259
261
  unassignedFiles: ComputedRef<FileEntry[]>;
260
262
  assignFilesToMessage: (messageId: string) => void;
261
263
  getFilesForMessage: (messageId: string) => FileEntry[];
262
264
  stampResponseId: (responseId: string, localMessageId: string) => void;
263
265
  purgeCompletedFiles: () => void;
264
- handleFilesSelected: (event: Event) => void;
266
+ handleFilesSelected: (event: Event, options?: HandleFilesSelectedOptions) => void;
267
+ }
268
+ export interface HandleFilesSelectedOptions {
269
+ onFilesExceeded?: (info: {
270
+ selected: number;
271
+ allowed: number;
272
+ kept: number;
273
+ }) => void;
265
274
  }
266
275
  export interface UseFileUploadOptions {
267
276
  client: HttpClient;
@@ -270,6 +279,7 @@ export interface UseFileUploadOptions {
270
279
  endpoints?: EndpointResolver;
271
280
  persist?: PersistOptions | boolean;
272
281
  maxConcurrency?: number;
282
+ maxFilesPerUpload?: number;
273
283
  retryPolicy?: RetryPolicy;
274
284
  validators?: ValidatorFn[];
275
285
  onEvent?: (event: UploadEvent) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAkBL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAEjB,cAAc,SAAS,CAAC;AAybxB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CAmwBrB"}
1
+ {"version":3,"file":"useFileUpload.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUpload.ts"],"names":[],"mappings":"AACA,OAAO,EAkBL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EAKzB,MAAM,SAAS,CAAC;AAEjB,cAAc,SAAS,CAAC;AAybxB,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,GAC5B,mBAAmB,CA2yBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFileUploadWrapper.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUploadWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,oBAAoB,EACpB,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAiJjB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAiOxB"}
1
+ {"version":3,"file":"useFileUploadWrapper.d.ts","sourceRoot":"","sources":["../../../src/composables/fileUpload/useFileUploadWrapper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,oBAAoB,EACpB,sBAAsB,EAIvB,MAAM,SAAS,CAAC;AAiJjB,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAsPxB"}
@@ -1,4 +1,4 @@
1
- import { c, d, u, b, e, f } from "../index-Ct5hD214.js";
1
+ import { c, d, u, b, e, f } from "../index-BPXg1Yf6.js";
2
2
  export {
3
3
  c as createDocumentUploadProvider,
4
4
  d as defaultDocumentUploadConfig,
@@ -588,7 +588,12 @@ function useFileUpload(options) {
588
588
  let storeId = options.storeId ?? "";
589
589
  const endpoints = options.endpoints ?? defaultEndpoints;
590
590
  const retryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;
591
- const constraints = { ...DEFAULT_CONSTRAINTS };
591
+ const constraints = {
592
+ ...DEFAULT_CONSTRAINTS,
593
+ ...options.maxFilesPerUpload != null && {
594
+ maxFilesPerUpload: options.maxFilesPerUpload
595
+ }
596
+ };
592
597
  const validators = options.validators ?? [];
593
598
  const maxConcurrency = options.maxConcurrency ?? 3;
594
599
  const files = ref(/* @__PURE__ */ new Map());
@@ -757,10 +762,13 @@ function useFileUpload(options) {
757
762
  }
758
763
  async function upload(params) {
759
764
  const fileList = Array.isArray(params.files) ? params.files : [params.files];
760
- if (fileList.length > constraints.maxFilesPerUpload) {
765
+ const activeFileCount = [...files.value.values()].filter(
766
+ (e) => e.status !== "failed" && e.status !== "cancelled" && e.status !== "removed"
767
+ ).length;
768
+ if (activeFileCount + fileList.length > constraints.maxFilesPerUpload) {
761
769
  throw new SdkError(
762
770
  "MAX_FILES_EXCEEDED",
763
- `Cannot upload ${fileList.length} files — maximum is ${constraints.maxFilesPerUpload}.`
771
+ `Cannot upload ${fileList.length} file(s) — ${activeFileCount} already active, maximum is ${constraints.maxFilesPerUpload}.`
764
772
  );
765
773
  }
766
774
  const mergedMeta = {
@@ -1033,6 +1041,19 @@ function useFileUpload(options) {
1033
1041
  for (const key of involvedStateKeys) {
1034
1042
  updateEntry(key, { status: "processing", progress: 0 });
1035
1043
  }
1044
+ const completeInvolvedFiles = (documents = []) => {
1045
+ const documentIdByFileId = new Map(
1046
+ documents.filter((doc) => doc.file_id && doc.document_id).map((doc) => [doc.file_id, doc.document_id])
1047
+ );
1048
+ for (const key of involvedStateKeys) {
1049
+ updateEntry(key, { status: "success", progress: 100 });
1050
+ const remoteFileId = files.value.get(key)?.remoteFileId;
1051
+ const documentId = remoteFileId ? documentIdByFileId.get(remoteFileId) : void 0;
1052
+ if (documentId) {
1053
+ updateFileMetadata(key, { documentId });
1054
+ }
1055
+ }
1056
+ };
1036
1057
  const runResponse = await client.post(
1037
1058
  endpoints.workflowRun(storeId, workflowId),
1038
1059
  { input },
@@ -1075,9 +1096,9 @@ function useFileUpload(options) {
1075
1096
  if (data.status === "completed") {
1076
1097
  workflowRun.value.status = "completed";
1077
1098
  workflowRun.value.completedAt = now();
1078
- for (const key of involvedStateKeys) {
1079
- updateEntry(key, { status: "success", progress: 100 });
1080
- }
1099
+ completeInvolvedFiles(
1100
+ Array.isArray(data.documents) ? data.documents : []
1101
+ );
1081
1102
  emit({ type: "workflow:completed", runId });
1082
1103
  } else if (data.status === "failed" || data.status === "error") {
1083
1104
  workflowRun.value.status = "failed";
@@ -1308,7 +1329,8 @@ function createDocumentUploadProvider(config) {
1308
1329
  searchStoreConfig,
1309
1330
  workflowConfig,
1310
1331
  persist = true,
1311
- maxConcurrency = 3
1332
+ maxConcurrency = 3,
1333
+ maxFilesPerUpload
1312
1334
  } = config;
1313
1335
  const defaultHeaders = {
1314
1336
  "x-user-id": userId,
@@ -1373,6 +1395,7 @@ function createDocumentUploadProvider(config) {
1373
1395
  workflowId,
1374
1396
  persist,
1375
1397
  maxConcurrency,
1398
+ maxFilesPerUpload,
1376
1399
  onEvent
1377
1400
  });
1378
1401
  }
@@ -1381,6 +1404,7 @@ function createDocumentUploadProvider(config) {
1381
1404
  function useDocumentUpload(conversationIdRef) {
1382
1405
  const fileInput = ref(null);
1383
1406
  const upload = getUploadInstance();
1407
+ const resolvedMaxFiles = upload.getSupportedFileTypes().maxFilesPerUpload;
1384
1408
  const storeId = ref(resolvedStoreId ?? "");
1385
1409
  const currentScope = shallowRef(
1386
1410
  upload.scopeBy("conversationId", toValue(conversationIdRef))
@@ -1456,16 +1480,29 @@ function createDocumentUploadProvider(config) {
1456
1480
  upload.removeFile(entry.id, { removeFromRemote: false });
1457
1481
  }
1458
1482
  }
1459
- function handleFilesSelected(event) {
1483
+ function handleFilesSelected(event, options) {
1460
1484
  const input = event.target;
1461
- const fileList = Array.from(input.files ?? []);
1462
- uploadFiles(fileList);
1485
+ let fileList = Array.from(input.files ?? []);
1486
+ const availableSlots = resolvedMaxFiles - unassignedFiles.value.length;
1487
+ if (fileList.length > availableSlots) {
1488
+ const kept = Math.max(0, availableSlots);
1489
+ options?.onFilesExceeded?.({
1490
+ selected: fileList.length,
1491
+ allowed: availableSlots,
1492
+ kept
1493
+ });
1494
+ fileList = fileList.slice(0, kept);
1495
+ }
1496
+ if (fileList.length > 0) {
1497
+ uploadFiles(fileList);
1498
+ }
1463
1499
  input.value = "";
1464
1500
  }
1465
1501
  return {
1466
1502
  upload,
1467
1503
  storeId,
1468
1504
  fileInput,
1505
+ maxFilesPerUpload: resolvedMaxFiles,
1469
1506
  uploadFiles,
1470
1507
  unassignedFiles,
1471
1508
  assignFilesToMessage,
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { u } from "./useMessageHandler-CMdy-lm0.js";
2
2
  import { C, d, p, u as u2, a } from "./useChatKitLabels-ZutacPad.js";
3
- import { S, c, d as d2, a as a2, u as u3, b, e, f } from "./index-Ct5hD214.js";
3
+ import { S, c, d as d2, a as a2, u as u3, b, e, f } from "./index-BPXg1Yf6.js";
4
4
  import { _, a as a3, b as b2, C as C2, c as c2, d as d3, e as e2, f as f2, g, h, i, j, k, l, m, n, o, p as p2, q, r, s, t } from "./CkInput.vue_vue_type_script_setup_true_lang-DPZedAQS.js";
5
5
  export {
6
6
  C as CHAT_KIT_LABELS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aleph-alpha/chat-kit",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "description": "Chat kit package for building chat interfaces with Vue",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -10,6 +10,7 @@ vi.mock('./useFileUploadWrapper', () => ({
10
10
  upload: {},
11
11
  storeId: { value: '' },
12
12
  fileInput: { value: null },
13
+ maxFilesPerUpload: config.maxFilesPerUpload ?? 20,
13
14
  uploadFiles: vi.fn(),
14
15
  unassignedFiles: { value: [] },
15
16
  assignFilesToMessage: vi.fn(),
@@ -143,6 +144,10 @@ describe('fileUpload index', () => {
143
144
  additionalProperties: true,
144
145
  });
145
146
  });
147
+
148
+ it('does not set maxFilesPerUpload by default', () => {
149
+ expect(defaultDocumentUploadConfig.maxFilesPerUpload).toBeUndefined();
150
+ });
146
151
  });
147
152
 
148
153
  describe('createDocumentUploadProvider', () => {
@@ -187,6 +192,22 @@ describe('fileUpload index', () => {
187
192
  };
188
193
  expect(provider._config).toBe(customConfig);
189
194
  });
195
+
196
+ it('passes maxFilesPerUpload through config', () => {
197
+ const customConfig: DocumentUploadConfig = {
198
+ ...defaultDocumentUploadConfig,
199
+ maxFilesPerUpload: 5,
200
+ };
201
+
202
+ const provider = createDocumentUploadProvider(
203
+ customConfig,
204
+ ) as unknown as {
205
+ useDocumentUpload: (id: string) => { maxFilesPerUpload: number };
206
+ _config: DocumentUploadConfig;
207
+ };
208
+ const result = provider.useDocumentUpload('conv-1');
209
+ expect(result.maxFilesPerUpload).toBe(5);
210
+ });
190
211
  });
191
212
 
192
213
  describe('useDocumentUploadWithDefaultConfig', () => {
@@ -83,6 +83,8 @@ export { useDocumentUploadWithDefaultConfig, createDocumentUploadProvider };
83
83
  export type {
84
84
  DocumentUploadConfig,
85
85
  DocumentUploadProvider,
86
+ DocumentUploadReturn,
87
+ HandleFilesSelectedOptions,
86
88
  FileEntry,
87
89
  FileStatus,
88
90
  } from './types';
@@ -345,6 +345,7 @@ export interface DocumentUploadConfig {
345
345
  workflowConfig: Record<string, unknown>;
346
346
  persist?: boolean;
347
347
  maxConcurrency?: number;
348
+ maxFilesPerUpload?: number;
348
349
  headers?: Record<string, string>;
349
350
  onEvent?: (event: UploadEvent) => void;
350
351
  }
@@ -359,13 +360,25 @@ export interface DocumentUploadReturn {
359
360
  upload: UseFileUploadReturn;
360
361
  storeId: Ref<string>;
361
362
  fileInput: Ref<HTMLInputElement | null>;
363
+ maxFilesPerUpload: number;
362
364
  uploadFiles: (files: File[]) => Promise<UploadResult | undefined>;
363
365
  unassignedFiles: ComputedRef<FileEntry[]>;
364
366
  assignFilesToMessage: (messageId: string) => void;
365
367
  getFilesForMessage: (messageId: string) => FileEntry[];
366
368
  stampResponseId: (responseId: string, localMessageId: string) => void;
367
369
  purgeCompletedFiles: () => void;
368
- handleFilesSelected: (event: Event) => void;
370
+ handleFilesSelected: (
371
+ event: Event,
372
+ options?: HandleFilesSelectedOptions,
373
+ ) => void;
374
+ }
375
+
376
+ export interface HandleFilesSelectedOptions {
377
+ onFilesExceeded?: (info: {
378
+ selected: number;
379
+ allowed: number;
380
+ kept: number;
381
+ }) => void;
369
382
  }
370
383
 
371
384
  // ---------------------------------------------------------------------------
@@ -379,6 +392,7 @@ export interface UseFileUploadOptions {
379
392
  endpoints?: EndpointResolver;
380
393
  persist?: PersistOptions | boolean;
381
394
  maxConcurrency?: number;
395
+ maxFilesPerUpload?: number;
382
396
  retryPolicy?: RetryPolicy;
383
397
  validators?: ValidatorFn[];
384
398
  onEvent?: (event: UploadEvent) => void;
@@ -0,0 +1,258 @@
1
+ import { useFileUpload } from './useFileUpload';
2
+ import type { FileEntry, HttpClient, SseEvent } from './types';
3
+
4
+ /**
5
+ * Build a minimal `FileEntry` in the post-upload `processing` state so
6
+ * `runWorkflow` treats it as an involved file (it filters on `remoteFileId`).
7
+ */
8
+ function makeEntry(id: string, remoteFileId: string): FileEntry {
9
+ return {
10
+ id,
11
+ groupId: 'group-1',
12
+ fileName: `${id}.pdf`,
13
+ fileSize: 1,
14
+ fileType: 'application/pdf',
15
+ status: 'processing',
16
+ progress: 0,
17
+ queuedAt: 'now',
18
+ uploadStartedAt: null,
19
+ uploadCompletedAt: null,
20
+ cancelledAt: null,
21
+ removedAt: null,
22
+ uploadDurationMs: null,
23
+ remoteFileId,
24
+ error: null,
25
+ attemptCount: 0,
26
+ lastAttemptAt: null,
27
+ thumbnail: null,
28
+ metadata: {},
29
+ };
30
+ }
31
+
32
+ function makeSuccessEntry(id: string, remoteFileId: string): FileEntry {
33
+ return { ...makeEntry(id, remoteFileId), status: 'success', progress: 100 };
34
+ }
35
+
36
+ /**
37
+ * Mock `HttpClient` whose `stream` captures the subscriber so the test can
38
+ * drive SSE events synchronously. `post` resolves the workflow run id.
39
+ */
40
+ function createMockClient(captured: { cb?: (event: SseEvent) => void }) {
41
+ return {
42
+ get: vi.fn(),
43
+ delete: vi.fn(),
44
+ post: vi.fn().mockResolvedValue({ id: 'run-1' }),
45
+ stream: vi.fn(() => ({
46
+ subscribe: (cb: (event: SseEvent) => void) => {
47
+ captured.cb = cb;
48
+ },
49
+ close: vi.fn(),
50
+ })),
51
+ } as unknown as HttpClient;
52
+ }
53
+
54
+ function createUploadMockClient() {
55
+ return {
56
+ get: vi.fn(),
57
+ delete: vi.fn(),
58
+ post: vi.fn().mockResolvedValue([{ id: 'remote-1' }]),
59
+ stream: vi.fn(() => ({
60
+ subscribe: vi.fn(),
61
+ close: vi.fn(),
62
+ })),
63
+ } as unknown as HttpClient;
64
+ }
65
+
66
+ function completeEvent(
67
+ documents: Array<{ document_id?: string; file_id?: string }>,
68
+ ): SseEvent {
69
+ return {
70
+ event: 'complete',
71
+ data: JSON.stringify({
72
+ document_ids: documents.map((d) => d.document_id),
73
+ documents,
74
+ status: 'completed',
75
+ }),
76
+ };
77
+ }
78
+
79
+ function createFile(name: string, size = 100): File {
80
+ return new File(['x'.repeat(size)], name, { type: 'application/pdf' });
81
+ }
82
+
83
+ describe('useFileUpload runWorkflow', () => {
84
+ it('stamps documentId onto each file from the completed event, matched by file_id', async () => {
85
+ const captured: { cb?: (event: SseEvent) => void } = {};
86
+ const upload = useFileUpload({
87
+ client: createMockClient(captured),
88
+ workflowId: 'wf',
89
+ storeId: 'ss-1',
90
+ });
91
+
92
+ upload.files.value.set('key-1', makeEntry('key-1', 'file-1'));
93
+ upload.files.value.set('key-2', makeEntry('key-2', 'file-2'));
94
+
95
+ await upload.runWorkflow(['file-1', 'file-2']);
96
+ expect(captured.cb).toBeDefined();
97
+
98
+ // Reverse order on purpose: mapping must be keyed by file_id, not position.
99
+ captured.cb!(
100
+ completeEvent([
101
+ { document_id: 'doc-2', file_id: 'file-2' },
102
+ { document_id: 'doc-1', file_id: 'file-1' },
103
+ ]),
104
+ );
105
+
106
+ expect(upload.getFileState('key-1')?.metadata.documentId).toBe('doc-1');
107
+ expect(upload.getFileState('key-2')?.metadata.documentId).toBe('doc-2');
108
+ expect(upload.getFileState('key-1')?.status).toBe('success');
109
+ expect(upload.getFileState('key-2')?.status).toBe('success');
110
+ });
111
+
112
+ it('marks files successful without a documentId when the event has no documents', async () => {
113
+ const captured: { cb?: (event: SseEvent) => void } = {};
114
+ const upload = useFileUpload({
115
+ client: createMockClient(captured),
116
+ workflowId: 'wf',
117
+ storeId: 'ss-1',
118
+ });
119
+
120
+ upload.files.value.set('key-1', makeEntry('key-1', 'file-1'));
121
+
122
+ await upload.runWorkflow(['file-1']);
123
+ captured.cb!({
124
+ event: 'complete',
125
+ data: JSON.stringify({ status: 'completed' }),
126
+ });
127
+
128
+ expect(upload.getFileState('key-1')?.status).toBe('success');
129
+ expect(upload.getFileState('key-1')?.metadata.documentId).toBeUndefined();
130
+ });
131
+ });
132
+
133
+ describe('useFileUpload maxFilesPerUpload', () => {
134
+ it('uses default maxFilesPerUpload of 20 when not configured', () => {
135
+ const upload = useFileUpload({
136
+ client: createUploadMockClient(),
137
+ workflowId: 'wf',
138
+ storeId: 'ss-1',
139
+ });
140
+
141
+ const constraints = upload.getSupportedFileTypes();
142
+ expect(constraints.maxFilesPerUpload).toBe(20);
143
+ });
144
+
145
+ it('respects custom maxFilesPerUpload from options', () => {
146
+ const upload = useFileUpload({
147
+ client: createUploadMockClient(),
148
+ workflowId: 'wf',
149
+ storeId: 'ss-1',
150
+ maxFilesPerUpload: 5,
151
+ });
152
+
153
+ const constraints = upload.getSupportedFileTypes();
154
+ expect(constraints.maxFilesPerUpload).toBe(5);
155
+ });
156
+
157
+ it('throws MAX_FILES_EXCEEDED when batch exceeds limit', async () => {
158
+ const upload = useFileUpload({
159
+ client: createUploadMockClient(),
160
+ workflowId: 'wf',
161
+ storeId: 'ss-1',
162
+ maxFilesPerUpload: 2,
163
+ });
164
+
165
+ const files = [
166
+ createFile('a.pdf'),
167
+ createFile('b.pdf'),
168
+ createFile('c.pdf'),
169
+ ];
170
+
171
+ await expect(upload.upload({ id: 'g1', files })).rejects.toMatchObject({
172
+ code: 'MAX_FILES_EXCEEDED',
173
+ });
174
+ });
175
+
176
+ it('throws MAX_FILES_EXCEEDED when active files plus new batch exceeds limit', async () => {
177
+ const client = createUploadMockClient();
178
+ (client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
179
+ { id: 'remote-1' },
180
+ ]);
181
+
182
+ const upload = useFileUpload({
183
+ client,
184
+ workflowId: 'wf',
185
+ storeId: 'ss-1',
186
+ maxFilesPerUpload: 3,
187
+ });
188
+
189
+ upload.files.value.set('existing-1', makeSuccessEntry('existing-1', 'r-1'));
190
+ upload.files.value.set('existing-2', makeSuccessEntry('existing-2', 'r-2'));
191
+
192
+ await expect(
193
+ upload.upload({
194
+ id: 'g2',
195
+ files: [createFile('a.pdf'), createFile('b.pdf')],
196
+ }),
197
+ ).rejects.toMatchObject({
198
+ code: 'MAX_FILES_EXCEEDED',
199
+ });
200
+ });
201
+
202
+ it('allows upload when active files plus new batch is within limit', async () => {
203
+ const client = createUploadMockClient();
204
+ (client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
205
+ { id: 'remote-new' },
206
+ ]);
207
+
208
+ const upload = useFileUpload({
209
+ client,
210
+ workflowId: 'wf',
211
+ storeId: 'ss-1',
212
+ maxFilesPerUpload: 3,
213
+ });
214
+
215
+ upload.files.value.set('existing-1', makeSuccessEntry('existing-1', 'r-1'));
216
+
217
+ const result = await upload.upload({
218
+ id: 'g3',
219
+ files: [createFile('a.pdf'), createFile('b.pdf')],
220
+ });
221
+
222
+ expect(result.results).toHaveLength(2);
223
+ });
224
+
225
+ it('does not count failed/cancelled/removed files towards active count', async () => {
226
+ const client = createUploadMockClient();
227
+ (client.post as ReturnType<typeof vi.fn>).mockResolvedValue([
228
+ { id: 'remote-new' },
229
+ ]);
230
+
231
+ const upload = useFileUpload({
232
+ client,
233
+ workflowId: 'wf',
234
+ storeId: 'ss-1',
235
+ maxFilesPerUpload: 2,
236
+ });
237
+
238
+ const failedEntry: FileEntry = {
239
+ ...makeEntry('failed-1', 'r-f1'),
240
+ status: 'failed',
241
+ error: { code: 'UPLOAD_FAILED', message: 'err', occurredAt: 'now' },
242
+ };
243
+ const cancelledEntry: FileEntry = {
244
+ ...makeEntry('cancelled-1', 'r-c1'),
245
+ status: 'cancelled',
246
+ };
247
+
248
+ upload.files.value.set('failed-1', failedEntry);
249
+ upload.files.value.set('cancelled-1', cancelledEntry);
250
+
251
+ const result = await upload.upload({
252
+ id: 'g4',
253
+ files: [createFile('a.pdf'), createFile('b.pdf')],
254
+ });
255
+
256
+ expect(result.results).toHaveLength(2);
257
+ });
258
+ });
@@ -473,7 +473,12 @@ export function useFileUpload(
473
473
  let storeId = options.storeId ?? '';
474
474
  const endpoints: EndpointResolver = options.endpoints ?? defaultEndpoints;
475
475
  const retryPolicy: RetryPolicy = options.retryPolicy ?? DEFAULT_RETRY_POLICY;
476
- const constraints: FileConstraints = { ...DEFAULT_CONSTRAINTS };
476
+ const constraints: FileConstraints = {
477
+ ...DEFAULT_CONSTRAINTS,
478
+ ...(options.maxFilesPerUpload != null && {
479
+ maxFilesPerUpload: options.maxFilesPerUpload,
480
+ }),
481
+ };
477
482
  const validators: ValidatorFn[] = options.validators ?? [];
478
483
  const maxConcurrency = options.maxConcurrency ?? 3;
479
484
 
@@ -701,10 +706,17 @@ export function useFileUpload(
701
706
  ? params.files
702
707
  : [params.files];
703
708
 
704
- if (fileList.length > constraints.maxFilesPerUpload) {
709
+ const activeFileCount = [...files.value.values()].filter(
710
+ (e) =>
711
+ e.status !== 'failed' &&
712
+ e.status !== 'cancelled' &&
713
+ e.status !== 'removed',
714
+ ).length;
715
+
716
+ if (activeFileCount + fileList.length > constraints.maxFilesPerUpload) {
705
717
  throw new SdkError(
706
718
  'MAX_FILES_EXCEEDED',
707
- `Cannot upload ${fileList.length} files — maximum is ${constraints.maxFilesPerUpload}.`,
719
+ `Cannot upload ${fileList.length} file(s) — ${activeFileCount} already active, maximum is ${constraints.maxFilesPerUpload}.`,
708
720
  );
709
721
  }
710
722
 
@@ -1054,6 +1066,30 @@ export function useFileUpload(
1054
1066
  updateEntry(key, { status: 'processing', progress: 0 });
1055
1067
  }
1056
1068
 
1069
+ // Mark the involved files successful and stamp the `documentId` resolved
1070
+ // from the terminal event's `documents` array (mapping `file_id` ->
1071
+ // `document_id`) onto each matching entry, so consumers can reference the
1072
+ // produced document directly without a separate lookup.
1073
+ const completeInvolvedFiles = (
1074
+ documents: Array<{ document_id?: string; file_id?: string }> = [],
1075
+ ) => {
1076
+ const documentIdByFileId = new Map(
1077
+ documents
1078
+ .filter((doc) => doc.file_id && doc.document_id)
1079
+ .map((doc) => [doc.file_id, doc.document_id] as const),
1080
+ );
1081
+ for (const key of involvedStateKeys) {
1082
+ updateEntry(key, { status: 'success', progress: 100 });
1083
+ const remoteFileId = files.value.get(key)?.remoteFileId;
1084
+ const documentId = remoteFileId
1085
+ ? documentIdByFileId.get(remoteFileId)
1086
+ : undefined;
1087
+ if (documentId) {
1088
+ updateFileMetadata(key, { documentId });
1089
+ }
1090
+ }
1091
+ };
1092
+
1057
1093
  const runResponse = await client.post<{ id: string }>(
1058
1094
  endpoints.workflowRun(storeId, workflowId),
1059
1095
  { input },
@@ -1087,7 +1123,11 @@ export function useFileUpload(
1087
1123
  sseStream.subscribe((event: SseEvent) => {
1088
1124
  if (!workflowRun.value) return;
1089
1125
 
1090
- let data: { id?: string; status?: string };
1126
+ let data: {
1127
+ id?: string;
1128
+ status?: string;
1129
+ documents?: Array<{ document_id?: string; file_id?: string }>;
1130
+ };
1091
1131
  try {
1092
1132
  data = JSON.parse(event.data);
1093
1133
  } catch {
@@ -1105,9 +1145,9 @@ export function useFileUpload(
1105
1145
  if (data.status === 'completed') {
1106
1146
  workflowRun.value.status = 'completed';
1107
1147
  workflowRun.value.completedAt = now();
1108
- for (const key of involvedStateKeys) {
1109
- updateEntry(key, { status: 'success', progress: 100 });
1110
- }
1148
+ completeInvolvedFiles(
1149
+ Array.isArray(data.documents) ? data.documents : [],
1150
+ );
1111
1151
  emit({ type: 'workflow:completed', runId });
1112
1152
  } else if (data.status === 'failed' || data.status === 'error') {
1113
1153
  workflowRun.value.status = 'failed';
@@ -0,0 +1,202 @@
1
+ import { createDocumentUploadProvider } from './useFileUploadWrapper';
2
+ import type { DocumentUploadConfig } from './types';
3
+
4
+ function createFile(name: string, size = 100): File {
5
+ return new File(['x'.repeat(size)], name, { type: 'application/pdf' });
6
+ }
7
+
8
+ function createMockFetchResponse(body: unknown, status = 200) {
9
+ return Promise.resolve({
10
+ ok: status >= 200 && status < 300,
11
+ status,
12
+ headers: new Headers({ 'content-length': '1' }),
13
+ json: () => Promise.resolve(body),
14
+ body: null,
15
+ });
16
+ }
17
+
18
+ function makeInputEvent(files: File[]): Event {
19
+ const input = document.createElement('input');
20
+ input.type = 'file';
21
+ Object.defineProperty(input, 'files', {
22
+ value: files,
23
+ writable: true,
24
+ });
25
+ return { target: input } as unknown as Event;
26
+ }
27
+
28
+ function buildConfig(
29
+ overrides?: Partial<DocumentUploadConfig>,
30
+ ): DocumentUploadConfig {
31
+ return {
32
+ baseUrl: 'https://test.example.com',
33
+ userId: 'user-1',
34
+ workflowId: 'wf-1',
35
+ searchStoreConfig: {
36
+ models: [
37
+ {
38
+ type: 'dense',
39
+ dimension: 1024,
40
+ distance: 'cosine',
41
+ modality: 'text',
42
+ embedding_model: 'test-model',
43
+ },
44
+ ],
45
+ fusion_strategy: { type: 'rrf' },
46
+ },
47
+ workflowConfig: { name: 'wf-1' },
48
+ ...overrides,
49
+ };
50
+ }
51
+
52
+ describe('useFileUploadWrapper handleFilesSelected', () => {
53
+ let fetchMock: ReturnType<typeof vi.fn>;
54
+
55
+ beforeEach(() => {
56
+ fetchMock = vi.fn();
57
+ vi.stubGlobal('fetch', fetchMock);
58
+
59
+ fetchMock.mockImplementation((url: string, init?: RequestInit) => {
60
+ const method = init?.method ?? 'GET';
61
+
62
+ if (method === 'GET' && url.includes('search-stores')) {
63
+ return createMockFetchResponse([{ id: 'store-1' }]);
64
+ }
65
+ if (method === 'POST' && url.includes('/files')) {
66
+ return createMockFetchResponse([{ id: 'remote-1' }]);
67
+ }
68
+ if (method === 'POST' && url.includes('/workflows')) {
69
+ return createMockFetchResponse({ id: 'run-1' });
70
+ }
71
+ if (url.includes('/event-stream')) {
72
+ return createMockFetchResponse(null, 200).then((res) => ({
73
+ ...res,
74
+ body: new ReadableStream({
75
+ start(controller) {
76
+ controller.close();
77
+ },
78
+ }),
79
+ }));
80
+ }
81
+ return createMockFetchResponse({});
82
+ });
83
+ });
84
+
85
+ afterEach(() => {
86
+ vi.unstubAllGlobals();
87
+ });
88
+
89
+ it('exposes maxFilesPerUpload from config', () => {
90
+ const provider = createDocumentUploadProvider(
91
+ buildConfig({ maxFilesPerUpload: 7 }),
92
+ );
93
+ const result = provider.useDocumentUpload('conv-1');
94
+ expect(result.maxFilesPerUpload).toBe(7);
95
+ });
96
+
97
+ it('defaults maxFilesPerUpload to 20 when not configured', () => {
98
+ const provider = createDocumentUploadProvider(buildConfig());
99
+ const result = provider.useDocumentUpload('conv-1');
100
+ expect(result.maxFilesPerUpload).toBe(20);
101
+ });
102
+
103
+ it('uploads all files when within the limit', async () => {
104
+ const provider = createDocumentUploadProvider(
105
+ buildConfig({ maxFilesPerUpload: 5 }),
106
+ );
107
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
108
+
109
+ const onFilesExceeded = vi.fn();
110
+ const event = makeInputEvent([createFile('a.pdf'), createFile('b.pdf')]);
111
+
112
+ handleFilesSelected(event, { onFilesExceeded });
113
+
114
+ expect(onFilesExceeded).not.toHaveBeenCalled();
115
+ });
116
+
117
+ it('truncates files to available slots and calls onFilesExceeded', () => {
118
+ const provider = createDocumentUploadProvider(
119
+ buildConfig({ maxFilesPerUpload: 2 }),
120
+ );
121
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
122
+
123
+ const onFilesExceeded = vi.fn();
124
+ const event = makeInputEvent([
125
+ createFile('a.pdf'),
126
+ createFile('b.pdf'),
127
+ createFile('c.pdf'),
128
+ createFile('d.pdf'),
129
+ ]);
130
+
131
+ handleFilesSelected(event, { onFilesExceeded });
132
+
133
+ expect(onFilesExceeded).toHaveBeenCalledWith({
134
+ selected: 4,
135
+ allowed: 2,
136
+ kept: 2,
137
+ });
138
+ });
139
+
140
+ it('resets input value after handling', () => {
141
+ const provider = createDocumentUploadProvider(
142
+ buildConfig({ maxFilesPerUpload: 5 }),
143
+ );
144
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
145
+
146
+ const event = makeInputEvent([createFile('a.pdf')]);
147
+ const input = (event as any).target as HTMLInputElement;
148
+
149
+ const valueSetter = vi.spyOn(input, 'value', 'set');
150
+
151
+ handleFilesSelected(event);
152
+
153
+ expect(valueSetter).toHaveBeenCalledWith('');
154
+ });
155
+
156
+ it('does not upload when no slots are available', async () => {
157
+ const provider = createDocumentUploadProvider(
158
+ buildConfig({ maxFilesPerUpload: 0 }),
159
+ );
160
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
161
+
162
+ const onFilesExceeded = vi.fn();
163
+ const event = makeInputEvent([createFile('a.pdf')]);
164
+
165
+ handleFilesSelected(event, { onFilesExceeded });
166
+
167
+ expect(onFilesExceeded).toHaveBeenCalledWith({
168
+ selected: 1,
169
+ allowed: 0,
170
+ kept: 0,
171
+ });
172
+ });
173
+
174
+ it('does not call onFilesExceeded when exactly at the limit', () => {
175
+ const provider = createDocumentUploadProvider(
176
+ buildConfig({ maxFilesPerUpload: 3 }),
177
+ );
178
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
179
+
180
+ const onFilesExceeded = vi.fn();
181
+ const event = makeInputEvent([
182
+ createFile('a.pdf'),
183
+ createFile('b.pdf'),
184
+ createFile('c.pdf'),
185
+ ]);
186
+
187
+ handleFilesSelected(event, { onFilesExceeded });
188
+
189
+ expect(onFilesExceeded).not.toHaveBeenCalled();
190
+ });
191
+
192
+ it('works without onFilesExceeded callback (no crash)', () => {
193
+ const provider = createDocumentUploadProvider(
194
+ buildConfig({ maxFilesPerUpload: 1 }),
195
+ );
196
+ const { handleFilesSelected } = provider.useDocumentUpload('conv-1');
197
+
198
+ const event = makeInputEvent([createFile('a.pdf'), createFile('b.pdf')]);
199
+
200
+ expect(() => handleFilesSelected(event)).not.toThrow();
201
+ });
202
+ });
@@ -9,6 +9,7 @@ import type {
9
9
  DocumentUploadConfig,
10
10
  DocumentUploadProvider,
11
11
  DocumentUploadReturn,
12
+ HandleFilesSelectedOptions,
12
13
  UploadEvent,
13
14
  } from './types';
14
15
  import { useFileUpload } from './useFileUpload';
@@ -166,6 +167,7 @@ export function createDocumentUploadProvider(
166
167
  workflowConfig,
167
168
  persist = true,
168
169
  maxConcurrency = 3,
170
+ maxFilesPerUpload,
169
171
  } = config;
170
172
 
171
173
  const defaultHeaders: Record<string, string> = {
@@ -249,6 +251,7 @@ export function createDocumentUploadProvider(
249
251
  workflowId,
250
252
  persist,
251
253
  maxConcurrency,
254
+ maxFilesPerUpload,
252
255
  onEvent,
253
256
  });
254
257
  }
@@ -262,6 +265,7 @@ export function createDocumentUploadProvider(
262
265
  ): DocumentUploadReturn {
263
266
  const fileInput = ref<HTMLInputElement | null>(null);
264
267
  const upload = getUploadInstance();
268
+ const resolvedMaxFiles = upload.getSupportedFileTypes().maxFilesPerUpload;
265
269
  const storeId = ref<string>(resolvedStoreId ?? '');
266
270
 
267
271
  const currentScope = shallowRef<ScopedFileView | null>(
@@ -360,10 +364,27 @@ export function createDocumentUploadProvider(
360
364
  }
361
365
  }
362
366
 
363
- function handleFilesSelected(event: Event) {
367
+ function handleFilesSelected(
368
+ event: Event,
369
+ options?: HandleFilesSelectedOptions,
370
+ ) {
364
371
  const input = event.target as HTMLInputElement;
365
- const fileList = Array.from(input.files ?? []);
366
- uploadFiles(fileList);
372
+ let fileList = Array.from(input.files ?? []);
373
+ const availableSlots = resolvedMaxFiles - unassignedFiles.value.length;
374
+
375
+ if (fileList.length > availableSlots) {
376
+ const kept = Math.max(0, availableSlots);
377
+ options?.onFilesExceeded?.({
378
+ selected: fileList.length,
379
+ allowed: availableSlots,
380
+ kept,
381
+ });
382
+ fileList = fileList.slice(0, kept);
383
+ }
384
+
385
+ if (fileList.length > 0) {
386
+ uploadFiles(fileList);
387
+ }
367
388
  input.value = '';
368
389
  }
369
390
 
@@ -371,6 +392,7 @@ export function createDocumentUploadProvider(
371
392
  upload,
372
393
  storeId,
373
394
  fileInput,
395
+ maxFilesPerUpload: resolvedMaxFiles,
374
396
  uploadFiles,
375
397
  unassignedFiles,
376
398
  assignFilesToMessage,