# Bulk Vector Import - Integration Guide ## Overview Complete implementation guide for adding CSV/JSON bulk vector import to the RvLite dashboard. ## Files Created ### 1. Documentation - `BULK_IMPORT_IMPLEMENTATION.md` - Detailed implementation guide with line numbers - `docs/bulk-import-code.tsx` - All code snippets ready to copy - `docs/INTEGRATION_GUIDE.md` - This file - `apply-bulk-import.sh` - Automated script for basic changes ### 2. Sample Data - `docs/sample-bulk-import.csv` - Sample CSV data with 8 vectors - `docs/sample-bulk-import.json` - Sample JSON data with 8 vectors ## Quick Integration (3 Steps) ### Step 1: Run Automated Script ```bash cd /workspaces/ruvector/crates/rvlite/examples/dashboard chmod +x apply-bulk-import.sh ./apply-bulk-import.sh ``` This will add: - FileSpreadsheet icon import - Modal disclosure hook - State variables ### Step 2: Add Utility Functions Open `src/App.tsx` and find line ~545 (after state declarations). Copy from `docs/bulk-import-code.tsx`: - Section 4: CSV Parser Function - Section 5: JSON Parser Function - Section 6: Preview Handler - Section 7: Bulk Import Handler - Section 8: File Upload Handler Paste all functions in order after the state declarations. ### Step 3: Add UI Components **3A. Add Button (line ~1964)** Find the Quick Actions section and add the Bulk Import button: ```typescript ``` **3B. Add Modal (line ~2306)** After the Import Modal closing tag, add the entire Bulk Import Modal from Section 10 of `docs/bulk-import-code.tsx`. ## Manual Integration (Alternative) If you prefer manual integration or the script fails: ### 1. Icon Import (~line 78) ```typescript XCircle, FileSpreadsheet, // ADD THIS } from 'lucide-react'; ``` ### 2. Modal Hook (~line 526) ```typescript const { isOpen: isBulkImportOpen, onOpen: onBulkImportOpen, onClose: onBulkImportClose } = useDisclosure(); ``` ### 3. State Variables (~line 539) ```typescript const [bulkImportData, setBulkImportData] = useState(''); const [bulkImportFormat, setBulkImportFormat] = useState<'csv' | 'json'>('json'); const [bulkImportPreview, setBulkImportPreview] = useState}>>([]); const [bulkImportProgress, setBulkImportProgress] = useState({ current: 0, total: 0, errors: 0 }); const [isBulkImporting, setIsBulkImporting] = useState(false); ``` ### 4-8. Functions Copy all functions from `docs/bulk-import-code.tsx` sections 4-8. ### 9-10. UI Components Copy button and modal from `docs/bulk-import-code.tsx` sections 9-10. ## Testing ### Test 1: CSV Upload 1. Start the dashboard: `npm run dev` 2. Click "Bulk Import Vectors" in Quick Actions 3. Select "CSV" format 4. Upload `docs/sample-bulk-import.csv` OR paste its contents 5. Click "Preview" - should show 5 vectors 6. Click "Import" - should import all 8 vectors 7. Verify in Vectors tab ### Test 2: JSON Upload 1. Click "Bulk Import Vectors" 2. Select "JSON" format 3. Upload `docs/sample-bulk-import.json` OR paste its contents 4. Click "Preview" - should show 5 vectors 5. Click "Import" - should import all 8 vectors 6. Verify success message and vector count ### Test 3: Error Handling 1. Try invalid CSV (missing header) 2. Try invalid JSON (malformed) 3. Try empty data 4. Verify error messages in logs ### Test 4: Progress Indicator 1. Create a larger dataset (50+ vectors) 2. Import and watch progress bar 3. Verify it completes and closes modal ## Expected Behavior ### CSV Format ```csv id,embedding,metadata vec1,"[1.0,2.0,3.0]","{\"category\":\"test\"}" vec2,"[4.0,5.0,6.0]","{}" ``` ### JSON Format ```json [ { "id": "vec1", "embedding": [1.0, 2.0, 3.0], "metadata": { "category": "test" } }, { "id": "vec2", "embedding": [4.0, 5.0, 6.0] } ] ``` ### Features - ✅ File upload (.csv, .json) - ✅ Direct text paste - ✅ Format selector (CSV/JSON) - ✅ Preview (first 5 vectors) - ✅ Progress indicator - ✅ Error tracking - ✅ Auto-close on success - ✅ Dark theme styling - ✅ Responsive layout ## File Structure After Integration ``` src/ App.tsx (modified) hooks/ useRvLite.ts (unchanged) docs/ BULK_IMPORT_IMPLEMENTATION.md (new) INTEGRATION_GUIDE.md (new) bulk-import-code.tsx (new) sample-bulk-import.csv (new) sample-bulk-import.json (new) apply-bulk-import.sh (new) ``` ## Troubleshooting ### Issue: Import button not showing **Fix:** Verify FileSpreadsheet icon imported and onBulkImportOpen defined ### Issue: Modal not opening **Fix:** Check useDisclosure hook added and isBulkImportOpen variable exists ### Issue: Preview fails **Fix:** Verify parseCsvVectors and parseJsonVectors functions added ### Issue: Import fails silently **Fix:** Check insertVectorWithId and refreshVectors are in dependency arrays ### Issue: File upload not working **Fix:** Verify handleBulkImportFileUpload function added ## Integration Checklist - [ ] Run apply-bulk-import.sh or manually add imports/hooks/state - [ ] Add all 5 utility functions (CSV parser, JSON parser, preview, import, file upload) - [ ] Add Bulk Import button to Quick Actions - [ ] Add Bulk Import Modal component - [ ] Test with sample CSV file - [ ] Test with sample JSON file - [ ] Test error handling - [ ] Test progress indicator - [ ] Verify dark theme styling matches - [ ] Check logs for success/error messages ## Support If you encounter issues: 1. Check browser console for errors 2. Verify all functions copied correctly 3. Ensure no duplicate state variables 4. Check dependency arrays in useCallback 5. Verify modal disclosure hooks match ## Success Metrics After integration, you should be able to: - ✅ Import 100+ vectors in under 2 seconds - ✅ Preview data before import - ✅ See real-time progress - ✅ Handle errors gracefully - ✅ Auto-close modal on success - ✅ View imported vectors immediately ## Next Steps After successful integration: 1. Test with production data 2. Consider adding batch size limits 3. Add export to CSV/JSON 4. Implement undo for bulk operations 5. Add data validation rules 6. Create import templates --- **Implementation Status:** Code complete, ready for integration **Testing Status:** Sample data provided, manual testing required **File Location:** `/workspaces/ruvector/crates/rvlite/examples/dashboard/`