@soulcraft/brainy 0.31.0 → 0.33.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.
@@ -0,0 +1,264 @@
1
+ /**
2
+ * Multi-level Cache Manager
3
+ *
4
+ * Implements a three-level caching strategy:
5
+ * - Level 1: Hot cache (most accessed nodes) - RAM (automatically detecting and adjusting in each environment)
6
+ * - Level 2: Warm cache (recent nodes) - OPFS, Filesystem or S3 depending on environment
7
+ * - Level 3: Cold storage (all nodes) - OPFS, Filesystem or S3 depending on environment
8
+ */
9
+ import { HNSWNoun, GraphVerb } from '../coreTypes.js';
10
+ declare global {
11
+ interface Navigator {
12
+ deviceMemory?: number;
13
+ }
14
+ interface WorkerGlobalScope {
15
+ storage?: {
16
+ getDirectory?: () => Promise<any>;
17
+ [key: string]: any;
18
+ };
19
+ }
20
+ }
21
+ type HNSWNode = HNSWNoun;
22
+ type Edge = GraphVerb;
23
+ interface CacheStats {
24
+ hits: number;
25
+ misses: number;
26
+ evictions: number;
27
+ size: number;
28
+ maxSize: number;
29
+ }
30
+ /**
31
+ * Multi-level cache manager for efficient data access
32
+ */
33
+ export declare class CacheManager<T extends HNSWNode | Edge> {
34
+ private hotCache;
35
+ private stats;
36
+ private environment;
37
+ private warmStorageType;
38
+ private coldStorageType;
39
+ private hotCacheMaxSize;
40
+ private hotCacheEvictionThreshold;
41
+ private warmCacheTTL;
42
+ private batchSize;
43
+ private autoTune;
44
+ private lastAutoTuneTime;
45
+ private autoTuneInterval;
46
+ private storageStatistics;
47
+ private warmStorage;
48
+ private coldStorage;
49
+ private options;
50
+ /**
51
+ * Initialize the cache manager
52
+ * @param options Configuration options
53
+ */
54
+ constructor(options?: {
55
+ hotCacheMaxSize?: number;
56
+ hotCacheEvictionThreshold?: number;
57
+ warmCacheTTL?: number;
58
+ batchSize?: number;
59
+ autoTune?: boolean;
60
+ warmStorage?: any;
61
+ coldStorage?: any;
62
+ readOnly?: boolean;
63
+ });
64
+ /**
65
+ * Detect the current environment
66
+ */
67
+ private detectEnvironment;
68
+ /**
69
+ * Detect the optimal cache size based on available memory and operating mode
70
+ *
71
+ * Enhanced to better handle large datasets in S3 or other storage:
72
+ * - Increases cache size for read-only mode
73
+ * - Adjusts based on total dataset size when available
74
+ * - Provides more aggressive caching for large datasets
75
+ * - Optimizes memory usage based on environment
76
+ */
77
+ private detectOptimalCacheSize;
78
+ /**
79
+ * Tune cache parameters based on statistics and environment
80
+ * This method is called periodically if auto-tuning is enabled
81
+ *
82
+ * The auto-tuning process:
83
+ * 1. Retrieves storage statistics if available
84
+ * 2. Tunes each parameter based on statistics and environment
85
+ * 3. Logs the tuned parameters if debug is enabled
86
+ *
87
+ * Auto-tuning helps optimize cache performance by adapting to:
88
+ * - The current environment (Node.js, browser, worker)
89
+ * - Available system resources (memory, CPU)
90
+ * - Usage patterns (read-heavy vs. write-heavy workloads)
91
+ * - Cache efficiency (hit/miss ratios)
92
+ */
93
+ private tuneParameters;
94
+ /**
95
+ * Tune hot cache size based on statistics, environment, and operating mode
96
+ *
97
+ * The hot cache size is tuned based on:
98
+ * 1. Available memory in the current environment
99
+ * 2. Total number of nodes and edges in the system
100
+ * 3. Cache hit/miss ratio
101
+ * 4. Operating mode (read-only vs. read-write)
102
+ * 5. Storage type (S3, filesystem, memory)
103
+ *
104
+ * Enhanced algorithm:
105
+ * - Start with a size based on available memory and operating mode
106
+ * - For large datasets in S3 or other remote storage, use more aggressive caching
107
+ * - Adjust based on access patterns (read-heavy vs. write-heavy)
108
+ * - For read-only mode, prioritize cache size over eviction speed
109
+ * - Dynamically adjust based on hit/miss ratio and query patterns
110
+ */
111
+ private tuneHotCacheSize;
112
+ /**
113
+ * Tune eviction threshold based on statistics
114
+ *
115
+ * The eviction threshold determines when items start being evicted from the hot cache.
116
+ * It is tuned based on:
117
+ * 1. Cache hit/miss ratio
118
+ * 2. Operation patterns (read-heavy vs. write-heavy workloads)
119
+ *
120
+ * Algorithm:
121
+ * - Start with a default threshold of 0.8 (80% of max size)
122
+ * - For high hit ratios, increase the threshold to keep more items in cache
123
+ * - For low hit ratios, decrease the threshold to evict items more aggressively
124
+ * - For read-heavy workloads, use a higher threshold
125
+ * - For write-heavy workloads, use a lower threshold
126
+ */
127
+ private tuneEvictionThreshold;
128
+ /**
129
+ * Tune warm cache TTL based on statistics
130
+ *
131
+ * The warm cache TTL determines how long items remain in the warm cache.
132
+ * It is tuned based on:
133
+ * 1. Update frequency from operation statistics
134
+ *
135
+ * Algorithm:
136
+ * - Start with a default TTL of 24 hours
137
+ * - For frequently updated data, use a shorter TTL
138
+ * - For rarely updated data, use a longer TTL
139
+ */
140
+ private tuneWarmCacheTTL;
141
+ /**
142
+ * Tune batch size based on environment, statistics, and operating mode
143
+ *
144
+ * The batch size determines how many items are processed in a single batch
145
+ * for operations like prefetching. It is tuned based on:
146
+ * 1. Current environment (Node.js, browser, worker)
147
+ * 2. Available memory
148
+ * 3. Operation patterns
149
+ * 4. Cache hit/miss ratio
150
+ * 5. Operating mode (read-only vs. read-write)
151
+ * 6. Storage type (S3, filesystem, memory)
152
+ * 7. Dataset size
153
+ *
154
+ * Enhanced algorithm:
155
+ * - Start with a default based on the environment
156
+ * - For large datasets in S3 or other remote storage, use larger batches
157
+ * - For read-only mode, use larger batches to improve throughput
158
+ * - Dynamically adjust based on network latency and throughput
159
+ * - Balance between memory usage and performance
160
+ */
161
+ private tuneBatchSize;
162
+ /**
163
+ * Detect the appropriate warm storage type based on environment
164
+ */
165
+ private detectWarmStorageType;
166
+ /**
167
+ * Detect the appropriate cold storage type based on environment
168
+ */
169
+ private detectColdStorageType;
170
+ /**
171
+ * Initialize warm storage adapter
172
+ */
173
+ private initializeWarmStorage;
174
+ /**
175
+ * Initialize cold storage adapter
176
+ */
177
+ private initializeColdStorage;
178
+ /**
179
+ * Get an item from cache, trying each level in order
180
+ * @param id The item ID
181
+ * @returns The cached item or null if not found
182
+ */
183
+ get(id: string): Promise<T | null>;
184
+ /**
185
+ * Get an item from warm cache
186
+ * @param id The item ID
187
+ * @returns The cached item or null if not found
188
+ */
189
+ private getFromWarmCache;
190
+ /**
191
+ * Get an item from cold storage
192
+ * @param id The item ID
193
+ * @returns The item or null if not found
194
+ */
195
+ private getFromColdStorage;
196
+ /**
197
+ * Add an item to hot cache
198
+ * @param id The item ID
199
+ * @param item The item to cache
200
+ */
201
+ private addToHotCache;
202
+ /**
203
+ * Add an item to warm cache
204
+ * @param id The item ID
205
+ * @param item The item to cache
206
+ */
207
+ private addToWarmCache;
208
+ /**
209
+ * Evict items from hot cache based on LRU policy
210
+ */
211
+ private evictFromHotCache;
212
+ /**
213
+ * Set an item in all cache levels
214
+ * @param id The item ID
215
+ * @param item The item to cache
216
+ */
217
+ set(id: string, item: T): Promise<void>;
218
+ /**
219
+ * Delete an item from all cache levels
220
+ * @param id The item ID to delete
221
+ */
222
+ delete(id: string): Promise<void>;
223
+ /**
224
+ * Clear all cache levels
225
+ */
226
+ clear(): Promise<void>;
227
+ /**
228
+ * Get cache statistics
229
+ * @returns Cache statistics
230
+ */
231
+ getStats(): CacheStats;
232
+ /**
233
+ * Prefetch items based on ID patterns or relationships
234
+ * @param ids Array of IDs to prefetch
235
+ */
236
+ prefetch(ids: string[]): Promise<void>;
237
+ /**
238
+ * Check if it's time to tune parameters and do so if needed
239
+ * This is called before operations that might benefit from tuned parameters
240
+ *
241
+ * This method serves as a checkpoint for auto-tuning, ensuring that:
242
+ * 1. Parameters are tuned periodically based on the auto-tune interval
243
+ * 2. Tuning happens before critical operations that would benefit from optimized parameters
244
+ * 3. Tuning doesn't happen too frequently, which could impact performance
245
+ *
246
+ * By calling this method before get(), getMany(), and prefetch() operations,
247
+ * we ensure that the cache parameters are optimized for the current workload
248
+ * without adding unnecessary overhead to every operation.
249
+ */
250
+ private checkAndTuneParameters;
251
+ /**
252
+ * Get multiple items at once, optimizing for batch retrieval
253
+ * @param ids Array of IDs to get
254
+ * @returns Map of ID to item
255
+ */
256
+ getMany(ids: string[]): Promise<Map<string, T>>;
257
+ /**
258
+ * Set the storage adapters for warm and cold caches
259
+ * @param warmStorage Warm cache storage adapter
260
+ * @param coldStorage Cold storage adapter
261
+ */
262
+ setStorageAdapters(warmStorage: any, coldStorage: any): void;
263
+ }
264
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cacheManager.d.ts","sourceRoot":"","sources":["../../src/storage/cacheManager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAKrD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,SAAS;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IAED,UAAU,iBAAiB;QACzB,OAAO,CAAC,EAAE;YACR,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;SACpB,CAAC;KACH;CACF;AAGD,KAAK,QAAQ,GAAG,QAAQ,CAAA;AACxB,KAAK,IAAI,GAAG,SAAS,CAAA;AAWrB,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAkBD;;GAEG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,IAAI;IAEjD,OAAO,CAAC,QAAQ,CAAmC;IAGnD,OAAO,CAAC,KAAK,CAMZ;IAGD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,eAAe,CAAa;IAGpC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,yBAAyB,CAAQ;IACzC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,SAAS,CAAQ;IAGzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,iBAAiB,CAAY;IAGrC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,OAAO,CASd;IAED;;;OAGG;gBACS,OAAO,GAAE;QACnB,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,yBAAyB,CAAC,EAAE,MAAM,CAAA;QAClC,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,WAAW,CAAC,EAAE,GAAG,CAAA;QACjB,WAAW,CAAC,EAAE,GAAG,CAAA;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;KACd;IA4CN;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;;;;;;;OAQG;IACH,OAAO,CAAC,sBAAsB;IAoH9B;;;;;;;;;;;;;;OAcG;YACW,cAAc;IA2C5B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,gBAAgB;IA0HxB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,qBAAqB;IAiD7B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,gBAAgB;IA6BxB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,aAAa;IAqJrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;;;OAIG;IACU,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAuD/C;;;;OAIG;YACW,gBAAgB;IAW9B;;;;OAIG;YACW,kBAAkB;IAWhC;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAkBrB;;;;OAIG;YACW,cAAc;IAa5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsBzB;;;;OAIG;IACU,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpD;;;OAGG;IACU,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B9C;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCnC;;;OAGG;IACI,QAAQ,IAAI,UAAU;IAI7B;;;OAGG;IACU,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCnD;;;;;;;;;;;;OAYG;YACW,sBAAsB;IAWpC;;;;OAIG;IACU,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAqF5D;;;;OAIG;IACI,kBAAkB,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,GAAG,IAAI;CAIpE"}
@@ -143,6 +143,50 @@ export interface StorageOptions {
143
143
  * Operation configuration for timeout and retry behavior
144
144
  */
145
145
  operationConfig?: OperationConfig;
146
+ /**
147
+ * Cache configuration for optimizing data access
148
+ * Particularly important for S3 and other remote storage
149
+ */
150
+ cacheConfig?: {
151
+ /**
152
+ * Maximum size of the hot cache (most frequently accessed items)
153
+ * For large datasets, consider values between 5000-50000 depending on available memory
154
+ */
155
+ hotCacheMaxSize?: number;
156
+ /**
157
+ * Threshold at which to start evicting items from the hot cache
158
+ * Expressed as a fraction of hotCacheMaxSize (0.0 to 1.0)
159
+ * Default: 0.8 (start evicting when cache is 80% full)
160
+ */
161
+ hotCacheEvictionThreshold?: number;
162
+ /**
163
+ * Time-to-live for items in the warm cache in milliseconds
164
+ * Default: 3600000 (1 hour)
165
+ */
166
+ warmCacheTTL?: number;
167
+ /**
168
+ * Batch size for operations like prefetching
169
+ * Larger values improve throughput but use more memory
170
+ */
171
+ batchSize?: number;
172
+ /**
173
+ * Whether to enable auto-tuning of cache parameters
174
+ * When true, the system will automatically adjust cache sizes based on usage patterns
175
+ * Default: true
176
+ */
177
+ autoTune?: boolean;
178
+ /**
179
+ * The interval (in milliseconds) at which to auto-tune cache parameters
180
+ * Only applies when autoTune is true
181
+ * Default: 60000 (1 minute)
182
+ */
183
+ autoTuneInterval?: number;
184
+ /**
185
+ * Whether the storage is in read-only mode
186
+ * This affects cache sizing and prefetching strategies
187
+ */
188
+ readOnly?: boolean;
189
+ };
146
190
  }
147
191
  /**
148
192
  * Create a storage adapter based on the environment and configuration
@@ -1 +1 @@
1
- {"version":3,"file":"storageFactory.d.ts","sourceRoot":"","sources":["../../src/storage/storageFactory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAC,WAAW,EAAC,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAC,mBAAmB,EAAE,SAAS,EAAC,MAAM,mCAAmC,CAAA;AAChF,OAAO,EAAC,iBAAiB,EAAC,MAAM,iCAAiC,CAAA;AAEjE,OAAO,EAAC,eAAe,EAAC,MAAM,4BAA4B,CAAA;AAE1D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;;;;;;OASG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAA;IAEtE;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAE5B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAElC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE;QACR;;WAEG;QACH,UAAU,EAAE,MAAM,CAAA;QAElB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,CAAA;QAEf;;WAEG;QACH,WAAW,EAAE,MAAM,CAAA;QAEnB;;WAEG;QACH,eAAe,EAAE,MAAM,CAAA;QAEvB;;WAEG;QACH,YAAY,CAAC,EAAE,MAAM,CAAA;KACxB,CAAA;IAED;;OAEG;IACH,SAAS,CAAC,EAAE;QACR;;WAEG;QACH,UAAU,EAAE,MAAM,CAAA;QAElB;;WAEG;QACH,SAAS,EAAE,MAAM,CAAA;QAEjB;;WAEG;QACH,WAAW,EAAE,MAAM,CAAA;QAEnB;;WAEG;QACH,eAAe,EAAE,MAAM,CAAA;KAC1B,CAAA;IAED;;OAEG;IACH,UAAU,CAAC,EAAE;QACT;;WAEG;QACH,UAAU,EAAE,MAAM,CAAA;QAElB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,CAAA;QAEf;;WAEG;QACH,WAAW,EAAE,MAAM,CAAA;QAEnB;;WAEG;QACH,eAAe,EAAE,MAAM,CAAA;QAEvB;;WAEG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IAED;;OAEG;IACH,eAAe,CAAC,EAAE;QACd;;WAEG;QACH,UAAU,EAAE,MAAM,CAAA;QAElB;;WAEG;QACH,MAAM,CAAC,EAAE,MAAM,CAAA;QAEf;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAA;QAEhB;;WAEG;QACH,WAAW,EAAE,MAAM,CAAA;QAEnB;;WAEG;QACH,eAAe,EAAE,MAAM,CAAA;QAEvB;;WAEG;QACH,WAAW,CAAC,EAAE,MAAM,CAAA;KACvB,CAAA;IAED;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;CACpC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAC/B,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA8LzB;AAED;;GAEG;AACH,OAAO,EACH,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,SAAS,EACZ,CAAA"}
1
+ {"version":3,"file":"storageFactory.d.ts","sourceRoot":"","sources":["../../src/storage/storageFactory.ts"],"names":[],"mappings":"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"}