@soulcraft/brainy 0.41.0 → 0.44.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 +605 -194
- package/dist/augmentationFactory.d.ts.map +1 -0
- package/dist/augmentationFactory.js +342 -0
- package/dist/augmentationFactory.js.map +1 -0
- package/dist/augmentationPipeline.d.ts.map +1 -0
- package/dist/augmentationPipeline.js +472 -0
- package/dist/augmentationPipeline.js.map +1 -0
- package/dist/augmentationRegistry.d.ts.map +1 -0
- package/dist/augmentationRegistry.js +105 -0
- package/dist/augmentationRegistry.js.map +1 -0
- package/dist/augmentationRegistryLoader.d.ts.map +1 -0
- package/dist/augmentationRegistryLoader.js +213 -0
- package/dist/augmentationRegistryLoader.js.map +1 -0
- package/dist/augmentations/conduitAugmentations.js +1158 -0
- package/dist/augmentations/conduitAugmentations.js.map +1 -0
- package/dist/augmentations/memoryAugmentations.d.ts +2 -0
- package/dist/augmentations/memoryAugmentations.d.ts.map +1 -1
- package/dist/augmentations/memoryAugmentations.js +270 -0
- package/dist/augmentations/memoryAugmentations.js.map +1 -0
- package/dist/augmentations/serverSearchAugmentations.js +531 -0
- package/dist/augmentations/serverSearchAugmentations.js.map +1 -0
- package/dist/brainyData.d.ts.map +1 -0
- package/dist/brainyData.js +3999 -0
- package/dist/brainyData.js.map +1 -0
- package/dist/browserFramework.d.ts +15 -0
- package/dist/browserFramework.d.ts.map +1 -0
- package/dist/browserFramework.js +31 -0
- package/dist/browserFramework.js.map +1 -0
- package/dist/coreTypes.d.ts.map +1 -0
- package/dist/coreTypes.js +5 -0
- package/dist/coreTypes.js.map +1 -0
- package/dist/demo.d.ts +106 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/demo.js +201 -0
- package/dist/demo.js.map +1 -0
- package/dist/distributed/configManager.d.ts.map +1 -0
- package/dist/distributed/configManager.js +322 -0
- package/dist/distributed/configManager.js.map +1 -0
- package/dist/distributed/domainDetector.d.ts.map +1 -0
- package/dist/distributed/domainDetector.js +307 -0
- package/dist/distributed/domainDetector.js.map +1 -0
- package/dist/distributed/hashPartitioner.d.ts.map +1 -0
- package/dist/distributed/hashPartitioner.js +146 -0
- package/dist/distributed/hashPartitioner.js.map +1 -0
- package/dist/distributed/healthMonitor.d.ts.map +1 -0
- package/dist/distributed/healthMonitor.js +244 -0
- package/dist/distributed/healthMonitor.js.map +1 -0
- package/dist/distributed/index.d.ts.map +1 -0
- package/dist/distributed/index.js +9 -0
- package/dist/distributed/index.js.map +1 -0
- package/dist/distributed/operationalModes.d.ts.map +1 -0
- package/dist/distributed/operationalModes.js +201 -0
- package/dist/distributed/operationalModes.js.map +1 -0
- package/dist/errors/brainyError.d.ts.map +1 -0
- package/dist/errors/brainyError.js +113 -0
- package/dist/errors/brainyError.js.map +1 -0
- package/dist/examples/basicUsage.js +118 -0
- package/dist/examples/basicUsage.js.map +1 -0
- package/dist/hnsw/distributedSearch.js +452 -0
- package/dist/hnsw/distributedSearch.js.map +1 -0
- package/dist/hnsw/hnswIndex.js +602 -0
- package/dist/hnsw/hnswIndex.js.map +1 -0
- package/dist/hnsw/hnswIndexOptimized.js +471 -0
- package/dist/hnsw/hnswIndexOptimized.js.map +1 -0
- package/dist/hnsw/optimizedHNSWIndex.js +313 -0
- package/dist/hnsw/optimizedHNSWIndex.js.map +1 -0
- package/dist/hnsw/partitionedHNSWIndex.js +304 -0
- package/dist/hnsw/partitionedHNSWIndex.js.map +1 -0
- package/dist/hnsw/scaledHNSWSystem.js +559 -0
- package/dist/hnsw/scaledHNSWSystem.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/brainyMCPAdapter.js +142 -0
- package/dist/mcp/brainyMCPAdapter.js.map +1 -0
- package/dist/mcp/brainyMCPService.js +248 -0
- package/dist/mcp/brainyMCPService.js.map +1 -0
- package/dist/mcp/index.js +17 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcpAugmentationToolset.js +180 -0
- package/dist/mcp/mcpAugmentationToolset.js.map +1 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +590 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/sequentialPipeline.d.ts.map +1 -0
- package/dist/sequentialPipeline.js +417 -0
- package/dist/sequentialPipeline.js.map +1 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +46 -0
- package/dist/setup.js.map +1 -0
- package/dist/storage/adapters/baseStorageAdapter.js +349 -0
- package/dist/storage/adapters/baseStorageAdapter.js.map +1 -0
- package/dist/storage/adapters/batchS3Operations.js +287 -0
- package/dist/storage/adapters/batchS3Operations.js.map +1 -0
- package/dist/storage/adapters/fileSystemStorage.js +846 -0
- package/dist/storage/adapters/fileSystemStorage.js.map +1 -0
- package/dist/storage/adapters/memoryStorage.js +532 -0
- package/dist/storage/adapters/memoryStorage.js.map +1 -0
- package/dist/storage/adapters/opfsStorage.d.ts.map +1 -1
- package/dist/storage/adapters/opfsStorage.js +1118 -0
- package/dist/storage/adapters/opfsStorage.js.map +1 -0
- package/dist/storage/adapters/optimizedS3Search.js +248 -0
- package/dist/storage/adapters/optimizedS3Search.js.map +1 -0
- package/dist/storage/adapters/s3CompatibleStorage.js +2026 -0
- package/dist/storage/adapters/s3CompatibleStorage.js.map +1 -0
- package/dist/storage/baseStorage.js +603 -0
- package/dist/storage/baseStorage.js.map +1 -0
- package/dist/storage/cacheManager.js +1306 -0
- package/dist/storage/cacheManager.js.map +1 -0
- package/dist/storage/enhancedCacheManager.js +520 -0
- package/dist/storage/enhancedCacheManager.js.map +1 -0
- package/dist/storage/readOnlyOptimizations.js +425 -0
- package/dist/storage/readOnlyOptimizations.js.map +1 -0
- package/dist/storage/storageFactory.d.ts +0 -1
- package/dist/storage/storageFactory.d.ts.map +1 -1
- package/dist/storage/storageFactory.js +227 -0
- package/dist/storage/storageFactory.js.map +1 -0
- package/dist/types/augmentations.js +16 -0
- package/dist/types/augmentations.js.map +1 -0
- package/dist/types/brainyDataInterface.js +8 -0
- package/dist/types/brainyDataInterface.js.map +1 -0
- package/dist/types/distributedTypes.js +6 -0
- package/dist/types/distributedTypes.js.map +1 -0
- package/dist/types/fileSystemTypes.js +8 -0
- package/dist/types/fileSystemTypes.js.map +1 -0
- package/dist/types/graphTypes.js +247 -0
- package/dist/types/graphTypes.js.map +1 -0
- package/dist/types/mcpTypes.js +22 -0
- package/dist/types/mcpTypes.js.map +1 -0
- package/dist/types/paginationTypes.js +5 -0
- package/dist/types/paginationTypes.js.map +1 -0
- package/dist/types/pipelineTypes.js +7 -0
- package/dist/types/pipelineTypes.js.map +1 -0
- package/dist/types/tensorflowTypes.js +6 -0
- package/dist/types/tensorflowTypes.js.map +1 -0
- package/dist/unified.d.ts.map +1 -0
- package/dist/unified.js +52 -128251
- package/dist/unified.js.map +1 -0
- package/dist/utils/autoConfiguration.js +341 -0
- package/dist/utils/autoConfiguration.js.map +1 -0
- package/dist/utils/cacheAutoConfig.js +261 -0
- package/dist/utils/cacheAutoConfig.js.map +1 -0
- package/dist/utils/crypto.js +45 -0
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/distance.js +239 -0
- package/dist/utils/distance.js.map +1 -0
- package/dist/utils/embedding.d.ts.map +1 -1
- package/dist/utils/embedding.js +702 -0
- package/dist/utils/embedding.js.map +1 -0
- package/dist/utils/environment.js +75 -0
- package/dist/utils/environment.js.map +1 -0
- package/dist/utils/fieldNameTracking.js +90 -0
- package/dist/utils/fieldNameTracking.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/jsonProcessing.js +179 -0
- package/dist/utils/jsonProcessing.js.map +1 -0
- package/dist/utils/logger.js +129 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/operationUtils.js +126 -0
- package/dist/utils/operationUtils.js.map +1 -0
- package/dist/utils/robustModelLoader.d.ts +14 -0
- package/dist/utils/robustModelLoader.d.ts.map +1 -1
- package/dist/utils/robustModelLoader.js +537 -0
- package/dist/utils/robustModelLoader.js.map +1 -0
- package/dist/utils/searchCache.js +248 -0
- package/dist/utils/searchCache.js.map +1 -0
- package/dist/utils/statistics.js +25 -0
- package/dist/utils/statistics.js.map +1 -0
- package/dist/utils/statisticsCollector.js +224 -0
- package/dist/utils/statisticsCollector.js.map +1 -0
- package/dist/utils/textEncoding.js +309 -0
- package/dist/utils/textEncoding.js.map +1 -0
- package/dist/utils/typeUtils.js +40 -0
- package/dist/utils/typeUtils.js.map +1 -0
- package/dist/utils/version.d.ts +15 -3
- package/dist/utils/version.d.ts.map +1 -1
- package/dist/utils/version.js +24 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/utils/workerUtils.js +458 -0
- package/dist/utils/workerUtils.js.map +1 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +54 -0
- package/dist/worker.js.map +1 -0
- package/package.json +30 -29
- package/dist/brainy.js +0 -90220
- package/dist/brainy.min.js +0 -12511
- package/dist/patched-platform-node.d.ts +0 -17
- package/dist/statistics/statisticsManager.d.ts +0 -121
- package/dist/storage/fileSystemStorage.d.ts +0 -73
- package/dist/storage/fileSystemStorage.d.ts.map +0 -1
- package/dist/storage/opfsStorage.d.ts +0 -236
- package/dist/storage/opfsStorage.d.ts.map +0 -1
- package/dist/storage/s3CompatibleStorage.d.ts +0 -157
- package/dist/storage/s3CompatibleStorage.d.ts.map +0 -1
- package/dist/testing/prettyReporter.d.ts +0 -23
- package/dist/testing/prettySummaryReporter.d.ts +0 -22
- package/dist/unified.min.js +0 -16153
- package/dist/utils/environmentDetection.d.ts +0 -47
- package/dist/utils/environmentDetection.d.ts.map +0 -1
- package/dist/utils/tensorflowUtils.d.ts +0 -17
- package/dist/utils/tensorflowUtils.d.ts.map +0 -1
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Storage Adapter
|
|
3
|
+
* Provides common functionality for all storage adapters
|
|
4
|
+
*/
|
|
5
|
+
import { BaseStorageAdapter } from './adapters/baseStorageAdapter.js';
|
|
6
|
+
// Common directory/prefix names
|
|
7
|
+
export const NOUNS_DIR = 'nouns';
|
|
8
|
+
export const VERBS_DIR = 'verbs';
|
|
9
|
+
export const METADATA_DIR = 'metadata';
|
|
10
|
+
export const NOUN_METADATA_DIR = 'noun-metadata';
|
|
11
|
+
export const VERB_METADATA_DIR = 'verb-metadata';
|
|
12
|
+
export const INDEX_DIR = 'index';
|
|
13
|
+
export const STATISTICS_KEY = 'statistics';
|
|
14
|
+
/**
|
|
15
|
+
* Base storage adapter that implements common functionality
|
|
16
|
+
* This is an abstract class that should be extended by specific storage adapters
|
|
17
|
+
*/
|
|
18
|
+
export class BaseStorage extends BaseStorageAdapter {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(...arguments);
|
|
21
|
+
this.isInitialized = false;
|
|
22
|
+
this.readOnly = false;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Ensure the storage adapter is initialized
|
|
26
|
+
*/
|
|
27
|
+
async ensureInitialized() {
|
|
28
|
+
if (!this.isInitialized) {
|
|
29
|
+
await this.init();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Save a noun to storage
|
|
34
|
+
*/
|
|
35
|
+
async saveNoun(noun) {
|
|
36
|
+
await this.ensureInitialized();
|
|
37
|
+
return this.saveNoun_internal(noun);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get a noun from storage
|
|
41
|
+
*/
|
|
42
|
+
async getNoun(id) {
|
|
43
|
+
await this.ensureInitialized();
|
|
44
|
+
return this.getNoun_internal(id);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get all nouns from storage
|
|
48
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
49
|
+
* It can cause memory issues with large datasets. Use getNouns() with pagination instead.
|
|
50
|
+
*/
|
|
51
|
+
async getAllNouns() {
|
|
52
|
+
await this.ensureInitialized();
|
|
53
|
+
console.warn('WARNING: getAllNouns() is deprecated and will be removed in a future version. Use getNouns() with pagination instead.');
|
|
54
|
+
return this.getAllNouns_internal();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get nouns by noun type
|
|
58
|
+
* @param nounType The noun type to filter by
|
|
59
|
+
* @returns Promise that resolves to an array of nouns of the specified noun type
|
|
60
|
+
*/
|
|
61
|
+
async getNounsByNounType(nounType) {
|
|
62
|
+
await this.ensureInitialized();
|
|
63
|
+
return this.getNounsByNounType_internal(nounType);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Delete a noun from storage
|
|
67
|
+
*/
|
|
68
|
+
async deleteNoun(id) {
|
|
69
|
+
await this.ensureInitialized();
|
|
70
|
+
return this.deleteNoun_internal(id);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Save a verb to storage
|
|
74
|
+
*/
|
|
75
|
+
async saveVerb(verb) {
|
|
76
|
+
await this.ensureInitialized();
|
|
77
|
+
// Extract the lightweight HNSWVerb data
|
|
78
|
+
const hnswVerb = {
|
|
79
|
+
id: verb.id,
|
|
80
|
+
vector: verb.vector,
|
|
81
|
+
connections: verb.connections || new Map()
|
|
82
|
+
};
|
|
83
|
+
// Extract and save the metadata separately
|
|
84
|
+
const metadata = {
|
|
85
|
+
sourceId: verb.sourceId || verb.source,
|
|
86
|
+
targetId: verb.targetId || verb.target,
|
|
87
|
+
source: verb.source || verb.sourceId,
|
|
88
|
+
target: verb.target || verb.targetId,
|
|
89
|
+
type: verb.type || verb.verb,
|
|
90
|
+
verb: verb.verb || verb.type,
|
|
91
|
+
weight: verb.weight,
|
|
92
|
+
metadata: verb.metadata,
|
|
93
|
+
data: verb.data,
|
|
94
|
+
createdAt: verb.createdAt,
|
|
95
|
+
updatedAt: verb.updatedAt,
|
|
96
|
+
createdBy: verb.createdBy,
|
|
97
|
+
embedding: verb.embedding
|
|
98
|
+
};
|
|
99
|
+
// Save both the HNSWVerb and metadata
|
|
100
|
+
await this.saveVerb_internal(hnswVerb);
|
|
101
|
+
await this.saveVerbMetadata(verb.id, metadata);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get a verb from storage
|
|
105
|
+
*/
|
|
106
|
+
async getVerb(id) {
|
|
107
|
+
await this.ensureInitialized();
|
|
108
|
+
const hnswVerb = await this.getVerb_internal(id);
|
|
109
|
+
if (!hnswVerb) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return this.convertHNSWVerbToGraphVerb(hnswVerb);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Convert HNSWVerb to GraphVerb by combining with metadata
|
|
116
|
+
*/
|
|
117
|
+
async convertHNSWVerbToGraphVerb(hnswVerb) {
|
|
118
|
+
try {
|
|
119
|
+
const metadata = await this.getVerbMetadata(hnswVerb.id);
|
|
120
|
+
if (!metadata) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
// Create default timestamp if not present
|
|
124
|
+
const defaultTimestamp = {
|
|
125
|
+
seconds: Math.floor(Date.now() / 1000),
|
|
126
|
+
nanoseconds: (Date.now() % 1000) * 1000000
|
|
127
|
+
};
|
|
128
|
+
// Create default createdBy if not present
|
|
129
|
+
const defaultCreatedBy = {
|
|
130
|
+
augmentation: 'unknown',
|
|
131
|
+
version: '1.0'
|
|
132
|
+
};
|
|
133
|
+
return {
|
|
134
|
+
id: hnswVerb.id,
|
|
135
|
+
vector: hnswVerb.vector,
|
|
136
|
+
sourceId: metadata.sourceId,
|
|
137
|
+
targetId: metadata.targetId,
|
|
138
|
+
source: metadata.source,
|
|
139
|
+
target: metadata.target,
|
|
140
|
+
verb: metadata.verb,
|
|
141
|
+
type: metadata.type,
|
|
142
|
+
weight: metadata.weight || 1.0,
|
|
143
|
+
metadata: metadata.metadata || {},
|
|
144
|
+
createdAt: metadata.createdAt || defaultTimestamp,
|
|
145
|
+
updatedAt: metadata.updatedAt || defaultTimestamp,
|
|
146
|
+
createdBy: metadata.createdBy || defaultCreatedBy,
|
|
147
|
+
data: metadata.data,
|
|
148
|
+
embedding: hnswVerb.vector
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
console.error(`Failed to convert HNSWVerb to GraphVerb for ${hnswVerb.id}:`, error);
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get all verbs from storage
|
|
158
|
+
* @deprecated This method is deprecated and will be removed in a future version.
|
|
159
|
+
* It can cause memory issues with large datasets. Use getVerbs() with pagination instead.
|
|
160
|
+
*/
|
|
161
|
+
async getAllVerbs() {
|
|
162
|
+
await this.ensureInitialized();
|
|
163
|
+
console.warn('WARNING: getAllVerbs() is deprecated and will be removed in a future version. Use getVerbs() with pagination instead.');
|
|
164
|
+
const hnswVerbs = await this.getAllVerbs_internal();
|
|
165
|
+
const graphVerbs = [];
|
|
166
|
+
for (const hnswVerb of hnswVerbs) {
|
|
167
|
+
const graphVerb = await this.convertHNSWVerbToGraphVerb(hnswVerb);
|
|
168
|
+
if (graphVerb) {
|
|
169
|
+
graphVerbs.push(graphVerb);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return graphVerbs;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Get verbs by source
|
|
176
|
+
*/
|
|
177
|
+
async getVerbsBySource(sourceId) {
|
|
178
|
+
await this.ensureInitialized();
|
|
179
|
+
// Get all verbs and filter by source
|
|
180
|
+
const allVerbs = await this.getAllVerbs();
|
|
181
|
+
return allVerbs.filter(verb => verb.sourceId === sourceId || verb.source === sourceId);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get verbs by target
|
|
185
|
+
*/
|
|
186
|
+
async getVerbsByTarget(targetId) {
|
|
187
|
+
await this.ensureInitialized();
|
|
188
|
+
// Get all verbs and filter by target
|
|
189
|
+
const allVerbs = await this.getAllVerbs();
|
|
190
|
+
return allVerbs.filter(verb => verb.targetId === targetId || verb.target === targetId);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get verbs by type
|
|
194
|
+
*/
|
|
195
|
+
async getVerbsByType(type) {
|
|
196
|
+
await this.ensureInitialized();
|
|
197
|
+
// Get all verbs and filter by type
|
|
198
|
+
const allVerbs = await this.getAllVerbs();
|
|
199
|
+
return allVerbs.filter(verb => verb.type === type || verb.verb === type);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get nouns with pagination and filtering
|
|
203
|
+
* @param options Pagination and filtering options
|
|
204
|
+
* @returns Promise that resolves to a paginated result of nouns
|
|
205
|
+
*/
|
|
206
|
+
async getNouns(options) {
|
|
207
|
+
await this.ensureInitialized();
|
|
208
|
+
// Set default pagination values
|
|
209
|
+
const pagination = options?.pagination || {};
|
|
210
|
+
const limit = pagination.limit || 100;
|
|
211
|
+
const offset = pagination.offset || 0;
|
|
212
|
+
const cursor = pagination.cursor;
|
|
213
|
+
// Optimize for common filter cases to avoid loading all nouns
|
|
214
|
+
if (options?.filter) {
|
|
215
|
+
// If filtering by nounType only, use the optimized method
|
|
216
|
+
if (options.filter.nounType &&
|
|
217
|
+
!options.filter.service &&
|
|
218
|
+
!options.filter.metadata) {
|
|
219
|
+
const nounType = Array.isArray(options.filter.nounType)
|
|
220
|
+
? options.filter.nounType[0]
|
|
221
|
+
: options.filter.nounType;
|
|
222
|
+
// Get nouns by type directly
|
|
223
|
+
const nounsByType = await this.getNounsByNounType_internal(nounType);
|
|
224
|
+
// Apply pagination
|
|
225
|
+
const paginatedNouns = nounsByType.slice(offset, offset + limit);
|
|
226
|
+
const hasMore = offset + limit < nounsByType.length;
|
|
227
|
+
// Set next cursor if there are more items
|
|
228
|
+
let nextCursor = undefined;
|
|
229
|
+
if (hasMore && paginatedNouns.length > 0) {
|
|
230
|
+
const lastItem = paginatedNouns[paginatedNouns.length - 1];
|
|
231
|
+
nextCursor = lastItem.id;
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
items: paginatedNouns,
|
|
235
|
+
totalCount: nounsByType.length,
|
|
236
|
+
hasMore,
|
|
237
|
+
nextCursor
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// For more complex filtering or no filtering, use a paginated approach
|
|
242
|
+
// that avoids loading all nouns into memory at once
|
|
243
|
+
try {
|
|
244
|
+
// First, try to get a count of total nouns (if the adapter supports it)
|
|
245
|
+
let totalCount = undefined;
|
|
246
|
+
try {
|
|
247
|
+
// This is an optional method that adapters may implement
|
|
248
|
+
if (typeof this.countNouns === 'function') {
|
|
249
|
+
totalCount = await this.countNouns(options?.filter);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (countError) {
|
|
253
|
+
// Ignore errors from count method, it's optional
|
|
254
|
+
console.warn('Error getting noun count:', countError);
|
|
255
|
+
}
|
|
256
|
+
// Check if the adapter has a paginated method for getting nouns
|
|
257
|
+
if (typeof this.getNounsWithPagination === 'function') {
|
|
258
|
+
// Use the adapter's paginated method
|
|
259
|
+
const result = await this.getNounsWithPagination({
|
|
260
|
+
limit,
|
|
261
|
+
cursor,
|
|
262
|
+
filter: options?.filter
|
|
263
|
+
});
|
|
264
|
+
// Apply offset if needed (some adapters might not support offset)
|
|
265
|
+
const items = result.items.slice(offset);
|
|
266
|
+
return {
|
|
267
|
+
items,
|
|
268
|
+
totalCount: result.totalCount || totalCount,
|
|
269
|
+
hasMore: result.hasMore,
|
|
270
|
+
nextCursor: result.nextCursor
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
// If the adapter doesn't have a paginated method, fall back to the old approach
|
|
274
|
+
// but with a warning and a reasonable limit
|
|
275
|
+
console.warn('Storage adapter does not support pagination, falling back to loading all nouns. This may cause performance issues with large datasets.');
|
|
276
|
+
// Get nouns with a reasonable limit to avoid memory issues
|
|
277
|
+
const maxNouns = Math.min(offset + limit + 100, 1000); // Reasonable limit
|
|
278
|
+
let allNouns = [];
|
|
279
|
+
try {
|
|
280
|
+
// Try to get only the nouns we need
|
|
281
|
+
allNouns = await this.getAllNouns_internal();
|
|
282
|
+
// If we have too many nouns, truncate the array to avoid memory issues
|
|
283
|
+
if (allNouns.length > maxNouns) {
|
|
284
|
+
console.warn(`Large number of nouns (${allNouns.length}), truncating to ${maxNouns} for filtering`);
|
|
285
|
+
allNouns = allNouns.slice(0, maxNouns);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
console.error('Error getting all nouns:', error);
|
|
290
|
+
// Return empty result on error
|
|
291
|
+
return {
|
|
292
|
+
items: [],
|
|
293
|
+
totalCount: 0,
|
|
294
|
+
hasMore: false
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
// Apply filtering if needed
|
|
298
|
+
let filteredNouns = allNouns;
|
|
299
|
+
if (options?.filter) {
|
|
300
|
+
// Filter by noun type
|
|
301
|
+
if (options.filter.nounType) {
|
|
302
|
+
const nounTypes = Array.isArray(options.filter.nounType)
|
|
303
|
+
? options.filter.nounType
|
|
304
|
+
: [options.filter.nounType];
|
|
305
|
+
filteredNouns = filteredNouns.filter((noun) => {
|
|
306
|
+
// HNSWNoun doesn't have a type property directly, check metadata
|
|
307
|
+
const nounType = noun.metadata?.type;
|
|
308
|
+
return typeof nounType === 'string' && nounTypes.includes(nounType);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
// Filter by service
|
|
312
|
+
if (options.filter.service) {
|
|
313
|
+
const services = Array.isArray(options.filter.service)
|
|
314
|
+
? options.filter.service
|
|
315
|
+
: [options.filter.service];
|
|
316
|
+
filteredNouns = filteredNouns.filter((noun) => {
|
|
317
|
+
// HNSWNoun doesn't have a service property directly, check metadata
|
|
318
|
+
const service = noun.metadata?.service;
|
|
319
|
+
return typeof service === 'string' && services.includes(service);
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
// Filter by metadata
|
|
323
|
+
if (options.filter.metadata) {
|
|
324
|
+
const metadataFilter = options.filter.metadata;
|
|
325
|
+
filteredNouns = filteredNouns.filter((noun) => {
|
|
326
|
+
if (!noun.metadata)
|
|
327
|
+
return false;
|
|
328
|
+
// Check if all metadata keys match
|
|
329
|
+
return Object.entries(metadataFilter).every(([key, value]) => noun.metadata && noun.metadata[key] === value);
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// Get total count before pagination
|
|
334
|
+
totalCount = totalCount || filteredNouns.length;
|
|
335
|
+
// Apply pagination
|
|
336
|
+
const paginatedNouns = filteredNouns.slice(offset, offset + limit);
|
|
337
|
+
const hasMore = offset + limit < filteredNouns.length || filteredNouns.length >= maxNouns;
|
|
338
|
+
// Set next cursor if there are more items
|
|
339
|
+
let nextCursor = undefined;
|
|
340
|
+
if (hasMore && paginatedNouns.length > 0) {
|
|
341
|
+
const lastItem = paginatedNouns[paginatedNouns.length - 1];
|
|
342
|
+
nextCursor = lastItem.id;
|
|
343
|
+
}
|
|
344
|
+
return {
|
|
345
|
+
items: paginatedNouns,
|
|
346
|
+
totalCount,
|
|
347
|
+
hasMore,
|
|
348
|
+
nextCursor
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
catch (error) {
|
|
352
|
+
console.error('Error getting nouns with pagination:', error);
|
|
353
|
+
return {
|
|
354
|
+
items: [],
|
|
355
|
+
totalCount: 0,
|
|
356
|
+
hasMore: false
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get verbs with pagination and filtering
|
|
362
|
+
* @param options Pagination and filtering options
|
|
363
|
+
* @returns Promise that resolves to a paginated result of verbs
|
|
364
|
+
*/
|
|
365
|
+
async getVerbs(options) {
|
|
366
|
+
await this.ensureInitialized();
|
|
367
|
+
// Set default pagination values
|
|
368
|
+
const pagination = options?.pagination || {};
|
|
369
|
+
const limit = pagination.limit || 100;
|
|
370
|
+
const offset = pagination.offset || 0;
|
|
371
|
+
const cursor = pagination.cursor;
|
|
372
|
+
// Optimize for common filter cases to avoid loading all verbs
|
|
373
|
+
if (options?.filter) {
|
|
374
|
+
// If filtering by sourceId only, use the optimized method
|
|
375
|
+
if (options.filter.sourceId &&
|
|
376
|
+
!options.filter.verbType &&
|
|
377
|
+
!options.filter.targetId &&
|
|
378
|
+
!options.filter.service &&
|
|
379
|
+
!options.filter.metadata) {
|
|
380
|
+
const sourceId = Array.isArray(options.filter.sourceId)
|
|
381
|
+
? options.filter.sourceId[0]
|
|
382
|
+
: options.filter.sourceId;
|
|
383
|
+
// Get verbs by source directly
|
|
384
|
+
const verbsBySource = await this.getVerbsBySource_internal(sourceId);
|
|
385
|
+
// Apply pagination
|
|
386
|
+
const paginatedVerbs = verbsBySource.slice(offset, offset + limit);
|
|
387
|
+
const hasMore = offset + limit < verbsBySource.length;
|
|
388
|
+
// Set next cursor if there are more items
|
|
389
|
+
let nextCursor = undefined;
|
|
390
|
+
if (hasMore && paginatedVerbs.length > 0) {
|
|
391
|
+
const lastItem = paginatedVerbs[paginatedVerbs.length - 1];
|
|
392
|
+
nextCursor = lastItem.id;
|
|
393
|
+
}
|
|
394
|
+
return {
|
|
395
|
+
items: paginatedVerbs,
|
|
396
|
+
totalCount: verbsBySource.length,
|
|
397
|
+
hasMore,
|
|
398
|
+
nextCursor
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
// If filtering by targetId only, use the optimized method
|
|
402
|
+
if (options.filter.targetId &&
|
|
403
|
+
!options.filter.verbType &&
|
|
404
|
+
!options.filter.sourceId &&
|
|
405
|
+
!options.filter.service &&
|
|
406
|
+
!options.filter.metadata) {
|
|
407
|
+
const targetId = Array.isArray(options.filter.targetId)
|
|
408
|
+
? options.filter.targetId[0]
|
|
409
|
+
: options.filter.targetId;
|
|
410
|
+
// Get verbs by target directly
|
|
411
|
+
const verbsByTarget = await this.getVerbsByTarget_internal(targetId);
|
|
412
|
+
// Apply pagination
|
|
413
|
+
const paginatedVerbs = verbsByTarget.slice(offset, offset + limit);
|
|
414
|
+
const hasMore = offset + limit < verbsByTarget.length;
|
|
415
|
+
// Set next cursor if there are more items
|
|
416
|
+
let nextCursor = undefined;
|
|
417
|
+
if (hasMore && paginatedVerbs.length > 0) {
|
|
418
|
+
const lastItem = paginatedVerbs[paginatedVerbs.length - 1];
|
|
419
|
+
nextCursor = lastItem.id;
|
|
420
|
+
}
|
|
421
|
+
return {
|
|
422
|
+
items: paginatedVerbs,
|
|
423
|
+
totalCount: verbsByTarget.length,
|
|
424
|
+
hasMore,
|
|
425
|
+
nextCursor
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
// If filtering by verbType only, use the optimized method
|
|
429
|
+
if (options.filter.verbType &&
|
|
430
|
+
!options.filter.sourceId &&
|
|
431
|
+
!options.filter.targetId &&
|
|
432
|
+
!options.filter.service &&
|
|
433
|
+
!options.filter.metadata) {
|
|
434
|
+
const verbType = Array.isArray(options.filter.verbType)
|
|
435
|
+
? options.filter.verbType[0]
|
|
436
|
+
: options.filter.verbType;
|
|
437
|
+
// Get verbs by type directly
|
|
438
|
+
const verbsByType = await this.getVerbsByType_internal(verbType);
|
|
439
|
+
// Apply pagination
|
|
440
|
+
const paginatedVerbs = verbsByType.slice(offset, offset + limit);
|
|
441
|
+
const hasMore = offset + limit < verbsByType.length;
|
|
442
|
+
// Set next cursor if there are more items
|
|
443
|
+
let nextCursor = undefined;
|
|
444
|
+
if (hasMore && paginatedVerbs.length > 0) {
|
|
445
|
+
const lastItem = paginatedVerbs[paginatedVerbs.length - 1];
|
|
446
|
+
nextCursor = lastItem.id;
|
|
447
|
+
}
|
|
448
|
+
return {
|
|
449
|
+
items: paginatedVerbs,
|
|
450
|
+
totalCount: verbsByType.length,
|
|
451
|
+
hasMore,
|
|
452
|
+
nextCursor
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
// For more complex filtering or no filtering, use a paginated approach
|
|
457
|
+
// that avoids loading all verbs into memory at once
|
|
458
|
+
try {
|
|
459
|
+
// First, try to get a count of total verbs (if the adapter supports it)
|
|
460
|
+
let totalCount = undefined;
|
|
461
|
+
try {
|
|
462
|
+
// This is an optional method that adapters may implement
|
|
463
|
+
if (typeof this.countVerbs === 'function') {
|
|
464
|
+
totalCount = await this.countVerbs(options?.filter);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
catch (countError) {
|
|
468
|
+
// Ignore errors from count method, it's optional
|
|
469
|
+
console.warn('Error getting verb count:', countError);
|
|
470
|
+
}
|
|
471
|
+
// Check if the adapter has a paginated method for getting verbs
|
|
472
|
+
if (typeof this.getVerbsWithPagination === 'function') {
|
|
473
|
+
// Use the adapter's paginated method
|
|
474
|
+
const result = await this.getVerbsWithPagination({
|
|
475
|
+
limit,
|
|
476
|
+
cursor,
|
|
477
|
+
filter: options?.filter
|
|
478
|
+
});
|
|
479
|
+
// Apply offset if needed (some adapters might not support offset)
|
|
480
|
+
const items = result.items.slice(offset);
|
|
481
|
+
return {
|
|
482
|
+
items,
|
|
483
|
+
totalCount: result.totalCount || totalCount,
|
|
484
|
+
hasMore: result.hasMore,
|
|
485
|
+
nextCursor: result.nextCursor
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
// If the adapter doesn't have a paginated method, fall back to the old approach
|
|
489
|
+
// but with a warning and a reasonable limit
|
|
490
|
+
console.warn('Storage adapter does not support pagination, falling back to loading all verbs. This may cause performance issues with large datasets.');
|
|
491
|
+
// Get verbs with a reasonable limit to avoid memory issues
|
|
492
|
+
const maxVerbs = Math.min(offset + limit + 100, 1000); // Reasonable limit
|
|
493
|
+
let allVerbs = [];
|
|
494
|
+
try {
|
|
495
|
+
// Try to get only the verbs we need
|
|
496
|
+
allVerbs = await this.getAllVerbs();
|
|
497
|
+
// If we have too many verbs, truncate the array to avoid memory issues
|
|
498
|
+
if (allVerbs.length > maxVerbs) {
|
|
499
|
+
console.warn(`Large number of verbs (${allVerbs.length}), truncating to ${maxVerbs} for filtering`);
|
|
500
|
+
allVerbs = allVerbs.slice(0, maxVerbs);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
catch (error) {
|
|
504
|
+
console.error('Error getting all verbs:', error);
|
|
505
|
+
// Return empty result on error
|
|
506
|
+
return {
|
|
507
|
+
items: [],
|
|
508
|
+
totalCount: 0,
|
|
509
|
+
hasMore: false
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
// Apply filtering if needed
|
|
513
|
+
let filteredVerbs = allVerbs;
|
|
514
|
+
if (options?.filter) {
|
|
515
|
+
// Filter by verb type
|
|
516
|
+
if (options.filter.verbType) {
|
|
517
|
+
const verbTypes = Array.isArray(options.filter.verbType)
|
|
518
|
+
? options.filter.verbType
|
|
519
|
+
: [options.filter.verbType];
|
|
520
|
+
filteredVerbs = filteredVerbs.filter((verb) => verb.type !== undefined && verbTypes.includes(verb.type));
|
|
521
|
+
}
|
|
522
|
+
// Filter by source ID
|
|
523
|
+
if (options.filter.sourceId) {
|
|
524
|
+
const sourceIds = Array.isArray(options.filter.sourceId)
|
|
525
|
+
? options.filter.sourceId
|
|
526
|
+
: [options.filter.sourceId];
|
|
527
|
+
filteredVerbs = filteredVerbs.filter((verb) => verb.sourceId !== undefined && sourceIds.includes(verb.sourceId));
|
|
528
|
+
}
|
|
529
|
+
// Filter by target ID
|
|
530
|
+
if (options.filter.targetId) {
|
|
531
|
+
const targetIds = Array.isArray(options.filter.targetId)
|
|
532
|
+
? options.filter.targetId
|
|
533
|
+
: [options.filter.targetId];
|
|
534
|
+
filteredVerbs = filteredVerbs.filter((verb) => verb.targetId !== undefined && targetIds.includes(verb.targetId));
|
|
535
|
+
}
|
|
536
|
+
// Filter by service
|
|
537
|
+
if (options.filter.service) {
|
|
538
|
+
const services = Array.isArray(options.filter.service)
|
|
539
|
+
? options.filter.service
|
|
540
|
+
: [options.filter.service];
|
|
541
|
+
filteredVerbs = filteredVerbs.filter((verb) => {
|
|
542
|
+
// GraphVerb doesn't have a service property directly, check metadata
|
|
543
|
+
const service = verb.metadata?.service;
|
|
544
|
+
return typeof service === 'string' && services.includes(service);
|
|
545
|
+
});
|
|
546
|
+
}
|
|
547
|
+
// Filter by metadata
|
|
548
|
+
if (options.filter.metadata) {
|
|
549
|
+
const metadataFilter = options.filter.metadata;
|
|
550
|
+
filteredVerbs = filteredVerbs.filter((verb) => {
|
|
551
|
+
if (!verb.metadata)
|
|
552
|
+
return false;
|
|
553
|
+
// Check if all metadata keys match
|
|
554
|
+
return Object.entries(metadataFilter).every(([key, value]) => verb.metadata && verb.metadata[key] === value);
|
|
555
|
+
});
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
// Get total count before pagination
|
|
559
|
+
totalCount = totalCount || filteredVerbs.length;
|
|
560
|
+
// Apply pagination
|
|
561
|
+
const paginatedVerbs = filteredVerbs.slice(offset, offset + limit);
|
|
562
|
+
const hasMore = offset + limit < filteredVerbs.length || filteredVerbs.length >= maxVerbs;
|
|
563
|
+
// Set next cursor if there are more items
|
|
564
|
+
let nextCursor = undefined;
|
|
565
|
+
if (hasMore && paginatedVerbs.length > 0) {
|
|
566
|
+
const lastItem = paginatedVerbs[paginatedVerbs.length - 1];
|
|
567
|
+
nextCursor = lastItem.id;
|
|
568
|
+
}
|
|
569
|
+
return {
|
|
570
|
+
items: paginatedVerbs,
|
|
571
|
+
totalCount,
|
|
572
|
+
hasMore,
|
|
573
|
+
nextCursor
|
|
574
|
+
};
|
|
575
|
+
}
|
|
576
|
+
catch (error) {
|
|
577
|
+
console.error('Error getting verbs with pagination:', error);
|
|
578
|
+
return {
|
|
579
|
+
items: [],
|
|
580
|
+
totalCount: 0,
|
|
581
|
+
hasMore: false
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
/**
|
|
586
|
+
* Delete a verb from storage
|
|
587
|
+
*/
|
|
588
|
+
async deleteVerb(id) {
|
|
589
|
+
await this.ensureInitialized();
|
|
590
|
+
return this.deleteVerb_internal(id);
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Helper method to convert a Map to a plain object for serialization
|
|
594
|
+
*/
|
|
595
|
+
mapToObject(map, valueTransformer = (v) => v) {
|
|
596
|
+
const obj = {};
|
|
597
|
+
for (const [key, value] of map.entries()) {
|
|
598
|
+
obj[key.toString()] = valueTransformer(value);
|
|
599
|
+
}
|
|
600
|
+
return obj;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
//# sourceMappingURL=baseStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseStorage.js","sourceRoot":"","sources":["../../src/storage/baseStorage.ts"],"names":[],"mappings":"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"}
|