@soulcraft/brainy 0.40.0 → 0.43.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/README.md +605 -194
- package/dist/augmentations/conduitAugmentations.js +1158 -0
- package/dist/augmentations/conduitAugmentations.js.map +1 -0
- package/dist/augmentations/memoryAugmentations.d.ts +2 -0
- package/dist/augmentations/memoryAugmentations.d.ts.map +1 -1
- package/dist/augmentations/memoryAugmentations.js +270 -0
- package/dist/augmentations/memoryAugmentations.js.map +1 -0
- package/dist/augmentations/serverSearchAugmentations.js +531 -0
- package/dist/augmentations/serverSearchAugmentations.js.map +1 -0
- package/dist/browserFramework.d.ts +15 -0
- package/dist/demo.d.ts +106 -0
- package/dist/examples/basicUsage.js +118 -0
- package/dist/examples/basicUsage.js.map +1 -0
- package/dist/hnsw/distributedSearch.js +452 -0
- package/dist/hnsw/distributedSearch.js.map +1 -0
- package/dist/hnsw/hnswIndex.js +602 -0
- package/dist/hnsw/hnswIndex.js.map +1 -0
- package/dist/hnsw/hnswIndexOptimized.js +471 -0
- package/dist/hnsw/hnswIndexOptimized.js.map +1 -0
- package/dist/hnsw/optimizedHNSWIndex.js +313 -0
- package/dist/hnsw/optimizedHNSWIndex.js.map +1 -0
- package/dist/hnsw/partitionedHNSWIndex.js +304 -0
- package/dist/hnsw/partitionedHNSWIndex.js.map +1 -0
- package/dist/hnsw/scaledHNSWSystem.js +559 -0
- package/dist/hnsw/scaledHNSWSystem.js.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.js +81 -0
- package/dist/mcp/brainyMCPAdapter.js +142 -0
- package/dist/mcp/brainyMCPAdapter.js.map +1 -0
- package/dist/mcp/brainyMCPService.js +248 -0
- package/dist/mcp/brainyMCPService.js.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcpAugmentationToolset.js +180 -0
- package/dist/mcp/mcpAugmentationToolset.js.map +1 -0
- package/dist/storage/adapters/baseStorageAdapter.js +349 -0
- package/dist/storage/adapters/baseStorageAdapter.js.map +1 -0
- package/dist/storage/adapters/batchS3Operations.js +287 -0
- package/dist/storage/adapters/batchS3Operations.js.map +1 -0
- package/dist/storage/adapters/fileSystemStorage.js +846 -0
- package/dist/storage/adapters/fileSystemStorage.js.map +1 -0
- package/dist/storage/adapters/memoryStorage.js +532 -0
- package/dist/storage/adapters/memoryStorage.js.map +1 -0
- package/dist/storage/adapters/opfsStorage.d.ts.map +1 -1
- package/dist/storage/adapters/opfsStorage.js +1118 -0
- package/dist/storage/adapters/opfsStorage.js.map +1 -0
- package/dist/storage/adapters/optimizedS3Search.d.ts +79 -0
- package/dist/storage/adapters/optimizedS3Search.d.ts.map +1 -0
- package/dist/storage/adapters/optimizedS3Search.js +248 -0
- package/dist/storage/adapters/optimizedS3Search.js.map +1 -0
- package/dist/storage/adapters/s3CompatibleStorage.d.ts +21 -0
- package/dist/storage/adapters/s3CompatibleStorage.d.ts.map +1 -1
- package/dist/storage/adapters/s3CompatibleStorage.js +2026 -0
- package/dist/storage/adapters/s3CompatibleStorage.js.map +1 -0
- package/dist/storage/baseStorage.d.ts +1 -0
- package/dist/storage/baseStorage.d.ts.map +1 -1
- package/dist/storage/baseStorage.js +603 -0
- package/dist/storage/baseStorage.js.map +1 -0
- package/dist/storage/cacheManager.js +1306 -0
- package/dist/storage/cacheManager.js.map +1 -0
- package/dist/storage/enhancedCacheManager.js +520 -0
- package/dist/storage/enhancedCacheManager.js.map +1 -0
- package/dist/storage/readOnlyOptimizations.js +425 -0
- package/dist/storage/readOnlyOptimizations.js.map +1 -0
- package/dist/storage/storageFactory.d.ts +0 -1
- package/dist/storage/storageFactory.d.ts.map +1 -1
- package/dist/storage/storageFactory.js +227 -0
- package/dist/storage/storageFactory.js.map +1 -0
- package/dist/types/augmentations.js +16 -0
- package/dist/types/augmentations.js.map +1 -0
- package/dist/types/brainyDataInterface.js +8 -0
- package/dist/types/brainyDataInterface.js.map +1 -0
- package/dist/types/distributedTypes.js +6 -0
- package/dist/types/distributedTypes.js.map +1 -0
- package/dist/types/fileSystemTypes.js +8 -0
- package/dist/types/fileSystemTypes.js.map +1 -0
- package/dist/types/graphTypes.js +247 -0
- package/dist/types/graphTypes.js.map +1 -0
- package/dist/types/mcpTypes.js +22 -0
- package/dist/types/mcpTypes.js.map +1 -0
- package/dist/types/paginationTypes.js +5 -0
- package/dist/types/paginationTypes.js.map +1 -0
- package/dist/types/pipelineTypes.js +7 -0
- package/dist/types/pipelineTypes.js.map +1 -0
- package/dist/types/tensorflowTypes.js +6 -0
- package/dist/types/tensorflowTypes.js.map +1 -0
- package/dist/unified.js +52 -128048
- package/dist/utils/autoConfiguration.js +341 -0
- package/dist/utils/autoConfiguration.js.map +1 -0
- package/dist/utils/cacheAutoConfig.js +261 -0
- package/dist/utils/cacheAutoConfig.js.map +1 -0
- package/dist/utils/crypto.js +45 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/distance.js +239 -0
- package/dist/utils/distance.js.map +1 -0
- package/dist/utils/embedding.d.ts.map +1 -1
- package/dist/utils/embedding.js +702 -0
- package/dist/utils/embedding.js.map +1 -0
- package/dist/utils/environment.js +75 -0
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/fieldNameTracking.js +90 -0
- package/dist/utils/fieldNameTracking.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 +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/jsonProcessing.js +179 -0
- package/dist/utils/jsonProcessing.js.map +1 -0
- package/dist/utils/logger.d.ts +45 -92
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +129 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/operationUtils.js +126 -0
- package/dist/utils/operationUtils.js.map +1 -0
- package/dist/utils/robustModelLoader.d.ts +14 -0
- package/dist/utils/robustModelLoader.d.ts.map +1 -1
- package/dist/utils/robustModelLoader.js +537 -0
- package/dist/utils/robustModelLoader.js.map +1 -0
- package/dist/utils/searchCache.js +248 -0
- package/dist/utils/searchCache.js.map +1 -0
- package/dist/utils/statistics.js +25 -0
- package/dist/utils/statistics.js.map +1 -0
- package/dist/utils/statisticsCollector.js +224 -0
- package/dist/utils/statisticsCollector.js.map +1 -0
- package/dist/utils/textEncoding.js +309 -0
- package/dist/utils/textEncoding.js.map +1 -0
- package/dist/utils/typeUtils.js +40 -0
- package/dist/utils/typeUtils.js.map +1 -0
- package/dist/utils/version.d.ts +15 -3
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +24 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/utils/workerUtils.js +458 -0
- package/dist/utils/workerUtils.js.map +1 -0
- package/package.json +23 -15
- package/dist/brainy.js +0 -90220
- package/dist/brainy.min.js +0 -12511
- package/dist/patched-platform-node.d.ts +0 -17
- package/dist/statistics/statisticsManager.d.ts +0 -121
- package/dist/storage/fileSystemStorage.d.ts +0 -73
- package/dist/storage/fileSystemStorage.d.ts.map +0 -1
- package/dist/storage/opfsStorage.d.ts +0 -236
- package/dist/storage/opfsStorage.d.ts.map +0 -1
- package/dist/storage/s3CompatibleStorage.d.ts +0 -157
- package/dist/storage/s3CompatibleStorage.d.ts.map +0 -1
- package/dist/testing/prettyReporter.d.ts +0 -23
- package/dist/testing/prettySummaryReporter.d.ts +0 -22
- package/dist/unified.min.js +0 -16153
- package/dist/utils/environmentDetection.d.ts +0 -47
- package/dist/utils/environmentDetection.d.ts.map +0 -1
- package/dist/utils/tensorflowUtils.d.ts +0 -17
- package/dist/utils/tensorflowUtils.d.ts.map +0 -1
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatic Configuration System for Brainy Vector Database
|
|
3
|
+
* Detects environment, resources, and data patterns to provide optimal settings
|
|
4
|
+
*/
|
|
5
|
+
import { isBrowser, isNode, isThreadingAvailable } from './environment.js';
|
|
6
|
+
/**
|
|
7
|
+
* Automatic configuration system that detects environment and optimizes settings
|
|
8
|
+
*/
|
|
9
|
+
export class AutoConfiguration {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.cachedConfig = null;
|
|
12
|
+
this.datasetStats = { estimatedSize: 0 };
|
|
13
|
+
}
|
|
14
|
+
static getInstance() {
|
|
15
|
+
if (!AutoConfiguration.instance) {
|
|
16
|
+
AutoConfiguration.instance = new AutoConfiguration();
|
|
17
|
+
}
|
|
18
|
+
return AutoConfiguration.instance;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Detect environment and generate optimal configuration
|
|
22
|
+
*/
|
|
23
|
+
async detectAndConfigure(hints) {
|
|
24
|
+
if (this.cachedConfig && !hints) {
|
|
25
|
+
return this.cachedConfig;
|
|
26
|
+
}
|
|
27
|
+
const environment = this.detectEnvironment();
|
|
28
|
+
const resources = await this.detectResources();
|
|
29
|
+
const storage = await this.detectStorageCapabilities(hints?.s3Available);
|
|
30
|
+
const config = {
|
|
31
|
+
environment,
|
|
32
|
+
...resources,
|
|
33
|
+
...storage,
|
|
34
|
+
recommendedConfig: this.generateRecommendedConfig(environment, resources, hints),
|
|
35
|
+
optimizationFlags: this.generateOptimizationFlags(environment, resources)
|
|
36
|
+
};
|
|
37
|
+
this.cachedConfig = config;
|
|
38
|
+
return config;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Update configuration based on runtime dataset analysis
|
|
42
|
+
*/
|
|
43
|
+
async adaptToDataset(analysis) {
|
|
44
|
+
this.datasetStats = analysis;
|
|
45
|
+
// Regenerate configuration with dataset insights
|
|
46
|
+
const currentConfig = await this.detectAndConfigure();
|
|
47
|
+
const adaptedConfig = this.adaptConfigurationToData(currentConfig, analysis);
|
|
48
|
+
this.cachedConfig = adaptedConfig;
|
|
49
|
+
return adaptedConfig;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Learn from performance metrics and adjust configuration
|
|
53
|
+
*/
|
|
54
|
+
async learnFromPerformance(metrics) {
|
|
55
|
+
const adjustments = {};
|
|
56
|
+
// Learn from search performance
|
|
57
|
+
if (metrics.averageSearchTime > 200) {
|
|
58
|
+
// Too slow - optimize for speed
|
|
59
|
+
adjustments.enableDistributedSearch = true;
|
|
60
|
+
adjustments.maxNodesPerPartition = Math.max(10000, (this.cachedConfig?.recommendedConfig.maxNodesPerPartition || 50000) * 0.8);
|
|
61
|
+
}
|
|
62
|
+
else if (metrics.averageSearchTime < 50) {
|
|
63
|
+
// Very fast - can optimize for quality
|
|
64
|
+
adjustments.maxNodesPerPartition = Math.min(100000, (this.cachedConfig?.recommendedConfig.maxNodesPerPartition || 50000) * 1.2);
|
|
65
|
+
}
|
|
66
|
+
// Learn from memory usage
|
|
67
|
+
if (metrics.memoryUsage > (this.cachedConfig?.recommendedConfig.maxMemoryUsage || 0) * 0.9) {
|
|
68
|
+
// High memory usage - enable compression
|
|
69
|
+
adjustments.enableCompression = true;
|
|
70
|
+
}
|
|
71
|
+
// Learn from cache performance
|
|
72
|
+
if (metrics.cacheHitRate < 0.7) {
|
|
73
|
+
// Poor cache performance - enable predictive caching
|
|
74
|
+
adjustments.enablePredictiveCaching = true;
|
|
75
|
+
}
|
|
76
|
+
// Update cached config with learned adjustments
|
|
77
|
+
if (this.cachedConfig) {
|
|
78
|
+
this.cachedConfig.recommendedConfig = {
|
|
79
|
+
...this.cachedConfig.recommendedConfig,
|
|
80
|
+
...adjustments
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
return adjustments;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get minimal configuration for quick setup
|
|
87
|
+
*/
|
|
88
|
+
async getQuickSetupConfig(scenario) {
|
|
89
|
+
const environment = this.detectEnvironment();
|
|
90
|
+
const resources = await this.detectResources();
|
|
91
|
+
switch (scenario) {
|
|
92
|
+
case 'small':
|
|
93
|
+
return {
|
|
94
|
+
expectedDatasetSize: 10000,
|
|
95
|
+
maxMemoryUsage: Math.min(resources.availableMemory * 0.3, 1024 * 1024 * 1024), // 1GB max
|
|
96
|
+
targetSearchLatency: 100,
|
|
97
|
+
s3Required: false
|
|
98
|
+
};
|
|
99
|
+
case 'medium':
|
|
100
|
+
return {
|
|
101
|
+
expectedDatasetSize: 100000,
|
|
102
|
+
maxMemoryUsage: Math.min(resources.availableMemory * 0.5, 4 * 1024 * 1024 * 1024), // 4GB max
|
|
103
|
+
targetSearchLatency: 150,
|
|
104
|
+
s3Required: environment === 'serverless'
|
|
105
|
+
};
|
|
106
|
+
case 'large':
|
|
107
|
+
return {
|
|
108
|
+
expectedDatasetSize: 1000000,
|
|
109
|
+
maxMemoryUsage: Math.min(resources.availableMemory * 0.7, 8 * 1024 * 1024 * 1024), // 8GB max
|
|
110
|
+
targetSearchLatency: 200,
|
|
111
|
+
s3Required: true
|
|
112
|
+
};
|
|
113
|
+
case 'enterprise':
|
|
114
|
+
return {
|
|
115
|
+
expectedDatasetSize: 10000000,
|
|
116
|
+
maxMemoryUsage: Math.min(resources.availableMemory * 0.8, 32 * 1024 * 1024 * 1024), // 32GB max
|
|
117
|
+
targetSearchLatency: 300,
|
|
118
|
+
s3Required: true
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Detect the current runtime environment
|
|
124
|
+
*/
|
|
125
|
+
detectEnvironment() {
|
|
126
|
+
if (isBrowser()) {
|
|
127
|
+
return 'browser';
|
|
128
|
+
}
|
|
129
|
+
if (isNode()) {
|
|
130
|
+
// Check for serverless environment indicators
|
|
131
|
+
if (process.env.AWS_LAMBDA_FUNCTION_NAME ||
|
|
132
|
+
process.env.VERCEL ||
|
|
133
|
+
process.env.NETLIFY ||
|
|
134
|
+
process.env.CLOUDFLARE_WORKERS) {
|
|
135
|
+
return 'serverless';
|
|
136
|
+
}
|
|
137
|
+
return 'nodejs';
|
|
138
|
+
}
|
|
139
|
+
return 'unknown';
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Detect available system resources
|
|
143
|
+
*/
|
|
144
|
+
async detectResources() {
|
|
145
|
+
let availableMemory = 2 * 1024 * 1024 * 1024; // Default 2GB
|
|
146
|
+
let cpuCores = 4; // Default 4 cores
|
|
147
|
+
// Browser memory detection
|
|
148
|
+
if (isBrowser()) {
|
|
149
|
+
// @ts-ignore - navigator.deviceMemory is experimental
|
|
150
|
+
if (navigator.deviceMemory) {
|
|
151
|
+
// @ts-ignore
|
|
152
|
+
availableMemory = navigator.deviceMemory * 1024 * 1024 * 1024 * 0.3; // Use 30% of device memory
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
availableMemory = 512 * 1024 * 1024; // Conservative 512MB for browsers
|
|
156
|
+
}
|
|
157
|
+
cpuCores = navigator.hardwareConcurrency || 4;
|
|
158
|
+
}
|
|
159
|
+
// Node.js memory detection
|
|
160
|
+
if (isNode()) {
|
|
161
|
+
try {
|
|
162
|
+
const os = await import('os');
|
|
163
|
+
availableMemory = os.totalmem() * 0.7; // Use 70% of total memory
|
|
164
|
+
cpuCores = os.cpus().length;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
// Fallback to defaults
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
availableMemory,
|
|
172
|
+
cpuCores,
|
|
173
|
+
threadingAvailable: isThreadingAvailable()
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Detect available storage capabilities
|
|
178
|
+
*/
|
|
179
|
+
async detectStorageCapabilities(s3Hint) {
|
|
180
|
+
let persistentStorageAvailable = false;
|
|
181
|
+
let s3StorageDetected = s3Hint || false;
|
|
182
|
+
if (isBrowser()) {
|
|
183
|
+
// Check for OPFS support
|
|
184
|
+
persistentStorageAvailable = 'navigator' in globalThis &&
|
|
185
|
+
'storage' in navigator &&
|
|
186
|
+
'getDirectory' in navigator.storage;
|
|
187
|
+
}
|
|
188
|
+
if (isNode()) {
|
|
189
|
+
persistentStorageAvailable = true; // Always available in Node.js
|
|
190
|
+
// Check for AWS SDK or S3 environment variables
|
|
191
|
+
s3StorageDetected = s3Hint ||
|
|
192
|
+
!!(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) ||
|
|
193
|
+
!!(process.env.S3_BUCKET_NAME);
|
|
194
|
+
}
|
|
195
|
+
return {
|
|
196
|
+
persistentStorageAvailable,
|
|
197
|
+
s3StorageDetected
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Generate recommended configuration based on detected environment and resources
|
|
202
|
+
*/
|
|
203
|
+
generateRecommendedConfig(environment, resources, hints) {
|
|
204
|
+
const datasetSize = hints?.expectedDataSize || this.estimateDatasetSize();
|
|
205
|
+
const memoryBudget = hints?.memoryBudget || Math.floor(resources.availableMemory * 0.6);
|
|
206
|
+
// Base configuration
|
|
207
|
+
let config = {
|
|
208
|
+
expectedDatasetSize: datasetSize,
|
|
209
|
+
maxMemoryUsage: memoryBudget,
|
|
210
|
+
targetSearchLatency: 150,
|
|
211
|
+
enablePartitioning: datasetSize > 25000,
|
|
212
|
+
enableCompression: environment === 'browser' || memoryBudget < 2 * 1024 * 1024 * 1024,
|
|
213
|
+
enableDistributedSearch: resources.cpuCores > 2 && datasetSize > 50000,
|
|
214
|
+
enablePredictiveCaching: true,
|
|
215
|
+
partitionStrategy: 'semantic',
|
|
216
|
+
maxNodesPerPartition: 50000,
|
|
217
|
+
semanticClusters: 8
|
|
218
|
+
};
|
|
219
|
+
// Environment-specific adjustments
|
|
220
|
+
switch (environment) {
|
|
221
|
+
case 'browser':
|
|
222
|
+
config = {
|
|
223
|
+
...config,
|
|
224
|
+
maxMemoryUsage: Math.min(memoryBudget, 1024 * 1024 * 1024), // Cap at 1GB
|
|
225
|
+
targetSearchLatency: 200, // More lenient for browsers
|
|
226
|
+
enableCompression: true, // Always enable for browsers
|
|
227
|
+
maxNodesPerPartition: 25000, // Smaller partitions
|
|
228
|
+
semanticClusters: 4 // Fewer clusters to save memory
|
|
229
|
+
};
|
|
230
|
+
break;
|
|
231
|
+
case 'serverless':
|
|
232
|
+
config = {
|
|
233
|
+
...config,
|
|
234
|
+
targetSearchLatency: 500, // Account for cold starts
|
|
235
|
+
enablePredictiveCaching: false, // Avoid background processes
|
|
236
|
+
maxNodesPerPartition: 30000 // Moderate partition size
|
|
237
|
+
};
|
|
238
|
+
break;
|
|
239
|
+
case 'nodejs':
|
|
240
|
+
config = {
|
|
241
|
+
...config,
|
|
242
|
+
targetSearchLatency: 100, // Aggressive for Node.js
|
|
243
|
+
maxNodesPerPartition: Math.min(100000, Math.floor(datasetSize / 10)), // Larger partitions
|
|
244
|
+
semanticClusters: Math.min(16, Math.max(4, Math.floor(datasetSize / 50000))) // Scale clusters with data
|
|
245
|
+
};
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
// Dataset size adjustments
|
|
249
|
+
if (datasetSize > 1000000) {
|
|
250
|
+
config.semanticClusters = Math.min(32, Math.floor(datasetSize / 100000));
|
|
251
|
+
config.maxNodesPerPartition = 100000;
|
|
252
|
+
}
|
|
253
|
+
else if (datasetSize < 10000) {
|
|
254
|
+
config.enablePartitioning = false;
|
|
255
|
+
config.enableDistributedSearch = false;
|
|
256
|
+
config.partitionStrategy = 'semantic'; // Keep semantic but disable partitioning
|
|
257
|
+
}
|
|
258
|
+
return config;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Generate optimization flags based on environment and resources
|
|
262
|
+
*/
|
|
263
|
+
generateOptimizationFlags(environment, resources) {
|
|
264
|
+
return {
|
|
265
|
+
useMemoryMapping: environment === 'nodejs' && resources.availableMemory > 4 * 1024 * 1024 * 1024,
|
|
266
|
+
aggressiveCaching: resources.availableMemory > 2 * 1024 * 1024 * 1024,
|
|
267
|
+
backgroundOptimization: environment !== 'serverless' && resources.cpuCores > 2,
|
|
268
|
+
compressionLevel: resources.availableMemory < 1024 * 1024 * 1024 ? 'aggressive' :
|
|
269
|
+
resources.availableMemory < 4 * 1024 * 1024 * 1024 ? 'light' : 'none'
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Adapt configuration based on actual dataset analysis
|
|
274
|
+
*/
|
|
275
|
+
adaptConfigurationToData(baseConfig, analysis) {
|
|
276
|
+
const updatedConfig = { ...baseConfig };
|
|
277
|
+
// Adjust based on actual dataset size
|
|
278
|
+
if (analysis.estimatedSize !== baseConfig.recommendedConfig.expectedDatasetSize) {
|
|
279
|
+
const sizeRatio = analysis.estimatedSize / baseConfig.recommendedConfig.expectedDatasetSize;
|
|
280
|
+
updatedConfig.recommendedConfig.expectedDatasetSize = analysis.estimatedSize;
|
|
281
|
+
// Scale partition size with dataset
|
|
282
|
+
if (sizeRatio > 2) {
|
|
283
|
+
updatedConfig.recommendedConfig.maxNodesPerPartition = Math.min(100000, Math.floor(updatedConfig.recommendedConfig.maxNodesPerPartition * 1.5));
|
|
284
|
+
updatedConfig.recommendedConfig.semanticClusters = Math.min(32, Math.floor(updatedConfig.recommendedConfig.semanticClusters * 1.5));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// Adjust based on vector dimension
|
|
288
|
+
if (analysis.vectorDimension) {
|
|
289
|
+
if (analysis.vectorDimension > 1024) {
|
|
290
|
+
// High-dimensional vectors - optimize for compression
|
|
291
|
+
updatedConfig.recommendedConfig.enableCompression = true;
|
|
292
|
+
updatedConfig.optimizationFlags.compressionLevel = 'aggressive';
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Adjust based on access patterns
|
|
296
|
+
if (analysis.accessPatterns === 'read-heavy') {
|
|
297
|
+
updatedConfig.recommendedConfig.enablePredictiveCaching = true;
|
|
298
|
+
updatedConfig.optimizationFlags.aggressiveCaching = true;
|
|
299
|
+
}
|
|
300
|
+
else if (analysis.accessPatterns === 'write-heavy') {
|
|
301
|
+
updatedConfig.recommendedConfig.enablePredictiveCaching = false;
|
|
302
|
+
updatedConfig.optimizationFlags.backgroundOptimization = false;
|
|
303
|
+
}
|
|
304
|
+
return updatedConfig;
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Estimate dataset size if not provided
|
|
308
|
+
*/
|
|
309
|
+
estimateDatasetSize() {
|
|
310
|
+
// Start with conservative estimate
|
|
311
|
+
const environment = this.detectEnvironment();
|
|
312
|
+
switch (environment) {
|
|
313
|
+
case 'browser': return 10000;
|
|
314
|
+
case 'serverless': return 50000;
|
|
315
|
+
case 'nodejs': return 100000;
|
|
316
|
+
default: return 25000;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Reset cached configuration (for testing or manual refresh)
|
|
321
|
+
*/
|
|
322
|
+
resetCache() {
|
|
323
|
+
this.cachedConfig = null;
|
|
324
|
+
this.datasetStats = { estimatedSize: 0 };
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Convenience function for quick auto-configuration
|
|
329
|
+
*/
|
|
330
|
+
export async function autoConfigureBrainy(hints) {
|
|
331
|
+
const autoConfig = AutoConfiguration.getInstance();
|
|
332
|
+
return autoConfig.detectAndConfigure(hints);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Get quick setup configuration for common scenarios
|
|
336
|
+
*/
|
|
337
|
+
export async function getQuickSetup(scenario) {
|
|
338
|
+
const autoConfig = AutoConfiguration.getInstance();
|
|
339
|
+
return autoConfig.getQuickSetupConfig(scenario);
|
|
340
|
+
}
|
|
341
|
+
//# sourceMappingURL=autoConfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoConfiguration.js","sourceRoot":"","sources":["../../src/utils/autoConfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent cache auto-configuration system
|
|
3
|
+
* Adapts cache settings based on environment, usage patterns, and storage type
|
|
4
|
+
*/
|
|
5
|
+
export class CacheAutoConfigurator {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.stats = {
|
|
8
|
+
totalQueries: 0,
|
|
9
|
+
repeatQueries: 0,
|
|
10
|
+
avgQueryTime: 50,
|
|
11
|
+
memoryPressure: 0,
|
|
12
|
+
storageType: 'memory',
|
|
13
|
+
isDistributed: false,
|
|
14
|
+
changeFrequency: 0,
|
|
15
|
+
readWriteRatio: 10,
|
|
16
|
+
};
|
|
17
|
+
this.configHistory = [];
|
|
18
|
+
this.lastOptimization = 0;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Auto-detect optimal cache configuration based on current conditions
|
|
22
|
+
*/
|
|
23
|
+
autoDetectOptimalConfig(storageConfig, currentStats) {
|
|
24
|
+
// Update stats with current information
|
|
25
|
+
if (currentStats) {
|
|
26
|
+
this.stats = { ...this.stats, ...currentStats };
|
|
27
|
+
}
|
|
28
|
+
// Detect environment characteristics
|
|
29
|
+
this.detectEnvironment(storageConfig);
|
|
30
|
+
// Generate optimal configuration
|
|
31
|
+
const result = this.generateOptimalConfig();
|
|
32
|
+
// Store for learning
|
|
33
|
+
this.configHistory.push(result);
|
|
34
|
+
this.lastOptimization = Date.now();
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Dynamically adjust configuration based on runtime performance
|
|
39
|
+
*/
|
|
40
|
+
adaptConfiguration(currentConfig, performanceMetrics) {
|
|
41
|
+
const reasoning = [];
|
|
42
|
+
let needsUpdate = false;
|
|
43
|
+
// Check if we should update (don't over-optimize)
|
|
44
|
+
if (Date.now() - this.lastOptimization < 60000) {
|
|
45
|
+
return null; // Wait at least 1 minute between optimizations
|
|
46
|
+
}
|
|
47
|
+
// Analyze performance patterns
|
|
48
|
+
const adaptations = {};
|
|
49
|
+
// Low hit rate → adjust cache size or TTL
|
|
50
|
+
if (performanceMetrics.hitRate < 0.3) {
|
|
51
|
+
if (performanceMetrics.externalChangesDetected > 5) {
|
|
52
|
+
// Too many external changes → shorter TTL
|
|
53
|
+
adaptations.maxAge = Math.max(60000, currentConfig.maxAge * 0.7);
|
|
54
|
+
reasoning.push('Reduced cache TTL due to frequent external changes');
|
|
55
|
+
needsUpdate = true;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Expand cache size for better hit rate
|
|
59
|
+
adaptations.maxSize = Math.min(500, (currentConfig.maxSize || 100) * 1.5);
|
|
60
|
+
reasoning.push('Increased cache size due to low hit rate');
|
|
61
|
+
needsUpdate = true;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// High hit rate but slow responses → might need cache warming
|
|
65
|
+
if (performanceMetrics.hitRate > 0.8 && performanceMetrics.avgResponseTime > 100) {
|
|
66
|
+
reasoning.push('High hit rate but slow responses - consider cache warming');
|
|
67
|
+
}
|
|
68
|
+
// Memory pressure → reduce cache size
|
|
69
|
+
if (performanceMetrics.memoryUsage > 100 * 1024 * 1024) { // 100MB
|
|
70
|
+
adaptations.maxSize = Math.max(20, (currentConfig.maxSize || 100) * 0.7);
|
|
71
|
+
reasoning.push('Reduced cache size due to memory pressure');
|
|
72
|
+
needsUpdate = true;
|
|
73
|
+
}
|
|
74
|
+
// Recent external changes → adaptive TTL
|
|
75
|
+
if (performanceMetrics.timeSinceLastChange < 30000) { // 30 seconds
|
|
76
|
+
adaptations.maxAge = Math.max(30000, currentConfig.maxAge * 0.8);
|
|
77
|
+
reasoning.push('Shortened TTL due to recent external changes');
|
|
78
|
+
needsUpdate = true;
|
|
79
|
+
}
|
|
80
|
+
if (!needsUpdate) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const newCacheConfig = {
|
|
84
|
+
...currentConfig,
|
|
85
|
+
...adaptations
|
|
86
|
+
};
|
|
87
|
+
const newRealtimeConfig = this.calculateRealtimeConfig();
|
|
88
|
+
return {
|
|
89
|
+
cacheConfig: newCacheConfig,
|
|
90
|
+
realtimeConfig: newRealtimeConfig,
|
|
91
|
+
reasoning
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get recommended configuration for specific use case
|
|
96
|
+
*/
|
|
97
|
+
getRecommendedConfig(useCase) {
|
|
98
|
+
const configs = {
|
|
99
|
+
'high-consistency': {
|
|
100
|
+
cache: { maxAge: 120000, maxSize: 50 },
|
|
101
|
+
realtime: { interval: 15000, enabled: true },
|
|
102
|
+
reasoning: ['Optimized for data consistency and real-time updates']
|
|
103
|
+
},
|
|
104
|
+
'balanced': {
|
|
105
|
+
cache: { maxAge: 300000, maxSize: 100 },
|
|
106
|
+
realtime: { interval: 30000, enabled: true },
|
|
107
|
+
reasoning: ['Balanced performance and consistency']
|
|
108
|
+
},
|
|
109
|
+
'performance-first': {
|
|
110
|
+
cache: { maxAge: 600000, maxSize: 200 },
|
|
111
|
+
realtime: { interval: 60000, enabled: true },
|
|
112
|
+
reasoning: ['Optimized for maximum cache performance']
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
const config = configs[useCase];
|
|
116
|
+
return {
|
|
117
|
+
cacheConfig: {
|
|
118
|
+
enabled: true,
|
|
119
|
+
...config.cache
|
|
120
|
+
},
|
|
121
|
+
realtimeConfig: {
|
|
122
|
+
updateIndex: true,
|
|
123
|
+
updateStatistics: true,
|
|
124
|
+
...config.realtime
|
|
125
|
+
},
|
|
126
|
+
reasoning: config.reasoning
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Learn from usage patterns and improve recommendations
|
|
131
|
+
*/
|
|
132
|
+
learnFromUsage(usageData) {
|
|
133
|
+
// Update internal stats for better future recommendations
|
|
134
|
+
this.stats.totalQueries += usageData.totalQueries;
|
|
135
|
+
this.stats.repeatQueries += usageData.cacheHits;
|
|
136
|
+
this.stats.avgQueryTime = (this.stats.avgQueryTime + usageData.responseTime) / 2;
|
|
137
|
+
this.stats.changeFrequency = usageData.dataChanges / (usageData.timeWindow / 60000);
|
|
138
|
+
// Calculate read/write ratio
|
|
139
|
+
const writes = usageData.dataChanges;
|
|
140
|
+
const reads = usageData.totalQueries;
|
|
141
|
+
this.stats.readWriteRatio = reads > 0 ? reads / Math.max(writes, 1) : 10;
|
|
142
|
+
}
|
|
143
|
+
detectEnvironment(storageConfig) {
|
|
144
|
+
// Detect storage type
|
|
145
|
+
if (storageConfig?.s3Storage || storageConfig?.customS3Storage) {
|
|
146
|
+
this.stats.storageType = 's3';
|
|
147
|
+
this.stats.isDistributed = true;
|
|
148
|
+
}
|
|
149
|
+
else if (storageConfig?.forceFileSystemStorage) {
|
|
150
|
+
this.stats.storageType = 'filesystem';
|
|
151
|
+
}
|
|
152
|
+
else if (storageConfig?.forceMemoryStorage) {
|
|
153
|
+
this.stats.storageType = 'memory';
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
// Auto-detect browser vs Node.js
|
|
157
|
+
this.stats.storageType = typeof window !== 'undefined' ? 'opfs' : 'filesystem';
|
|
158
|
+
}
|
|
159
|
+
// Detect distributed mode indicators
|
|
160
|
+
this.stats.isDistributed = this.stats.isDistributed ||
|
|
161
|
+
Boolean(storageConfig?.s3Storage || storageConfig?.customS3Storage);
|
|
162
|
+
}
|
|
163
|
+
generateOptimalConfig() {
|
|
164
|
+
const reasoning = [];
|
|
165
|
+
// Base configuration
|
|
166
|
+
let cacheConfig = {
|
|
167
|
+
enabled: true,
|
|
168
|
+
maxSize: 100,
|
|
169
|
+
maxAge: 300000, // 5 minutes
|
|
170
|
+
hitCountWeight: 0.3
|
|
171
|
+
};
|
|
172
|
+
let realtimeConfig = {
|
|
173
|
+
enabled: false,
|
|
174
|
+
interval: 60000,
|
|
175
|
+
updateIndex: true,
|
|
176
|
+
updateStatistics: true
|
|
177
|
+
};
|
|
178
|
+
// Adjust for storage type
|
|
179
|
+
if (this.stats.storageType === 's3' || this.stats.isDistributed) {
|
|
180
|
+
cacheConfig.maxAge = 180000; // 3 minutes for distributed
|
|
181
|
+
realtimeConfig.enabled = true;
|
|
182
|
+
realtimeConfig.interval = 30000; // 30 seconds
|
|
183
|
+
reasoning.push('Distributed storage detected - enabled real-time updates');
|
|
184
|
+
reasoning.push('Reduced cache TTL for distributed consistency');
|
|
185
|
+
}
|
|
186
|
+
// Adjust for read/write patterns
|
|
187
|
+
if (this.stats.readWriteRatio > 20) {
|
|
188
|
+
// Read-heavy workload
|
|
189
|
+
cacheConfig.maxSize = Math.min(300, (cacheConfig.maxSize || 100) * 2);
|
|
190
|
+
cacheConfig.maxAge = Math.min(900000, (cacheConfig.maxAge || 300000) * 1.5); // Up to 15 minutes
|
|
191
|
+
reasoning.push('Read-heavy workload detected - increased cache size and TTL');
|
|
192
|
+
}
|
|
193
|
+
else if (this.stats.readWriteRatio < 5) {
|
|
194
|
+
// Write-heavy workload
|
|
195
|
+
cacheConfig.maxSize = Math.max(50, (cacheConfig.maxSize || 100) * 0.7);
|
|
196
|
+
cacheConfig.maxAge = Math.max(60000, (cacheConfig.maxAge || 300000) * 0.6);
|
|
197
|
+
reasoning.push('Write-heavy workload detected - reduced cache size and TTL');
|
|
198
|
+
}
|
|
199
|
+
// Adjust for change frequency
|
|
200
|
+
if (this.stats.changeFrequency > 10) { // More than 10 changes per minute
|
|
201
|
+
realtimeConfig.interval = Math.max(10000, realtimeConfig.interval * 0.5);
|
|
202
|
+
cacheConfig.maxAge = Math.max(30000, (cacheConfig.maxAge || 300000) * 0.5);
|
|
203
|
+
reasoning.push('High change frequency detected - increased update frequency');
|
|
204
|
+
}
|
|
205
|
+
// Memory constraints
|
|
206
|
+
if (this.detectMemoryConstraints()) {
|
|
207
|
+
cacheConfig.maxSize = Math.max(20, (cacheConfig.maxSize || 100) * 0.6);
|
|
208
|
+
reasoning.push('Memory constraints detected - reduced cache size');
|
|
209
|
+
}
|
|
210
|
+
// Performance optimization
|
|
211
|
+
if (this.stats.avgQueryTime > 200) {
|
|
212
|
+
cacheConfig.maxSize = Math.min(500, (cacheConfig.maxSize || 100) * 1.5);
|
|
213
|
+
reasoning.push('Slow queries detected - increased cache size');
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
cacheConfig,
|
|
217
|
+
realtimeConfig,
|
|
218
|
+
reasoning
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
calculateRealtimeConfig() {
|
|
222
|
+
return {
|
|
223
|
+
enabled: this.stats.isDistributed || this.stats.changeFrequency > 1,
|
|
224
|
+
interval: this.stats.isDistributed ? 30000 : 60000,
|
|
225
|
+
updateIndex: true,
|
|
226
|
+
updateStatistics: true
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
detectMemoryConstraints() {
|
|
230
|
+
// Simple heuristic for memory constraints
|
|
231
|
+
try {
|
|
232
|
+
if (typeof performance !== 'undefined' && 'memory' in performance) {
|
|
233
|
+
const memInfo = performance.memory;
|
|
234
|
+
return memInfo.usedJSHeapSize > memInfo.jsHeapSizeLimit * 0.8;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (e) {
|
|
238
|
+
// Ignore errors
|
|
239
|
+
}
|
|
240
|
+
// Default assumption for constrained environments
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Get human-readable explanation of current configuration
|
|
245
|
+
*/
|
|
246
|
+
getConfigExplanation(config) {
|
|
247
|
+
const lines = [
|
|
248
|
+
'🤖 Brainy Auto-Configuration:',
|
|
249
|
+
'',
|
|
250
|
+
`📊 Cache: ${config.cacheConfig.maxSize} queries, ${config.cacheConfig.maxAge / 1000}s TTL`,
|
|
251
|
+
`🔄 Updates: ${config.realtimeConfig.enabled ? `Every ${(config.realtimeConfig.interval || 30000) / 1000}s` : 'Disabled'}`,
|
|
252
|
+
'',
|
|
253
|
+
'🎯 Optimizations applied:'
|
|
254
|
+
];
|
|
255
|
+
config.reasoning.forEach(reason => {
|
|
256
|
+
lines.push(` • ${reason}`);
|
|
257
|
+
});
|
|
258
|
+
return lines.join('\n');
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=cacheAutoConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheAutoConfig.js","sourceRoot":"","sources":["../../src/utils/cacheAutoConfig.ts"],"names":[],"mappings":"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"}
|