diff --git a/frontend-v2/src/lib/pages/brain/AtelierBrainPage.svelte b/frontend-v2/src/lib/pages/brain/AtelierBrainPage.svelte index 50417f6..b3c08fd 100644 --- a/frontend-v2/src/lib/pages/brain/AtelierBrainPage.svelte +++ b/frontend-v2/src/lib/pages/brain/AtelierBrainPage.svelte @@ -217,25 +217,37 @@ function startPolling() { stopPolling(); pollTimer = setInterval(async () => { - const hasPending = items.some(i => i.processing_status === 'pending' || i.processing_status === 'processing'); - if (hasPending) { - await loadItems(); - // Update selected item if it was pending - if (selectedItem) { - const updated = items.find(i => i.id === selectedItem!.id); - if (updated) selectedItem = updated; - } - } else { + const pendingIds = items + .filter(i => i.processing_status === 'pending' || i.processing_status === 'processing') + .map(i => i.id); + + if (pendingIds.length === 0) { stopPolling(); + return; } - }, 3000); + + // Poll each pending item individually instead of reloading everything + for (const id of pendingIds) { + try { + const updated = await api(`/items/${id}`); + const idx = items.findIndex(i => i.id === id); + if (idx !== -1) { + items[idx] = updated; + items = items; // trigger reactivity + } + if (selectedItem?.id === id) { + selectedItem = updated; + } + } catch { /* item might be gone */ } + } + }, 4000); } function stopPolling() { if (pollTimer) { clearInterval(pollTimer); pollTimer = null; } } - // Start polling after capture + // Start polling when pending items exist $effect(() => { const hasPending = items.some(i => i.processing_status === 'pending' || i.processing_status === 'processing'); if (hasPending && !pollTimer) startPolling(); diff --git a/services/brain/storage/c0b37c98-00b5-4f27-8080-439ba4a3a39b/original_upload/document.pdf b/services/brain/storage/c0b37c98-00b5-4f27-8080-439ba4a3a39b/original_upload/document.pdf new file mode 100644 index 0000000..0a752f9 Binary files /dev/null and b/services/brain/storage/c0b37c98-00b5-4f27-8080-439ba4a3a39b/original_upload/document.pdf differ