@cmdoss/memwal-sdk 0.6.2 → 0.7.0

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.
Files changed (119) hide show
  1. package/ARCHITECTURE.md +547 -547
  2. package/BENCHMARKS.md +238 -238
  3. package/README.md +181 -181
  4. package/dist/ai-sdk/tools.d.ts +2 -2
  5. package/dist/ai-sdk/tools.js +2 -2
  6. package/dist/client/PersonalDataWallet.d.ts.map +1 -1
  7. package/dist/client/SimplePDWClient.d.ts +1 -1
  8. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  9. package/dist/client/SimplePDWClient.js +16 -7
  10. package/dist/client/SimplePDWClient.js.map +1 -1
  11. package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
  12. package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
  13. package/dist/client/namespaces/MemoryNamespace.d.ts +27 -0
  14. package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
  15. package/dist/client/namespaces/MemoryNamespace.js +104 -0
  16. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  17. package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
  18. package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
  19. package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
  20. package/dist/client/namespaces/consolidated/BlockchainNamespace.js +22 -2
  21. package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
  22. package/dist/graph/GraphService.js +1 -1
  23. package/dist/graph/GraphService.js.map +1 -1
  24. package/dist/index.d.ts +3 -1
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +3 -1
  27. package/dist/index.js.map +1 -1
  28. package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
  29. package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
  30. package/dist/retrieval/MemoryRetrievalService.js +44 -4
  31. package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
  32. package/dist/services/EmbeddingService.d.ts +28 -1
  33. package/dist/services/EmbeddingService.d.ts.map +1 -1
  34. package/dist/services/EmbeddingService.js +54 -0
  35. package/dist/services/EmbeddingService.js.map +1 -1
  36. package/dist/services/IndexManager.d.ts +5 -1
  37. package/dist/services/IndexManager.d.ts.map +1 -1
  38. package/dist/services/IndexManager.js +17 -40
  39. package/dist/services/IndexManager.js.map +1 -1
  40. package/dist/services/QueryService.js +1 -1
  41. package/dist/services/QueryService.js.map +1 -1
  42. package/dist/services/StorageService.d.ts +10 -0
  43. package/dist/services/StorageService.d.ts.map +1 -1
  44. package/dist/services/StorageService.js +13 -0
  45. package/dist/services/StorageService.js.map +1 -1
  46. package/dist/services/storage/QuiltBatchManager.d.ts +101 -1
  47. package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
  48. package/dist/services/storage/QuiltBatchManager.js +410 -20
  49. package/dist/services/storage/QuiltBatchManager.js.map +1 -1
  50. package/dist/services/storage/index.d.ts +1 -1
  51. package/dist/services/storage/index.d.ts.map +1 -1
  52. package/dist/services/storage/index.js.map +1 -1
  53. package/dist/utils/LRUCache.d.ts +106 -0
  54. package/dist/utils/LRUCache.d.ts.map +1 -0
  55. package/dist/utils/LRUCache.js +281 -0
  56. package/dist/utils/LRUCache.js.map +1 -0
  57. package/dist/utils/index.d.ts +1 -0
  58. package/dist/utils/index.d.ts.map +1 -1
  59. package/dist/utils/index.js +2 -0
  60. package/dist/utils/index.js.map +1 -1
  61. package/dist/utils/memoryIndexOnChain.d.ts +212 -0
  62. package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
  63. package/dist/utils/memoryIndexOnChain.js +312 -0
  64. package/dist/utils/memoryIndexOnChain.js.map +1 -0
  65. package/dist/utils/rebuildIndexNode.d.ts +29 -0
  66. package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
  67. package/dist/utils/rebuildIndexNode.js +366 -98
  68. package/dist/utils/rebuildIndexNode.js.map +1 -1
  69. package/dist/vector/HnswWasmService.d.ts +20 -5
  70. package/dist/vector/HnswWasmService.d.ts.map +1 -1
  71. package/dist/vector/HnswWasmService.js +73 -40
  72. package/dist/vector/HnswWasmService.js.map +1 -1
  73. package/dist/vector/IHnswService.d.ts +10 -1
  74. package/dist/vector/IHnswService.d.ts.map +1 -1
  75. package/dist/vector/IHnswService.js.map +1 -1
  76. package/dist/vector/NodeHnswService.d.ts +16 -0
  77. package/dist/vector/NodeHnswService.d.ts.map +1 -1
  78. package/dist/vector/NodeHnswService.js +84 -5
  79. package/dist/vector/NodeHnswService.js.map +1 -1
  80. package/dist/vector/createHnswService.d.ts +1 -1
  81. package/dist/vector/createHnswService.js +1 -1
  82. package/dist/vector/index.d.ts +1 -1
  83. package/dist/vector/index.js +1 -1
  84. package/package.json +157 -157
  85. package/src/access/index.ts +8 -8
  86. package/src/aggregation/index.ts +8 -8
  87. package/src/ai-sdk/tools.ts +2 -2
  88. package/src/client/SimplePDWClient.ts +23 -8
  89. package/src/client/namespaces/EmbeddingsNamespace.ts +1 -1
  90. package/src/client/namespaces/MemoryNamespace.ts +137 -0
  91. package/src/client/namespaces/consolidated/AINamespace.ts +2 -2
  92. package/src/client/namespaces/consolidated/BlockchainNamespace.ts +20 -2
  93. package/src/client/signers/DappKitSigner.ts +207 -207
  94. package/src/core/types/index.ts +1 -1
  95. package/src/generated/pdw/deps/sui/object.ts +12 -12
  96. package/src/generated/pdw/deps/sui/vec_map.ts +32 -32
  97. package/src/generated/pdw/memory.ts +1087 -1087
  98. package/src/generated/pdw/wallet.ts +123 -123
  99. package/src/generated/utils/index.ts +159 -159
  100. package/src/graph/GraphService.ts +1 -1
  101. package/src/index.ts +25 -1
  102. package/src/permissions/index.ts +9 -9
  103. package/src/retrieval/MemoryRetrievalService.ts +78 -4
  104. package/src/services/EmbeddingService.ts +66 -1
  105. package/src/services/IndexManager.ts +18 -45
  106. package/src/services/QueryService.ts +1 -1
  107. package/src/services/StorageService.ts +15 -0
  108. package/src/services/storage/QuiltBatchManager.ts +492 -22
  109. package/src/services/storage/index.ts +6 -1
  110. package/src/utils/LRUCache.ts +378 -0
  111. package/src/utils/index.ts +8 -0
  112. package/src/utils/memoryIndexOnChain.ts +507 -0
  113. package/src/utils/rebuildIndexNode.ts +453 -106
  114. package/src/vector/HnswWasmService.ts +95 -43
  115. package/src/vector/IHnswService.ts +10 -1
  116. package/src/vector/NodeHnswService.ts +103 -5
  117. package/src/vector/createHnswService.ts +1 -1
  118. package/src/vector/index.ts +1 -1
  119. package/src/wallet/index.ts +17 -17
package/BENCHMARKS.md CHANGED
@@ -1,238 +1,238 @@
1
- # MemWal SDK Performance Benchmarks
2
-
3
- Benchmark results for `@cmdoss/memwal-sdk` measured on Sui testnet.
4
-
5
- ## Quick Summary
6
-
7
- | Operation | Latency | Notes |
8
- |-----------|---------|-------|
9
- | Vector Search + RAG | ~2.3s | With content retrieval |
10
- | Create Memory | ~2.3s | Classify + embed + upload + index |
11
- | AI Classification | ~2.3s | OpenRouter API |
12
- | Batch Upload (2 items) | ~2.3s | Quilt batching |
13
- | HNSW Search | <100ms | 3072-dim vectors, local |
14
- | Blockchain Query | ~2.3s | List memories from Sui |
15
-
16
- **Average query time: ~2.3s** (with OpenRouter API latency)
17
-
18
- ---
19
-
20
- ## Speed Metrics
21
-
22
- ### AI Operations
23
-
24
- | Operation | Avg Latency | Notes |
25
- |-----------|-------------|-------|
26
- | **Embedding (single)** | ~300ms | OpenRouter text-embedding-3-large |
27
- | **Embedding (batch 5)** | ~400ms | 12.5 texts/sec |
28
- | **Embedding (batch 10)** | ~500ms | 20 texts/sec |
29
- | **shouldSave** | ~200ms | Cached after first call |
30
- | **classify** | ~200ms | Cached responses |
31
- | **Knowledge Graph** | ~3-6s | Entity extraction (Gemini) |
32
-
33
- ### Storage Operations
34
-
35
- | Operation | Latency | Notes |
36
- |-----------|---------|-------|
37
- | **Walrus Upload (single)** | ~2,000ms | Single memory package |
38
- | **Walrus Upload (Quilt batch)** | ~2,500ms | Multiple memories, single tx |
39
- | **Walrus Download** | ~500-1,000ms | Depends on size |
40
- | **Content Cache Hit** | <10ms | Local cache |
41
-
42
- ### Search Operations
43
-
44
- | Operation | Avg Latency | Notes |
45
- |-----------|-------------|-------|
46
- | **HNSW Search (Node.js)** | <50ms | hnswlib-node, 3072-dim |
47
- | **HNSW Search (Browser)** | ~100ms | hnswlib-wasm, 3072-dim |
48
- | **Similarity Calculation** | 0.001ms | 909K calculations/sec |
49
- | **Vector + Content Fetch** | ~2.3s | Search + Walrus retrieval |
50
-
51
- ### Blockchain Operations
52
-
53
- | Operation | Latency | Notes |
54
- |-----------|---------|-------|
55
- | **Memory Create (on-chain)** | ~7,000ms | Includes gas estimation |
56
- | **Memory Update** | ~5,000ms | |
57
- | **Memory Delete** | ~3,000ms | |
58
- | **Batch Create (Quilt)** | ~8,000ms | Multiple memories, single tx |
59
-
60
- ---
61
-
62
- ## Full Pipeline Breakdown
63
-
64
- Complete memory creation pipeline:
65
-
66
- ```text
67
- ┌────────────────────────────────────────────────────────────────┐
68
- │ Memory Creation Pipeline │
69
- ├────────────────────────────────────────────────────────────────┤
70
- │ Step │ Latency │ % of Total │
71
- ├─────────────────────────┼──────────────┼───────────────────────┤
72
- │ 1. shouldSave check │ ~200ms │ 2% │
73
- │ 2. Classification │ ~200ms │ 2% │
74
- │ 3. Embedding (3072-dim) │ ~300ms │ 3% │
75
- │ 4. Walrus Upload │ ~2,000ms │ 20% │
76
- │ 5. On-chain Transaction │ ~7,000ms │ 70% │
77
- │ 6. HNSW Indexing │ ~50ms │ <1% │
78
- ├─────────────────────────┼──────────────┼───────────────────────┤
79
- │ TOTAL │ ~10,000ms │ 100% │
80
- └─────────────────────────┴──────────────┴───────────────────────┘
81
-
82
- With Knowledge Graph extraction: +3-6s
83
- ```
84
-
85
- ### Optimization Tips
86
-
87
- 1. **Skip Knowledge Graph** - Disable if not needed (saves 3-6s)
88
- 2. **Batch Operations** - Use `pdw.memory.createBatch()` with Quilt (~90% gas savings)
89
- 3. **Use hnswlib-node** - Native C++ is 2x faster than WASM
90
- 4. **Cache embeddings** - Reuse embeddings for duplicate content
91
-
92
- ---
93
-
94
- ## Size Metrics
95
-
96
- ### Data Sizes
97
-
98
- | Component | Size | Notes |
99
- |-----------|------|-------|
100
- | **Embedding Vector** | 12,288 bytes | 3072 dimensions × 4 bytes (Float32) |
101
- | **Memory Package** | ~15-20 KB | Content + metadata + embedding |
102
- | **Knowledge Graph** | ~1-5 KB | Entities + relationships JSON |
103
- | **HNSW Index Entry** | ~50 bytes | Per vector (plus metadata) |
104
-
105
- ### Bundle Sizes
106
-
107
- | Build | Size | Notes |
108
- |-------|------|-------|
109
- | **Browser Bundle** | ~2.5 MB | Includes hnswlib-wasm |
110
- | **Node.js Bundle** | ~1.8 MB | Uses hnswlib-node |
111
- | **Minified** | ~800 KB | Gzipped |
112
-
113
- ### Index Capacity
114
-
115
- | Parameter | Value |
116
- |-----------|-------|
117
- | Max Elements | 10,000 |
118
- | Dimensions | 3072 |
119
- | M (connections) | 16 |
120
- | efConstruction | 200 |
121
- | Memory per 1K vectors | ~120 KB |
122
-
123
- ---
124
-
125
- ## Batch Upload (Quilt) Performance
126
-
127
- Walrus Quilt batching provides significant gas savings:
128
-
129
- | Batch Size | Individual Gas | Quilt Gas | Savings |
130
- |------------|----------------|-----------|---------|
131
- | 2 memories | 0.006 SUI | 0.004 SUI | ~33% |
132
- | 5 memories | 0.015 SUI | 0.005 SUI | ~67% |
133
- | 10 memories | 0.030 SUI | 0.006 SUI | ~80% |
134
- | 20 memories | 0.060 SUI | 0.008 SUI | ~87% |
135
-
136
- **Recommendation**: Always use `createBatch()` for multiple memories.
137
-
138
- ---
139
-
140
- ## Cost Estimates
141
-
142
- ### Sui Testnet Gas Costs
143
-
144
- | Operation | Gas Cost | USD Estimate* |
145
- |-----------|----------|---------------|
146
- | **Create Memory** | ~0.003 SUI | ~$0.01 |
147
- | **Create Batch (Quilt)** | ~0.005 SUI | ~$0.02 |
148
- | **Update Memory** | ~0.002 SUI | ~$0.007 |
149
- | **Delete Memory** | ~0.001 SUI | ~$0.003 |
150
-
151
- *Estimated at SUI = $3.50 (Dec 2024)
152
-
153
- ### AI API Costs
154
-
155
- | Provider | Operation | Cost |
156
- |----------|-----------|------|
157
- | **OpenRouter** | text-embedding-3-large | ~$0.00013/1K tokens |
158
- | **OpenRouter** | Classification (GPT-4) | ~$0.03/1K tokens |
159
- | **Gemini** | Knowledge Graph | ~$0.001/request |
160
-
161
- ---
162
-
163
- ## HNSW Performance Comparison
164
-
165
- | Implementation | Search (10K vectors) | Add Vector | Memory |
166
- |----------------|---------------------|------------|--------|
167
- | **hnswlib-node** | ~20ms | ~0.5ms | ~120MB |
168
- | **hnswlib-wasm** | ~50ms | ~1ms | ~120MB |
169
-
170
- **Recommendation**: Use Node.js for production workloads.
171
-
172
- ---
173
-
174
- ## Running Benchmarks
175
-
176
- ### Quick Run
177
-
178
- ```bash
179
- # Run all benchmarks
180
- npm run test:e2e -- benchmark.spec.ts
181
-
182
- # With verbose output
183
- npx playwright test benchmark.spec.ts --reporter=list
184
- ```
185
-
186
- ### Custom Benchmarks
187
-
188
- ```typescript
189
- import { SimplePDWClient } from '@cmdoss/memwal-sdk';
190
-
191
- const pdw = new SimplePDWClient({
192
- signer: keypair,
193
- network: 'testnet',
194
- packageId: '0x...',
195
- embedding: { provider: 'openrouter', apiKey: '...' }
196
- });
197
-
198
- await pdw.ready();
199
-
200
- // Measure embedding latency
201
- const start = performance.now();
202
- const embedding = await pdw.ai.embed('Test text');
203
- console.log(`Embedding: ${(performance.now() - start).toFixed(0)}ms`);
204
- console.log(`Dimensions: ${embedding.length}`); // 3072
205
-
206
- // Measure search latency
207
- const searchStart = performance.now();
208
- const results = await pdw.search.vector('query', { limit: 5 });
209
- console.log(`Search: ${(performance.now() - searchStart).toFixed(0)}ms`);
210
-
211
- // Measure batch create
212
- const batchStart = performance.now();
213
- const memories = await pdw.memory.createBatch([
214
- 'Memory 1', 'Memory 2', 'Memory 3'
215
- ]);
216
- console.log(`Batch create: ${(performance.now() - batchStart).toFixed(0)}ms`);
217
- ```
218
-
219
- ---
220
-
221
- ## Environment
222
-
223
- Benchmarks were run with:
224
-
225
- - **Runtime**: Node.js 20 / Chromium (Playwright)
226
- - **Network**: Sui Testnet
227
- - **Embedding**: OpenRouter (text-embedding-3-large, 3072 dims)
228
- - **Storage**: Walrus Testnet
229
- - **HNSW**: hnswlib-node (Node.js) / hnswlib-wasm (Browser)
230
- - **Machine**: Windows 11
231
-
232
- ---
233
-
234
- ## Related Documentation
235
-
236
- - [README.md](./README.md) - Quick start guide
237
- - [ARCHITECTURE.md](./ARCHITECTURE.md) - System architecture
238
- - [CHANGELOG.md](./CHANGELOG.md) - Version history
1
+ # MemWal SDK Performance Benchmarks
2
+
3
+ Benchmark results for `@cmdoss/memwal-sdk` measured on Sui testnet.
4
+
5
+ ## Quick Summary
6
+
7
+ | Operation | Latency | Notes |
8
+ |-----------|---------|-------|
9
+ | Vector Search + RAG | ~2.3s | With content retrieval |
10
+ | Create Memory | ~2.3s | Classify + embed + upload + index |
11
+ | AI Classification | ~2.3s | OpenRouter API |
12
+ | Batch Upload (2 items) | ~2.3s | Quilt batching |
13
+ | HNSW Search | <100ms | 3072-dim vectors, local |
14
+ | Blockchain Query | ~2.3s | List memories from Sui |
15
+
16
+ **Average query time: ~2.3s** (with OpenRouter API latency)
17
+
18
+ ---
19
+
20
+ ## Speed Metrics
21
+
22
+ ### AI Operations
23
+
24
+ | Operation | Avg Latency | Notes |
25
+ |-----------|-------------|-------|
26
+ | **Embedding (single)** | ~300ms | OpenRouter text-embedding-3-large |
27
+ | **Embedding (batch 5)** | ~400ms | 12.5 texts/sec |
28
+ | **Embedding (batch 10)** | ~500ms | 20 texts/sec |
29
+ | **shouldSave** | ~200ms | Cached after first call |
30
+ | **classify** | ~200ms | Cached responses |
31
+ | **Knowledge Graph** | ~3-6s | Entity extraction (Gemini) |
32
+
33
+ ### Storage Operations
34
+
35
+ | Operation | Latency | Notes |
36
+ |-----------|---------|-------|
37
+ | **Walrus Upload (single)** | ~2,000ms | Single memory package |
38
+ | **Walrus Upload (Quilt batch)** | ~2,500ms | Multiple memories, single tx |
39
+ | **Walrus Download** | ~500-1,000ms | Depends on size |
40
+ | **Content Cache Hit** | <10ms | Local cache |
41
+
42
+ ### Search Operations
43
+
44
+ | Operation | Avg Latency | Notes |
45
+ |-----------|-------------|-------|
46
+ | **HNSW Search (Node.js)** | <50ms | hnswlib-node, 3072-dim |
47
+ | **HNSW Search (Browser)** | ~100ms | hnswlib-wasm, 3072-dim |
48
+ | **Similarity Calculation** | 0.001ms | 909K calculations/sec |
49
+ | **Vector + Content Fetch** | ~2.3s | Search + Walrus retrieval |
50
+
51
+ ### Blockchain Operations
52
+
53
+ | Operation | Latency | Notes |
54
+ |-----------|---------|-------|
55
+ | **Memory Create (on-chain)** | ~7,000ms | Includes gas estimation |
56
+ | **Memory Update** | ~5,000ms | |
57
+ | **Memory Delete** | ~3,000ms | |
58
+ | **Batch Create (Quilt)** | ~8,000ms | Multiple memories, single tx |
59
+
60
+ ---
61
+
62
+ ## Full Pipeline Breakdown
63
+
64
+ Complete memory creation pipeline:
65
+
66
+ ```text
67
+ ┌────────────────────────────────────────────────────────────────┐
68
+ │ Memory Creation Pipeline │
69
+ ├────────────────────────────────────────────────────────────────┤
70
+ │ Step │ Latency │ % of Total │
71
+ ├─────────────────────────┼──────────────┼───────────────────────┤
72
+ │ 1. shouldSave check │ ~200ms │ 2% │
73
+ │ 2. Classification │ ~200ms │ 2% │
74
+ │ 3. Embedding (3072-dim) │ ~300ms │ 3% │
75
+ │ 4. Walrus Upload │ ~2,000ms │ 20% │
76
+ │ 5. On-chain Transaction │ ~7,000ms │ 70% │
77
+ │ 6. HNSW Indexing │ ~50ms │ <1% │
78
+ ├─────────────────────────┼──────────────┼───────────────────────┤
79
+ │ TOTAL │ ~10,000ms │ 100% │
80
+ └─────────────────────────┴──────────────┴───────────────────────┘
81
+
82
+ With Knowledge Graph extraction: +3-6s
83
+ ```
84
+
85
+ ### Optimization Tips
86
+
87
+ 1. **Skip Knowledge Graph** - Disable if not needed (saves 3-6s)
88
+ 2. **Batch Operations** - Use `pdw.memory.createBatch()` with Quilt (~90% gas savings)
89
+ 3. **Use hnswlib-node** - Native C++ is 2x faster than WASM
90
+ 4. **Cache embeddings** - Reuse embeddings for duplicate content
91
+
92
+ ---
93
+
94
+ ## Size Metrics
95
+
96
+ ### Data Sizes
97
+
98
+ | Component | Size | Notes |
99
+ |-----------|------|-------|
100
+ | **Embedding Vector** | 12,288 bytes | 3072 dimensions × 4 bytes (Float32) |
101
+ | **Memory Package** | ~15-20 KB | Content + metadata + embedding |
102
+ | **Knowledge Graph** | ~1-5 KB | Entities + relationships JSON |
103
+ | **HNSW Index Entry** | ~50 bytes | Per vector (plus metadata) |
104
+
105
+ ### Bundle Sizes
106
+
107
+ | Build | Size | Notes |
108
+ |-------|------|-------|
109
+ | **Browser Bundle** | ~2.5 MB | Includes hnswlib-wasm |
110
+ | **Node.js Bundle** | ~1.8 MB | Uses hnswlib-node |
111
+ | **Minified** | ~800 KB | Gzipped |
112
+
113
+ ### Index Capacity
114
+
115
+ | Parameter | Value |
116
+ |-----------|-------|
117
+ | Max Elements | 10,000 |
118
+ | Dimensions | 3072 |
119
+ | M (connections) | 16 |
120
+ | efConstruction | 200 |
121
+ | Memory per 1K vectors | ~120 KB |
122
+
123
+ ---
124
+
125
+ ## Batch Upload (Quilt) Performance
126
+
127
+ Walrus Quilt batching provides significant gas savings:
128
+
129
+ | Batch Size | Individual Gas | Quilt Gas | Savings |
130
+ |------------|----------------|-----------|---------|
131
+ | 2 memories | 0.006 SUI | 0.004 SUI | ~33% |
132
+ | 5 memories | 0.015 SUI | 0.005 SUI | ~67% |
133
+ | 10 memories | 0.030 SUI | 0.006 SUI | ~80% |
134
+ | 20 memories | 0.060 SUI | 0.008 SUI | ~87% |
135
+
136
+ **Recommendation**: Always use `createBatch()` for multiple memories.
137
+
138
+ ---
139
+
140
+ ## Cost Estimates
141
+
142
+ ### Sui Testnet Gas Costs
143
+
144
+ | Operation | Gas Cost | USD Estimate* |
145
+ |-----------|----------|---------------|
146
+ | **Create Memory** | ~0.003 SUI | ~$0.01 |
147
+ | **Create Batch (Quilt)** | ~0.005 SUI | ~$0.02 |
148
+ | **Update Memory** | ~0.002 SUI | ~$0.007 |
149
+ | **Delete Memory** | ~0.001 SUI | ~$0.003 |
150
+
151
+ *Estimated at SUI = $3.50 (Dec 2024)
152
+
153
+ ### AI API Costs
154
+
155
+ | Provider | Operation | Cost |
156
+ |----------|-----------|------|
157
+ | **OpenRouter** | text-embedding-3-large | ~$0.00013/1K tokens |
158
+ | **OpenRouter** | Classification (GPT-4) | ~$0.03/1K tokens |
159
+ | **Gemini** | Knowledge Graph | ~$0.001/request |
160
+
161
+ ---
162
+
163
+ ## HNSW Performance Comparison
164
+
165
+ | Implementation | Search (10K vectors) | Add Vector | Memory |
166
+ |----------------|---------------------|------------|--------|
167
+ | **hnswlib-node** | ~20ms | ~0.5ms | ~120MB |
168
+ | **hnswlib-wasm** | ~50ms | ~1ms | ~120MB |
169
+
170
+ **Recommendation**: Use Node.js for production workloads.
171
+
172
+ ---
173
+
174
+ ## Running Benchmarks
175
+
176
+ ### Quick Run
177
+
178
+ ```bash
179
+ # Run all benchmarks
180
+ npm run test:e2e -- benchmark.spec.ts
181
+
182
+ # With verbose output
183
+ npx playwright test benchmark.spec.ts --reporter=list
184
+ ```
185
+
186
+ ### Custom Benchmarks
187
+
188
+ ```typescript
189
+ import { SimplePDWClient } from '@cmdoss/memwal-sdk';
190
+
191
+ const pdw = new SimplePDWClient({
192
+ signer: keypair,
193
+ network: 'testnet',
194
+ packageId: '0x...',
195
+ embedding: { provider: 'openrouter', apiKey: '...' }
196
+ });
197
+
198
+ await pdw.ready();
199
+
200
+ // Measure embedding latency
201
+ const start = performance.now();
202
+ const embedding = await pdw.ai.embed('Test text');
203
+ console.log(`Embedding: ${(performance.now() - start).toFixed(0)}ms`);
204
+ console.log(`Dimensions: ${embedding.length}`); // 3072
205
+
206
+ // Measure search latency
207
+ const searchStart = performance.now();
208
+ const results = await pdw.search.vector('query', { limit: 5 });
209
+ console.log(`Search: ${(performance.now() - searchStart).toFixed(0)}ms`);
210
+
211
+ // Measure batch create
212
+ const batchStart = performance.now();
213
+ const memories = await pdw.memory.createBatch([
214
+ 'Memory 1', 'Memory 2', 'Memory 3'
215
+ ]);
216
+ console.log(`Batch create: ${(performance.now() - batchStart).toFixed(0)}ms`);
217
+ ```
218
+
219
+ ---
220
+
221
+ ## Environment
222
+
223
+ Benchmarks were run with:
224
+
225
+ - **Runtime**: Node.js 20 / Chromium (Playwright)
226
+ - **Network**: Sui Testnet
227
+ - **Embedding**: OpenRouter (text-embedding-3-large, 3072 dims)
228
+ - **Storage**: Walrus Testnet
229
+ - **HNSW**: hnswlib-node (Node.js) / hnswlib-wasm (Browser)
230
+ - **Machine**: Windows 11
231
+
232
+ ---
233
+
234
+ ## Related Documentation
235
+
236
+ - [README.md](./README.md) - Quick start guide
237
+ - [ARCHITECTURE.md](./ARCHITECTURE.md) - System architecture
238
+ - [CHANGELOG.md](./CHANGELOG.md) - Version history