@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,307 @@
1
+ /**
2
+ * Domain Detector
3
+ * Automatically detects and manages data domains for logical separation
4
+ */
5
+ export class DomainDetector {
6
+ constructor() {
7
+ this.domainPatterns = [
8
+ {
9
+ domain: 'medical',
10
+ patterns: {
11
+ fields: ['symptoms', 'diagnosis', 'treatment', 'medication', 'patient'],
12
+ keywords: ['medical', 'health', 'disease', 'symptom', 'treatment', 'doctor', 'patient']
13
+ },
14
+ priority: 1
15
+ },
16
+ {
17
+ domain: 'legal',
18
+ patterns: {
19
+ fields: ['contract', 'clause', 'litigation', 'statute', 'jurisdiction'],
20
+ keywords: ['legal', 'law', 'contract', 'court', 'attorney', 'litigation', 'statute']
21
+ },
22
+ priority: 1
23
+ },
24
+ {
25
+ domain: 'product',
26
+ patterns: {
27
+ fields: ['price', 'sku', 'inventory', 'category', 'brand'],
28
+ keywords: ['product', 'price', 'sale', 'inventory', 'catalog', 'item', 'sku']
29
+ },
30
+ priority: 1
31
+ },
32
+ {
33
+ domain: 'customer',
34
+ patterns: {
35
+ fields: ['customerId', 'email', 'phone', 'address', 'orders'],
36
+ keywords: ['customer', 'client', 'user', 'account', 'profile', 'contact']
37
+ },
38
+ priority: 1
39
+ },
40
+ {
41
+ domain: 'financial',
42
+ patterns: {
43
+ fields: ['amount', 'currency', 'transaction', 'balance', 'account'],
44
+ keywords: ['financial', 'money', 'payment', 'transaction', 'bank', 'credit', 'debit']
45
+ },
46
+ priority: 1
47
+ },
48
+ {
49
+ domain: 'technical',
50
+ patterns: {
51
+ fields: ['code', 'function', 'error', 'stack', 'api'],
52
+ keywords: ['code', 'software', 'api', 'error', 'debug', 'function', 'class', 'method']
53
+ },
54
+ priority: 2
55
+ }
56
+ ];
57
+ this.customPatterns = [];
58
+ this.domainStats = new Map();
59
+ }
60
+ /**
61
+ * Detect domain from data object
62
+ * @param data - The data object to analyze
63
+ * @returns The detected domain and metadata
64
+ */
65
+ detectDomain(data) {
66
+ if (!data || typeof data !== 'object') {
67
+ return { domain: 'general' };
68
+ }
69
+ // Check for explicit domain field
70
+ if (data.domain && typeof data.domain === 'string') {
71
+ this.updateStats(data.domain);
72
+ return {
73
+ domain: data.domain,
74
+ domainMetadata: this.extractDomainMetadata(data, data.domain)
75
+ };
76
+ }
77
+ // Score each domain pattern
78
+ const scores = new Map();
79
+ // Check custom patterns first (higher priority)
80
+ for (const pattern of this.customPatterns) {
81
+ const score = this.scorePattern(data, pattern);
82
+ if (score > 0) {
83
+ scores.set(pattern.domain, score * (pattern.priority || 1));
84
+ }
85
+ }
86
+ // Check default patterns
87
+ for (const pattern of this.domainPatterns) {
88
+ const score = this.scorePattern(data, pattern);
89
+ if (score > 0) {
90
+ const currentScore = scores.get(pattern.domain) || 0;
91
+ scores.set(pattern.domain, currentScore + score * (pattern.priority || 1));
92
+ }
93
+ }
94
+ // Find highest scoring domain
95
+ let bestDomain = 'general';
96
+ let bestScore = 0;
97
+ for (const [domain, score] of scores.entries()) {
98
+ if (score > bestScore) {
99
+ bestDomain = domain;
100
+ bestScore = score;
101
+ }
102
+ }
103
+ this.updateStats(bestDomain);
104
+ return {
105
+ domain: bestDomain,
106
+ domainMetadata: this.extractDomainMetadata(data, bestDomain)
107
+ };
108
+ }
109
+ /**
110
+ * Score a data object against a domain pattern
111
+ */
112
+ scorePattern(data, pattern) {
113
+ let score = 0;
114
+ // Check field matches
115
+ if (pattern.patterns.fields) {
116
+ const dataKeys = Object.keys(data);
117
+ for (const field of pattern.patterns.fields) {
118
+ if (dataKeys.some(key => key.toLowerCase().includes(field.toLowerCase()))) {
119
+ score += 2; // Field match is strong signal
120
+ }
121
+ }
122
+ }
123
+ // Check keyword matches in values
124
+ if (pattern.patterns.keywords) {
125
+ const dataStr = JSON.stringify(data).toLowerCase();
126
+ for (const keyword of pattern.patterns.keywords) {
127
+ if (dataStr.includes(keyword.toLowerCase())) {
128
+ score += 1;
129
+ }
130
+ }
131
+ }
132
+ // Check regex patterns
133
+ if (pattern.patterns.regex) {
134
+ const dataStr = JSON.stringify(data);
135
+ if (pattern.patterns.regex.test(dataStr)) {
136
+ score += 3; // Regex match is very specific
137
+ }
138
+ }
139
+ return score;
140
+ }
141
+ /**
142
+ * Extract domain-specific metadata
143
+ */
144
+ extractDomainMetadata(data, domain) {
145
+ const metadata = {};
146
+ switch (domain) {
147
+ case 'medical':
148
+ if (data.patientId)
149
+ metadata.patientId = data.patientId;
150
+ if (data.condition)
151
+ metadata.condition = data.condition;
152
+ if (data.severity)
153
+ metadata.severity = data.severity;
154
+ break;
155
+ case 'legal':
156
+ if (data.caseId)
157
+ metadata.caseId = data.caseId;
158
+ if (data.jurisdiction)
159
+ metadata.jurisdiction = data.jurisdiction;
160
+ if (data.documentType)
161
+ metadata.documentType = data.documentType;
162
+ break;
163
+ case 'product':
164
+ if (data.sku)
165
+ metadata.sku = data.sku;
166
+ if (data.category)
167
+ metadata.category = data.category;
168
+ if (data.brand)
169
+ metadata.brand = data.brand;
170
+ if (data.price)
171
+ metadata.priceRange = this.getPriceRange(data.price);
172
+ break;
173
+ case 'customer':
174
+ if (data.customerId)
175
+ metadata.customerId = data.customerId;
176
+ if (data.segment)
177
+ metadata.segment = data.segment;
178
+ if (data.lifetime_value)
179
+ metadata.valueCategory = this.getValueCategory(data.lifetime_value);
180
+ break;
181
+ case 'financial':
182
+ if (data.accountId)
183
+ metadata.accountId = data.accountId;
184
+ if (data.transactionType)
185
+ metadata.transactionType = data.transactionType;
186
+ if (data.amount)
187
+ metadata.amountRange = this.getAmountRange(data.amount);
188
+ break;
189
+ case 'technical':
190
+ if (data.service)
191
+ metadata.service = data.service;
192
+ if (data.environment)
193
+ metadata.environment = data.environment;
194
+ if (data.severity)
195
+ metadata.severity = data.severity;
196
+ break;
197
+ }
198
+ // Add detection confidence
199
+ metadata.detectionConfidence = this.calculateConfidence(data, domain);
200
+ return metadata;
201
+ }
202
+ /**
203
+ * Calculate detection confidence
204
+ */
205
+ calculateConfidence(data, domain) {
206
+ // If domain was explicitly specified
207
+ if (data.domain === domain)
208
+ return 'high';
209
+ // Check how many patterns matched
210
+ const pattern = [...this.customPatterns, ...this.domainPatterns]
211
+ .find(p => p.domain === domain);
212
+ if (!pattern)
213
+ return 'low';
214
+ const score = this.scorePattern(data, pattern);
215
+ if (score >= 5)
216
+ return 'high';
217
+ if (score >= 2)
218
+ return 'medium';
219
+ return 'low';
220
+ }
221
+ /**
222
+ * Categorize price ranges
223
+ */
224
+ getPriceRange(price) {
225
+ if (price < 10)
226
+ return 'low';
227
+ if (price < 100)
228
+ return 'medium';
229
+ if (price < 1000)
230
+ return 'high';
231
+ return 'premium';
232
+ }
233
+ /**
234
+ * Categorize customer value
235
+ */
236
+ getValueCategory(value) {
237
+ if (value < 100)
238
+ return 'low';
239
+ if (value < 1000)
240
+ return 'medium';
241
+ if (value < 10000)
242
+ return 'high';
243
+ return 'vip';
244
+ }
245
+ /**
246
+ * Categorize amount ranges
247
+ */
248
+ getAmountRange(amount) {
249
+ if (amount < 100)
250
+ return 'micro';
251
+ if (amount < 1000)
252
+ return 'small';
253
+ if (amount < 10000)
254
+ return 'medium';
255
+ if (amount < 100000)
256
+ return 'large';
257
+ return 'enterprise';
258
+ }
259
+ /**
260
+ * Add custom domain pattern
261
+ * @param pattern - Custom domain pattern to add
262
+ */
263
+ addCustomPattern(pattern) {
264
+ // Remove existing pattern for same domain if exists
265
+ this.customPatterns = this.customPatterns.filter(p => p.domain !== pattern.domain);
266
+ this.customPatterns.push(pattern);
267
+ }
268
+ /**
269
+ * Remove custom domain pattern
270
+ * @param domain - Domain to remove pattern for
271
+ */
272
+ removeCustomPattern(domain) {
273
+ this.customPatterns = this.customPatterns.filter(p => p.domain !== domain);
274
+ }
275
+ /**
276
+ * Update domain statistics
277
+ */
278
+ updateStats(domain) {
279
+ const count = this.domainStats.get(domain) || 0;
280
+ this.domainStats.set(domain, count + 1);
281
+ }
282
+ /**
283
+ * Get domain statistics
284
+ * @returns Map of domain to count
285
+ */
286
+ getDomainStats() {
287
+ return new Map(this.domainStats);
288
+ }
289
+ /**
290
+ * Clear domain statistics
291
+ */
292
+ clearStats() {
293
+ this.domainStats.clear();
294
+ }
295
+ /**
296
+ * Get all configured domains
297
+ * @returns Array of domain names
298
+ */
299
+ getConfiguredDomains() {
300
+ const domains = new Set();
301
+ for (const pattern of [...this.domainPatterns, ...this.customPatterns]) {
302
+ domains.add(pattern.domain);
303
+ }
304
+ return Array.from(domains).sort();
305
+ }
306
+ }
307
+ //# sourceMappingURL=domainDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainDetector.js","sourceRoot":"","sources":["../../src/distributed/domainDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashPartitioner.d.ts","sourceRoot":"","sources":["../../src/distributed/hashPartitioner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAE3D,qBAAa,eAAe;IAC1B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,eAAe,CAAsB;gBAEjC,MAAM,EAAE,YAAY;IAIhC;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMtC;;;;;OAKG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAKjE;;;OAGG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAQ5B;;;;OAIG;IACH,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAQhD;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAKlB;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAalE;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;IACtD,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,UAAU,CAAQ;gBAEd,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM;IAMpD;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA2BpC;;;;OAIG;IACH,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IASpD;;;OAGG;IACH,sBAAsB,IAAI,MAAM,EAAE;IAKlC;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;CAG9C"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Hash-based Partitioner
3
+ * Provides deterministic partitioning for distributed writes
4
+ */
5
+ import { getPartitionHash } from '../utils/crypto.js';
6
+ export class HashPartitioner {
7
+ constructor(config) {
8
+ this.partitionPrefix = 'vectors/p';
9
+ this.partitionCount = config.settings.partitionCount || 100;
10
+ }
11
+ /**
12
+ * Get partition for a given vector ID using deterministic hashing
13
+ * @param vectorId - The unique identifier of the vector
14
+ * @returns The partition path
15
+ */
16
+ getPartition(vectorId) {
17
+ const hash = this.hashString(vectorId);
18
+ const partitionIndex = hash % this.partitionCount;
19
+ return `${this.partitionPrefix}${partitionIndex.toString().padStart(3, '0')}`;
20
+ }
21
+ /**
22
+ * Get partition with domain metadata (domain stored as metadata, not in path)
23
+ * @param vectorId - The unique identifier of the vector
24
+ * @param domain - The domain identifier (for metadata only)
25
+ * @returns The partition path
26
+ */
27
+ getPartitionWithDomain(vectorId, domain) {
28
+ // Domain doesn't affect partitioning - it's just metadata
29
+ return this.getPartition(vectorId);
30
+ }
31
+ /**
32
+ * Get all partition paths
33
+ * @returns Array of all partition paths
34
+ */
35
+ getAllPartitions() {
36
+ const partitions = [];
37
+ for (let i = 0; i < this.partitionCount; i++) {
38
+ partitions.push(`${this.partitionPrefix}${i.toString().padStart(3, '0')}`);
39
+ }
40
+ return partitions;
41
+ }
42
+ /**
43
+ * Get partition index from partition path
44
+ * @param partitionPath - The partition path
45
+ * @returns The partition index
46
+ */
47
+ getPartitionIndex(partitionPath) {
48
+ const match = partitionPath.match(/p(\d+)$/);
49
+ if (match) {
50
+ return parseInt(match[1], 10);
51
+ }
52
+ throw new Error(`Invalid partition path: ${partitionPath}`);
53
+ }
54
+ /**
55
+ * Hash a string to a number for consistent partitioning
56
+ * @param str - The string to hash
57
+ * @returns A positive integer hash
58
+ */
59
+ hashString(str) {
60
+ // Use our cross-platform hash function
61
+ return getPartitionHash(str);
62
+ }
63
+ /**
64
+ * Get partitions for batch operations
65
+ * Groups vector IDs by their target partition
66
+ * @param vectorIds - Array of vector IDs
67
+ * @returns Map of partition to vector IDs
68
+ */
69
+ getPartitionsForBatch(vectorIds) {
70
+ const partitionMap = new Map();
71
+ for (const id of vectorIds) {
72
+ const partition = this.getPartition(id);
73
+ if (!partitionMap.has(partition)) {
74
+ partitionMap.set(partition, []);
75
+ }
76
+ partitionMap.get(partition).push(id);
77
+ }
78
+ return partitionMap;
79
+ }
80
+ }
81
+ /**
82
+ * Affinity-based Partitioner
83
+ * Extends HashPartitioner to prefer certain partitions for a writer
84
+ * while maintaining correctness
85
+ */
86
+ export class AffinityPartitioner extends HashPartitioner {
87
+ constructor(config, instanceId) {
88
+ super(config);
89
+ this.instanceId = instanceId;
90
+ this.preferredPartitions = this.calculatePreferredPartitions(config);
91
+ }
92
+ /**
93
+ * Calculate preferred partitions for this instance
94
+ */
95
+ calculatePreferredPartitions(config) {
96
+ const partitionCount = config.settings.partitionCount || 100;
97
+ const writers = Object.entries(config.instances)
98
+ .filter(([_, inst]) => inst.role === 'writer')
99
+ .map(([id, _]) => id)
100
+ .sort(); // Ensure consistent ordering
101
+ const writerIndex = writers.indexOf(this.instanceId);
102
+ if (writerIndex === -1) {
103
+ // Not a writer or not found, no preferences
104
+ return new Set();
105
+ }
106
+ const writerCount = writers.length;
107
+ const partitionsPerWriter = Math.ceil(partitionCount / writerCount);
108
+ const preferred = new Set();
109
+ const start = writerIndex * partitionsPerWriter;
110
+ const end = Math.min(start + partitionsPerWriter, partitionCount);
111
+ for (let i = start; i < end; i++) {
112
+ preferred.add(i);
113
+ }
114
+ return preferred;
115
+ }
116
+ /**
117
+ * Check if a partition is preferred for this instance
118
+ * @param partitionPath - The partition path
119
+ * @returns Whether this partition is preferred
120
+ */
121
+ isPreferredPartition(partitionPath) {
122
+ try {
123
+ const index = this.getPartitionIndex(partitionPath);
124
+ return this.preferredPartitions.has(index);
125
+ }
126
+ catch {
127
+ return false;
128
+ }
129
+ }
130
+ /**
131
+ * Get all preferred partitions for this instance
132
+ * @returns Array of preferred partition paths
133
+ */
134
+ getPreferredPartitions() {
135
+ return Array.from(this.preferredPartitions)
136
+ .map(index => `vectors/p${index.toString().padStart(3, '0')}`);
137
+ }
138
+ /**
139
+ * Update preferred partitions based on new config
140
+ * @param config - The updated shared configuration
141
+ */
142
+ updatePreferences(config) {
143
+ this.preferredPartitions = this.calculatePreferredPartitions(config);
144
+ }
145
+ }
146
+ //# sourceMappingURL=hashPartitioner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashPartitioner.js","sourceRoot":"","sources":["../../src/distributed/hashPartitioner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthMonitor.d.ts","sourceRoot":"","sources":["../../src/distributed/healthMonitor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAA;AAG7D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAA;IAC5C,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,CAAA;IACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,YAAY,CAAY;IAChC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IACzC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,UAAU,CAAgB;gBAEtB,aAAa,EAAE,wBAAwB;IAKnD;;OAEG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;YACW,YAAY;IAe1B;;OAEG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAM/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,IAAI;IAU5D;;;OAGG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAQrC;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAItC;;;OAGG;IACH,eAAe,IAAI,YAAY;IAoD/B;;;OAGG;IACH,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAuB5C;;OAEG;IACH,YAAY,IAAI,IAAI;CASrB"}