@soulcraft/brainy 4.2.1 → 4.2.2
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/CHANGELOG.md +20 -0
- package/dist/utils/metadataIndex.js +11 -3
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [4.2.2](https://github.com/soulcraftlabs/brainy/compare/v4.2.1...v4.2.2) (2025-10-23)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### ⚡ Performance Improvements
|
|
9
|
+
|
|
10
|
+
* **metadata-index**: implement adaptive batch sizing for first-run rebuilds
|
|
11
|
+
- **Issue**: v4.2.1 field registry only helps on 2nd+ runs - first run still slow (8-9 min for 1,157 entities)
|
|
12
|
+
- **Root Cause**: Batch size of 25 was designed for cloud storage socket exhaustion, too conservative for local storage
|
|
13
|
+
- **Solution**: Adaptive batch sizing based on storage adapter type
|
|
14
|
+
- **FileSystemStorage/MemoryStorage/OPFSStorage**: 500 items/batch (fast local I/O, no socket limits)
|
|
15
|
+
- **GCS/S3/R2 (cloud storage)**: 25 items/batch (prevent socket exhaustion)
|
|
16
|
+
- **Performance Impact**:
|
|
17
|
+
- FileSystem first-run rebuild: 8-9 min → **30-60 seconds** (10-15x faster)
|
|
18
|
+
- 1,157 entities: 46 batches @ 25 → 3 batches @ 500 (15x fewer I/O operations)
|
|
19
|
+
- Cloud storage: No change (still 25/batch for safety)
|
|
20
|
+
- **Detection**: Auto-detects storage type via `constructor.name`
|
|
21
|
+
- **Zero Config**: Completely automatic, no configuration needed
|
|
22
|
+
- **Combined with v4.2.1**: First run fast, subsequent runs instant (2-3 sec)
|
|
23
|
+
- **Files Changed**: `src/utils/metadataIndex.ts` (updated rebuild() with adaptive batch sizing)
|
|
24
|
+
|
|
5
25
|
### [4.2.1](https://github.com/soulcraftlabs/brainy/compare/v4.2.0...v4.2.1) (2025-10-23)
|
|
6
26
|
|
|
7
27
|
|
|
@@ -1728,7 +1728,7 @@ export class MetadataIndexManager {
|
|
|
1728
1728
|
return;
|
|
1729
1729
|
this.isRebuilding = true;
|
|
1730
1730
|
try {
|
|
1731
|
-
prodLog.info('🔄 Starting non-blocking metadata index rebuild with batch processing
|
|
1731
|
+
prodLog.info('🔄 Starting non-blocking metadata index rebuild with batch processing...');
|
|
1732
1732
|
prodLog.info(`📊 Storage adapter: ${this.storage.constructor.name}`);
|
|
1733
1733
|
prodLog.info(`🔧 Batch processing available: ${!!this.storage.getMetadataBatch}`);
|
|
1734
1734
|
// Clear existing indexes (v3.42.0 - use sparse indices instead of flat files)
|
|
@@ -1738,9 +1738,17 @@ export class MetadataIndexManager {
|
|
|
1738
1738
|
// Clear all cached sparse indices in UnifiedCache
|
|
1739
1739
|
// This ensures rebuild starts fresh (v3.44.1)
|
|
1740
1740
|
this.unifiedCache.clear('metadata');
|
|
1741
|
+
// Adaptive batch sizing based on storage adapter (v4.2.2)
|
|
1742
|
+
// FileSystem/Memory/OPFS: Large batches (fast local I/O, no socket limits)
|
|
1743
|
+
// Cloud (GCS/S3/R2): Small batches (prevent socket exhaustion)
|
|
1744
|
+
const storageType = this.storage.constructor.name;
|
|
1745
|
+
const isLocalStorage = storageType === 'FileSystemStorage' ||
|
|
1746
|
+
storageType === 'MemoryStorage' ||
|
|
1747
|
+
storageType === 'OPFSStorage';
|
|
1748
|
+
const nounLimit = isLocalStorage ? 500 : 25;
|
|
1749
|
+
prodLog.info(`⚡ Using ${isLocalStorage ? 'optimized' : 'conservative'} batch size: ${nounLimit} items/batch`);
|
|
1741
1750
|
// Rebuild noun metadata indexes using pagination
|
|
1742
1751
|
let nounOffset = 0;
|
|
1743
|
-
const nounLimit = 25; // Even smaller batches during initialization to prevent socket exhaustion
|
|
1744
1752
|
let hasMoreNouns = true;
|
|
1745
1753
|
let totalNounsProcessed = 0;
|
|
1746
1754
|
let consecutiveEmptyBatches = 0;
|
|
@@ -1826,7 +1834,7 @@ export class MetadataIndexManager {
|
|
|
1826
1834
|
}
|
|
1827
1835
|
// Rebuild verb metadata indexes using pagination
|
|
1828
1836
|
let verbOffset = 0;
|
|
1829
|
-
const verbLimit = 25; //
|
|
1837
|
+
const verbLimit = isLocalStorage ? 500 : 25; // Same adaptive batch sizing as nouns
|
|
1830
1838
|
let hasMoreVerbs = true;
|
|
1831
1839
|
let totalVerbsProcessed = 0;
|
|
1832
1840
|
let consecutiveEmptyVerbBatches = 0;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soulcraft/brainy",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.2",
|
|
4
4
|
"description": "Universal Knowledge Protocol™ - World's first Triple Intelligence database unifying vector, graph, and document search in one API. 31 nouns × 40 verbs for infinite expressiveness.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|