# ReasoningBank Storage Backends ReasoningBank provides **two storage implementations** optimized for different environments: ## ๐Ÿ“Š Backend Comparison | Backend | Environment | Storage | Persistence | Performance | Use Case | |---------|-------------|---------|-------------|-------------|----------| | **Node.js** | CLI, servers | SQLite | โœ… Yes | 2-5ms/op | Production, long-term memory | | **WASM** | Browser | IndexedDB | โœ… Yes | 1-3ms/op | Web apps, client-side | | **WASM** | Node.js | RAM | โŒ No | 0.04ms/op | Temporary data, fast access | --- ## ๐Ÿ”ง Usage ### Node.js Backend (Recommended for CLIs) **Use when:** Building CLIs, servers, or any application needing persistent storage. ```javascript import { ReasoningBank } from 'agentic-flow/dist/reasoningbank/index.js'; // Initialize with SQLite database const rb = new ReasoningBank({ dbPath: '.swarm/memory.db' }); // Store pattern (persists to disk) await rb.storePattern({ task_description: 'Implement authentication', task_category: 'auth', strategy: 'jwt-tokens', success_score: 0.9 }); // Search patterns (queries SQLite database) const patterns = await rb.searchByCategory('auth', 10); // Returns: All patterns from database โœ… // Semantic search const similar = await rb.findSimilar('user login', 'auth', 5); // Returns: Similar patterns with scores (e.g., 0.54-0.62) ``` **Features:** - โœ… Persistent SQLite storage - โœ… Automatic embedding generation - โœ… Fast semantic search (2-5ms) - โœ… Production-ready - โœ… Cross-session memory --- ### WASM Backend (For Browsers) **Use when:** Building web applications that need client-side storage. ```javascript import { createReasoningBank } from 'agentic-flow/dist/reasoningbank/wasm-adapter.js'; // Initialize WASM instance (uses IndexedDB in browser) const rb = await createReasoningBank('my-app-db'); // Store pattern (persists to IndexedDB) await rb.storePattern({ task_description: 'Handle form validation', task_category: 'ui', strategy: 'real-time-validation', success_score: 0.95 }); // Semantic search const similar = await rb.findSimilar('user input validation', 'ui', 5); // Returns: Similar patterns with scores ``` **Features:** - โœ… Persistent IndexedDB storage (browser) - โœ… Native performance via WASM - โœ… Ultra-fast operations (0.04ms in-memory) - โœ… Browser-optimized - โš ๏ธ In-memory only in Node.js (ephemeral) --- ## ๐ŸŽฏ Backend Selection Guide ### Automatic Selection (Recommended) ```javascript // Environment-aware import const ReasoningBankImpl = typeof window !== 'undefined' ? await import('agentic-flow/dist/reasoningbank/wasm-adapter.js') : await import('agentic-flow/dist/reasoningbank/index.js'); const rb = typeof window !== 'undefined' ? await ReasoningBankImpl.createReasoningBank('app-memory') : new ReasoningBankImpl.ReasoningBank({ dbPath: '.swarm/memory.db' }); // Now use rb normally - it will work optimally in both environments const patterns = await rb.searchByCategory('category', 10); ``` ### Manual Selection **Choose Node.js backend when:** - Building CLI tools - Need persistent storage - Running on servers - Require SQLite features **Choose WASM backend when:** - Building web apps - Need client-side storage - Want maximum browser performance - Require offline capabilities --- ## ๐Ÿ” Key Differences ### Storage Location **Node.js:** ``` .swarm/memory.db (SQLite database on disk) โ”œโ”€โ”€ patterns table โ”œโ”€โ”€ pattern_embeddings table โ””โ”€โ”€ Full SQL query support ``` **WASM (Browser):** ``` IndexedDB: my-app-db (browser storage) โ”œโ”€โ”€ patterns store โ”œโ”€โ”€ embeddings store โ””โ”€โ”€ Fast key-value lookups ``` **WASM (Node.js):** ``` RAM only (ephemeral, lost on process exit) โ”œโ”€โ”€ In-memory HashMap โ””โ”€โ”€ Fastest access, no persistence ``` ### Embedding Generation Both backends **automatically generate embeddings** when you store patterns: ```rust // Internal: reasoningbank-core/src/engine.rs pub fn prepare_pattern(&self, mut pattern: Pattern) -> Result { // Auto-generate embedding if not present if pattern.embedding.is_none() { let embedding = VectorEmbedding::from_text(&pattern.task_description); pattern.embedding = Some(embedding.values); } Ok(pattern) } ``` **You don't need to manually generate embeddings!** They are created automatically from your task description. --- ## ๐Ÿ“ฆ Package.json Integration For projects supporting both Node.js and browsers, use conditional exports: ```json { "name": "my-app", "exports": { "./memory": { "node": "./dist/memory-node.js", "browser": "./dist/memory-browser.js" } } } ``` **memory-node.js:** ```javascript export { ReasoningBank } from 'agentic-flow/dist/reasoningbank/index.js'; ``` **memory-browser.js:** ```javascript export { createReasoningBank as ReasoningBank } from 'agentic-flow/dist/reasoningbank/wasm-adapter.js'; ``` --- ## ๐Ÿงช Validation ### Test Node.js Backend ```bash node < 0.5 ``` ### Test WASM Backend (Node.js - In-Memory) ```bash node --experimental-wasm-modules <