@soulcraft/brainy 3.47.1 → 3.49.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/dist/api/UniversalImportAPI.d.ts +11 -1
- package/dist/api/UniversalImportAPI.js +93 -24
- package/dist/augmentations/storageAugmentations.js +4 -3
- package/dist/brainy.d.ts +5 -1
- package/dist/brainy.js +20 -0
- package/dist/data/expandedKeywordDictionary.d.ts +22 -0
- package/dist/data/expandedKeywordDictionary.js +171 -0
- package/dist/import/ImportCoordinator.d.ts +5 -1
- package/dist/import/ImportCoordinator.js +13 -1
- package/dist/importers/SmartImportOrchestrator.d.ts +1 -1
- package/dist/importers/SmartImportOrchestrator.js +65 -12
- package/dist/index.d.ts +7 -2
- package/dist/index.js +9 -1
- package/dist/neural/embeddedKeywordEmbeddings.d.ts +29 -0
- package/dist/neural/embeddedKeywordEmbeddings.js +412683 -0
- package/dist/query/semanticTypeInference.d.ts +217 -0
- package/dist/query/semanticTypeInference.js +341 -0
- package/dist/query/typeAwareQueryPlanner.d.ts +152 -0
- package/dist/query/typeAwareQueryPlanner.js +297 -0
- package/dist/query/typeInference.d.ts +158 -0
- package/dist/query/typeInference.js +760 -0
- package/dist/storage/adapters/r2Storage.d.ts +213 -0
- package/dist/storage/adapters/r2Storage.js +876 -0
- package/dist/storage/adapters/s3CompatibleStorage.d.ts +1 -1
- package/dist/storage/adapters/s3CompatibleStorage.js +0 -2
- package/dist/storage/storageFactory.d.ts +2 -1
- package/dist/storage/storageFactory.js +4 -5
- package/dist/triple/TripleIntelligenceSystem.d.ts +4 -0
- package/dist/triple/TripleIntelligenceSystem.js +33 -4
- package/package.json +5 -2
|
@@ -16,7 +16,6 @@ interface ChangeLogEntry {
|
|
|
16
16
|
data?: any;
|
|
17
17
|
instanceId?: string;
|
|
18
18
|
}
|
|
19
|
-
export { S3CompatibleStorage as R2Storage };
|
|
20
19
|
/**
|
|
21
20
|
* S3-compatible storage adapter for server environments
|
|
22
21
|
* Uses the AWS S3 client to interact with S3-compatible storage services
|
|
@@ -611,3 +610,4 @@ export declare class S3CompatibleStorage extends BaseStorage {
|
|
|
611
610
|
maxLevel: number;
|
|
612
611
|
} | null>;
|
|
613
612
|
}
|
|
613
|
+
export {};
|
|
@@ -14,8 +14,6 @@ import { getGlobalBackpressure } from '../../utils/adaptiveBackpressure.js';
|
|
|
14
14
|
import { getWriteBuffer } from '../../utils/writeBuffer.js';
|
|
15
15
|
import { getCoalescer } from '../../utils/requestCoalescer.js';
|
|
16
16
|
import { getShardIdFromUuid, getShardIdByIndex, TOTAL_SHARDS } from '../sharding.js';
|
|
17
|
-
// Export R2Storage as an alias for S3CompatibleStorage
|
|
18
|
-
export { S3CompatibleStorage as R2Storage };
|
|
19
17
|
/**
|
|
20
18
|
* S3-compatible storage adapter for server environments
|
|
21
19
|
* Uses the AWS S3 client to interact with S3-compatible storage services
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
import { StorageAdapter } from '../coreTypes.js';
|
|
6
6
|
import { MemoryStorage } from './adapters/memoryStorage.js';
|
|
7
7
|
import { OPFSStorage } from './adapters/opfsStorage.js';
|
|
8
|
-
import { S3CompatibleStorage
|
|
8
|
+
import { S3CompatibleStorage } from './adapters/s3CompatibleStorage.js';
|
|
9
|
+
import { R2Storage } from './adapters/r2Storage.js';
|
|
9
10
|
import { GcsStorage } from './adapters/gcsStorage.js';
|
|
10
11
|
import { TypeAwareStorageAdapter } from './adapters/typeAwareStorageAdapter.js';
|
|
11
12
|
import { OperationConfig } from '../utils/operationUtils.js';
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { MemoryStorage } from './adapters/memoryStorage.js';
|
|
6
6
|
import { OPFSStorage } from './adapters/opfsStorage.js';
|
|
7
|
-
import { S3CompatibleStorage
|
|
7
|
+
import { S3CompatibleStorage } from './adapters/s3CompatibleStorage.js';
|
|
8
|
+
import { R2Storage } from './adapters/r2Storage.js';
|
|
8
9
|
import { GcsStorage } from './adapters/gcsStorage.js';
|
|
9
10
|
import { TypeAwareStorageAdapter } from './adapters/typeAwareStorageAdapter.js';
|
|
10
11
|
// FileSystemStorage is dynamically imported to avoid issues in browser environments
|
|
@@ -110,13 +111,12 @@ export async function createStorage(options = {}) {
|
|
|
110
111
|
}
|
|
111
112
|
case 'r2':
|
|
112
113
|
if (options.r2Storage) {
|
|
113
|
-
console.log('Using Cloudflare R2 storage');
|
|
114
|
+
console.log('Using Cloudflare R2 storage (dedicated adapter)');
|
|
114
115
|
return new R2Storage({
|
|
115
116
|
bucketName: options.r2Storage.bucketName,
|
|
116
117
|
accountId: options.r2Storage.accountId,
|
|
117
118
|
accessKeyId: options.r2Storage.accessKeyId,
|
|
118
119
|
secretAccessKey: options.r2Storage.secretAccessKey,
|
|
119
|
-
serviceType: 'r2',
|
|
120
120
|
cacheConfig: options.cacheConfig
|
|
121
121
|
});
|
|
122
122
|
}
|
|
@@ -194,13 +194,12 @@ export async function createStorage(options = {}) {
|
|
|
194
194
|
}
|
|
195
195
|
// If R2 storage is specified, use it
|
|
196
196
|
if (options.r2Storage) {
|
|
197
|
-
console.log('Using Cloudflare R2 storage');
|
|
197
|
+
console.log('Using Cloudflare R2 storage (dedicated adapter)');
|
|
198
198
|
return new R2Storage({
|
|
199
199
|
bucketName: options.r2Storage.bucketName,
|
|
200
200
|
accountId: options.r2Storage.accountId,
|
|
201
201
|
accessKeyId: options.r2Storage.accessKeyId,
|
|
202
202
|
secretAccessKey: options.r2Storage.secretAccessKey,
|
|
203
|
-
serviceType: 'r2',
|
|
204
203
|
cacheConfig: options.cacheConfig
|
|
205
204
|
});
|
|
206
205
|
}
|
|
@@ -17,6 +17,7 @@ import { HNSWIndexOptimized } from '../hnsw/hnswIndexOptimized.js';
|
|
|
17
17
|
import { TypeAwareHNSWIndex } from '../hnsw/typeAwareHNSWIndex.js';
|
|
18
18
|
import { MetadataIndexManager } from '../utils/metadataIndex.js';
|
|
19
19
|
import { Vector } from '../coreTypes.js';
|
|
20
|
+
import { NounType } from '../types/graphTypes.js';
|
|
20
21
|
export interface TripleQuery {
|
|
21
22
|
similar?: string;
|
|
22
23
|
like?: string;
|
|
@@ -30,6 +31,7 @@ export interface TripleQuery {
|
|
|
30
31
|
depth?: number;
|
|
31
32
|
};
|
|
32
33
|
limit?: number;
|
|
34
|
+
types?: NounType[];
|
|
33
35
|
}
|
|
34
36
|
export interface TripleOptions {
|
|
35
37
|
fusion?: {
|
|
@@ -69,10 +71,12 @@ export declare class TripleIntelligenceSystem {
|
|
|
69
71
|
constructor(metadataIndex: MetadataIndexManager, hnswIndex: HNSWIndex | HNSWIndexOptimized | TypeAwareHNSWIndex, graphIndex: GraphAdjacencyIndex, embedder: (text: string) => Promise<Vector>, storage: any);
|
|
70
72
|
/**
|
|
71
73
|
* Main find method - executes Triple Intelligence queries
|
|
74
|
+
* Phase 3: Now with automatic type inference for 40% latency reduction
|
|
72
75
|
*/
|
|
73
76
|
find(query: TripleQuery, options?: TripleOptions): Promise<TripleResult[]>;
|
|
74
77
|
/**
|
|
75
78
|
* Vector search using HNSW for O(log n) performance
|
|
79
|
+
* Phase 3: Now supports type-filtered search for 10x speedup
|
|
76
80
|
*/
|
|
77
81
|
private vectorSearch;
|
|
78
82
|
/**
|
|
@@ -12,6 +12,8 @@
|
|
|
12
12
|
* - Graph traversal: O(1) adjacency list lookups
|
|
13
13
|
* - Fusion: O(k log k) where k = result count
|
|
14
14
|
*/
|
|
15
|
+
import { TypeAwareHNSWIndex } from '../hnsw/typeAwareHNSWIndex.js';
|
|
16
|
+
import { getQueryPlanner } from '../query/typeAwareQueryPlanner.js';
|
|
15
17
|
/**
|
|
16
18
|
* Performance metrics for monitoring and assertions
|
|
17
19
|
*/
|
|
@@ -190,11 +192,28 @@ export class TripleIntelligenceSystem {
|
|
|
190
192
|
}
|
|
191
193
|
/**
|
|
192
194
|
* Main find method - executes Triple Intelligence queries
|
|
195
|
+
* Phase 3: Now with automatic type inference for 40% latency reduction
|
|
193
196
|
*/
|
|
194
197
|
async find(query, options) {
|
|
195
198
|
const startTime = performance.now();
|
|
196
199
|
// Validate query
|
|
197
200
|
this.validateQuery(query);
|
|
201
|
+
// Phase 3: Infer types from natural language if not explicitly provided
|
|
202
|
+
let typeAwarePlan;
|
|
203
|
+
if (!query.types && (query.similar || query.like) && this.hnswIndex instanceof TypeAwareHNSWIndex) {
|
|
204
|
+
const queryText = query.similar || query.like;
|
|
205
|
+
const planner = getQueryPlanner();
|
|
206
|
+
typeAwarePlan = await planner.planQuery(queryText);
|
|
207
|
+
// Use inferred types if confidence is sufficient
|
|
208
|
+
if (typeAwarePlan.confidence > 0.6) {
|
|
209
|
+
query.types = typeAwarePlan.targetTypes;
|
|
210
|
+
// Log for analytics
|
|
211
|
+
console.log(`[Phase 3] Type inference: ${typeAwarePlan.routing} ` +
|
|
212
|
+
`(${typeAwarePlan.targetTypes.length} types, ` +
|
|
213
|
+
`confidence: ${(typeAwarePlan.confidence * 100).toFixed(0)}%, ` +
|
|
214
|
+
`estimated ${typeAwarePlan.estimatedSpeedup.toFixed(1)}x speedup)`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
198
217
|
// Build optimized query plan
|
|
199
218
|
const plan = this.planner.buildPlan(query);
|
|
200
219
|
// Verify all required indexes are available
|
|
@@ -204,21 +223,29 @@ export class TripleIntelligenceSystem {
|
|
|
204
223
|
// Record metrics
|
|
205
224
|
const elapsed = performance.now() - startTime;
|
|
206
225
|
this.metrics.recordOperation('find_query', elapsed, results.length);
|
|
226
|
+
// Log Phase 3 performance impact
|
|
227
|
+
if (typeAwarePlan && typeAwarePlan.confidence > 0.6) {
|
|
228
|
+
console.log(`[Phase 3] Query completed in ${elapsed.toFixed(2)}ms ` +
|
|
229
|
+
`(${results.length} results, ${typeAwarePlan.routing})`);
|
|
230
|
+
}
|
|
207
231
|
// ASSERT performance guarantees
|
|
208
232
|
this.assertPerformance(elapsed, results.length);
|
|
209
233
|
return results;
|
|
210
234
|
}
|
|
211
235
|
/**
|
|
212
236
|
* Vector search using HNSW for O(log n) performance
|
|
237
|
+
* Phase 3: Now supports type-filtered search for 10x speedup
|
|
213
238
|
*/
|
|
214
|
-
async vectorSearch(query, limit) {
|
|
239
|
+
async vectorSearch(query, limit, types) {
|
|
215
240
|
const startTime = performance.now();
|
|
216
241
|
// Convert text to vector if needed
|
|
217
242
|
const vector = typeof query === 'string'
|
|
218
243
|
? await this.embedder(query)
|
|
219
244
|
: query;
|
|
220
|
-
//
|
|
221
|
-
const searchResults =
|
|
245
|
+
// Phase 3: Pass types to TypeAwareHNSWIndex for optimized search
|
|
246
|
+
const searchResults = this.hnswIndex instanceof TypeAwareHNSWIndex
|
|
247
|
+
? await this.hnswIndex.search(vector, limit, types)
|
|
248
|
+
: await this.hnswIndex.search(vector, limit);
|
|
222
249
|
// Convert to result format
|
|
223
250
|
const results = [];
|
|
224
251
|
for (const [id, score] of searchResults) {
|
|
@@ -353,7 +380,9 @@ export class TripleIntelligenceSystem {
|
|
|
353
380
|
let stepResults = [];
|
|
354
381
|
switch (step.type) {
|
|
355
382
|
case 'vector':
|
|
356
|
-
|
|
383
|
+
// Phase 3: Pass inferred/explicit types to vectorSearch
|
|
384
|
+
stepResults = await this.vectorSearch(query.similar || query.like, limit * 3, // Over-fetch for fusion
|
|
385
|
+
query.types // Phase 3: type-filtered search
|
|
357
386
|
);
|
|
358
387
|
break;
|
|
359
388
|
case 'field':
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soulcraft/brainy",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.49.0",
|
|
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",
|
|
@@ -55,13 +55,16 @@
|
|
|
55
55
|
"node": "22.x"
|
|
56
56
|
},
|
|
57
57
|
"scripts": {
|
|
58
|
-
"build": "npm run build:types:if-needed && npm run build:patterns:if-needed && tsc && tsc -p tsconfig.cli.json",
|
|
58
|
+
"build": "npm run build:types:if-needed && npm run build:patterns:if-needed && npm run build:keywords:if-needed && tsc && tsc -p tsconfig.cli.json",
|
|
59
59
|
"build:types": "tsx scripts/buildTypeEmbeddings.ts",
|
|
60
60
|
"build:types:if-needed": "node scripts/check-type-embeddings.cjs || npm run build:types",
|
|
61
61
|
"build:types:force": "npm run build:types",
|
|
62
62
|
"build:patterns": "tsx scripts/buildEmbeddedPatterns.ts",
|
|
63
63
|
"build:patterns:if-needed": "node scripts/check-patterns.cjs || npm run build:patterns",
|
|
64
64
|
"build:patterns:force": "npm run build:patterns",
|
|
65
|
+
"build:keywords": "tsx scripts/buildKeywordEmbeddings.ts",
|
|
66
|
+
"build:keywords:if-needed": "node scripts/check-keyword-embeddings.cjs || npm run build:keywords",
|
|
67
|
+
"build:keywords:force": "npm run build:keywords",
|
|
65
68
|
"prepare": "npm run build",
|
|
66
69
|
"test": "npm run test:unit",
|
|
67
70
|
"test:watch": "NODE_OPTIONS='--max-old-space-size=8192' vitest --config tests/configs/vitest.unit.config.ts",
|