@soulcraft/brainy 0.36.0 → 0.38.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 +712 -1474
- package/dist/brainyData.d.ts +37 -0
- package/dist/distributed/configManager.d.ts +97 -0
- package/dist/distributed/domainDetector.d.ts +77 -0
- package/dist/distributed/hashPartitioner.d.ts +77 -0
- package/dist/distributed/healthMonitor.d.ts +110 -0
- package/dist/distributed/index.d.ts +10 -0
- package/dist/distributed/operationalModes.d.ts +104 -0
- package/dist/hnsw/distributedSearch.d.ts +118 -0
- package/dist/hnsw/distributedSearch.d.ts.map +1 -0
- package/dist/hnsw/optimizedHNSWIndex.d.ts +97 -0
- package/dist/hnsw/optimizedHNSWIndex.d.ts.map +1 -0
- package/dist/hnsw/partitionedHNSWIndex.d.ts +101 -0
- package/dist/hnsw/partitionedHNSWIndex.d.ts.map +1 -0
- package/dist/hnsw/scaledHNSWSystem.d.ts +142 -0
- package/dist/hnsw/scaledHNSWSystem.d.ts.map +1 -0
- package/dist/storage/adapters/batchS3Operations.d.ts +71 -0
- package/dist/storage/adapters/batchS3Operations.d.ts.map +1 -0
- package/dist/storage/enhancedCacheManager.d.ts +141 -0
- package/dist/storage/enhancedCacheManager.d.ts.map +1 -0
- package/dist/storage/readOnlyOptimizations.d.ts +133 -0
- package/dist/storage/readOnlyOptimizations.d.ts.map +1 -0
- package/dist/types/distributedTypes.d.ts +197 -0
- package/dist/types/distributedTypes.d.ts.map +1 -0
- package/dist/unified.js +1383 -2
- package/dist/unified.min.js +991 -991
- package/dist/utils/autoConfiguration.d.ts +125 -0
- package/dist/utils/autoConfiguration.d.ts.map +1 -0
- package/dist/utils/crypto.d.ts +25 -0
- package/dist/utils/crypto.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optimized HNSW Index for Large-Scale Vector Search
|
|
3
|
+
* Implements dynamic parameter tuning and performance optimizations
|
|
4
|
+
*/
|
|
5
|
+
import { DistanceFunction, HNSWConfig, Vector, VectorDocument } from '../coreTypes.js';
|
|
6
|
+
import { HNSWIndex } from './hnswIndex.js';
|
|
7
|
+
export interface OptimizedHNSWConfig extends HNSWConfig {
|
|
8
|
+
dynamicParameterTuning?: boolean;
|
|
9
|
+
targetSearchLatency?: number;
|
|
10
|
+
targetRecall?: number;
|
|
11
|
+
maxNodes?: number;
|
|
12
|
+
memoryBudget?: number;
|
|
13
|
+
diskCacheEnabled?: boolean;
|
|
14
|
+
compressionEnabled?: boolean;
|
|
15
|
+
performanceTracking?: boolean;
|
|
16
|
+
adaptiveEfSearch?: boolean;
|
|
17
|
+
levelMultiplier?: number;
|
|
18
|
+
seedConnections?: number;
|
|
19
|
+
pruningStrategy?: 'simple' | 'diverse' | 'hybrid';
|
|
20
|
+
}
|
|
21
|
+
interface PerformanceMetrics {
|
|
22
|
+
averageSearchTime: number;
|
|
23
|
+
averageRecall: number;
|
|
24
|
+
memoryUsage: number;
|
|
25
|
+
indexSize: number;
|
|
26
|
+
apiCalls: number;
|
|
27
|
+
cacheHitRate: number;
|
|
28
|
+
}
|
|
29
|
+
interface DynamicParameters {
|
|
30
|
+
efSearch: number;
|
|
31
|
+
efConstruction: number;
|
|
32
|
+
M: number;
|
|
33
|
+
ml: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Optimized HNSW Index with dynamic parameter tuning for large datasets
|
|
37
|
+
*/
|
|
38
|
+
export declare class OptimizedHNSWIndex extends HNSWIndex {
|
|
39
|
+
private optimizedConfig;
|
|
40
|
+
private performanceMetrics;
|
|
41
|
+
private dynamicParams;
|
|
42
|
+
private searchHistory;
|
|
43
|
+
private parameterTuningInterval?;
|
|
44
|
+
constructor(config?: Partial<OptimizedHNSWConfig>, distanceFunction?: DistanceFunction);
|
|
45
|
+
/**
|
|
46
|
+
* Optimized search with dynamic parameter adjustment
|
|
47
|
+
*/
|
|
48
|
+
search(queryVector: Vector, k?: number): Promise<Array<[string, number]>>;
|
|
49
|
+
/**
|
|
50
|
+
* Dynamically adjust efSearch based on performance requirements
|
|
51
|
+
*/
|
|
52
|
+
private adjustEfSearch;
|
|
53
|
+
/**
|
|
54
|
+
* Record search performance metrics
|
|
55
|
+
*/
|
|
56
|
+
private recordSearchMetrics;
|
|
57
|
+
/**
|
|
58
|
+
* Check memory usage and trigger optimizations
|
|
59
|
+
*/
|
|
60
|
+
private checkMemoryUsage;
|
|
61
|
+
/**
|
|
62
|
+
* Compress index to reduce memory usage (placeholder)
|
|
63
|
+
*/
|
|
64
|
+
private compressIndex;
|
|
65
|
+
/**
|
|
66
|
+
* Start automatic parameter tuning
|
|
67
|
+
*/
|
|
68
|
+
private startParameterTuning;
|
|
69
|
+
/**
|
|
70
|
+
* Automatic parameter tuning based on performance metrics
|
|
71
|
+
*/
|
|
72
|
+
private tuneParameters;
|
|
73
|
+
/**
|
|
74
|
+
* Get optimized configuration recommendations for current dataset size
|
|
75
|
+
*/
|
|
76
|
+
getOptimizedConfig(): OptimizedHNSWConfig;
|
|
77
|
+
/**
|
|
78
|
+
* Get current performance metrics
|
|
79
|
+
*/
|
|
80
|
+
getPerformanceMetrics(): PerformanceMetrics & {
|
|
81
|
+
currentParams: DynamicParameters;
|
|
82
|
+
searchHistorySize: number;
|
|
83
|
+
};
|
|
84
|
+
/**
|
|
85
|
+
* Apply optimized bulk insertion strategy
|
|
86
|
+
*/
|
|
87
|
+
bulkInsert(items: VectorDocument[]): Promise<string[]>;
|
|
88
|
+
/**
|
|
89
|
+
* Optimize insertion order to improve index quality
|
|
90
|
+
*/
|
|
91
|
+
private optimizeInsertionOrder;
|
|
92
|
+
/**
|
|
93
|
+
* Cleanup resources
|
|
94
|
+
*/
|
|
95
|
+
destroy(): void;
|
|
96
|
+
}
|
|
97
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizedHNSWIndex.d.ts","sourceRoot":"","sources":["../../src/hnsw/optimizedHNSWIndex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,UAAU,EAEV,MAAM,EACN,cAAc,EACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IAErD,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAG5B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAG1B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,eAAe,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAA;CAClD;AAED,UAAU,kBAAkB;IAC1B,iBAAiB,EAAE,MAAM,CAAA;IACzB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,CAAC,EAAE,MAAM,CAAA;IACT,EAAE,EAAE,MAAM,CAAA;CACX;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,aAAa,CAA+D;IACpF,OAAO,CAAC,uBAAuB,CAAC,CAAgB;gBAG9C,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,EACzC,gBAAgB,GAAE,gBAAoC;IA+DxD;;OAEG;IACU,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,CAAC,GAAE,MAAW,GACb,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAyCnC;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0B3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAM5B;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACI,kBAAkB,IAAI,mBAAmB;IA6ChD;;OAEG;IACI,qBAAqB,IAAI,kBAAkB,GAAG;QACnD,aAAa,EAAE,iBAAiB,CAAA;QAChC,iBAAiB,EAAE,MAAM,CAAA;KAC1B;IAQD;;OAEG;IACU,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwCnE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACI,OAAO,IAAI,IAAI;CAKvB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Partitioned HNSW Index for Large-Scale Vector Search
|
|
3
|
+
* Implements sharding strategies to handle millions of vectors efficiently
|
|
4
|
+
*/
|
|
5
|
+
import { DistanceFunction, HNSWConfig, Vector, VectorDocument } from '../coreTypes.js';
|
|
6
|
+
export interface PartitionConfig {
|
|
7
|
+
maxNodesPerPartition: number;
|
|
8
|
+
partitionStrategy: 'semantic' | 'hash';
|
|
9
|
+
semanticClusters?: number;
|
|
10
|
+
autoTuneSemanticClusters?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface PartitionMetadata {
|
|
13
|
+
id: string;
|
|
14
|
+
nodeCount: number;
|
|
15
|
+
bounds?: {
|
|
16
|
+
centroid: Vector;
|
|
17
|
+
radius: number;
|
|
18
|
+
};
|
|
19
|
+
strategy: string;
|
|
20
|
+
created: Date;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Partitioned HNSW Index that splits large datasets across multiple smaller indices
|
|
24
|
+
* This enables efficient search across millions of vectors by reducing memory usage
|
|
25
|
+
* and parallelizing search operations
|
|
26
|
+
*/
|
|
27
|
+
export declare class PartitionedHNSWIndex {
|
|
28
|
+
private partitions;
|
|
29
|
+
private partitionMetadata;
|
|
30
|
+
private config;
|
|
31
|
+
private hnswConfig;
|
|
32
|
+
private distanceFunction;
|
|
33
|
+
private dimension;
|
|
34
|
+
private nextPartitionId;
|
|
35
|
+
constructor(partitionConfig?: Partial<PartitionConfig>, hnswConfig?: Partial<HNSWConfig>, distanceFunction?: DistanceFunction);
|
|
36
|
+
/**
|
|
37
|
+
* Add a vector to the partitioned index
|
|
38
|
+
*/
|
|
39
|
+
addItem(item: VectorDocument): Promise<string>;
|
|
40
|
+
/**
|
|
41
|
+
* Search across all partitions for nearest neighbors
|
|
42
|
+
*/
|
|
43
|
+
search(queryVector: Vector, k?: number, searchScope?: {
|
|
44
|
+
partitionIds?: string[];
|
|
45
|
+
maxPartitions?: number;
|
|
46
|
+
}): Promise<Array<[string, number]>>;
|
|
47
|
+
/**
|
|
48
|
+
* Select the appropriate partition for a new item
|
|
49
|
+
* Automatically chooses semantic partitioning when beneficial, falls back to hash
|
|
50
|
+
*/
|
|
51
|
+
private selectPartition;
|
|
52
|
+
/**
|
|
53
|
+
* Hash-based partitioning for even distribution
|
|
54
|
+
*/
|
|
55
|
+
private hashPartition;
|
|
56
|
+
/**
|
|
57
|
+
* Semantic clustering partitioning
|
|
58
|
+
*/
|
|
59
|
+
private semanticPartition;
|
|
60
|
+
/**
|
|
61
|
+
* Auto-tune semantic clusters based on dataset size and performance
|
|
62
|
+
*/
|
|
63
|
+
private autoTuneSemanticClusters;
|
|
64
|
+
/**
|
|
65
|
+
* Select which partitions to search based on query
|
|
66
|
+
*/
|
|
67
|
+
private selectSearchPartitions;
|
|
68
|
+
/**
|
|
69
|
+
* Update partition bounds for semantic clustering
|
|
70
|
+
*/
|
|
71
|
+
private updatePartitionBounds;
|
|
72
|
+
/**
|
|
73
|
+
* Split an overgrown partition into smaller partitions
|
|
74
|
+
*/
|
|
75
|
+
private splitPartition;
|
|
76
|
+
/**
|
|
77
|
+
* Simple hash function for consistent partitioning
|
|
78
|
+
*/
|
|
79
|
+
private simpleHash;
|
|
80
|
+
/**
|
|
81
|
+
* Get partition statistics
|
|
82
|
+
*/
|
|
83
|
+
getPartitionStats(): {
|
|
84
|
+
totalPartitions: number;
|
|
85
|
+
totalNodes: number;
|
|
86
|
+
averageNodesPerPartition: number;
|
|
87
|
+
partitionDetails: PartitionMetadata[];
|
|
88
|
+
};
|
|
89
|
+
/**
|
|
90
|
+
* Remove an item from the index
|
|
91
|
+
*/
|
|
92
|
+
removeItem(id: string): Promise<boolean>;
|
|
93
|
+
/**
|
|
94
|
+
* Clear all partitions
|
|
95
|
+
*/
|
|
96
|
+
clear(): void;
|
|
97
|
+
/**
|
|
98
|
+
* Get total size across all partitions
|
|
99
|
+
*/
|
|
100
|
+
size(): number;
|
|
101
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partitionedHNSWIndex.d.ts","sourceRoot":"","sources":["../../src/hnsw/partitionedHNSWIndex.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gBAAgB,EAChB,UAAU,EAEV,MAAM,EACN,cAAc,EACf,MAAM,iBAAiB,CAAA;AAIxB,MAAM,WAAW,eAAe;IAC9B,oBAAoB,EAAE,MAAM,CAAA;IAC5B,iBAAiB,EAAE,UAAU,GAAG,MAAM,CAAA;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,IAAI,CAAA;CACd;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,eAAe,CAAI;gBAGzB,eAAe,GAAE,OAAO,CAAC,eAAe,CAAM,EAC9C,UAAU,GAAE,OAAO,CAAC,UAAU,CAAM,EACpC,gBAAgB,GAAE,gBAAoC;IAsBxD;;OAEG;IACU,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IA+C3D;;OAEG;IACU,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,CAAC,GAAE,MAAW,EACd,WAAW,CAAC,EAAE;QACZ,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;QACvB,aAAa,CAAC,EAAE,MAAM,CAAA;KACvB,GACA,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IA+BnC;;;OAGG;YACW,eAAe;IAgB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;YACW,sBAAsB;IAwCpC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;YACW,cAAc;IAc5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACI,iBAAiB,IAAI;QAC1B,eAAe,EAAE,MAAM,CAAA;QACvB,UAAU,EAAE,MAAM,CAAA;QAClB,wBAAwB,EAAE,MAAM,CAAA;QAChC,gBAAgB,EAAE,iBAAiB,EAAE,CAAA;KACtC;IAYD;;OAEG;IACU,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAarD;;OAEG;IACI,KAAK,IAAI,IAAI;IASpB;;OAEG;IACI,IAAI,IAAI,MAAM;CAGtB"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaled HNSW System - Integration of All Optimization Strategies
|
|
3
|
+
* Production-ready system for handling millions of vectors with sub-second search
|
|
4
|
+
*/
|
|
5
|
+
import { Vector, VectorDocument } from '../coreTypes.js';
|
|
6
|
+
import { PartitionConfig } from './partitionedHNSWIndex.js';
|
|
7
|
+
import { OptimizedHNSWConfig } from './optimizedHNSWIndex.js';
|
|
8
|
+
import { SearchStrategy } from './distributedSearch.js';
|
|
9
|
+
export interface ScaledHNSWConfig {
|
|
10
|
+
expectedDatasetSize?: number;
|
|
11
|
+
maxMemoryUsage?: number;
|
|
12
|
+
targetSearchLatency?: number;
|
|
13
|
+
s3Config?: {
|
|
14
|
+
bucketName: string;
|
|
15
|
+
region: string;
|
|
16
|
+
endpoint?: string;
|
|
17
|
+
accessKeyId?: string;
|
|
18
|
+
secretAccessKey?: string;
|
|
19
|
+
};
|
|
20
|
+
autoConfigureEnvironment?: boolean;
|
|
21
|
+
learningEnabled?: boolean;
|
|
22
|
+
enablePartitioning?: boolean;
|
|
23
|
+
enableCompression?: boolean;
|
|
24
|
+
enableDistributedSearch?: boolean;
|
|
25
|
+
enablePredictiveCaching?: boolean;
|
|
26
|
+
partitionConfig?: Partial<PartitionConfig>;
|
|
27
|
+
hnswConfig?: Partial<OptimizedHNSWConfig>;
|
|
28
|
+
readOnlyMode?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* High-performance HNSW system with all optimizations integrated
|
|
32
|
+
* Handles datasets from thousands to millions of vectors
|
|
33
|
+
*/
|
|
34
|
+
export declare class ScaledHNSWSystem {
|
|
35
|
+
private config;
|
|
36
|
+
private autoConfig;
|
|
37
|
+
private partitionedIndex?;
|
|
38
|
+
private distributedSearch?;
|
|
39
|
+
private cacheManager?;
|
|
40
|
+
private batchOperations?;
|
|
41
|
+
private readOnlyOptimizations?;
|
|
42
|
+
private performanceMetrics;
|
|
43
|
+
constructor(config?: ScaledHNSWConfig);
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the optimized system based on configuration
|
|
46
|
+
*/
|
|
47
|
+
private initializeOptimizedSystem;
|
|
48
|
+
/**
|
|
49
|
+
* Calculate optimal configuration based on dataset size and constraints
|
|
50
|
+
*/
|
|
51
|
+
private calculateOptimalConfiguration;
|
|
52
|
+
/**
|
|
53
|
+
* Add vector to the scaled system
|
|
54
|
+
*/
|
|
55
|
+
addVector(item: VectorDocument): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Bulk insert vectors with optimizations
|
|
58
|
+
*/
|
|
59
|
+
bulkInsert(items: VectorDocument[]): Promise<string[]>;
|
|
60
|
+
/**
|
|
61
|
+
* High-performance vector search with all optimizations
|
|
62
|
+
*/
|
|
63
|
+
search(queryVector: Vector, k?: number, options?: {
|
|
64
|
+
strategy?: SearchStrategy;
|
|
65
|
+
useCache?: boolean;
|
|
66
|
+
maxPartitions?: number;
|
|
67
|
+
}): Promise<Array<[string, number]>>;
|
|
68
|
+
/**
|
|
69
|
+
* Get system performance metrics
|
|
70
|
+
*/
|
|
71
|
+
getPerformanceMetrics(): typeof this.performanceMetrics & {
|
|
72
|
+
partitionStats?: any;
|
|
73
|
+
cacheStats?: any;
|
|
74
|
+
compressionStats?: any;
|
|
75
|
+
distributedSearchStats?: any;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Optimize insertion order for better index quality
|
|
79
|
+
*/
|
|
80
|
+
private optimizeInsertionOrder;
|
|
81
|
+
/**
|
|
82
|
+
* Calculate optimal batch size based on system resources
|
|
83
|
+
*/
|
|
84
|
+
private calculateOptimalBatchSize;
|
|
85
|
+
/**
|
|
86
|
+
* Update search performance metrics
|
|
87
|
+
*/
|
|
88
|
+
private updateSearchMetrics;
|
|
89
|
+
/**
|
|
90
|
+
* Estimate current memory usage
|
|
91
|
+
*/
|
|
92
|
+
private estimateMemoryUsage;
|
|
93
|
+
/**
|
|
94
|
+
* Generate performance report
|
|
95
|
+
*/
|
|
96
|
+
generatePerformanceReport(): string;
|
|
97
|
+
/**
|
|
98
|
+
* Get overall system status
|
|
99
|
+
*/
|
|
100
|
+
private getSystemStatus;
|
|
101
|
+
/**
|
|
102
|
+
* Check if adaptive learning should be triggered
|
|
103
|
+
*/
|
|
104
|
+
private shouldTriggerLearning;
|
|
105
|
+
/**
|
|
106
|
+
* Adaptively learn from performance and adjust configuration
|
|
107
|
+
*/
|
|
108
|
+
private adaptivelyLearnFromPerformance;
|
|
109
|
+
/**
|
|
110
|
+
* Update dataset analysis for better auto-configuration
|
|
111
|
+
*/
|
|
112
|
+
updateDatasetAnalysis(vectorCount: number, vectorDimension?: number): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Infer access patterns from current metrics
|
|
115
|
+
*/
|
|
116
|
+
private inferAccessPatterns;
|
|
117
|
+
/**
|
|
118
|
+
* Cleanup system resources
|
|
119
|
+
*/
|
|
120
|
+
cleanup(): void;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create a fully auto-configured Brainy system - minimal setup required!
|
|
124
|
+
* Just provide S3 config if you want persistence beyond the current session
|
|
125
|
+
*/
|
|
126
|
+
export declare function createAutoBrainy(s3Config?: {
|
|
127
|
+
bucketName: string;
|
|
128
|
+
region?: string;
|
|
129
|
+
accessKeyId?: string;
|
|
130
|
+
secretAccessKey?: string;
|
|
131
|
+
}): ScaledHNSWSystem;
|
|
132
|
+
/**
|
|
133
|
+
* Create a Brainy system optimized for specific scenarios
|
|
134
|
+
*/
|
|
135
|
+
export declare function createQuickBrainy(scenario: 'small' | 'medium' | 'large' | 'enterprise', s3Config?: {
|
|
136
|
+
bucketName: string;
|
|
137
|
+
region?: string;
|
|
138
|
+
}): Promise<ScaledHNSWSystem>;
|
|
139
|
+
/**
|
|
140
|
+
* Legacy factory function - still works but consider using createAutoBrainy() instead
|
|
141
|
+
*/
|
|
142
|
+
export declare function createScaledHNSWSystem(config?: ScaledHNSWConfig): ScaledHNSWSystem;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaledHNSWSystem.d.ts","sourceRoot":"","sources":["../../src/hnsw/scaledHNSWSystem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAc,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAwB,eAAe,EAAE,MAAM,2BAA2B,CAAA;AACjF,OAAO,EAAsB,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AACjF,OAAO,EAA2B,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAOhF,MAAM,WAAW,gBAAgB;IAE/B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAG5B,QAAQ,CAAC,EAAE;QACT,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IAGD,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,eAAe,CAAC,EAAE,OAAO,CAAA;IAGzB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAGjC,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACzC,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAWb;IACD,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,gBAAgB,CAAC,CAAsB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAAyB;IACnD,OAAO,CAAC,YAAY,CAAC,CAA2B;IAChD,OAAO,CAAC,eAAe,CAAC,CAAmB;IAC3C,OAAO,CAAC,qBAAqB,CAAC,CAAuB;IAGrD,OAAO,CAAC,kBAAkB,CAQzB;gBAEW,MAAM,GAAE,gBAAqB;IAqBzC;;OAEG;YACW,yBAAyB;IAwGvC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAwGrC;;OAEG;IACU,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7D;;OAEG;IACU,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoCnE;;OAEG;IACU,MAAM,CACjB,WAAW,EAAE,MAAM,EACnB,CAAC,GAAE,MAAW,EACd,OAAO,GAAE;QACP,QAAQ,CAAC,EAAE,cAAc,CAAA;QACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,aAAa,CAAC,EAAE,MAAM,CAAA;KAClB,GACL,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IA0CnC;;OAEG;IACI,qBAAqB,IAAI,OAAO,IAAI,CAAC,kBAAkB,GAAG;QAC/D,cAAc,CAAC,EAAE,GAAG,CAAA;QACpB,UAAU,CAAC,EAAE,GAAG,CAAA;QAChB,gBAAgB,CAAC,EAAE,GAAG,CAAA;QACtB,sBAAsB,CAAC,EAAE,GAAG,CAAA;KAC7B;IAuBD;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAU9B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAUjC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACI,yBAAyB,IAAI,MAAM;IAuB1C;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAU7B;;OAEG;YACW,8BAA8B;IAuD5C;;OAEG;IACU,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAahG;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACI,OAAO,IAAI,IAAI;CASvB;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,CAAC,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,GAAG,gBAAgB,CAWnB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,EACrD,QAAQ,CAAC,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,gBAAgB,CAAC,CAe3B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,gBAAqB,GAAG,gBAAgB,CAEtF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Batch S3 Operations for High-Performance Vector Retrieval
|
|
3
|
+
* Implements optimized batch operations to reduce S3 API calls and latency
|
|
4
|
+
*/
|
|
5
|
+
import { HNSWNoun } from '../../coreTypes.js';
|
|
6
|
+
type S3Client = any;
|
|
7
|
+
export interface BatchRetrievalOptions {
|
|
8
|
+
maxConcurrency?: number;
|
|
9
|
+
prefetchSize?: number;
|
|
10
|
+
useS3Select?: boolean;
|
|
11
|
+
compressionEnabled?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface BatchResult<T> {
|
|
14
|
+
items: Map<string, T>;
|
|
15
|
+
errors: Map<string, Error>;
|
|
16
|
+
statistics: {
|
|
17
|
+
totalRequested: number;
|
|
18
|
+
totalRetrieved: number;
|
|
19
|
+
totalErrors: number;
|
|
20
|
+
duration: number;
|
|
21
|
+
apiCalls: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* High-performance batch operations for S3-compatible storage
|
|
26
|
+
* Optimizes retrieval patterns for HNSW search operations
|
|
27
|
+
*/
|
|
28
|
+
export declare class BatchS3Operations {
|
|
29
|
+
private s3Client;
|
|
30
|
+
private bucketName;
|
|
31
|
+
private options;
|
|
32
|
+
constructor(s3Client: S3Client, bucketName: string, options?: BatchRetrievalOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Batch retrieve HNSW nodes with intelligent prefetching
|
|
35
|
+
*/
|
|
36
|
+
batchGetNodes(nodeIds: string[], prefix?: string): Promise<BatchResult<HNSWNoun>>;
|
|
37
|
+
/**
|
|
38
|
+
* Parallel GetObject operations for small batches
|
|
39
|
+
*/
|
|
40
|
+
private parallelGetObjects;
|
|
41
|
+
/**
|
|
42
|
+
* Chunked parallel retrieval with intelligent batching
|
|
43
|
+
*/
|
|
44
|
+
private chunkedParallelGet;
|
|
45
|
+
/**
|
|
46
|
+
* List-based batch retrieval for large datasets
|
|
47
|
+
* Uses S3 ListObjects to reduce API calls
|
|
48
|
+
*/
|
|
49
|
+
private listBasedBatchGet;
|
|
50
|
+
/**
|
|
51
|
+
* Intelligent prefetch based on HNSW graph connectivity
|
|
52
|
+
*/
|
|
53
|
+
prefetchConnectedNodes(currentNodeIds: string[], connectionMap: Map<string, Set<string>>, prefix?: string): Promise<BatchResult<HNSWNoun>>;
|
|
54
|
+
/**
|
|
55
|
+
* S3 Select-based retrieval for filtered queries
|
|
56
|
+
*/
|
|
57
|
+
selectiveRetrieve(prefix: string, filter: {
|
|
58
|
+
vectorDimension?: number;
|
|
59
|
+
metadataKey?: string;
|
|
60
|
+
metadataValue?: any;
|
|
61
|
+
}): Promise<BatchResult<HNSWNoun>>;
|
|
62
|
+
/**
|
|
63
|
+
* Parse stored object from JSON string
|
|
64
|
+
*/
|
|
65
|
+
private parseStoredObject;
|
|
66
|
+
/**
|
|
67
|
+
* Utility function to chunk arrays
|
|
68
|
+
*/
|
|
69
|
+
private chunkArray;
|
|
70
|
+
}
|
|
71
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batchS3Operations.d.ts","sourceRoot":"","sources":["../../../src/storage/adapters/batchS3Operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAY,MAAM,oBAAoB,CAAA;AAGvD,KAAK,QAAQ,GAAG,GAAG,CAAA;AAInB,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC1B,UAAU,EAAE;QACV,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,WAAW,EAAE,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;QAChB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;CACF;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,OAAO,CAAuB;gBAGpC,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,qBAA0B;IAarC;;OAEG;IACU,aAAa,CACxB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,GAAE,MAAiB,GACxB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAmCjC;;OAEG;YACW,kBAAkB;IAwChC;;OAEG;YACW,kBAAkB;IAuBhC;;;OAGG;YACW,iBAAiB;IA4E/B;;OAEG;IACU,sBAAsB,CACjC,cAAc,EAAE,MAAM,EAAE,EACxB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,EACvC,MAAM,GAAE,MAAiB,GACxB,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAmCjC;;OAEG;IACU,iBAAiB,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE;QACN,eAAe,CAAC,EAAE,MAAM,CAAA;QACxB,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,aAAa,CAAC,EAAE,GAAG,CAAA;KACpB,GACA,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAyBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,UAAU;CAOnB"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Multi-Level Cache Manager with Predictive Prefetching
|
|
3
|
+
* Optimized for HNSW search patterns and large-scale vector operations
|
|
4
|
+
*/
|
|
5
|
+
import { HNSWNoun, HNSWVerb } from '../coreTypes.js';
|
|
6
|
+
import { BatchS3Operations } from './adapters/batchS3Operations.js';
|
|
7
|
+
declare enum PrefetchStrategy {
|
|
8
|
+
GRAPH_CONNECTIVITY = "connectivity",
|
|
9
|
+
VECTOR_SIMILARITY = "similarity",
|
|
10
|
+
ACCESS_PATTERN = "pattern",
|
|
11
|
+
HYBRID = "hybrid"
|
|
12
|
+
}
|
|
13
|
+
interface EnhancedCacheConfig {
|
|
14
|
+
hotCacheMaxSize?: number;
|
|
15
|
+
hotCacheEvictionThreshold?: number;
|
|
16
|
+
warmCacheMaxSize?: number;
|
|
17
|
+
warmCacheTTL?: number;
|
|
18
|
+
prefetchEnabled?: boolean;
|
|
19
|
+
prefetchStrategy?: PrefetchStrategy;
|
|
20
|
+
prefetchBatchSize?: number;
|
|
21
|
+
predictionLookahead?: number;
|
|
22
|
+
similarityThreshold?: number;
|
|
23
|
+
maxSimilarityDistance?: number;
|
|
24
|
+
backgroundOptimization?: boolean;
|
|
25
|
+
statisticsCollection?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Enhanced cache manager with intelligent prefetching for HNSW operations
|
|
29
|
+
* Provides multi-level caching optimized for vector search workloads
|
|
30
|
+
*/
|
|
31
|
+
export declare class EnhancedCacheManager<T extends HNSWNoun | HNSWVerb> {
|
|
32
|
+
private hotCache;
|
|
33
|
+
private warmCache;
|
|
34
|
+
private prefetchQueue;
|
|
35
|
+
private accessPatterns;
|
|
36
|
+
private vectorIndex;
|
|
37
|
+
private config;
|
|
38
|
+
private batchOperations?;
|
|
39
|
+
private storageAdapter?;
|
|
40
|
+
private prefetchInProgress;
|
|
41
|
+
private stats;
|
|
42
|
+
constructor(config?: EnhancedCacheConfig);
|
|
43
|
+
/**
|
|
44
|
+
* Set storage adapters for warm/cold storage operations
|
|
45
|
+
*/
|
|
46
|
+
setStorageAdapters(storageAdapter: any, batchOperations?: BatchS3Operations): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get item with intelligent prefetching
|
|
49
|
+
*/
|
|
50
|
+
get(id: string): Promise<T | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Get multiple items efficiently with batch operations
|
|
53
|
+
*/
|
|
54
|
+
getMany(ids: string[]): Promise<Map<string, T>>;
|
|
55
|
+
/**
|
|
56
|
+
* Set item in cache with metadata
|
|
57
|
+
*/
|
|
58
|
+
set(id: string, item: T): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Intelligent prefetch based on access patterns and graph structure
|
|
61
|
+
*/
|
|
62
|
+
private schedulePrefetch;
|
|
63
|
+
/**
|
|
64
|
+
* Predict next nodes based on graph connectivity
|
|
65
|
+
*/
|
|
66
|
+
private predictByConnectivity;
|
|
67
|
+
/**
|
|
68
|
+
* Predict next nodes based on vector similarity
|
|
69
|
+
*/
|
|
70
|
+
private predictBySimilarity;
|
|
71
|
+
/**
|
|
72
|
+
* Predict based on historical access patterns
|
|
73
|
+
*/
|
|
74
|
+
private predictByAccessPattern;
|
|
75
|
+
/**
|
|
76
|
+
* Hybrid prediction combining multiple strategies
|
|
77
|
+
*/
|
|
78
|
+
private hybridPrediction;
|
|
79
|
+
/**
|
|
80
|
+
* Execute prefetch operation in background
|
|
81
|
+
*/
|
|
82
|
+
private executePrefetch;
|
|
83
|
+
/**
|
|
84
|
+
* Load item from storage adapter
|
|
85
|
+
*/
|
|
86
|
+
private loadFromStorage;
|
|
87
|
+
/**
|
|
88
|
+
* Promote frequently accessed item to hot cache
|
|
89
|
+
*/
|
|
90
|
+
private promoteToHotCache;
|
|
91
|
+
/**
|
|
92
|
+
* Evict least recently used items from hot cache
|
|
93
|
+
*/
|
|
94
|
+
private evictFromHotCache;
|
|
95
|
+
/**
|
|
96
|
+
* Evict expired items from warm cache
|
|
97
|
+
*/
|
|
98
|
+
private evictFromWarmCache;
|
|
99
|
+
/**
|
|
100
|
+
* Record access pattern for prediction
|
|
101
|
+
*/
|
|
102
|
+
private recordAccess;
|
|
103
|
+
/**
|
|
104
|
+
* Extract connected node IDs from HNSW item
|
|
105
|
+
*/
|
|
106
|
+
private extractConnectedNodes;
|
|
107
|
+
/**
|
|
108
|
+
* Check if cache entry is expired
|
|
109
|
+
*/
|
|
110
|
+
private isExpired;
|
|
111
|
+
/**
|
|
112
|
+
* Calculate cosine similarity between vectors
|
|
113
|
+
*/
|
|
114
|
+
private cosineSimilarity;
|
|
115
|
+
/**
|
|
116
|
+
* Calculate pattern similarity between access patterns
|
|
117
|
+
*/
|
|
118
|
+
private patternSimilarity;
|
|
119
|
+
/**
|
|
120
|
+
* Start background optimization process
|
|
121
|
+
*/
|
|
122
|
+
private startBackgroundOptimization;
|
|
123
|
+
/**
|
|
124
|
+
* Run background optimization tasks
|
|
125
|
+
*/
|
|
126
|
+
private runBackgroundOptimization;
|
|
127
|
+
/**
|
|
128
|
+
* Get cache statistics
|
|
129
|
+
*/
|
|
130
|
+
getStats(): typeof this.stats & {
|
|
131
|
+
hotCacheSize: number;
|
|
132
|
+
warmCacheSize: number;
|
|
133
|
+
prefetchQueueSize: number;
|
|
134
|
+
accessPatternsTracked: number;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Clear all caches
|
|
138
|
+
*/
|
|
139
|
+
clear(): void;
|
|
140
|
+
}
|
|
141
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancedCacheManager.d.ts","sourceRoot":"","sources":["../../src/storage/enhancedCacheManager.ts"],"names":[],"mappings":"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"}
|