@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,135 +1,135 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* createHnswService - Factory for Environment-Aware HNSW Service
|
|
3
|
-
*
|
|
4
|
-
* Automatically detects the runtime environment and returns the appropriate
|
|
5
|
-
* HNSW implementation:
|
|
6
|
-
* - Browser: BrowserHnswIndexService (hnswlib-wasm)
|
|
7
|
-
* - Node.js: NodeHnswService (hnswlib-node)
|
|
8
|
-
*
|
|
9
|
-
* Uses singleton pattern to prevent redundant initializations.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import type { IHnswService, HnswServiceConfig } from './IHnswService';
|
|
13
|
-
import { isBrowser, isNode } from './IHnswService';
|
|
14
|
-
|
|
15
|
-
// Re-export environment detection functions
|
|
16
|
-
export { isBrowser, isNode };
|
|
17
|
-
|
|
18
|
-
// Singleton instance and initialization promise
|
|
19
|
-
let singletonInstance: IHnswService | null = null;
|
|
20
|
-
let singletonInitPromise: Promise<IHnswService> | null = null;
|
|
21
|
-
let instanceCount = 0;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Create an HNSW service appropriate for the current environment.
|
|
25
|
-
* Uses singleton pattern - subsequent calls return the same instance.
|
|
26
|
-
*
|
|
27
|
-
* @param config - Service configuration (only used on first call)
|
|
28
|
-
* @returns Promise<IHnswService> - The appropriate HNSW service for the environment
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* ```typescript
|
|
32
|
-
* const hnswService = await createHnswService({
|
|
33
|
-
* indexConfig: { dimension:
|
|
34
|
-
* });
|
|
35
|
-
*
|
|
36
|
-
* await hnswService.addVector(userAddress, vectorId, embedding);
|
|
37
|
-
* const results = await hnswService.search(userAddress, queryEmbedding);
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export async function createHnswService(config: HnswServiceConfig = {}): Promise<IHnswService> {
|
|
41
|
-
// Return existing singleton if available
|
|
42
|
-
if (singletonInstance) {
|
|
43
|
-
instanceCount++;
|
|
44
|
-
console.log(`[createHnswService] Returning singleton instance (request #${instanceCount})`);
|
|
45
|
-
return singletonInstance;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Return pending initialization promise if already in progress
|
|
49
|
-
if (singletonInitPromise) {
|
|
50
|
-
instanceCount++;
|
|
51
|
-
console.log(`[createHnswService] Waiting for pending initialization (request #${instanceCount})`);
|
|
52
|
-
return singletonInitPromise;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Create new singleton instance
|
|
56
|
-
instanceCount = 1;
|
|
57
|
-
singletonInitPromise = createNewInstance(config);
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
singletonInstance = await singletonInitPromise;
|
|
61
|
-
return singletonInstance;
|
|
62
|
-
} catch (error) {
|
|
63
|
-
// Reset on failure to allow retry
|
|
64
|
-
singletonInitPromise = null;
|
|
65
|
-
throw error;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Internal function to create a new HNSW service instance
|
|
71
|
-
*/
|
|
72
|
-
async function createNewInstance(config: HnswServiceConfig): Promise<IHnswService> {
|
|
73
|
-
if (isBrowser()) {
|
|
74
|
-
console.log('[createHnswService] Browser environment detected, using hnswlib-wasm');
|
|
75
|
-
|
|
76
|
-
// Dynamic import for browser service
|
|
77
|
-
const { BrowserHnswIndexService } = await import('./BrowserHnswIndexService');
|
|
78
|
-
const service = new BrowserHnswIndexService(config.indexConfig);
|
|
79
|
-
return service as unknown as IHnswService;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (isNode()) {
|
|
83
|
-
console.log('[createHnswService] Node.js environment detected, using hnswlib-node');
|
|
84
|
-
|
|
85
|
-
// Dynamic import for Node.js service
|
|
86
|
-
const { NodeHnswService } = await import('./NodeHnswService');
|
|
87
|
-
const service = new NodeHnswService(config);
|
|
88
|
-
await service.initialize();
|
|
89
|
-
return service;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
throw new Error(
|
|
93
|
-
'Unsupported environment: HNSW service requires either a browser (for hnswlib-wasm) ' +
|
|
94
|
-
'or Node.js (for hnswlib-node) environment.'
|
|
95
|
-
);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Reset the singleton instance (useful for testing)
|
|
100
|
-
*/
|
|
101
|
-
export function resetHnswServiceSingleton(): void {
|
|
102
|
-
if (singletonInstance) {
|
|
103
|
-
singletonInstance.destroy();
|
|
104
|
-
}
|
|
105
|
-
singletonInstance = null;
|
|
106
|
-
singletonInitPromise = null;
|
|
107
|
-
instanceCount = 0;
|
|
108
|
-
console.log('[createHnswService] Singleton instance reset');
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Get singleton statistics
|
|
113
|
-
*/
|
|
114
|
-
export function getHnswServiceStats(): { instanceCount: number; isInitialized: boolean } {
|
|
115
|
-
return {
|
|
116
|
-
instanceCount,
|
|
117
|
-
isInitialized: singletonInstance !== null
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Check if HNSW service is available in the current environment
|
|
123
|
-
*/
|
|
124
|
-
export function isHnswAvailable(): boolean {
|
|
125
|
-
return isBrowser() || isNode();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Get the type of HNSW service that would be used
|
|
130
|
-
*/
|
|
131
|
-
export function getHnswServiceType(): 'browser' | 'node' | 'none' {
|
|
132
|
-
if (isBrowser()) return 'browser';
|
|
133
|
-
if (isNode()) return 'node';
|
|
134
|
-
return 'none';
|
|
135
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* createHnswService - Factory for Environment-Aware HNSW Service
|
|
3
|
+
*
|
|
4
|
+
* Automatically detects the runtime environment and returns the appropriate
|
|
5
|
+
* HNSW implementation:
|
|
6
|
+
* - Browser: BrowserHnswIndexService (hnswlib-wasm)
|
|
7
|
+
* - Node.js: NodeHnswService (hnswlib-node)
|
|
8
|
+
*
|
|
9
|
+
* Uses singleton pattern to prevent redundant initializations.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { IHnswService, HnswServiceConfig } from './IHnswService';
|
|
13
|
+
import { isBrowser, isNode } from './IHnswService';
|
|
14
|
+
|
|
15
|
+
// Re-export environment detection functions
|
|
16
|
+
export { isBrowser, isNode };
|
|
17
|
+
|
|
18
|
+
// Singleton instance and initialization promise
|
|
19
|
+
let singletonInstance: IHnswService | null = null;
|
|
20
|
+
let singletonInitPromise: Promise<IHnswService> | null = null;
|
|
21
|
+
let instanceCount = 0;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Create an HNSW service appropriate for the current environment.
|
|
25
|
+
* Uses singleton pattern - subsequent calls return the same instance.
|
|
26
|
+
*
|
|
27
|
+
* @param config - Service configuration (only used on first call)
|
|
28
|
+
* @returns Promise<IHnswService> - The appropriate HNSW service for the environment
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const hnswService = await createHnswService({
|
|
33
|
+
* indexConfig: { dimension: 3072 }
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* await hnswService.addVector(userAddress, vectorId, embedding);
|
|
37
|
+
* const results = await hnswService.search(userAddress, queryEmbedding);
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export async function createHnswService(config: HnswServiceConfig = {}): Promise<IHnswService> {
|
|
41
|
+
// Return existing singleton if available
|
|
42
|
+
if (singletonInstance) {
|
|
43
|
+
instanceCount++;
|
|
44
|
+
console.log(`[createHnswService] Returning singleton instance (request #${instanceCount})`);
|
|
45
|
+
return singletonInstance;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Return pending initialization promise if already in progress
|
|
49
|
+
if (singletonInitPromise) {
|
|
50
|
+
instanceCount++;
|
|
51
|
+
console.log(`[createHnswService] Waiting for pending initialization (request #${instanceCount})`);
|
|
52
|
+
return singletonInitPromise;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Create new singleton instance
|
|
56
|
+
instanceCount = 1;
|
|
57
|
+
singletonInitPromise = createNewInstance(config);
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
singletonInstance = await singletonInitPromise;
|
|
61
|
+
return singletonInstance;
|
|
62
|
+
} catch (error) {
|
|
63
|
+
// Reset on failure to allow retry
|
|
64
|
+
singletonInitPromise = null;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Internal function to create a new HNSW service instance
|
|
71
|
+
*/
|
|
72
|
+
async function createNewInstance(config: HnswServiceConfig): Promise<IHnswService> {
|
|
73
|
+
if (isBrowser()) {
|
|
74
|
+
console.log('[createHnswService] Browser environment detected, using hnswlib-wasm');
|
|
75
|
+
|
|
76
|
+
// Dynamic import for browser service
|
|
77
|
+
const { BrowserHnswIndexService } = await import('./BrowserHnswIndexService');
|
|
78
|
+
const service = new BrowserHnswIndexService(config.indexConfig);
|
|
79
|
+
return service as unknown as IHnswService;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (isNode()) {
|
|
83
|
+
console.log('[createHnswService] Node.js environment detected, using hnswlib-node');
|
|
84
|
+
|
|
85
|
+
// Dynamic import for Node.js service
|
|
86
|
+
const { NodeHnswService } = await import('./NodeHnswService');
|
|
87
|
+
const service = new NodeHnswService(config);
|
|
88
|
+
await service.initialize();
|
|
89
|
+
return service;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
throw new Error(
|
|
93
|
+
'Unsupported environment: HNSW service requires either a browser (for hnswlib-wasm) ' +
|
|
94
|
+
'or Node.js (for hnswlib-node) environment.'
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Reset the singleton instance (useful for testing)
|
|
100
|
+
*/
|
|
101
|
+
export function resetHnswServiceSingleton(): void {
|
|
102
|
+
if (singletonInstance) {
|
|
103
|
+
singletonInstance.destroy();
|
|
104
|
+
}
|
|
105
|
+
singletonInstance = null;
|
|
106
|
+
singletonInitPromise = null;
|
|
107
|
+
instanceCount = 0;
|
|
108
|
+
console.log('[createHnswService] Singleton instance reset');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get singleton statistics
|
|
113
|
+
*/
|
|
114
|
+
export function getHnswServiceStats(): { instanceCount: number; isInitialized: boolean } {
|
|
115
|
+
return {
|
|
116
|
+
instanceCount,
|
|
117
|
+
isInitialized: singletonInstance !== null
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Check if HNSW service is available in the current environment
|
|
123
|
+
*/
|
|
124
|
+
export function isHnswAvailable(): boolean {
|
|
125
|
+
return isBrowser() || isNode();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Get the type of HNSW service that would be used
|
|
130
|
+
*/
|
|
131
|
+
export function getHnswServiceType(): 'browser' | 'node' | 'none' {
|
|
132
|
+
if (isBrowser()) return 'browser';
|
|
133
|
+
if (isNode()) return 'node';
|
|
134
|
+
return 'none';
|
|
135
|
+
}
|
package/src/vector/index.ts
CHANGED
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vector Module - HNSW Vector Indexing and Management
|
|
3
|
-
*
|
|
4
|
-
* Exports all vector-related services and utilities for the PDW SDK.
|
|
5
|
-
* Supports both browser (hnswlib-wasm) and Node.js (hnswlib-node) environments.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```typescript
|
|
9
|
-
* // Auto-detect environment and create appropriate service
|
|
10
|
-
* import { createHnswService } from 'personal-data-wallet-sdk/vector';
|
|
11
|
-
* const service = await createHnswService({ indexConfig: { dimension:
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
// Interface and utilities (safe for all environments)
|
|
16
|
-
export type {
|
|
17
|
-
IHnswService,
|
|
18
|
-
HnswServiceConfig,
|
|
19
|
-
IHnswIndexConfig,
|
|
20
|
-
IHnswSearchOptions,
|
|
21
|
-
IHnswSearchResultItem,
|
|
22
|
-
IHnswBatchStats,
|
|
23
|
-
WalrusBackupConfig
|
|
24
|
-
} from './IHnswService';
|
|
25
|
-
export { isBrowser, isNode } from './IHnswService';
|
|
26
|
-
|
|
27
|
-
// Factory function (auto-detects environment, singleton pattern)
|
|
28
|
-
export {
|
|
29
|
-
createHnswService,
|
|
30
|
-
isHnswAvailable,
|
|
31
|
-
getHnswServiceType,
|
|
32
|
-
resetHnswServiceSingleton,
|
|
33
|
-
getHnswServiceStats
|
|
34
|
-
} from './createHnswService';
|
|
35
|
-
|
|
36
|
-
// VectorManager (uses factory internally)
|
|
37
|
-
export { VectorManager } from './VectorManager';
|
|
38
|
-
|
|
39
|
-
// Re-export types from embedding module for convenience
|
|
40
|
-
export type {
|
|
41
|
-
HNSWIndexConfig,
|
|
42
|
-
HNSWSearchResult,
|
|
43
|
-
HNSWSearchOptions,
|
|
44
|
-
BatchConfig,
|
|
45
|
-
BatchJob,
|
|
46
|
-
BatchStats,
|
|
47
|
-
VectorSearchOptions,
|
|
48
|
-
VectorSearchResult,
|
|
49
|
-
VectorSearchMatch,
|
|
50
|
-
VectorError
|
|
51
|
-
} from '../embedding/types';
|
|
52
|
-
|
|
53
|
-
// Default export with lazy loaders
|
|
54
|
-
export default {
|
|
55
|
-
createHnswService: async () => (await import('./createHnswService')).createHnswService,
|
|
56
|
-
VectorManager: async () => (await import('./VectorManager')).VectorManager
|
|
1
|
+
/**
|
|
2
|
+
* Vector Module - HNSW Vector Indexing and Management
|
|
3
|
+
*
|
|
4
|
+
* Exports all vector-related services and utilities for the PDW SDK.
|
|
5
|
+
* Supports both browser (hnswlib-wasm) and Node.js (hnswlib-node) environments.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // Auto-detect environment and create appropriate service
|
|
10
|
+
* import { createHnswService } from 'personal-data-wallet-sdk/vector';
|
|
11
|
+
* const service = await createHnswService({ indexConfig: { dimension: 3072 } });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// Interface and utilities (safe for all environments)
|
|
16
|
+
export type {
|
|
17
|
+
IHnswService,
|
|
18
|
+
HnswServiceConfig,
|
|
19
|
+
IHnswIndexConfig,
|
|
20
|
+
IHnswSearchOptions,
|
|
21
|
+
IHnswSearchResultItem,
|
|
22
|
+
IHnswBatchStats,
|
|
23
|
+
WalrusBackupConfig
|
|
24
|
+
} from './IHnswService';
|
|
25
|
+
export { isBrowser, isNode } from './IHnswService';
|
|
26
|
+
|
|
27
|
+
// Factory function (auto-detects environment, singleton pattern)
|
|
28
|
+
export {
|
|
29
|
+
createHnswService,
|
|
30
|
+
isHnswAvailable,
|
|
31
|
+
getHnswServiceType,
|
|
32
|
+
resetHnswServiceSingleton,
|
|
33
|
+
getHnswServiceStats
|
|
34
|
+
} from './createHnswService';
|
|
35
|
+
|
|
36
|
+
// VectorManager (uses factory internally)
|
|
37
|
+
export { VectorManager } from './VectorManager';
|
|
38
|
+
|
|
39
|
+
// Re-export types from embedding module for convenience
|
|
40
|
+
export type {
|
|
41
|
+
HNSWIndexConfig,
|
|
42
|
+
HNSWSearchResult,
|
|
43
|
+
HNSWSearchOptions,
|
|
44
|
+
BatchConfig,
|
|
45
|
+
BatchJob,
|
|
46
|
+
BatchStats,
|
|
47
|
+
VectorSearchOptions,
|
|
48
|
+
VectorSearchResult,
|
|
49
|
+
VectorSearchMatch,
|
|
50
|
+
VectorError
|
|
51
|
+
} from '../embedding/types';
|
|
52
|
+
|
|
53
|
+
// Default export with lazy loaders
|
|
54
|
+
export default {
|
|
55
|
+
createHnswService: async () => (await import('./createHnswService')).createHnswService,
|
|
56
|
+
VectorManager: async () => (await import('./VectorManager')).VectorManager
|
|
57
57
|
};
|