@soulcraft/brainy 0.38.0 → 0.40.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 +182 -105
- package/dist/brainyData.d.ts +66 -1
- package/dist/coreTypes.d.ts +65 -0
- package/dist/hnsw/hnswIndex.d.ts +9 -0
- package/dist/hnsw/hnswIndex.d.ts.map +1 -1
- package/dist/hnsw/hnswIndexOptimized.d.ts.map +1 -1
- package/dist/storage/adapters/fileSystemStorage.d.ts.map +1 -1
- package/dist/storage/adapters/memoryStorage.d.ts.map +1 -1
- package/dist/storage/adapters/opfsStorage.d.ts.map +1 -1
- package/dist/storage/adapters/s3CompatibleStorage.d.ts.map +1 -1
- package/dist/storage/cacheManager.d.ts +2 -2
- package/dist/storage/cacheManager.d.ts.map +1 -1
- package/dist/unified.js +1130 -37
- package/dist/unified.min.js +991 -991
- package/dist/utils/cacheAutoConfig.d.ts +63 -0
- package/dist/utils/cacheAutoConfig.d.ts.map +1 -0
- package/dist/utils/searchCache.d.ts +93 -0
- package/dist/utils/searchCache.d.ts.map +1 -0
- package/dist/utils/statisticsCollector.d.ts +55 -0
- package/dist/utils/statisticsCollector.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intelligent cache auto-configuration system
|
|
3
|
+
* Adapts cache settings based on environment, usage patterns, and storage type
|
|
4
|
+
*/
|
|
5
|
+
import { SearchCacheConfig } from './searchCache.js';
|
|
6
|
+
import { BrainyDataConfig } from '../brainyData.js';
|
|
7
|
+
export interface CacheUsageStats {
|
|
8
|
+
totalQueries: number;
|
|
9
|
+
repeatQueries: number;
|
|
10
|
+
avgQueryTime: number;
|
|
11
|
+
memoryPressure: number;
|
|
12
|
+
storageType: 'memory' | 'opfs' | 's3' | 'filesystem';
|
|
13
|
+
isDistributed: boolean;
|
|
14
|
+
changeFrequency: number;
|
|
15
|
+
readWriteRatio: number;
|
|
16
|
+
}
|
|
17
|
+
export interface AutoConfigResult {
|
|
18
|
+
cacheConfig: SearchCacheConfig;
|
|
19
|
+
realtimeConfig: NonNullable<BrainyDataConfig['realtimeUpdates']>;
|
|
20
|
+
reasoning: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare class CacheAutoConfigurator {
|
|
23
|
+
private stats;
|
|
24
|
+
private configHistory;
|
|
25
|
+
private lastOptimization;
|
|
26
|
+
/**
|
|
27
|
+
* Auto-detect optimal cache configuration based on current conditions
|
|
28
|
+
*/
|
|
29
|
+
autoDetectOptimalConfig(storageConfig?: BrainyDataConfig['storage'], currentStats?: Partial<CacheUsageStats>): AutoConfigResult;
|
|
30
|
+
/**
|
|
31
|
+
* Dynamically adjust configuration based on runtime performance
|
|
32
|
+
*/
|
|
33
|
+
adaptConfiguration(currentConfig: SearchCacheConfig, performanceMetrics: {
|
|
34
|
+
hitRate: number;
|
|
35
|
+
avgResponseTime: number;
|
|
36
|
+
memoryUsage: number;
|
|
37
|
+
externalChangesDetected: number;
|
|
38
|
+
timeSinceLastChange: number;
|
|
39
|
+
}): AutoConfigResult | null;
|
|
40
|
+
/**
|
|
41
|
+
* Get recommended configuration for specific use case
|
|
42
|
+
*/
|
|
43
|
+
getRecommendedConfig(useCase: 'high-consistency' | 'balanced' | 'performance-first'): AutoConfigResult;
|
|
44
|
+
/**
|
|
45
|
+
* Learn from usage patterns and improve recommendations
|
|
46
|
+
*/
|
|
47
|
+
learnFromUsage(usageData: {
|
|
48
|
+
queryPatterns: string[];
|
|
49
|
+
responseTime: number;
|
|
50
|
+
cacheHits: number;
|
|
51
|
+
totalQueries: number;
|
|
52
|
+
dataChanges: number;
|
|
53
|
+
timeWindow: number;
|
|
54
|
+
}): void;
|
|
55
|
+
private detectEnvironment;
|
|
56
|
+
private generateOptimalConfig;
|
|
57
|
+
private calculateRealtimeConfig;
|
|
58
|
+
private detectMemoryConstraints;
|
|
59
|
+
/**
|
|
60
|
+
* Get human-readable explanation of current configuration
|
|
61
|
+
*/
|
|
62
|
+
getConfigExplanation(config: AutoConfigResult): string;
|
|
63
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cacheAutoConfig.d.ts","sourceRoot":"","sources":["../../src/utils/cacheAutoConfig.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,GAAG,YAAY,CAAA;IACpD,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,iBAAiB,CAAA;IAC9B,cAAc,EAAE,WAAW,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAChE,SAAS,EAAE,MAAM,EAAE,CAAA;CACpB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,KAAK,CASZ;IAED,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,gBAAgB,CAAI;IAE5B;;OAEG;IACI,uBAAuB,CAC5B,aAAa,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,EAC3C,YAAY,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GACtC,gBAAgB;IAmBnB;;OAEG;IACI,kBAAkB,CACvB,aAAa,EAAE,iBAAiB,EAChC,kBAAkB,EAAE;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,eAAe,EAAE,MAAM,CAAA;QACvB,WAAW,EAAE,MAAM,CAAA;QACnB,uBAAuB,EAAE,MAAM,CAAA;QAC/B,mBAAmB,EAAE,MAAM,CAAA;KAC5B,GACA,gBAAgB,GAAG,IAAI;IAgE1B;;OAEG;IACI,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,GAAG,mBAAmB,GAAG,gBAAgB;IAkC7G;;OAEG;IACI,cAAc,CAAC,SAAS,EAAE;QAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,YAAY,EAAE,MAAM,CAAA;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,YAAY,EAAE,MAAM,CAAA;QACpB,WAAW,EAAE,MAAM,CAAA;QACnB,UAAU,EAAE,MAAM,CAAA;KACnB,GAAG,IAAI;IAaR,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,qBAAqB;IAkE7B,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACI,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;CAgB9D"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SearchCache - Caches search results for improved performance
|
|
3
|
+
*/
|
|
4
|
+
import { SearchResult } from '../coreTypes.js';
|
|
5
|
+
export interface CacheEntry<T = any> {
|
|
6
|
+
results: SearchResult<T>[];
|
|
7
|
+
timestamp: number;
|
|
8
|
+
hits: number;
|
|
9
|
+
}
|
|
10
|
+
export interface SearchCacheConfig {
|
|
11
|
+
maxAge?: number;
|
|
12
|
+
maxSize?: number;
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
hitCountWeight?: number;
|
|
15
|
+
}
|
|
16
|
+
export declare class SearchCache<T = any> {
|
|
17
|
+
private cache;
|
|
18
|
+
private maxAge;
|
|
19
|
+
private maxSize;
|
|
20
|
+
private enabled;
|
|
21
|
+
private hitCountWeight;
|
|
22
|
+
private hits;
|
|
23
|
+
private misses;
|
|
24
|
+
private evictions;
|
|
25
|
+
constructor(config?: SearchCacheConfig);
|
|
26
|
+
/**
|
|
27
|
+
* Generate cache key from search parameters
|
|
28
|
+
*/
|
|
29
|
+
getCacheKey(query: any, k: number, options?: Record<string, any>): string;
|
|
30
|
+
/**
|
|
31
|
+
* Get cached results if available and not expired
|
|
32
|
+
*/
|
|
33
|
+
get(key: string): SearchResult<T>[] | null;
|
|
34
|
+
/**
|
|
35
|
+
* Cache search results
|
|
36
|
+
*/
|
|
37
|
+
set(key: string, results: SearchResult<T>[]): void;
|
|
38
|
+
/**
|
|
39
|
+
* Evict the oldest entry based on timestamp and hit count
|
|
40
|
+
*/
|
|
41
|
+
private evictOldest;
|
|
42
|
+
/**
|
|
43
|
+
* Clear all cached results
|
|
44
|
+
*/
|
|
45
|
+
clear(): void;
|
|
46
|
+
/**
|
|
47
|
+
* Invalidate cache entries that might be affected by data changes
|
|
48
|
+
*/
|
|
49
|
+
invalidate(pattern?: string | RegExp): void;
|
|
50
|
+
/**
|
|
51
|
+
* Smart invalidation for real-time data updates
|
|
52
|
+
* Only clears cache if it's getting stale or if data changes significantly
|
|
53
|
+
*/
|
|
54
|
+
invalidateOnDataChange(changeType?: 'add' | 'update' | 'delete'): void;
|
|
55
|
+
/**
|
|
56
|
+
* Check if cache entries have expired and remove them
|
|
57
|
+
* This is especially important in distributed scenarios where
|
|
58
|
+
* real-time updates might be delayed or missed
|
|
59
|
+
*/
|
|
60
|
+
cleanupExpiredEntries(): number;
|
|
61
|
+
/**
|
|
62
|
+
* Get cache statistics
|
|
63
|
+
*/
|
|
64
|
+
getStats(): {
|
|
65
|
+
hits: number;
|
|
66
|
+
misses: number;
|
|
67
|
+
evictions: number;
|
|
68
|
+
hitRate: number;
|
|
69
|
+
size: number;
|
|
70
|
+
maxSize: number;
|
|
71
|
+
enabled: boolean;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Enable or disable caching
|
|
75
|
+
*/
|
|
76
|
+
setEnabled(enabled: boolean): void;
|
|
77
|
+
/**
|
|
78
|
+
* Get memory usage estimate in bytes
|
|
79
|
+
*/
|
|
80
|
+
getMemoryUsage(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Get current cache configuration
|
|
83
|
+
*/
|
|
84
|
+
getConfig(): SearchCacheConfig;
|
|
85
|
+
/**
|
|
86
|
+
* Update cache configuration dynamically
|
|
87
|
+
*/
|
|
88
|
+
updateConfig(newConfig: Partial<SearchCacheConfig>): void;
|
|
89
|
+
/**
|
|
90
|
+
* Evict entries if cache exceeds maxSize
|
|
91
|
+
*/
|
|
92
|
+
private evictIfNeeded;
|
|
93
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchCache.d.ts","sourceRoot":"","sources":["../../src/utils/searchCache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,qBAAa,WAAW,CAAC,CAAC,GAAG,GAAG;IAC9B,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAQ;IAG9B,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,SAAS,CAAI;gBAET,MAAM,GAAE,iBAAsB;IAO1C;;OAEG;IACH,WAAW,CACT,KAAK,EAAE,GAAG,EACV,CAAC,EAAE,MAAM,EACT,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAChC,MAAM;IAkBT;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAsB1C;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAelD;;OAEG;IACH,OAAO,CAAC,WAAW;IAwBnB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAqB3C;;;OAGG;IACH,sBAAsB,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI;IAOtE;;;;OAIG;IACH,qBAAqB,IAAI,MAAM;IAc/B;;OAEG;IACH,QAAQ;;;;;;;;;IAaR;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOlC;;OAEG;IACH,cAAc,IAAI,MAAM;IAexB;;OAEG;IACH,SAAS,IAAI,iBAAiB;IAS9B;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAmBzD;;OAEG;IACH,OAAO,CAAC,aAAa;CA6BtB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight statistics collector for Brainy
|
|
3
|
+
* Designed to have minimal performance impact even with millions of entries
|
|
4
|
+
*/
|
|
5
|
+
import { StatisticsData } from '../coreTypes.js';
|
|
6
|
+
export declare class StatisticsCollector {
|
|
7
|
+
private contentTypes;
|
|
8
|
+
private oldestTimestamp;
|
|
9
|
+
private newestTimestamp;
|
|
10
|
+
private updateTimestamps;
|
|
11
|
+
private searchMetrics;
|
|
12
|
+
private verbTypes;
|
|
13
|
+
private storageSizeCache;
|
|
14
|
+
private readonly MAX_TIMESTAMPS;
|
|
15
|
+
private readonly MAX_SEARCH_TERMS;
|
|
16
|
+
private readonly SIZE_UPDATE_INTERVAL;
|
|
17
|
+
/**
|
|
18
|
+
* Track content type (very lightweight)
|
|
19
|
+
*/
|
|
20
|
+
trackContentType(type: string): void;
|
|
21
|
+
/**
|
|
22
|
+
* Track data update timestamp (lightweight)
|
|
23
|
+
*/
|
|
24
|
+
trackUpdate(timestamp?: number): void;
|
|
25
|
+
/**
|
|
26
|
+
* Track search performance (lightweight)
|
|
27
|
+
*/
|
|
28
|
+
trackSearch(searchTerm: string, durationMs: number): void;
|
|
29
|
+
/**
|
|
30
|
+
* Track verb type (lightweight)
|
|
31
|
+
*/
|
|
32
|
+
trackVerbType(type: string): void;
|
|
33
|
+
/**
|
|
34
|
+
* Update storage size estimates (called periodically, not on every operation)
|
|
35
|
+
*/
|
|
36
|
+
updateStorageSizes(sizes: {
|
|
37
|
+
nouns: number;
|
|
38
|
+
verbs: number;
|
|
39
|
+
metadata: number;
|
|
40
|
+
index: number;
|
|
41
|
+
}): void;
|
|
42
|
+
/**
|
|
43
|
+
* Get comprehensive statistics
|
|
44
|
+
*/
|
|
45
|
+
getStatistics(): Partial<StatisticsData>;
|
|
46
|
+
/**
|
|
47
|
+
* Merge statistics from storage (for distributed systems)
|
|
48
|
+
*/
|
|
49
|
+
mergeFromStorage(stored: Partial<StatisticsData>): void;
|
|
50
|
+
/**
|
|
51
|
+
* Reset statistics (for testing)
|
|
52
|
+
*/
|
|
53
|
+
reset(): void;
|
|
54
|
+
private pruneSearchTerms;
|
|
55
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statisticsCollector.d.ts","sourceRoot":"","sources":["../../src/utils/statisticsCollector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAOhD,qBAAa,mBAAmB;IAE9B,OAAO,CAAC,YAAY,CAAiC;IAGrD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,gBAAgB,CAAuB;IAG/C,OAAO,CAAC,aAAa,CAKpB;IAGD,OAAO,CAAC,SAAS,CAAiC;IAGlD,OAAO,CAAC,gBAAgB,CAQvB;IAED,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAO;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IACvC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAE7C;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAgBrC;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAyBzD;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE;QACxB,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;QACb,QAAQ,EAAE,MAAM,CAAA;QAChB,KAAK,EAAE,MAAM,CAAA;KACd,GAAG,IAAI;IAOR;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,cAAc,CAAC;IAmFxC;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IA4BvD;;OAEG;IACH,KAAK,IAAI,IAAI;IAcb,OAAO,CAAC,gBAAgB;CAWzB"}
|
package/package.json
CHANGED