@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.
Files changed (205) hide show
  1. package/README.md +605 -194
  2. package/dist/augmentationFactory.d.ts.map +1 -0
  3. package/dist/augmentationFactory.js +342 -0
  4. package/dist/augmentationFactory.js.map +1 -0
  5. package/dist/augmentationPipeline.d.ts.map +1 -0
  6. package/dist/augmentationPipeline.js +472 -0
  7. package/dist/augmentationPipeline.js.map +1 -0
  8. package/dist/augmentationRegistry.d.ts.map +1 -0
  9. package/dist/augmentationRegistry.js +105 -0
  10. package/dist/augmentationRegistry.js.map +1 -0
  11. package/dist/augmentationRegistryLoader.d.ts.map +1 -0
  12. package/dist/augmentationRegistryLoader.js +213 -0
  13. package/dist/augmentationRegistryLoader.js.map +1 -0
  14. package/dist/augmentations/conduitAugmentations.js +1158 -0
  15. package/dist/augmentations/conduitAugmentations.js.map +1 -0
  16. package/dist/augmentations/memoryAugmentations.d.ts +2 -0
  17. package/dist/augmentations/memoryAugmentations.d.ts.map +1 -1
  18. package/dist/augmentations/memoryAugmentations.js +270 -0
  19. package/dist/augmentations/memoryAugmentations.js.map +1 -0
  20. package/dist/augmentations/serverSearchAugmentations.js +531 -0
  21. package/dist/augmentations/serverSearchAugmentations.js.map +1 -0
  22. package/dist/brainyData.d.ts.map +1 -0
  23. package/dist/brainyData.js +3999 -0
  24. package/dist/brainyData.js.map +1 -0
  25. package/dist/browserFramework.d.ts +15 -0
  26. package/dist/browserFramework.d.ts.map +1 -0
  27. package/dist/browserFramework.js +31 -0
  28. package/dist/browserFramework.js.map +1 -0
  29. package/dist/coreTypes.d.ts.map +1 -0
  30. package/dist/coreTypes.js +5 -0
  31. package/dist/coreTypes.js.map +1 -0
  32. package/dist/demo.d.ts +106 -0
  33. package/dist/demo.d.ts.map +1 -0
  34. package/dist/demo.js +201 -0
  35. package/dist/demo.js.map +1 -0
  36. package/dist/distributed/configManager.d.ts.map +1 -0
  37. package/dist/distributed/configManager.js +322 -0
  38. package/dist/distributed/configManager.js.map +1 -0
  39. package/dist/distributed/domainDetector.d.ts.map +1 -0
  40. package/dist/distributed/domainDetector.js +307 -0
  41. package/dist/distributed/domainDetector.js.map +1 -0
  42. package/dist/distributed/hashPartitioner.d.ts.map +1 -0
  43. package/dist/distributed/hashPartitioner.js +146 -0
  44. package/dist/distributed/hashPartitioner.js.map +1 -0
  45. package/dist/distributed/healthMonitor.d.ts.map +1 -0
  46. package/dist/distributed/healthMonitor.js +244 -0
  47. package/dist/distributed/healthMonitor.js.map +1 -0
  48. package/dist/distributed/index.d.ts.map +1 -0
  49. package/dist/distributed/index.js +9 -0
  50. package/dist/distributed/index.js.map +1 -0
  51. package/dist/distributed/operationalModes.d.ts.map +1 -0
  52. package/dist/distributed/operationalModes.js +201 -0
  53. package/dist/distributed/operationalModes.js.map +1 -0
  54. package/dist/errors/brainyError.d.ts.map +1 -0
  55. package/dist/errors/brainyError.js +113 -0
  56. package/dist/errors/brainyError.js.map +1 -0
  57. package/dist/examples/basicUsage.js +118 -0
  58. package/dist/examples/basicUsage.js.map +1 -0
  59. package/dist/hnsw/distributedSearch.js +452 -0
  60. package/dist/hnsw/distributedSearch.js.map +1 -0
  61. package/dist/hnsw/hnswIndex.js +602 -0
  62. package/dist/hnsw/hnswIndex.js.map +1 -0
  63. package/dist/hnsw/hnswIndexOptimized.js +471 -0
  64. package/dist/hnsw/hnswIndexOptimized.js.map +1 -0
  65. package/dist/hnsw/optimizedHNSWIndex.js +313 -0
  66. package/dist/hnsw/optimizedHNSWIndex.js.map +1 -0
  67. package/dist/hnsw/partitionedHNSWIndex.js +304 -0
  68. package/dist/hnsw/partitionedHNSWIndex.js.map +1 -0
  69. package/dist/hnsw/scaledHNSWSystem.js +559 -0
  70. package/dist/hnsw/scaledHNSWSystem.js.map +1 -0
  71. package/dist/index.d.ts +3 -2
  72. package/dist/index.d.ts.map +1 -0
  73. package/dist/index.js +81 -0
  74. package/dist/index.js.map +1 -0
  75. package/dist/mcp/brainyMCPAdapter.js +142 -0
  76. package/dist/mcp/brainyMCPAdapter.js.map +1 -0
  77. package/dist/mcp/brainyMCPService.js +248 -0
  78. package/dist/mcp/brainyMCPService.js.map +1 -0
  79. package/dist/mcp/index.js +17 -0
  80. package/dist/mcp/index.js.map +1 -0
  81. package/dist/mcp/mcpAugmentationToolset.js +180 -0
  82. package/dist/mcp/mcpAugmentationToolset.js.map +1 -0
  83. package/dist/pipeline.d.ts.map +1 -0
  84. package/dist/pipeline.js +590 -0
  85. package/dist/pipeline.js.map +1 -0
  86. package/dist/sequentialPipeline.d.ts.map +1 -0
  87. package/dist/sequentialPipeline.js +417 -0
  88. package/dist/sequentialPipeline.js.map +1 -0
  89. package/dist/setup.d.ts.map +1 -0
  90. package/dist/setup.js +46 -0
  91. package/dist/setup.js.map +1 -0
  92. package/dist/storage/adapters/baseStorageAdapter.js +349 -0
  93. package/dist/storage/adapters/baseStorageAdapter.js.map +1 -0
  94. package/dist/storage/adapters/batchS3Operations.js +287 -0
  95. package/dist/storage/adapters/batchS3Operations.js.map +1 -0
  96. package/dist/storage/adapters/fileSystemStorage.js +846 -0
  97. package/dist/storage/adapters/fileSystemStorage.js.map +1 -0
  98. package/dist/storage/adapters/memoryStorage.js +532 -0
  99. package/dist/storage/adapters/memoryStorage.js.map +1 -0
  100. package/dist/storage/adapters/opfsStorage.d.ts.map +1 -1
  101. package/dist/storage/adapters/opfsStorage.js +1118 -0
  102. package/dist/storage/adapters/opfsStorage.js.map +1 -0
  103. package/dist/storage/adapters/optimizedS3Search.js +248 -0
  104. package/dist/storage/adapters/optimizedS3Search.js.map +1 -0
  105. package/dist/storage/adapters/s3CompatibleStorage.js +2026 -0
  106. package/dist/storage/adapters/s3CompatibleStorage.js.map +1 -0
  107. package/dist/storage/baseStorage.js +603 -0
  108. package/dist/storage/baseStorage.js.map +1 -0
  109. package/dist/storage/cacheManager.js +1306 -0
  110. package/dist/storage/cacheManager.js.map +1 -0
  111. package/dist/storage/enhancedCacheManager.js +520 -0
  112. package/dist/storage/enhancedCacheManager.js.map +1 -0
  113. package/dist/storage/readOnlyOptimizations.js +425 -0
  114. package/dist/storage/readOnlyOptimizations.js.map +1 -0
  115. package/dist/storage/storageFactory.d.ts +0 -1
  116. package/dist/storage/storageFactory.d.ts.map +1 -1
  117. package/dist/storage/storageFactory.js +227 -0
  118. package/dist/storage/storageFactory.js.map +1 -0
  119. package/dist/types/augmentations.js +16 -0
  120. package/dist/types/augmentations.js.map +1 -0
  121. package/dist/types/brainyDataInterface.js +8 -0
  122. package/dist/types/brainyDataInterface.js.map +1 -0
  123. package/dist/types/distributedTypes.js +6 -0
  124. package/dist/types/distributedTypes.js.map +1 -0
  125. package/dist/types/fileSystemTypes.js +8 -0
  126. package/dist/types/fileSystemTypes.js.map +1 -0
  127. package/dist/types/graphTypes.js +247 -0
  128. package/dist/types/graphTypes.js.map +1 -0
  129. package/dist/types/mcpTypes.js +22 -0
  130. package/dist/types/mcpTypes.js.map +1 -0
  131. package/dist/types/paginationTypes.js +5 -0
  132. package/dist/types/paginationTypes.js.map +1 -0
  133. package/dist/types/pipelineTypes.js +7 -0
  134. package/dist/types/pipelineTypes.js.map +1 -0
  135. package/dist/types/tensorflowTypes.js +6 -0
  136. package/dist/types/tensorflowTypes.js.map +1 -0
  137. package/dist/unified.d.ts.map +1 -0
  138. package/dist/unified.js +52 -128251
  139. package/dist/unified.js.map +1 -0
  140. package/dist/utils/autoConfiguration.js +341 -0
  141. package/dist/utils/autoConfiguration.js.map +1 -0
  142. package/dist/utils/cacheAutoConfig.js +261 -0
  143. package/dist/utils/cacheAutoConfig.js.map +1 -0
  144. package/dist/utils/crypto.js +45 -0
  145. package/dist/utils/crypto.js.map +1 -0
  146. package/dist/utils/distance.js +239 -0
  147. package/dist/utils/distance.js.map +1 -0
  148. package/dist/utils/embedding.d.ts.map +1 -1
  149. package/dist/utils/embedding.js +702 -0
  150. package/dist/utils/embedding.js.map +1 -0
  151. package/dist/utils/environment.js +75 -0
  152. package/dist/utils/environment.js.map +1 -0
  153. package/dist/utils/fieldNameTracking.js +90 -0
  154. package/dist/utils/fieldNameTracking.js.map +1 -0
  155. package/dist/utils/index.d.ts +1 -0
  156. package/dist/utils/index.d.ts.map +1 -1
  157. package/dist/utils/index.js +8 -0
  158. package/dist/utils/index.js.map +1 -0
  159. package/dist/utils/jsonProcessing.js +179 -0
  160. package/dist/utils/jsonProcessing.js.map +1 -0
  161. package/dist/utils/logger.js +129 -0
  162. package/dist/utils/logger.js.map +1 -0
  163. package/dist/utils/operationUtils.js +126 -0
  164. package/dist/utils/operationUtils.js.map +1 -0
  165. package/dist/utils/robustModelLoader.d.ts +14 -0
  166. package/dist/utils/robustModelLoader.d.ts.map +1 -1
  167. package/dist/utils/robustModelLoader.js +537 -0
  168. package/dist/utils/robustModelLoader.js.map +1 -0
  169. package/dist/utils/searchCache.js +248 -0
  170. package/dist/utils/searchCache.js.map +1 -0
  171. package/dist/utils/statistics.js +25 -0
  172. package/dist/utils/statistics.js.map +1 -0
  173. package/dist/utils/statisticsCollector.js +224 -0
  174. package/dist/utils/statisticsCollector.js.map +1 -0
  175. package/dist/utils/textEncoding.js +309 -0
  176. package/dist/utils/textEncoding.js.map +1 -0
  177. package/dist/utils/typeUtils.js +40 -0
  178. package/dist/utils/typeUtils.js.map +1 -0
  179. package/dist/utils/version.d.ts +15 -3
  180. package/dist/utils/version.d.ts.map +1 -1
  181. package/dist/utils/version.js +24 -0
  182. package/dist/utils/version.js.map +1 -0
  183. package/dist/utils/workerUtils.js +458 -0
  184. package/dist/utils/workerUtils.js.map +1 -0
  185. package/dist/worker.d.ts.map +1 -0
  186. package/dist/worker.js +54 -0
  187. package/dist/worker.js.map +1 -0
  188. package/package.json +30 -29
  189. package/dist/brainy.js +0 -90220
  190. package/dist/brainy.min.js +0 -12511
  191. package/dist/patched-platform-node.d.ts +0 -17
  192. package/dist/statistics/statisticsManager.d.ts +0 -121
  193. package/dist/storage/fileSystemStorage.d.ts +0 -73
  194. package/dist/storage/fileSystemStorage.d.ts.map +0 -1
  195. package/dist/storage/opfsStorage.d.ts +0 -236
  196. package/dist/storage/opfsStorage.d.ts.map +0 -1
  197. package/dist/storage/s3CompatibleStorage.d.ts +0 -157
  198. package/dist/storage/s3CompatibleStorage.d.ts.map +0 -1
  199. package/dist/testing/prettyReporter.d.ts +0 -23
  200. package/dist/testing/prettySummaryReporter.d.ts +0 -22
  201. package/dist/unified.min.js +0 -16153
  202. package/dist/utils/environmentDetection.d.ts +0 -47
  203. package/dist/utils/environmentDetection.d.ts.map +0 -1
  204. package/dist/utils/tensorflowUtils.d.ts +0 -17
  205. 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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"}