@soulcraft/brainy 0.24.0 → 0.25.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 (93) hide show
  1. package/README.md +22 -16
  2. package/dist/brainy.js +4574 -4691
  3. package/dist/brainy.min.js +750 -750
  4. package/dist/brainyData.d.ts +83 -0
  5. package/dist/coreTypes.d.ts +11 -0
  6. package/dist/storage/adapters/fileSystemStorage.d.ts +78 -29
  7. package/dist/storage/adapters/fileSystemStorage.d.ts.map +1 -1
  8. package/dist/storage/adapters/memoryStorage.d.ts.map +1 -1
  9. package/dist/storage/fileSystemStorage.d.ts +2 -15
  10. package/dist/storage/fileSystemStorage.d.ts.map +1 -1
  11. package/dist/storage/opfsStorage.d.ts +3 -66
  12. package/dist/storage/opfsStorage.d.ts.map +1 -1
  13. package/dist/storage/s3CompatibleStorage.d.ts +2 -14
  14. package/dist/storage/s3CompatibleStorage.d.ts.map +1 -1
  15. package/dist/testing/prettyReporter.d.ts +23 -0
  16. package/dist/testing/prettySummaryReporter.d.ts +22 -0
  17. package/dist/types/tensorflowTypes.d.ts +0 -8
  18. package/dist/types/tensorflowTypes.d.ts.map +1 -1
  19. package/dist/unified.d.ts +4 -0
  20. package/dist/unified.js +834 -280
  21. package/dist/unified.min.js +528 -528
  22. package/dist/utils/embedding.d.ts +7 -0
  23. package/dist/utils/embedding.d.ts.map +1 -1
  24. package/dist/utils/logger.d.ts +99 -0
  25. package/dist/utils/logger.d.ts.map +1 -0
  26. package/dist/utils/textEncoding.d.ts +0 -7
  27. package/dist/utils/textEncoding.d.ts.map +1 -1
  28. package/dist/utils/version.d.ts +1 -1
  29. package/package.json +14 -3
  30. package/dist/augmentations/conduitAugmentations.js +0 -1158
  31. package/dist/augmentations/conduitAugmentations.js.map +0 -1
  32. package/dist/augmentations/memoryAugmentations.js +0 -255
  33. package/dist/augmentations/memoryAugmentations.js.map +0 -1
  34. package/dist/augmentations/serverSearchAugmentations.js +0 -531
  35. package/dist/augmentations/serverSearchAugmentations.js.map +0 -1
  36. package/dist/examples/basicUsage.js +0 -128
  37. package/dist/examples/basicUsage.js.map +0 -1
  38. package/dist/hnsw/hnswIndex.js +0 -550
  39. package/dist/hnsw/hnswIndex.js.map +0 -1
  40. package/dist/hnsw/hnswIndexOptimized.js +0 -441
  41. package/dist/hnsw/hnswIndexOptimized.js.map +0 -1
  42. package/dist/mcp/brainyMCPAdapter.js +0 -142
  43. package/dist/mcp/brainyMCPAdapter.js.map +0 -1
  44. package/dist/mcp/brainyMCPService.js +0 -248
  45. package/dist/mcp/brainyMCPService.js.map +0 -1
  46. package/dist/mcp/index.js +0 -17
  47. package/dist/mcp/index.js.map +0 -1
  48. package/dist/mcp/mcpAugmentationToolset.js +0 -180
  49. package/dist/mcp/mcpAugmentationToolset.js.map +0 -1
  50. package/dist/storage/adapters/baseStorageAdapter.js +0 -233
  51. package/dist/storage/adapters/baseStorageAdapter.js.map +0 -1
  52. package/dist/storage/adapters/fileSystemStorage.js +0 -568
  53. package/dist/storage/adapters/fileSystemStorage.js.map +0 -1
  54. package/dist/storage/adapters/memoryStorage.js +0 -300
  55. package/dist/storage/adapters/memoryStorage.js.map +0 -1
  56. package/dist/storage/adapters/opfsStorage.js +0 -778
  57. package/dist/storage/adapters/opfsStorage.js.map +0 -1
  58. package/dist/storage/adapters/s3CompatibleStorage.js +0 -1021
  59. package/dist/storage/adapters/s3CompatibleStorage.js.map +0 -1
  60. package/dist/storage/baseStorage.js +0 -126
  61. package/dist/storage/baseStorage.js.map +0 -1
  62. package/dist/storage/storageFactory.js +0 -183
  63. package/dist/storage/storageFactory.js.map +0 -1
  64. package/dist/types/augmentations.js +0 -16
  65. package/dist/types/augmentations.js.map +0 -1
  66. package/dist/types/brainyDataInterface.js +0 -8
  67. package/dist/types/brainyDataInterface.js.map +0 -1
  68. package/dist/types/fileSystemTypes.js +0 -8
  69. package/dist/types/fileSystemTypes.js.map +0 -1
  70. package/dist/types/graphTypes.js +0 -36
  71. package/dist/types/graphTypes.js.map +0 -1
  72. package/dist/types/mcpTypes.js +0 -22
  73. package/dist/types/mcpTypes.js.map +0 -1
  74. package/dist/types/pipelineTypes.js +0 -7
  75. package/dist/types/pipelineTypes.js.map +0 -1
  76. package/dist/types/tensorflowTypes.js +0 -6
  77. package/dist/types/tensorflowTypes.js.map +0 -1
  78. package/dist/utils/distance.js +0 -239
  79. package/dist/utils/distance.js.map +0 -1
  80. package/dist/utils/embedding.js +0 -622
  81. package/dist/utils/embedding.js.map +0 -1
  82. package/dist/utils/environment.js +0 -75
  83. package/dist/utils/environment.js.map +0 -1
  84. package/dist/utils/index.js +0 -5
  85. package/dist/utils/index.js.map +0 -1
  86. package/dist/utils/statistics.js +0 -25
  87. package/dist/utils/statistics.js.map +0 -1
  88. package/dist/utils/tensorflowUtils.js +0 -25
  89. package/dist/utils/tensorflowUtils.js.map +0 -1
  90. package/dist/utils/textEncoding.js +0 -281
  91. package/dist/utils/textEncoding.js.map +0 -1
  92. package/dist/utils/workerUtils.js +0 -458
  93. package/dist/utils/workerUtils.js.map +0 -1
@@ -1,239 +0,0 @@
1
- /**
2
- * Distance functions for vector similarity calculations
3
- * Optimized for Node.js 23.11+ using enhanced array methods
4
- * GPU-accelerated versions available for high-performance computing
5
- */
6
- /**
7
- * Calculates the Euclidean distance between two vectors
8
- * Lower values indicate higher similarity
9
- * Optimized using array methods for Node.js 23.11+
10
- */
11
- export const euclideanDistance = (a, b) => {
12
- if (a.length !== b.length) {
13
- throw new Error('Vectors must have the same dimensions');
14
- }
15
- // Use array.reduce for better performance in Node.js 23.11+
16
- const sum = a.reduce((acc, val, i) => {
17
- const diff = val - b[i];
18
- return acc + diff * diff;
19
- }, 0);
20
- return Math.sqrt(sum);
21
- };
22
- /**
23
- * Calculates the cosine distance between two vectors
24
- * Lower values indicate higher similarity
25
- * Range: 0 (identical) to 2 (opposite)
26
- * Optimized using array methods for Node.js 23.11+
27
- */
28
- export const cosineDistance = (a, b) => {
29
- if (a.length !== b.length) {
30
- throw new Error('Vectors must have the same dimensions');
31
- }
32
- // Use array.reduce to calculate all values in a single pass
33
- const { dotProduct, normA, normB } = a.reduce((acc, val, i) => {
34
- return {
35
- dotProduct: acc.dotProduct + val * b[i],
36
- normA: acc.normA + val * val,
37
- normB: acc.normB + b[i] * b[i]
38
- };
39
- }, { dotProduct: 0, normA: 0, normB: 0 });
40
- if (normA === 0 || normB === 0) {
41
- return 2; // Maximum distance for zero vectors
42
- }
43
- const similarity = dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
44
- // Convert cosine similarity (-1 to 1) to distance (0 to 2)
45
- return 1 - similarity;
46
- };
47
- /**
48
- * Calculates the Manhattan (L1) distance between two vectors
49
- * Lower values indicate higher similarity
50
- * Optimized using array methods for Node.js 23.11+
51
- */
52
- export const manhattanDistance = (a, b) => {
53
- if (a.length !== b.length) {
54
- throw new Error('Vectors must have the same dimensions');
55
- }
56
- // Use array.reduce for better performance in Node.js 23.11+
57
- return a.reduce((sum, val, i) => sum + Math.abs(val - b[i]), 0);
58
- };
59
- /**
60
- * Calculates the dot product similarity between two vectors
61
- * Higher values indicate higher similarity
62
- * Converted to a distance metric (lower is better)
63
- * Optimized using array methods for Node.js 23.11+
64
- */
65
- export const dotProductDistance = (a, b) => {
66
- if (a.length !== b.length) {
67
- throw new Error('Vectors must have the same dimensions');
68
- }
69
- // Use array.reduce for better performance in Node.js 23.11+
70
- const dotProduct = a.reduce((sum, val, i) => sum + val * b[i], 0);
71
- // Convert to a distance metric (lower is better)
72
- return -dotProduct;
73
- };
74
- /**
75
- * Batch distance calculation
76
- * Uses TensorFlow.js with CPU backend for optimized performance
77
- *
78
- * @param queryVector The query vector to compare against all vectors
79
- * @param vectors Array of vectors to compare against
80
- * @param distanceFunction The distance function to use
81
- * @returns Promise resolving to array of distances
82
- */
83
- export async function calculateDistancesBatch(queryVector, vectors, distanceFunction = euclideanDistance) {
84
- // For small batches, use the standard distance function
85
- if (vectors.length < 10) {
86
- return vectors.map((vector) => distanceFunction(queryVector, vector));
87
- }
88
- try {
89
- // Function to be executed in a worker thread
90
- const distanceCalculator = async (args) => {
91
- const { queryVector, vectors, distanceFnString } = args;
92
- // Use TensorFlow.js with CPU processing
93
- const useTensorFlow = async () => {
94
- // TensorFlow.js will use its default EPSILON value
95
- // Use the importTensorFlow function if available (in worker context)
96
- // or directly import TensorFlow.js (in main thread)
97
- let tf;
98
- if (typeof self !== 'undefined' &&
99
- typeof self.importTensorFlow === 'function') {
100
- // In worker context, use the importTensorFlow function
101
- tf = await self.importTensorFlow();
102
- }
103
- else {
104
- // CRITICAL: Ensure TextEncoder/TextDecoder are available before TensorFlow.js loads
105
- try {
106
- // Use dynamic imports for all environments to ensure TensorFlow loads after patch
107
- if (typeof process !== 'undefined' && process.versions && process.versions.node) {
108
- // Ensure TextEncoder/TextDecoder are globally available in Node.js
109
- const util = await import('util');
110
- if (typeof global.TextEncoder === 'undefined') {
111
- global.TextEncoder = util.TextEncoder;
112
- }
113
- if (typeof global.TextDecoder === 'undefined') {
114
- global.TextDecoder = util.TextDecoder;
115
- }
116
- }
117
- // Apply the TensorFlow.js patch
118
- const { applyTensorFlowPatch } = await import('./textEncoding.js');
119
- await applyTensorFlowPatch();
120
- // Now load TensorFlow.js core module using dynamic imports
121
- tf = await import('@tensorflow/tfjs-core');
122
- await import('@tensorflow/tfjs-backend-cpu');
123
- await tf.setBackend('cpu');
124
- }
125
- catch (error) {
126
- console.error('Failed to initialize TensorFlow.js:', error);
127
- throw error;
128
- }
129
- }
130
- // Convert vectors to tensors
131
- const queryTensor = tf.tensor2d([queryVector]);
132
- const vectorsTensor = tf.tensor2d(vectors);
133
- let distances;
134
- // Calculate distances based on the distance function type
135
- if (distanceFnString.includes('euclideanDistance')) {
136
- // Euclidean distance using GPU-optimized operations
137
- // Formula: sqrt(sum((a - b)^2))
138
- const expanded = tf.sub(queryTensor.expandDims(1), vectorsTensor.expandDims(0));
139
- const squaredDiff = tf.square(expanded);
140
- const sumSquaredDiff = tf.sum(squaredDiff, -1);
141
- const distancesTensor = tf.sqrt(sumSquaredDiff);
142
- distances = (await distancesTensor
143
- .squeeze()
144
- .array());
145
- // Clean up tensors
146
- queryTensor.dispose();
147
- vectorsTensor.dispose();
148
- expanded.dispose();
149
- squaredDiff.dispose();
150
- sumSquaredDiff.dispose();
151
- distancesTensor.dispose();
152
- }
153
- else if (distanceFnString.includes('cosineDistance')) {
154
- // Cosine distance using GPU-optimized operations
155
- // Formula: 1 - (a·b / (||a|| * ||b||))
156
- const dotProduct = tf.matMul(queryTensor, vectorsTensor.transpose());
157
- const queryNorm = tf.norm(queryTensor, 2, 1);
158
- const vectorsNorm = tf.norm(vectorsTensor, 2, 1);
159
- const normProduct = tf.outerProduct(queryNorm, vectorsNorm);
160
- const cosineSimilarity = tf.div(dotProduct, normProduct);
161
- const distancesTensor = tf.sub(tf.scalar(1), cosineSimilarity);
162
- distances = (await distancesTensor
163
- .squeeze()
164
- .array());
165
- // Clean up tensors
166
- queryTensor.dispose();
167
- vectorsTensor.dispose();
168
- dotProduct.dispose();
169
- queryNorm.dispose();
170
- vectorsNorm.dispose();
171
- normProduct.dispose();
172
- cosineSimilarity.dispose();
173
- distancesTensor.dispose();
174
- }
175
- else if (distanceFnString.includes('manhattanDistance')) {
176
- // Manhattan distance using GPU-optimized operations
177
- // Formula: sum(|a - b|)
178
- const diff = tf.sub(queryTensor.expandDims(1), vectorsTensor.expandDims(0));
179
- const absDiff = tf.abs(diff);
180
- const distancesTensor = tf.sum(absDiff, -1);
181
- distances = (await distancesTensor
182
- .squeeze()
183
- .array());
184
- // Clean up tensors
185
- queryTensor.dispose();
186
- vectorsTensor.dispose();
187
- diff.dispose();
188
- absDiff.dispose();
189
- distancesTensor.dispose();
190
- }
191
- else if (distanceFnString.includes('dotProductDistance')) {
192
- // Dot product distance using GPU-optimized operations
193
- // Formula: -sum(a * b)
194
- const dotProduct = tf.matMul(queryTensor, vectorsTensor.transpose());
195
- const distancesTensor = tf.neg(dotProduct);
196
- distances = (await distancesTensor
197
- .squeeze()
198
- .array());
199
- // Clean up tensors
200
- queryTensor.dispose();
201
- vectorsTensor.dispose();
202
- dotProduct.dispose();
203
- distancesTensor.dispose();
204
- }
205
- else {
206
- // For unknown distance functions, fall back to direct CPU implementation
207
- throw new Error('Unsupported distance function for TensorFlow optimization');
208
- }
209
- return {
210
- distances
211
- };
212
- };
213
- // Try to use TensorFlow.js with CPU optimization
214
- try {
215
- return await useTensorFlow();
216
- }
217
- catch (error) {
218
- // Fall back to direct CPU implementation if TensorFlow.js fails
219
- // Recreate the distance function from its string representation
220
- const distanceFunction = new Function('return ' + distanceFnString)();
221
- // Calculate distances for all vectors
222
- const distances = vectors.map((vector) => distanceFunction(queryVector, vector));
223
- return {
224
- distances
225
- };
226
- }
227
- };
228
- // Threading is not available, so we'll always use the main thread implementation
229
- // This comment is kept for clarity about the removed code
230
- // If threading is not available or failed, calculate distances in the main thread
231
- return vectors.map((vector) => distanceFunction(queryVector, vector));
232
- }
233
- catch (error) {
234
- // If anything fails, fall back to the standard distance function
235
- console.error('Batch distance calculation failed:', error);
236
- return vectors.map((vector) => distanceFunction(queryVector, vector));
237
- }
238
- }
239
- //# sourceMappingURL=distance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"distance.js","sourceRoot":"","sources":["../../src/utils/distance.ts"],"names":[],"mappings":"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"}