@cmdoss/memwal-sdk 0.6.2 → 0.8.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.
- package/ARCHITECTURE.md +547 -547
- package/BENCHMARKS.md +238 -238
- package/README.md +310 -181
- package/dist/ai-sdk/tools.d.ts +2 -2
- package/dist/ai-sdk/tools.js +2 -2
- package/dist/client/ClientMemoryManager.js +2 -2
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +29 -1
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +45 -13
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
- package/dist/client/namespaces/MemoryNamespace.d.ts +31 -0
- package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +272 -39
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
- package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts +12 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js +62 -4
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +67 -2
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +549 -16
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/config/ConfigurationHelper.js +61 -61
- package/dist/config/defaults.js +2 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/graph/GraphService.js +21 -21
- package/dist/graph/GraphService.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.d.ts +9 -5
- package/dist/infrastructure/seal/EncryptionService.d.ts.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.js +37 -15
- package/dist/infrastructure/seal/EncryptionService.js.map +1 -1
- package/dist/infrastructure/seal/SealService.d.ts +13 -5
- package/dist/infrastructure/seal/SealService.d.ts.map +1 -1
- package/dist/infrastructure/seal/SealService.js +36 -34
- package/dist/infrastructure/seal/SealService.js.map +1 -1
- package/dist/langchain/createPDWRAG.js +30 -30
- package/dist/retrieval/MemoryDecryptionPipeline.d.ts.map +1 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js +2 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
- package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.js +44 -4
- package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
- package/dist/services/CapabilityService.d.ts.map +1 -1
- package/dist/services/CapabilityService.js +30 -14
- package/dist/services/CapabilityService.js.map +1 -1
- package/dist/services/CrossContextPermissionService.d.ts.map +1 -1
- package/dist/services/CrossContextPermissionService.js +9 -7
- package/dist/services/CrossContextPermissionService.js.map +1 -1
- package/dist/services/EmbeddingService.d.ts +28 -1
- package/dist/services/EmbeddingService.d.ts.map +1 -1
- package/dist/services/EmbeddingService.js +54 -0
- package/dist/services/EmbeddingService.js.map +1 -1
- package/dist/services/EncryptionService.d.ts.map +1 -1
- package/dist/services/EncryptionService.js +6 -5
- package/dist/services/EncryptionService.js.map +1 -1
- package/dist/services/GeminiAIService.js +309 -309
- package/dist/services/IndexManager.d.ts +5 -1
- package/dist/services/IndexManager.d.ts.map +1 -1
- package/dist/services/IndexManager.js +17 -40
- package/dist/services/IndexManager.js.map +1 -1
- package/dist/services/QueryService.js +1 -1
- package/dist/services/QueryService.js.map +1 -1
- package/dist/services/StorageService.d.ts +11 -0
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js +73 -10
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/TransactionService.d.ts +20 -0
- package/dist/services/TransactionService.d.ts.map +1 -1
- package/dist/services/TransactionService.js +43 -0
- package/dist/services/TransactionService.js.map +1 -1
- package/dist/services/ViewService.js +2 -2
- package/dist/services/ViewService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +101 -1
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +410 -20
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/index.d.ts +1 -1
- package/dist/services/storage/index.d.ts.map +1 -1
- package/dist/services/storage/index.js.map +1 -1
- package/dist/utils/LRUCache.d.ts +106 -0
- package/dist/utils/LRUCache.d.ts.map +1 -0
- package/dist/utils/LRUCache.js +281 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/memoryIndexOnChain.d.ts +212 -0
- package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
- package/dist/utils/memoryIndexOnChain.js +312 -0
- package/dist/utils/memoryIndexOnChain.js.map +1 -0
- package/dist/utils/rebuildIndexNode.d.ts +29 -0
- package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
- package/dist/utils/rebuildIndexNode.js +366 -98
- package/dist/utils/rebuildIndexNode.js.map +1 -1
- package/dist/vector/HnswWasmService.d.ts +20 -5
- package/dist/vector/HnswWasmService.d.ts.map +1 -1
- package/dist/vector/HnswWasmService.js +73 -40
- package/dist/vector/HnswWasmService.js.map +1 -1
- package/dist/vector/IHnswService.d.ts +10 -1
- package/dist/vector/IHnswService.d.ts.map +1 -1
- package/dist/vector/IHnswService.js.map +1 -1
- package/dist/vector/NodeHnswService.d.ts +16 -0
- package/dist/vector/NodeHnswService.d.ts.map +1 -1
- package/dist/vector/NodeHnswService.js +84 -5
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/dist/vector/createHnswService.d.ts +1 -1
- package/dist/vector/createHnswService.js +1 -1
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.js +1 -1
- package/package.json +157 -157
- package/src/access/PermissionService.ts +635 -635
- package/src/aggregation/AggregationService.ts +389 -389
- package/src/ai-sdk/PDWVectorStore.ts +715 -715
- package/src/ai-sdk/index.ts +65 -65
- package/src/ai-sdk/tools.ts +460 -460
- package/src/ai-sdk/types.ts +404 -404
- package/src/batch/BatchManager.ts +597 -597
- package/src/batch/BatchingService.ts +429 -429
- package/src/batch/MemoryProcessingCache.ts +492 -492
- package/src/batch/index.ts +30 -30
- package/src/browser.ts +200 -200
- package/src/client/ClientMemoryManager.ts +987 -987
- package/src/client/PersonalDataWallet.ts +345 -345
- package/src/client/SimplePDWClient.ts +1289 -1222
- package/src/client/factory.ts +154 -154
- package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
- package/src/client/namespaces/BatchNamespace.ts +356 -356
- package/src/client/namespaces/CacheNamespace.ts +123 -123
- package/src/client/namespaces/CapabilityNamespace.ts +217 -217
- package/src/client/namespaces/ClassifyNamespace.ts +169 -169
- package/src/client/namespaces/ContextNamespace.ts +297 -297
- package/src/client/namespaces/EmbeddingsNamespace.ts +99 -99
- package/src/client/namespaces/EncryptionNamespace.ts +221 -221
- package/src/client/namespaces/GraphNamespace.ts +468 -468
- package/src/client/namespaces/IndexNamespace.ts +361 -361
- package/src/client/namespaces/MemoryNamespace.ts +1422 -1135
- package/src/client/namespaces/PermissionsNamespace.ts +254 -254
- package/src/client/namespaces/PipelineNamespace.ts +220 -220
- package/src/client/namespaces/SearchNamespace.ts +1049 -1049
- package/src/client/namespaces/StorageNamespace.ts +458 -458
- package/src/client/namespaces/TxNamespace.ts +260 -260
- package/src/client/namespaces/WalletNamespace.ts +243 -243
- package/src/client/namespaces/consolidated/AINamespace.ts +449 -449
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -546
- package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
- package/src/client/namespaces/consolidated/StorageNamespace.ts +1141 -497
- package/src/client/namespaces/consolidated/index.ts +39 -39
- package/src/client/signers/KeypairSigner.ts +108 -108
- package/src/client/signers/UnifiedSigner.ts +110 -110
- package/src/client/signers/WalletAdapterSigner.ts +159 -159
- package/src/client/signers/index.ts +26 -26
- package/src/config/ConfigurationHelper.ts +412 -412
- package/src/config/defaults.ts +51 -51
- package/src/config/index.ts +8 -8
- package/src/config/validation.ts +70 -70
- package/src/core/index.ts +14 -14
- package/src/core/interfaces/IService.ts +307 -307
- package/src/core/interfaces/index.ts +8 -8
- package/src/core/types/capability.ts +297 -297
- package/src/core/types/index.ts +870 -870
- package/src/core/types/wallet.ts +270 -270
- package/src/core/types.ts +9 -9
- package/src/core/wallet.ts +222 -222
- package/src/embedding/index.ts +19 -19
- package/src/embedding/types.ts +357 -357
- package/src/errors/index.ts +602 -602
- package/src/errors/recovery.ts +461 -461
- package/src/errors/validation.ts +567 -567
- package/src/generated/pdw/capability.ts +319 -319
- package/src/graph/GraphService.ts +887 -887
- package/src/graph/KnowledgeGraphManager.ts +728 -728
- package/src/graph/index.ts +25 -25
- package/src/index.ts +498 -474
- package/src/infrastructure/index.ts +22 -22
- package/src/infrastructure/seal/EncryptionService.ts +628 -603
- package/src/infrastructure/seal/SealService.ts +613 -615
- package/src/infrastructure/seal/index.ts +9 -9
- package/src/infrastructure/sui/BlockchainManager.ts +627 -627
- package/src/infrastructure/sui/SuiService.ts +888 -888
- package/src/infrastructure/sui/index.ts +9 -9
- package/src/infrastructure/walrus/StorageManager.ts +604 -604
- package/src/infrastructure/walrus/WalrusStorageService.ts +612 -612
- package/src/infrastructure/walrus/index.ts +9 -9
- package/src/langchain/PDWEmbeddings.ts +145 -145
- package/src/langchain/PDWVectorStore.ts +456 -456
- package/src/langchain/createPDWRAG.ts +303 -303
- package/src/langchain/index.ts +47 -47
- package/src/permissions/ConsentRepository.browser.ts +249 -249
- package/src/permissions/ConsentRepository.ts +364 -364
- package/src/pipeline/MemoryPipeline.ts +862 -862
- package/src/pipeline/PipelineManager.ts +683 -683
- package/src/pipeline/index.ts +26 -26
- package/src/retrieval/AdvancedSearchService.ts +629 -629
- package/src/retrieval/MemoryAnalyticsService.ts +711 -711
- package/src/retrieval/MemoryDecryptionPipeline.ts +825 -824
- package/src/retrieval/MemoryRetrievalService.ts +904 -830
- package/src/retrieval/index.ts +42 -42
- package/src/services/BatchService.ts +352 -352
- package/src/services/CapabilityService.ts +464 -448
- package/src/services/ClassifierService.ts +465 -465
- package/src/services/CrossContextPermissionService.ts +486 -484
- package/src/services/EmbeddingService.ts +771 -706
- package/src/services/EncryptionService.ts +712 -711
- package/src/services/GeminiAIService.ts +753 -753
- package/src/services/IndexManager.ts +977 -1004
- package/src/services/MemoryIndexService.ts +1003 -1003
- package/src/services/MemoryService.ts +369 -369
- package/src/services/QueryService.ts +890 -890
- package/src/services/StorageService.ts +1182 -1111
- package/src/services/TransactionService.ts +838 -790
- package/src/services/VectorService.ts +462 -462
- package/src/services/ViewService.ts +484 -484
- package/src/services/index.ts +25 -25
- package/src/services/storage/BlobAttributesManager.ts +333 -333
- package/src/services/storage/KnowledgeGraphManager.ts +425 -425
- package/src/services/storage/MemorySearchManager.ts +387 -387
- package/src/services/storage/QuiltBatchManager.ts +1130 -660
- package/src/services/storage/WalrusMetadataManager.ts +268 -268
- package/src/services/storage/WalrusStorageManager.ts +287 -287
- package/src/services/storage/index.ts +57 -52
- package/src/types/index.ts +13 -13
- package/src/utils/LRUCache.ts +378 -0
- package/src/utils/index.ts +76 -68
- package/src/utils/memoryIndexOnChain.ts +507 -0
- package/src/utils/rebuildIndex.ts +290 -290
- package/src/utils/rebuildIndexNode.ts +771 -424
- package/src/vector/BrowserHnswIndexService.ts +758 -758
- package/src/vector/HnswWasmService.ts +731 -679
- package/src/vector/IHnswService.ts +233 -224
- package/src/vector/NodeHnswService.ts +833 -735
- package/src/vector/VectorManager.ts +478 -478
- package/src/vector/createHnswService.ts +135 -135
- package/src/vector/index.ts +56 -56
- package/src/wallet/ContextWalletService.ts +656 -656
- package/src/wallet/MainWalletService.ts +317 -317
|
@@ -1,224 +1,233 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* IHnswService - Abstract Interface for HNSW Vector Indexing
|
|
3
|
-
*
|
|
4
|
-
* Provides a common interface for both browser (hnswlib-wasm) and
|
|
5
|
-
* Node.js (hnswlib-node) implementations.
|
|
6
|
-
*
|
|
7
|
-
* Types defined here are specific to IHnswService and its implementations.
|
|
8
|
-
* Legacy types in embedding/types.ts are preserved for backward compatibility.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
// ==================== IHnswService Types ====================
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Configuration for HNSW index
|
|
15
|
-
*/
|
|
16
|
-
export interface IHnswIndexConfig {
|
|
17
|
-
/** Vector dimension (e.g.,
|
|
18
|
-
dimension: number;
|
|
19
|
-
/** Maximum number of elements in the index */
|
|
20
|
-
maxElements?: number;
|
|
21
|
-
/** ef parameter during construction (higher = better quality, slower build) */
|
|
22
|
-
efConstruction?: number;
|
|
23
|
-
/** Number of bi-directional links per element */
|
|
24
|
-
m?: number;
|
|
25
|
-
/** Random seed for reproducibility */
|
|
26
|
-
randomSeed?: number;
|
|
27
|
-
/** Distance metric */
|
|
28
|
-
spaceType?: 'cosine' | 'l2' | 'ip';
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Single search result item
|
|
33
|
-
*/
|
|
34
|
-
export interface IHnswSearchResultItem {
|
|
35
|
-
/** Vector ID in the index */
|
|
36
|
-
vectorId: number;
|
|
37
|
-
/** Distance from query vector (lower = more similar for cosine/l2) */
|
|
38
|
-
distance: number;
|
|
39
|
-
/** Similarity score (higher = more similar, typically 1 - distance for cosine) */
|
|
40
|
-
score: number;
|
|
41
|
-
/** Optional metadata associated with the vector */
|
|
42
|
-
metadata?: Record<string, any>;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Search options for IHnswService
|
|
47
|
-
*/
|
|
48
|
-
export interface IHnswSearchOptions {
|
|
49
|
-
/** Number of results to return */
|
|
50
|
-
k?: number;
|
|
51
|
-
/** ef parameter for search (higher = better recall, slower search) */
|
|
52
|
-
ef?: number;
|
|
53
|
-
/** Minimum similarity score threshold (results below this are filtered) */
|
|
54
|
-
minScore?: number;
|
|
55
|
-
/** Maximum distance threshold (results above this are filtered) */
|
|
56
|
-
maxDistance?: number;
|
|
57
|
-
/** Optional metadata filter function */
|
|
58
|
-
filter?: (metadata: Record<string, any>) => boolean;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Batch processing statistics
|
|
63
|
-
*/
|
|
64
|
-
export interface IHnswBatchStats {
|
|
65
|
-
/** Number of pending jobs in queue */
|
|
66
|
-
pendingJobs: number;
|
|
67
|
-
/** Number of successfully completed jobs */
|
|
68
|
-
completedJobs: number;
|
|
69
|
-
/** Number of failed jobs */
|
|
70
|
-
failedJobs: number;
|
|
71
|
-
/** Average processing time in milliseconds */
|
|
72
|
-
averageProcessingTime: number;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// ==================== IHnswService Interface ====================
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Common interface for HNSW vector indexing services.
|
|
79
|
-
* Implemented by both BrowserHnswIndexService and NodeHnswService.
|
|
80
|
-
*/
|
|
81
|
-
export interface IHnswService {
|
|
82
|
-
/**
|
|
83
|
-
* Initialize the service (load WASM/native bindings)
|
|
84
|
-
*/
|
|
85
|
-
initialize(): Promise<void>;
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Check if service is initialized
|
|
89
|
-
*/
|
|
90
|
-
isInitialized(): boolean;
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Create or get an index for a user
|
|
94
|
-
*/
|
|
95
|
-
getOrCreateIndex(userAddress: string): Promise<void>;
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Add a vector to the index
|
|
99
|
-
*/
|
|
100
|
-
addVector(
|
|
101
|
-
userAddress: string,
|
|
102
|
-
vectorId: number,
|
|
103
|
-
vector: number[],
|
|
104
|
-
metadata?: Record<string, any>
|
|
105
|
-
): Promise<void>;
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Search for similar vectors
|
|
109
|
-
* @returns Array of search results sorted by similarity (descending)
|
|
110
|
-
*/
|
|
111
|
-
search(
|
|
112
|
-
userAddress: string,
|
|
113
|
-
queryVector: number[],
|
|
114
|
-
options?: IHnswSearchOptions
|
|
115
|
-
): Promise<IHnswSearchResultItem[]>;
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Remove a vector from the index
|
|
119
|
-
*/
|
|
120
|
-
removeVector(userAddress: string, vectorId: number): Promise<void>;
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Get batch processing statistics
|
|
124
|
-
*/
|
|
125
|
-
getBatchStats(): IHnswBatchStats;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Flush pending batch operations
|
|
129
|
-
*/
|
|
130
|
-
flushBatch(userAddress: string): Promise<void>;
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Save index to persistent storage
|
|
134
|
-
*/
|
|
135
|
-
saveIndex(userAddress: string): Promise<void>;
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Load index from persistent storage
|
|
139
|
-
* @returns true if index was loaded, false if no existing index found
|
|
140
|
-
*/
|
|
141
|
-
loadIndex(userAddress: string): Promise<boolean>;
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Delete an index
|
|
145
|
-
*/
|
|
146
|
-
deleteIndex(userAddress: string): Promise<void>;
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Sync index to Walrus storage (optional - returns blobId if Walrus backup is enabled)
|
|
150
|
-
*/
|
|
151
|
-
syncToWalrus?(userAddress: string): Promise<string | null>;
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Load index from Walrus storage
|
|
155
|
-
* @param blobId - Walrus blob ID containing the index
|
|
156
|
-
* @returns true if index was loaded, false if failed
|
|
157
|
-
*/
|
|
158
|
-
loadFromWalrus?(userAddress: string, blobId: string): Promise<boolean>;
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Get the latest Walrus blob ID for the index (if backed up)
|
|
162
|
-
*/
|
|
163
|
-
getWalrusBlobId?(userAddress: string): string | null;
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Destroy the service and cleanup resources
|
|
167
|
-
*/
|
|
168
|
-
destroy(): void;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// ==================== Factory Configuration ====================
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Walrus storage configuration for index backup
|
|
175
|
-
*/
|
|
176
|
-
export interface WalrusBackupConfig {
|
|
177
|
-
/** Enable Walrus backup */
|
|
178
|
-
enabled: boolean;
|
|
179
|
-
/** Walrus aggregator URL */
|
|
180
|
-
aggregatorUrl: string;
|
|
181
|
-
/** Walrus publisher URL */
|
|
182
|
-
publisherUrl: string;
|
|
183
|
-
/** Auto-sync to Walrus after saveIndex() */
|
|
184
|
-
autoSync?: boolean;
|
|
185
|
-
/** Storage epochs (default: 3) */
|
|
186
|
-
epochs?: number;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Configuration for creating HNSW service via factory
|
|
191
|
-
*/
|
|
192
|
-
export interface HnswServiceConfig {
|
|
193
|
-
/** HNSW index configuration */
|
|
194
|
-
indexConfig?: Partial<IHnswIndexConfig>;
|
|
195
|
-
/** Batch processing configuration */
|
|
196
|
-
batchConfig?: {
|
|
197
|
-
maxBatchSize?: number;
|
|
198
|
-
batchDelayMs?: number;
|
|
199
|
-
maxCacheSize?: number;
|
|
200
|
-
cacheTtlMs?: number;
|
|
201
|
-
};
|
|
202
|
-
/** Directory for storing indexes (Node.js only) */
|
|
203
|
-
indexDirectory?: string;
|
|
204
|
-
/** Walrus backup configuration (optional) */
|
|
205
|
-
walrusBackup?: WalrusBackupConfig;
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
|
|
212
|
-
*/
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* IHnswService - Abstract Interface for HNSW Vector Indexing
|
|
3
|
+
*
|
|
4
|
+
* Provides a common interface for both browser (hnswlib-wasm) and
|
|
5
|
+
* Node.js (hnswlib-node) implementations.
|
|
6
|
+
*
|
|
7
|
+
* Types defined here are specific to IHnswService and its implementations.
|
|
8
|
+
* Legacy types in embedding/types.ts are preserved for backward compatibility.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// ==================== IHnswService Types ====================
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Configuration for HNSW index
|
|
15
|
+
*/
|
|
16
|
+
export interface IHnswIndexConfig {
|
|
17
|
+
/** Vector dimension (e.g., 3072 for text-embedding-004) */
|
|
18
|
+
dimension: number;
|
|
19
|
+
/** Maximum number of elements in the index */
|
|
20
|
+
maxElements?: number;
|
|
21
|
+
/** ef parameter during construction (higher = better quality, slower build) */
|
|
22
|
+
efConstruction?: number;
|
|
23
|
+
/** Number of bi-directional links per element */
|
|
24
|
+
m?: number;
|
|
25
|
+
/** Random seed for reproducibility */
|
|
26
|
+
randomSeed?: number;
|
|
27
|
+
/** Distance metric */
|
|
28
|
+
spaceType?: 'cosine' | 'l2' | 'ip';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Single search result item
|
|
33
|
+
*/
|
|
34
|
+
export interface IHnswSearchResultItem {
|
|
35
|
+
/** Vector ID in the index */
|
|
36
|
+
vectorId: number;
|
|
37
|
+
/** Distance from query vector (lower = more similar for cosine/l2) */
|
|
38
|
+
distance: number;
|
|
39
|
+
/** Similarity score (higher = more similar, typically 1 - distance for cosine) */
|
|
40
|
+
score: number;
|
|
41
|
+
/** Optional metadata associated with the vector */
|
|
42
|
+
metadata?: Record<string, any>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Search options for IHnswService
|
|
47
|
+
*/
|
|
48
|
+
export interface IHnswSearchOptions {
|
|
49
|
+
/** Number of results to return */
|
|
50
|
+
k?: number;
|
|
51
|
+
/** ef parameter for search (higher = better recall, slower search) */
|
|
52
|
+
ef?: number;
|
|
53
|
+
/** Minimum similarity score threshold (results below this are filtered) */
|
|
54
|
+
minScore?: number;
|
|
55
|
+
/** Maximum distance threshold (results above this are filtered) */
|
|
56
|
+
maxDistance?: number;
|
|
57
|
+
/** Optional metadata filter function */
|
|
58
|
+
filter?: (metadata: Record<string, any>) => boolean;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Batch processing statistics
|
|
63
|
+
*/
|
|
64
|
+
export interface IHnswBatchStats {
|
|
65
|
+
/** Number of pending jobs in queue */
|
|
66
|
+
pendingJobs: number;
|
|
67
|
+
/** Number of successfully completed jobs */
|
|
68
|
+
completedJobs: number;
|
|
69
|
+
/** Number of failed jobs */
|
|
70
|
+
failedJobs: number;
|
|
71
|
+
/** Average processing time in milliseconds */
|
|
72
|
+
averageProcessingTime: number;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// ==================== IHnswService Interface ====================
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Common interface for HNSW vector indexing services.
|
|
79
|
+
* Implemented by both BrowserHnswIndexService and NodeHnswService.
|
|
80
|
+
*/
|
|
81
|
+
export interface IHnswService {
|
|
82
|
+
/**
|
|
83
|
+
* Initialize the service (load WASM/native bindings)
|
|
84
|
+
*/
|
|
85
|
+
initialize(): Promise<void>;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Check if service is initialized
|
|
89
|
+
*/
|
|
90
|
+
isInitialized(): boolean;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Create or get an index for a user
|
|
94
|
+
*/
|
|
95
|
+
getOrCreateIndex(userAddress: string): Promise<void>;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Add a vector to the index
|
|
99
|
+
*/
|
|
100
|
+
addVector(
|
|
101
|
+
userAddress: string,
|
|
102
|
+
vectorId: number,
|
|
103
|
+
vector: number[],
|
|
104
|
+
metadata?: Record<string, any>
|
|
105
|
+
): Promise<void>;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Search for similar vectors
|
|
109
|
+
* @returns Array of search results sorted by similarity (descending)
|
|
110
|
+
*/
|
|
111
|
+
search(
|
|
112
|
+
userAddress: string,
|
|
113
|
+
queryVector: number[],
|
|
114
|
+
options?: IHnswSearchOptions
|
|
115
|
+
): Promise<IHnswSearchResultItem[]>;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Remove a vector from the index
|
|
119
|
+
*/
|
|
120
|
+
removeVector(userAddress: string, vectorId: number): Promise<void>;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Get batch processing statistics
|
|
124
|
+
*/
|
|
125
|
+
getBatchStats(): IHnswBatchStats;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Flush pending batch operations
|
|
129
|
+
*/
|
|
130
|
+
flushBatch(userAddress: string): Promise<void>;
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Save index to persistent storage
|
|
134
|
+
*/
|
|
135
|
+
saveIndex(userAddress: string): Promise<void>;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Load index from persistent storage
|
|
139
|
+
* @returns true if index was loaded, false if no existing index found
|
|
140
|
+
*/
|
|
141
|
+
loadIndex(userAddress: string): Promise<boolean>;
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Delete an index
|
|
145
|
+
*/
|
|
146
|
+
deleteIndex(userAddress: string): Promise<void>;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Sync index to Walrus storage (optional - returns blobId if Walrus backup is enabled)
|
|
150
|
+
*/
|
|
151
|
+
syncToWalrus?(userAddress: string): Promise<string | null>;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Load index from Walrus storage
|
|
155
|
+
* @param blobId - Walrus blob ID containing the index
|
|
156
|
+
* @returns true if index was loaded, false if failed
|
|
157
|
+
*/
|
|
158
|
+
loadFromWalrus?(userAddress: string, blobId: string): Promise<boolean>;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Get the latest Walrus blob ID for the index (if backed up)
|
|
162
|
+
*/
|
|
163
|
+
getWalrusBlobId?(userAddress: string): string | null;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Destroy the service and cleanup resources
|
|
167
|
+
*/
|
|
168
|
+
destroy(): void;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ==================== Factory Configuration ====================
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Walrus storage configuration for index backup
|
|
175
|
+
*/
|
|
176
|
+
export interface WalrusBackupConfig {
|
|
177
|
+
/** Enable Walrus backup */
|
|
178
|
+
enabled: boolean;
|
|
179
|
+
/** Walrus aggregator URL */
|
|
180
|
+
aggregatorUrl: string;
|
|
181
|
+
/** Walrus publisher URL */
|
|
182
|
+
publisherUrl: string;
|
|
183
|
+
/** Auto-sync to Walrus after saveIndex() */
|
|
184
|
+
autoSync?: boolean;
|
|
185
|
+
/** Storage epochs (default: 3) */
|
|
186
|
+
epochs?: number;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Configuration for creating HNSW service via factory
|
|
191
|
+
*/
|
|
192
|
+
export interface HnswServiceConfig {
|
|
193
|
+
/** HNSW index configuration */
|
|
194
|
+
indexConfig?: Partial<IHnswIndexConfig>;
|
|
195
|
+
/** Batch processing configuration */
|
|
196
|
+
batchConfig?: {
|
|
197
|
+
maxBatchSize?: number;
|
|
198
|
+
batchDelayMs?: number;
|
|
199
|
+
maxCacheSize?: number;
|
|
200
|
+
cacheTtlMs?: number;
|
|
201
|
+
};
|
|
202
|
+
/** Directory for storing indexes (Node.js only) */
|
|
203
|
+
indexDirectory?: string;
|
|
204
|
+
/** Walrus backup configuration (optional) */
|
|
205
|
+
walrusBackup?: WalrusBackupConfig;
|
|
206
|
+
/** Memory management configuration for LRU cache */
|
|
207
|
+
memoryConfig?: {
|
|
208
|
+
/** Maximum number of cached indexes (default: 5) */
|
|
209
|
+
maxCachedIndexes?: number;
|
|
210
|
+
/** TTL for cached indexes in ms (default: 10 minutes) */
|
|
211
|
+
indexTtlMs?: number;
|
|
212
|
+
/** Maximum memory in MB (default: 512MB) */
|
|
213
|
+
maxMemoryMB?: number;
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ==================== Environment Detection ====================
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Check if running in browser environment with required APIs
|
|
221
|
+
*/
|
|
222
|
+
export function isBrowser(): boolean {
|
|
223
|
+
return typeof window !== 'undefined' && typeof indexedDB !== 'undefined';
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Check if running in Node.js environment
|
|
228
|
+
*/
|
|
229
|
+
export function isNode(): boolean {
|
|
230
|
+
return typeof process !== 'undefined' &&
|
|
231
|
+
process.versions != null &&
|
|
232
|
+
process.versions.node != null;
|
|
233
|
+
}
|