@soulcraft/brainy 0.41.0 → 0.44.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 (205) hide show
  1. package/README.md +605 -194
  2. package/dist/augmentationFactory.d.ts.map +1 -0
  3. package/dist/augmentationFactory.js +342 -0
  4. package/dist/augmentationFactory.js.map +1 -0
  5. package/dist/augmentationPipeline.d.ts.map +1 -0
  6. package/dist/augmentationPipeline.js +472 -0
  7. package/dist/augmentationPipeline.js.map +1 -0
  8. package/dist/augmentationRegistry.d.ts.map +1 -0
  9. package/dist/augmentationRegistry.js +105 -0
  10. package/dist/augmentationRegistry.js.map +1 -0
  11. package/dist/augmentationRegistryLoader.d.ts.map +1 -0
  12. package/dist/augmentationRegistryLoader.js +213 -0
  13. package/dist/augmentationRegistryLoader.js.map +1 -0
  14. package/dist/augmentations/conduitAugmentations.js +1158 -0
  15. package/dist/augmentations/conduitAugmentations.js.map +1 -0
  16. package/dist/augmentations/memoryAugmentations.d.ts +2 -0
  17. package/dist/augmentations/memoryAugmentations.d.ts.map +1 -1
  18. package/dist/augmentations/memoryAugmentations.js +270 -0
  19. package/dist/augmentations/memoryAugmentations.js.map +1 -0
  20. package/dist/augmentations/serverSearchAugmentations.js +531 -0
  21. package/dist/augmentations/serverSearchAugmentations.js.map +1 -0
  22. package/dist/brainyData.d.ts.map +1 -0
  23. package/dist/brainyData.js +3999 -0
  24. package/dist/brainyData.js.map +1 -0
  25. package/dist/browserFramework.d.ts +15 -0
  26. package/dist/browserFramework.d.ts.map +1 -0
  27. package/dist/browserFramework.js +31 -0
  28. package/dist/browserFramework.js.map +1 -0
  29. package/dist/coreTypes.d.ts.map +1 -0
  30. package/dist/coreTypes.js +5 -0
  31. package/dist/coreTypes.js.map +1 -0
  32. package/dist/demo.d.ts +106 -0
  33. package/dist/demo.d.ts.map +1 -0
  34. package/dist/demo.js +201 -0
  35. package/dist/demo.js.map +1 -0
  36. package/dist/distributed/configManager.d.ts.map +1 -0
  37. package/dist/distributed/configManager.js +322 -0
  38. package/dist/distributed/configManager.js.map +1 -0
  39. package/dist/distributed/domainDetector.d.ts.map +1 -0
  40. package/dist/distributed/domainDetector.js +307 -0
  41. package/dist/distributed/domainDetector.js.map +1 -0
  42. package/dist/distributed/hashPartitioner.d.ts.map +1 -0
  43. package/dist/distributed/hashPartitioner.js +146 -0
  44. package/dist/distributed/hashPartitioner.js.map +1 -0
  45. package/dist/distributed/healthMonitor.d.ts.map +1 -0
  46. package/dist/distributed/healthMonitor.js +244 -0
  47. package/dist/distributed/healthMonitor.js.map +1 -0
  48. package/dist/distributed/index.d.ts.map +1 -0
  49. package/dist/distributed/index.js +9 -0
  50. package/dist/distributed/index.js.map +1 -0
  51. package/dist/distributed/operationalModes.d.ts.map +1 -0
  52. package/dist/distributed/operationalModes.js +201 -0
  53. package/dist/distributed/operationalModes.js.map +1 -0
  54. package/dist/errors/brainyError.d.ts.map +1 -0
  55. package/dist/errors/brainyError.js +113 -0
  56. package/dist/errors/brainyError.js.map +1 -0
  57. package/dist/examples/basicUsage.js +118 -0
  58. package/dist/examples/basicUsage.js.map +1 -0
  59. package/dist/hnsw/distributedSearch.js +452 -0
  60. package/dist/hnsw/distributedSearch.js.map +1 -0
  61. package/dist/hnsw/hnswIndex.js +602 -0
  62. package/dist/hnsw/hnswIndex.js.map +1 -0
  63. package/dist/hnsw/hnswIndexOptimized.js +471 -0
  64. package/dist/hnsw/hnswIndexOptimized.js.map +1 -0
  65. package/dist/hnsw/optimizedHNSWIndex.js +313 -0
  66. package/dist/hnsw/optimizedHNSWIndex.js.map +1 -0
  67. package/dist/hnsw/partitionedHNSWIndex.js +304 -0
  68. package/dist/hnsw/partitionedHNSWIndex.js.map +1 -0
  69. package/dist/hnsw/scaledHNSWSystem.js +559 -0
  70. package/dist/hnsw/scaledHNSWSystem.js.map +1 -0
  71. package/dist/index.d.ts +3 -2
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +81 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/mcp/brainyMCPAdapter.js +142 -0
  76. package/dist/mcp/brainyMCPAdapter.js.map +1 -0
  77. package/dist/mcp/brainyMCPService.js +248 -0
  78. package/dist/mcp/brainyMCPService.js.map +1 -0
  79. package/dist/mcp/index.js +17 -0
  80. package/dist/mcp/index.js.map +1 -0
  81. package/dist/mcp/mcpAugmentationToolset.js +180 -0
  82. package/dist/mcp/mcpAugmentationToolset.js.map +1 -0
  83. package/dist/pipeline.d.ts.map +1 -0
  84. package/dist/pipeline.js +590 -0
  85. package/dist/pipeline.js.map +1 -0
  86. package/dist/sequentialPipeline.d.ts.map +1 -0
  87. package/dist/sequentialPipeline.js +417 -0
  88. package/dist/sequentialPipeline.js.map +1 -0
  89. package/dist/setup.d.ts.map +1 -0
  90. package/dist/setup.js +46 -0
  91. package/dist/setup.js.map +1 -0
  92. package/dist/storage/adapters/baseStorageAdapter.js +349 -0
  93. package/dist/storage/adapters/baseStorageAdapter.js.map +1 -0
  94. package/dist/storage/adapters/batchS3Operations.js +287 -0
  95. package/dist/storage/adapters/batchS3Operations.js.map +1 -0
  96. package/dist/storage/adapters/fileSystemStorage.js +846 -0
  97. package/dist/storage/adapters/fileSystemStorage.js.map +1 -0
  98. package/dist/storage/adapters/memoryStorage.js +532 -0
  99. package/dist/storage/adapters/memoryStorage.js.map +1 -0
  100. package/dist/storage/adapters/opfsStorage.d.ts.map +1 -1
  101. package/dist/storage/adapters/opfsStorage.js +1118 -0
  102. package/dist/storage/adapters/opfsStorage.js.map +1 -0
  103. package/dist/storage/adapters/optimizedS3Search.js +248 -0
  104. package/dist/storage/adapters/optimizedS3Search.js.map +1 -0
  105. package/dist/storage/adapters/s3CompatibleStorage.js +2026 -0
  106. package/dist/storage/adapters/s3CompatibleStorage.js.map +1 -0
  107. package/dist/storage/baseStorage.js +603 -0
  108. package/dist/storage/baseStorage.js.map +1 -0
  109. package/dist/storage/cacheManager.js +1306 -0
  110. package/dist/storage/cacheManager.js.map +1 -0
  111. package/dist/storage/enhancedCacheManager.js +520 -0
  112. package/dist/storage/enhancedCacheManager.js.map +1 -0
  113. package/dist/storage/readOnlyOptimizations.js +425 -0
  114. package/dist/storage/readOnlyOptimizations.js.map +1 -0
  115. package/dist/storage/storageFactory.d.ts +0 -1
  116. package/dist/storage/storageFactory.d.ts.map +1 -1
  117. package/dist/storage/storageFactory.js +227 -0
  118. package/dist/storage/storageFactory.js.map +1 -0
  119. package/dist/types/augmentations.js +16 -0
  120. package/dist/types/augmentations.js.map +1 -0
  121. package/dist/types/brainyDataInterface.js +8 -0
  122. package/dist/types/brainyDataInterface.js.map +1 -0
  123. package/dist/types/distributedTypes.js +6 -0
  124. package/dist/types/distributedTypes.js.map +1 -0
  125. package/dist/types/fileSystemTypes.js +8 -0
  126. package/dist/types/fileSystemTypes.js.map +1 -0
  127. package/dist/types/graphTypes.js +247 -0
  128. package/dist/types/graphTypes.js.map +1 -0
  129. package/dist/types/mcpTypes.js +22 -0
  130. package/dist/types/mcpTypes.js.map +1 -0
  131. package/dist/types/paginationTypes.js +5 -0
  132. package/dist/types/paginationTypes.js.map +1 -0
  133. package/dist/types/pipelineTypes.js +7 -0
  134. package/dist/types/pipelineTypes.js.map +1 -0
  135. package/dist/types/tensorflowTypes.js +6 -0
  136. package/dist/types/tensorflowTypes.js.map +1 -0
  137. package/dist/unified.d.ts.map +1 -0
  138. package/dist/unified.js +52 -128251
  139. package/dist/unified.js.map +1 -0
  140. package/dist/utils/autoConfiguration.js +341 -0
  141. package/dist/utils/autoConfiguration.js.map +1 -0
  142. package/dist/utils/cacheAutoConfig.js +261 -0
  143. package/dist/utils/cacheAutoConfig.js.map +1 -0
  144. package/dist/utils/crypto.js +45 -0
  145. package/dist/utils/crypto.js.map +1 -0
  146. package/dist/utils/distance.js +239 -0
  147. package/dist/utils/distance.js.map +1 -0
  148. package/dist/utils/embedding.d.ts.map +1 -1
  149. package/dist/utils/embedding.js +702 -0
  150. package/dist/utils/embedding.js.map +1 -0
  151. package/dist/utils/environment.js +75 -0
  152. package/dist/utils/environment.js.map +1 -0
  153. package/dist/utils/fieldNameTracking.js +90 -0
  154. package/dist/utils/fieldNameTracking.js.map +1 -0
  155. package/dist/utils/index.d.ts +1 -0
  156. package/dist/utils/index.d.ts.map +1 -1
  157. package/dist/utils/index.js +8 -0
  158. package/dist/utils/index.js.map +1 -0
  159. package/dist/utils/jsonProcessing.js +179 -0
  160. package/dist/utils/jsonProcessing.js.map +1 -0
  161. package/dist/utils/logger.js +129 -0
  162. package/dist/utils/logger.js.map +1 -0
  163. package/dist/utils/operationUtils.js +126 -0
  164. package/dist/utils/operationUtils.js.map +1 -0
  165. package/dist/utils/robustModelLoader.d.ts +14 -0
  166. package/dist/utils/robustModelLoader.d.ts.map +1 -1
  167. package/dist/utils/robustModelLoader.js +537 -0
  168. package/dist/utils/robustModelLoader.js.map +1 -0
  169. package/dist/utils/searchCache.js +248 -0
  170. package/dist/utils/searchCache.js.map +1 -0
  171. package/dist/utils/statistics.js +25 -0
  172. package/dist/utils/statistics.js.map +1 -0
  173. package/dist/utils/statisticsCollector.js +224 -0
  174. package/dist/utils/statisticsCollector.js.map +1 -0
  175. package/dist/utils/textEncoding.js +309 -0
  176. package/dist/utils/textEncoding.js.map +1 -0
  177. package/dist/utils/typeUtils.js +40 -0
  178. package/dist/utils/typeUtils.js.map +1 -0
  179. package/dist/utils/version.d.ts +15 -3
  180. package/dist/utils/version.d.ts.map +1 -1
  181. package/dist/utils/version.js +24 -0
  182. package/dist/utils/version.js.map +1 -0
  183. package/dist/utils/workerUtils.js +458 -0
  184. package/dist/utils/workerUtils.js.map +1 -0
  185. package/dist/worker.d.ts.map +1 -0
  186. package/dist/worker.js +54 -0
  187. package/dist/worker.js.map +1 -0
  188. package/package.json +30 -29
  189. package/dist/brainy.js +0 -90220
  190. package/dist/brainy.min.js +0 -12511
  191. package/dist/patched-platform-node.d.ts +0 -17
  192. package/dist/statistics/statisticsManager.d.ts +0 -121
  193. package/dist/storage/fileSystemStorage.d.ts +0 -73
  194. package/dist/storage/fileSystemStorage.d.ts.map +0 -1
  195. package/dist/storage/opfsStorage.d.ts +0 -236
  196. package/dist/storage/opfsStorage.d.ts.map +0 -1
  197. package/dist/storage/s3CompatibleStorage.d.ts +0 -157
  198. package/dist/storage/s3CompatibleStorage.d.ts.map +0 -1
  199. package/dist/testing/prettyReporter.d.ts +0 -23
  200. package/dist/testing/prettySummaryReporter.d.ts +0 -22
  201. package/dist/unified.min.js +0 -16153
  202. package/dist/utils/environmentDetection.d.ts +0 -47
  203. package/dist/utils/environmentDetection.d.ts.map +0 -1
  204. package/dist/utils/tensorflowUtils.d.ts +0 -17
  205. package/dist/utils/tensorflowUtils.d.ts.map +0 -1
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Basic usage example for the Soulcraft Brainy database
3
+ */
4
+ import { BrainyData } from '../brainyData.js';
5
+ // Example data - word embeddings
6
+ const wordEmbeddings = {
7
+ cat: [0.2, 0.3, 0.4, 0.1],
8
+ dog: [0.3, 0.2, 0.4, 0.2],
9
+ fish: [0.1, 0.1, 0.8, 0.2],
10
+ bird: [0.1, 0.4, 0.2, 0.5],
11
+ tiger: [0.3, 0.4, 0.3, 0.1],
12
+ lion: [0.4, 0.3, 0.2, 0.1],
13
+ shark: [0.2, 0.1, 0.7, 0.3],
14
+ eagle: [0.2, 0.5, 0.1, 0.4]
15
+ };
16
+ // Example metadata
17
+ const metadata = {
18
+ cat: { type: 'mammal', domesticated: true },
19
+ dog: { type: 'mammal', domesticated: true },
20
+ fish: { type: 'fish', domesticated: false },
21
+ bird: { type: 'bird', domesticated: false },
22
+ tiger: { type: 'mammal', domesticated: false },
23
+ lion: { type: 'mammal', domesticated: false },
24
+ shark: { type: 'fish', domesticated: false },
25
+ eagle: { type: 'bird', domesticated: false }
26
+ };
27
+ /**
28
+ * Run the example
29
+ */
30
+ async function runExample() {
31
+ console.log('Initializing vector database...');
32
+ // Create a new vector database
33
+ const db = new BrainyData();
34
+ await db.init();
35
+ console.log('Adding vectors to the database...');
36
+ // Add vectors to the database
37
+ const ids = {};
38
+ for (const [word, vector] of Object.entries(wordEmbeddings)) {
39
+ ids[word] = await db.add(vector, metadata[word]);
40
+ console.log(`Added "${word}" with ID: ${ids[word]}`);
41
+ }
42
+ console.log('\nDatabase size:', db.size());
43
+ // Search for similar vectors
44
+ console.log('\nSearching for vectors similar to "cat"...');
45
+ const catResults = await db.search(wordEmbeddings['cat'], 3);
46
+ console.log('Results:');
47
+ for (const result of catResults) {
48
+ const word = Object.entries(ids).find(([_, id]) => id === result.id)?.[0] || 'unknown';
49
+ console.log(`- ${word} (score: ${result.score.toFixed(4)}, metadata:`, result.metadata, ')');
50
+ }
51
+ // Search for similar vectors
52
+ console.log('\nSearching for vectors similar to "fish"...');
53
+ const fishResults = await db.search(wordEmbeddings['fish'], 3);
54
+ console.log('Results:');
55
+ for (const result of fishResults) {
56
+ const word = Object.entries(ids).find(([_, id]) => id === result.id)?.[0] || 'unknown';
57
+ console.log(`- ${word} (score: ${result.score.toFixed(4)}, metadata:`, result.metadata, ')');
58
+ }
59
+ // Update metadata
60
+ console.log('\nUpdating metadata for "bird"...');
61
+ await db.updateMetadata(ids['bird'], {
62
+ ...metadata['bird'],
63
+ notes: 'Can fly'
64
+ });
65
+ // Get the updated document
66
+ const birdDoc = await db.get(ids['bird']);
67
+ console.log('Updated bird document:', birdDoc);
68
+ // Delete a vector
69
+ console.log('\nDeleting "shark"...');
70
+ await db.delete(ids['shark']);
71
+ console.log('Database size after deletion:', db.size());
72
+ // Search again to verify shark is gone
73
+ console.log('\nSearching for vectors similar to "fish" after deletion...');
74
+ const fishResultsAfterDeletion = await db.search(wordEmbeddings['fish'], 3);
75
+ console.log('Results:');
76
+ for (const result of fishResultsAfterDeletion) {
77
+ const word = Object.entries(ids).find(([_, id]) => id === result.id)?.[0] || 'unknown';
78
+ console.log(`- ${word} (score: ${result.score.toFixed(4)}, metadata:`, result.metadata, ')');
79
+ }
80
+ console.log('\nExample completed successfully!');
81
+ }
82
+ // Check if we're in a browser or Node.js environment
83
+ if (typeof window !== 'undefined') {
84
+ // Browser environment
85
+ document.addEventListener('DOMContentLoaded', () => {
86
+ const button = document.createElement('button');
87
+ button.textContent = 'Run BrainyData Example';
88
+ button.addEventListener('click', async () => {
89
+ const output = document.createElement('pre');
90
+ document.body.appendChild(output);
91
+ // Redirect console.log to the output element
92
+ const originalLog = console.log;
93
+ console.log = (...args) => {
94
+ originalLog(...args);
95
+ output.textContent +=
96
+ args
97
+ .map((arg) => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : arg)
98
+ .join(' ') + '\n';
99
+ };
100
+ try {
101
+ await runExample();
102
+ }
103
+ catch (error) {
104
+ console.error('Error running example:', error);
105
+ }
106
+ // Restore console.log
107
+ console.log = originalLog;
108
+ });
109
+ document.body.appendChild(button);
110
+ });
111
+ }
112
+ else {
113
+ // Node.js environment
114
+ runExample().catch((error) => {
115
+ console.error('Error running example:', error);
116
+ });
117
+ }
118
+ //# sourceMappingURL=basicUsage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicUsage.js","sourceRoot":"","sources":["../../src/examples/basicUsage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,452 @@
1
+ /**
2
+ * Distributed Search System for Large-Scale HNSW Indices
3
+ * Implements parallel search across multiple partitions and instances
4
+ */
5
+ import { executeInThread } from '../utils/workerUtils.js';
6
+ // Search coordination strategies
7
+ export var SearchStrategy;
8
+ (function (SearchStrategy) {
9
+ SearchStrategy["BROADCAST"] = "broadcast";
10
+ SearchStrategy["SELECTIVE"] = "selective";
11
+ SearchStrategy["ADAPTIVE"] = "adaptive";
12
+ SearchStrategy["HIERARCHICAL"] = "hierarchical"; // Multi-level search
13
+ })(SearchStrategy || (SearchStrategy = {}));
14
+ /**
15
+ * Distributed search coordinator for large-scale vector search
16
+ */
17
+ export class DistributedSearchSystem {
18
+ constructor(config = {}) {
19
+ this.searchWorkers = new Map();
20
+ this.searchQueue = [];
21
+ this.activeSearches = new Map();
22
+ this.partitionStats = new Map();
23
+ // Performance monitoring
24
+ this.searchStats = {
25
+ totalSearches: 0,
26
+ averageLatency: 0,
27
+ parallelEfficiency: 0,
28
+ cacheHitRate: 0,
29
+ partitionUtilization: new Map()
30
+ };
31
+ this.config = {
32
+ maxConcurrentSearches: 10,
33
+ searchTimeout: 30000, // 30 seconds
34
+ resultMergeStrategy: 'hybrid',
35
+ adaptivePartitionSelection: true,
36
+ redundantSearches: 0,
37
+ loadBalancing: true,
38
+ ...config
39
+ };
40
+ this.initializeWorkerPool();
41
+ }
42
+ /**
43
+ * Execute distributed search across multiple partitions
44
+ */
45
+ async distributedSearch(partitionedIndex, queryVector, k, strategy = SearchStrategy.ADAPTIVE) {
46
+ const searchId = this.generateSearchId();
47
+ const startTime = Date.now();
48
+ try {
49
+ // Select partitions to search based on strategy
50
+ const partitionsToSearch = await this.selectPartitions(partitionedIndex, queryVector, strategy);
51
+ // Create search tasks
52
+ const searchTasks = this.createSearchTasks(partitionsToSearch, queryVector, k, searchId);
53
+ // Execute searches in parallel
54
+ const searchResults = await this.executeParallelSearches(partitionedIndex, searchTasks);
55
+ // Merge results from all partitions
56
+ const mergedResults = this.mergeSearchResults(searchResults, k);
57
+ // Update statistics
58
+ this.updateSearchStats(searchId, startTime, searchResults);
59
+ return mergedResults;
60
+ }
61
+ catch (error) {
62
+ console.error(`Distributed search ${searchId} failed:`, error);
63
+ throw error;
64
+ }
65
+ }
66
+ /**
67
+ * Select partitions to search based on strategy
68
+ */
69
+ async selectPartitions(partitionedIndex, queryVector, strategy) {
70
+ const stats = partitionedIndex.getPartitionStats();
71
+ const allPartitionIds = stats.partitionDetails.map(p => p.id);
72
+ switch (strategy) {
73
+ case SearchStrategy.BROADCAST:
74
+ return allPartitionIds;
75
+ case SearchStrategy.SELECTIVE:
76
+ return this.selectTopPartitions(allPartitionIds, 3);
77
+ case SearchStrategy.ADAPTIVE:
78
+ return await this.adaptivePartitionSelection(allPartitionIds, queryVector);
79
+ case SearchStrategy.HIERARCHICAL:
80
+ return this.hierarchicalPartitionSelection(allPartitionIds);
81
+ default:
82
+ return allPartitionIds;
83
+ }
84
+ }
85
+ /**
86
+ * Adaptive partition selection based on historical performance
87
+ */
88
+ async adaptivePartitionSelection(partitionIds, queryVector) {
89
+ const candidates = [];
90
+ for (const partitionId of partitionIds) {
91
+ const stats = this.partitionStats.get(partitionId);
92
+ let score = 1.0;
93
+ if (stats) {
94
+ // Score based on performance metrics
95
+ const speedScore = 1000 / Math.max(stats.averageSearchTime, 1);
96
+ const loadScore = Math.max(0, 1 - stats.load);
97
+ const qualityScore = stats.quality;
98
+ const recencyScore = Math.max(0, 1 - (Date.now() - stats.lastUsed) / 3600000);
99
+ score = speedScore * 0.3 + loadScore * 0.25 + qualityScore * 0.3 + recencyScore * 0.15;
100
+ }
101
+ candidates.push({ id: partitionId, score });
102
+ }
103
+ // Sort by score and select top partitions
104
+ candidates.sort((a, b) => b.score - a.score);
105
+ const selectedCount = Math.min(Math.ceil(partitionIds.length * 0.6), 8);
106
+ return candidates.slice(0, selectedCount).map(c => c.id);
107
+ }
108
+ /**
109
+ * Select top-performing partitions
110
+ */
111
+ selectTopPartitions(partitionIds, count) {
112
+ const withStats = partitionIds.map(id => ({
113
+ id,
114
+ stats: this.partitionStats.get(id)
115
+ }));
116
+ // Sort by average search time (faster is better)
117
+ withStats.sort((a, b) => {
118
+ const timeA = a.stats?.averageSearchTime || 1000;
119
+ const timeB = b.stats?.averageSearchTime || 1000;
120
+ return timeA - timeB;
121
+ });
122
+ return withStats.slice(0, count).map(p => p.id);
123
+ }
124
+ /**
125
+ * Hierarchical partition selection for very large datasets
126
+ */
127
+ hierarchicalPartitionSelection(partitionIds) {
128
+ // First level: select representative partitions
129
+ const firstLevel = partitionIds.filter((_, index) => index % 3 === 0);
130
+ // Could implement a two-phase search here:
131
+ // 1. Quick search on representative partitions
132
+ // 2. Detailed search on promising partitions
133
+ return firstLevel;
134
+ }
135
+ /**
136
+ * Create search tasks for parallel execution
137
+ */
138
+ createSearchTasks(partitionIds, queryVector, k, searchId) {
139
+ const tasks = [];
140
+ for (let i = 0; i < partitionIds.length; i++) {
141
+ const partitionId = partitionIds[i];
142
+ const stats = this.partitionStats.get(partitionId);
143
+ // Calculate priority based on partition performance
144
+ const priority = stats ? (1000 - stats.averageSearchTime) : 500;
145
+ tasks.push({
146
+ partitionId,
147
+ queryVector: [...queryVector], // Clone vector
148
+ k: Math.max(k * 2, 20), // Search for more results per partition
149
+ searchId,
150
+ priority
151
+ });
152
+ // Add redundant searches if configured
153
+ if (this.config.redundantSearches > 0 && i < this.config.redundantSearches) {
154
+ tasks.push({
155
+ partitionId,
156
+ queryVector: [...queryVector],
157
+ k: Math.max(k * 2, 20),
158
+ searchId: `${searchId}_redundant_${i}`,
159
+ priority: priority - 100 // Lower priority for redundant searches
160
+ });
161
+ }
162
+ }
163
+ // Sort tasks by priority
164
+ tasks.sort((a, b) => b.priority - a.priority);
165
+ return tasks;
166
+ }
167
+ /**
168
+ * Execute searches in parallel across selected partitions
169
+ */
170
+ async executeParallelSearches(partitionedIndex, searchTasks) {
171
+ const results = [];
172
+ const semaphore = new Semaphore(this.config.maxConcurrentSearches);
173
+ // Execute tasks with controlled concurrency
174
+ const taskPromises = searchTasks.map(async (task) => {
175
+ await semaphore.acquire();
176
+ try {
177
+ const startTime = Date.now();
178
+ // Execute search with timeout
179
+ const searchPromise = this.executePartitionSearch(partitionedIndex, task);
180
+ const timeoutPromise = new Promise((_, reject) => {
181
+ setTimeout(() => reject(new Error('Search timeout')), this.config.searchTimeout);
182
+ });
183
+ const result = await Promise.race([searchPromise, timeoutPromise]);
184
+ result.searchTime = Date.now() - startTime;
185
+ return result;
186
+ }
187
+ catch (error) {
188
+ return {
189
+ partitionId: task.partitionId,
190
+ results: [],
191
+ searchTime: this.config.searchTimeout,
192
+ nodesVisited: 0,
193
+ error: error
194
+ };
195
+ }
196
+ finally {
197
+ semaphore.release();
198
+ }
199
+ });
200
+ // Wait for all searches to complete
201
+ const taskResults = await Promise.allSettled(taskPromises);
202
+ for (const result of taskResults) {
203
+ if (result.status === 'fulfilled') {
204
+ results.push(result.value);
205
+ }
206
+ }
207
+ return results;
208
+ }
209
+ /**
210
+ * Execute search on a single partition
211
+ */
212
+ async executePartitionSearch(partitionedIndex, task) {
213
+ try {
214
+ // Use thread pool for compute-intensive operations
215
+ if (this.shouldUseWorkerThread(task)) {
216
+ return await this.executeInWorkerThread(partitionedIndex, task);
217
+ }
218
+ // Execute search directly
219
+ const results = await partitionedIndex.search(task.queryVector, task.k, { partitionIds: [task.partitionId] });
220
+ return {
221
+ partitionId: task.partitionId,
222
+ results,
223
+ searchTime: 0, // Will be set by caller
224
+ nodesVisited: results.length // Approximation
225
+ };
226
+ }
227
+ catch (error) {
228
+ throw new Error(`Partition search failed: ${error}`);
229
+ }
230
+ }
231
+ /**
232
+ * Determine if search should use worker thread
233
+ */
234
+ shouldUseWorkerThread(task) {
235
+ // Use worker threads for high-dimensional vectors or large k
236
+ return task.queryVector.length > 512 || task.k > 100;
237
+ }
238
+ /**
239
+ * Execute search in worker thread
240
+ */
241
+ async executeInWorkerThread(partitionedIndex, task) {
242
+ const worker = this.getAvailableWorker();
243
+ if (!worker) {
244
+ // No available workers, execute synchronously
245
+ return this.executePartitionSearch(partitionedIndex, task);
246
+ }
247
+ try {
248
+ worker.busy = true;
249
+ const startTime = Date.now();
250
+ // Execute in thread (simplified - would need proper worker setup)
251
+ const searchFunction = `
252
+ return partitionedIndex.search(
253
+ task.queryVector,
254
+ task.k,
255
+ { partitionIds: [task.partitionId] }
256
+ )
257
+ `;
258
+ const results = await executeInThread(searchFunction, {
259
+ queryVector: task.queryVector,
260
+ k: task.k,
261
+ partitionId: task.partitionId
262
+ });
263
+ const searchTime = Date.now() - startTime;
264
+ worker.averageTaskTime = (worker.averageTaskTime + searchTime) / 2;
265
+ worker.tasksCompleted++;
266
+ return {
267
+ partitionId: task.partitionId,
268
+ results: results || [],
269
+ searchTime,
270
+ nodesVisited: results ? results.length : 0
271
+ };
272
+ }
273
+ finally {
274
+ worker.busy = false;
275
+ worker.lastTaskTime = Date.now();
276
+ }
277
+ }
278
+ /**
279
+ * Get available worker from pool
280
+ */
281
+ getAvailableWorker() {
282
+ for (const worker of this.searchWorkers.values()) {
283
+ if (!worker.busy) {
284
+ return worker;
285
+ }
286
+ }
287
+ return null;
288
+ }
289
+ /**
290
+ * Merge search results from multiple partitions
291
+ */
292
+ mergeSearchResults(partitionResults, k) {
293
+ const allResults = [];
294
+ const seenIds = new Set();
295
+ // Collect all unique results
296
+ for (const partitionResult of partitionResults) {
297
+ if (partitionResult.error) {
298
+ console.warn(`Partition ${partitionResult.partitionId} failed:`, partitionResult.error);
299
+ continue;
300
+ }
301
+ for (const [id, distance] of partitionResult.results) {
302
+ if (!seenIds.has(id)) {
303
+ allResults.push([id, distance]);
304
+ seenIds.add(id);
305
+ }
306
+ }
307
+ }
308
+ // Sort and return top k results
309
+ switch (this.config.resultMergeStrategy) {
310
+ case 'distance':
311
+ allResults.sort((a, b) => a[1] - b[1]);
312
+ break;
313
+ case 'score':
314
+ // Convert distance to score (1 / (1 + distance))
315
+ allResults.sort((a, b) => {
316
+ const scoreA = 1 / (1 + a[1]);
317
+ const scoreB = 1 / (1 + b[1]);
318
+ return scoreB - scoreA;
319
+ });
320
+ break;
321
+ case 'hybrid':
322
+ // Weighted combination of distance and partition quality
323
+ allResults.sort((a, b) => {
324
+ const qualityWeightA = this.getPartitionQuality(a[0]);
325
+ const qualityWeightB = this.getPartitionQuality(b[0]);
326
+ const adjustedDistanceA = a[1] / (qualityWeightA + 0.1);
327
+ const adjustedDistanceB = b[1] / (qualityWeightB + 0.1);
328
+ return adjustedDistanceA - adjustedDistanceB;
329
+ });
330
+ break;
331
+ }
332
+ return allResults.slice(0, k);
333
+ }
334
+ /**
335
+ * Get partition quality score
336
+ */
337
+ getPartitionQuality(nodeId) {
338
+ // This would require knowing which partition a node came from
339
+ // For now, return a default quality score
340
+ return 1.0;
341
+ }
342
+ /**
343
+ * Update search statistics
344
+ */
345
+ updateSearchStats(searchId, startTime, results) {
346
+ const totalTime = Date.now() - startTime;
347
+ const successfulSearches = results.filter(r => !r.error);
348
+ // Update global stats
349
+ this.searchStats.totalSearches++;
350
+ this.searchStats.averageLatency =
351
+ (this.searchStats.averageLatency + totalTime) / 2;
352
+ // Calculate parallel efficiency
353
+ const totalPartitionTime = results.reduce((sum, r) => sum + r.searchTime, 0);
354
+ this.searchStats.parallelEfficiency =
355
+ totalPartitionTime > 0 ? totalTime / totalPartitionTime : 0;
356
+ // Update partition statistics
357
+ for (const result of successfulSearches) {
358
+ let stats = this.partitionStats.get(result.partitionId);
359
+ if (!stats) {
360
+ stats = {
361
+ averageSearchTime: result.searchTime,
362
+ load: 0,
363
+ quality: 1.0,
364
+ lastUsed: Date.now()
365
+ };
366
+ }
367
+ else {
368
+ stats.averageSearchTime = (stats.averageSearchTime + result.searchTime) / 2;
369
+ stats.lastUsed = Date.now();
370
+ }
371
+ this.partitionStats.set(result.partitionId, stats);
372
+ this.searchStats.partitionUtilization.set(result.partitionId, (this.searchStats.partitionUtilization.get(result.partitionId) || 0) + 1);
373
+ }
374
+ }
375
+ /**
376
+ * Initialize worker thread pool
377
+ */
378
+ initializeWorkerPool() {
379
+ const workerCount = Math.min(navigator.hardwareConcurrency || 4, 8);
380
+ for (let i = 0; i < workerCount; i++) {
381
+ const worker = {
382
+ id: `worker_${i}`,
383
+ busy: false,
384
+ tasksCompleted: 0,
385
+ averageTaskTime: 0,
386
+ lastTaskTime: 0
387
+ };
388
+ this.searchWorkers.set(worker.id, worker);
389
+ }
390
+ console.log(`Initialized worker pool with ${workerCount} workers`);
391
+ }
392
+ /**
393
+ * Generate unique search ID
394
+ */
395
+ generateSearchId() {
396
+ return `search_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
397
+ }
398
+ /**
399
+ * Get search performance statistics
400
+ */
401
+ getSearchStats() {
402
+ return {
403
+ ...this.searchStats,
404
+ workerStats: Array.from(this.searchWorkers.values()),
405
+ partitionStats: Array.from(this.partitionStats.entries()).map(([id, stats]) => ({
406
+ id,
407
+ stats
408
+ }))
409
+ };
410
+ }
411
+ /**
412
+ * Cleanup resources
413
+ */
414
+ cleanup() {
415
+ // Clear active searches
416
+ this.activeSearches.clear();
417
+ // Reset worker states
418
+ for (const worker of this.searchWorkers.values()) {
419
+ worker.busy = false;
420
+ }
421
+ // Clear statistics
422
+ this.partitionStats.clear();
423
+ }
424
+ }
425
+ /**
426
+ * Simple semaphore for concurrency control
427
+ */
428
+ class Semaphore {
429
+ constructor(permits) {
430
+ this.waiting = [];
431
+ this.permits = permits;
432
+ }
433
+ async acquire() {
434
+ if (this.permits > 0) {
435
+ this.permits--;
436
+ return Promise.resolve();
437
+ }
438
+ return new Promise((resolve) => {
439
+ this.waiting.push(resolve);
440
+ });
441
+ }
442
+ release() {
443
+ if (this.waiting.length > 0) {
444
+ const resolve = this.waiting.shift();
445
+ resolve();
446
+ }
447
+ else {
448
+ this.permits++;
449
+ }
450
+ }
451
+ }
452
+ //# sourceMappingURL=distributedSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distributedSearch.js","sourceRoot":"","sources":["../../src/hnsw/distributedSearch.ts"],"names":[],"mappings":"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"}