# Import Progress - Usage Examples **How to Use Progress Tracking in Your Applications** Brainy provides real-time progress tracking for **all 7 supported file formats** (CSV, PDF, Excel, JSON, Markdown, YAML, DOCX). > **⚠️ KEY FEATURE:** The progress API is **100% standardized**. Write your progress handler ONCE and it works for ALL formats with zero format-specific code! See [Standard Import Progress API](./standard-import-progress.md) for the complete interface documentation. --- ## 🚀 Quick Start ### Basic Progress Tracking ```typescript import { Brainy } from '@soulcraft/brainy' import * as fs from 'fs' const brain = await Brainy.create() // Import with progress tracking const result = await brain.import(fs.readFileSync('large-file.xlsx'), { onProgress: (progress) => { console.log(`Progress: ${progress.stage}`) console.log(` Message: ${progress.message}`) console.log(` Entities: ${progress.entities || 0}`) console.log(` Relationships: ${progress.relationships || 0}`) } }) console.log(`Import complete: ${result.entities.length} entities created`) ``` **Expected Output:** ``` Progress: detecting Message: Detecting format... Entities: 0 Relationships: 0 Progress: extracting Message: Loading Excel workbook... Entities: 0 Relationships: 0 Progress: extracting Message: Reading sheet: Sales (1/3) Entities: 0 Relationships: 0 Progress: extracting Message: Parsing Excel (33%) Entities: 0 Relationships: 0 Progress: extracting Message: Reading sheet: Products (2/3) Entities: 0 Relationships: 0 ... (more progress updates) Progress: complete Message: Import complete Entities: 1523 Relationships: 892 Import complete: 1523 entities created ``` --- ## 🎯 Universal Progress Handler (Works for ALL Formats) The examples below show format-specific messages, but **you don't need format-specific code**! The `ImportProgress` interface is the same for all formats: ```typescript // ONE HANDLER FOR ALL FORMATS! function universalProgressHandler(progress) { console.log(`[${progress.stage}] ${progress.message}`) if (progress.processed && progress.total) { console.log(` Progress: ${progress.processed}/${progress.total}`) } if (progress.entities || progress.relationships) { console.log(` Extracted: ${progress.entities || 0} entities, ${progress.relationships || 0} relationships`) } if (progress.throughput && progress.eta) { console.log(` Rate: ${progress.throughput.toFixed(1)}/sec, ETA: ${Math.round(progress.eta/1000)}s`) } } // Use it for ANY format! await brain.import(csvBuffer, { onProgress: universalProgressHandler }) await brain.import(pdfBuffer, { onProgress: universalProgressHandler }) await brain.import(excelBuffer, { onProgress: universalProgressHandler }) await brain.import(jsonBuffer, { onProgress: universalProgressHandler }) await brain.import(markdownString, { onProgress: universalProgressHandler }) await brain.import(yamlBuffer, { onProgress: universalProgressHandler }) await brain.import(docxBuffer, { onProgress: universalProgressHandler }) ``` --- ## 📊 What Different Formats Look Like (Same Handler!) The examples below show **what messages look like** for different formats using the **same universal handler** above. ### CSV Import (Row-by-Row Progress) ```typescript await brain.import(csvBuffer, { format: 'csv', onProgress: (progress) => { if (progress.stage === 'extracting') { // CSV reports: "Parsing CSV (45%)", "Extracted 1000 rows", etc. console.log(progress.message) } } }) ``` **CSV Progress Messages:** - ✅ "Detecting CSV encoding and delimiter..." - ✅ "Parsing CSV rows (delimiter: ",")" - ✅ "Parsed 75%" (via bytes processed) - ✅ "Extracted 1000 rows" - ✅ "Converting types: 5000/10000 rows..." - ✅ "CSV processing complete: 10000 rows" --- ### PDF Import (Page-by-Page Progress) ```typescript await brain.import(pdfBuffer, { format: 'pdf', onProgress: (progress) => { // PDF reports exact page numbers console.log(progress.message) // Example: "Processing page 5 of 23" } }) ``` **PDF Progress Messages:** - ✅ "Loading PDF document..." - ✅ "Processing 23 pages..." - ✅ "Processing page 5 of 23" - ✅ "Parsed 22%" (via bytes processed) - ✅ "Extracted 156 items from PDF" - ✅ "PDF complete: 23 pages, 156 items extracted" --- ### Excel Import (Sheet-by-Sheet Progress) ```typescript await brain.import(excelBuffer, { format: 'excel', onProgress: (progress) => { // Excel reports sheet names console.log(progress.message) // Example: "Reading sheet: Q2 Sales (2/5)" } }) ``` **Excel Progress Messages:** - ✅ "Loading Excel workbook..." - ✅ "Processing 3 sheets..." - ✅ "Reading sheet: Sales (1/3)" - ✅ "Parsing Excel (33%)" (via bytes processed) - ✅ "Extracted 5234 rows from Excel" - ✅ "Excel complete: 3 sheets, 5234 rows" --- ### JSON Import (Node Traversal) ```typescript await brain.import(jsonBuffer, { format: 'json', onProgress: (progress) => { // JSON reports every 10 nodes console.log(`Processed ${progress.processed} nodes, found ${progress.entities} entities`) } }) ``` --- ### Markdown Import (Section-by-Section) ```typescript await brain.import(markdownString, { format: 'markdown', onProgress: (progress) => { console.log(`Section ${progress.processed}/${progress.total}`) } }) ``` --- ## 🎯 Building Progress UI Components ### React Progress Bar ```typescript function ImportProgress({ file }: { file: File }) { const [progress, setProgress] = useState({ stage: 'idle', message: '', percent: 0, entities: 0, relationships: 0 }) const handleImport = async () => { const buffer = await file.arrayBuffer() await brain.import(Buffer.from(buffer), { onProgress: (p) => { setProgress({ stage: p.stage, message: p.message, // Estimate percentage from stage percent: { detecting: 10, extracting: 50, 'storing-vfs': 80, 'storing-graph': 90, complete: 100 }[p.stage] || 0, entities: p.entities || 0, relationships: p.relationships || 0 }) } }) } return (
{progress.message}
Entities: {progress.entities} | Relationships: {progress.relationships}