@soulcraft/brainy 0.17.0 → 0.19.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.
@@ -296,6 +296,11 @@ export declare class BrainyData<T = any> implements BrainyDataInterface<T> {
296
296
  * This is a convenience wrapper around addVerb
297
297
  */
298
298
  relate(sourceId: string, targetId: string, relationType: string, metadata?: any): Promise<string>;
299
+ /**
300
+ * Create a connection between two entities
301
+ * This is an alias for relate() for backward compatibility
302
+ */
303
+ connect(sourceId: string, targetId: string, relationType: string, metadata?: any): Promise<string>;
299
304
  /**
300
305
  * Add a verb between two nouns
301
306
  * If metadata is provided and vector is not, the metadata will be vectorized using the embedding function
@@ -357,6 +362,16 @@ export declare class BrainyData<T = any> implements BrainyDataInterface<T> {
357
362
  * Get the number of vectors in the database
358
363
  */
359
364
  size(): number;
365
+ /**
366
+ * Get statistics about the current state of the database
367
+ * @returns Object containing counts of nouns, verbs, metadata entries, and HNSW index size
368
+ */
369
+ getStatistics(): Promise<{
370
+ nounCount: number;
371
+ verbCount: number;
372
+ metadataCount: number;
373
+ hnswIndexSize: number;
374
+ }>;
360
375
  /**
361
376
  * Check if the database is in read-only mode
362
377
  * @returns True if the database is in read-only mode, false otherwise
package/dist/index.d.ts CHANGED
@@ -6,8 +6,8 @@ import './setup.js';
6
6
  import { BrainyData, BrainyDataConfig } from './brainyData.js';
7
7
  export { BrainyData };
8
8
  export type { BrainyDataConfig };
9
- import { euclideanDistance, cosineDistance, manhattanDistance, dotProductDistance } from './utils/index.js';
10
- export { euclideanDistance, cosineDistance, manhattanDistance, dotProductDistance };
9
+ import { euclideanDistance, cosineDistance, manhattanDistance, dotProductDistance, getStatistics } from './utils/index.js';
10
+ export { euclideanDistance, cosineDistance, manhattanDistance, dotProductDistance, getStatistics };
11
11
  import { UniversalSentenceEncoder, createEmbeddingFunction, createTensorFlowEmbeddingFunction, createThreadedEmbeddingFunction, defaultEmbeddingFunction } from './utils/embedding.js';
12
12
  import { executeInThread, cleanupWorkerPools } from './utils/workerUtils.js';
13
13
  import { isBrowser, isNode, isWebWorker, areWebWorkersAvailable, areWorkerThreadsAvailable, areWorkerThreadsAvailableSync, isThreadingAvailable, isThreadingAvailableAsync } from './utils/environment.js';
package/dist/unified.js CHANGED
@@ -4173,6 +4173,30 @@ var embedding = /*#__PURE__*/Object.freeze({
4173
4173
  getDefaultEmbeddingFunction: getDefaultEmbeddingFunction
4174
4174
  });
4175
4175
 
4176
+ /**
4177
+ * Utility functions for retrieving statistics from Brainy
4178
+ */
4179
+ /**
4180
+ * Get statistics about the current state of a BrainyData instance
4181
+ * This function provides access to statistics at the root level of the library
4182
+ *
4183
+ * @param instance A BrainyData instance to get statistics from
4184
+ * @returns Object containing counts of nouns, verbs, metadata entries, and HNSW index size
4185
+ * @throws Error if the instance is not provided or if statistics retrieval fails
4186
+ */
4187
+ async function getStatistics(instance) {
4188
+ if (!instance) {
4189
+ throw new Error('BrainyData instance must be provided to getStatistics');
4190
+ }
4191
+ try {
4192
+ return await instance.getStatistics();
4193
+ }
4194
+ catch (error) {
4195
+ console.error('Failed to get statistics:', error);
4196
+ throw new Error(`Failed to get statistics: ${error}`);
4197
+ }
4198
+ }
4199
+
4176
4200
  /**
4177
4201
  * HNSW (Hierarchical Navigable Small World) Index implementation
4178
4202
  * Based on the paper: "Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs"
@@ -9870,6 +9894,10 @@ class BrainyData {
9870
9894
  if (metadata === null) {
9871
9895
  metadata = {};
9872
9896
  }
9897
+ // Ensure metadata has the id field
9898
+ if (metadata && typeof metadata === 'object') {
9899
+ metadata = { ...metadata, id };
9900
+ }
9873
9901
  searchResults.push({
9874
9902
  id,
9875
9903
  score,
@@ -9910,6 +9938,10 @@ class BrainyData {
9910
9938
  if (metadata === null) {
9911
9939
  metadata = {};
9912
9940
  }
9941
+ // Ensure metadata has the id field
9942
+ if (metadata && typeof metadata === 'object') {
9943
+ metadata = { ...metadata, id };
9944
+ }
9913
9945
  searchResults.push({
9914
9946
  id,
9915
9947
  score,
@@ -10176,6 +10208,13 @@ class BrainyData {
10176
10208
  metadata: metadata
10177
10209
  });
10178
10210
  }
10211
+ /**
10212
+ * Create a connection between two entities
10213
+ * This is an alias for relate() for backward compatibility
10214
+ */
10215
+ async connect(sourceId, targetId, relationType, metadata) {
10216
+ return this.relate(sourceId, targetId, relationType, metadata);
10217
+ }
10179
10218
  /**
10180
10219
  * Add a verb between two nouns
10181
10220
  * If metadata is provided and vector is not, the metadata will be vectorized using the embedding function
@@ -10451,6 +10490,56 @@ class BrainyData {
10451
10490
  size() {
10452
10491
  return this.index.size();
10453
10492
  }
10493
+ /**
10494
+ * Get statistics about the current state of the database
10495
+ * @returns Object containing counts of nouns, verbs, metadata entries, and HNSW index size
10496
+ */
10497
+ async getStatistics() {
10498
+ await this.ensureInitialized();
10499
+ try {
10500
+ // Get all verbs from storage
10501
+ const allVerbs = await this.storage.getAllVerbs();
10502
+ const verbCount = allVerbs.length;
10503
+ // Create a set of verb IDs for faster lookup
10504
+ const verbIds = new Set(allVerbs.map(verb => verb.id));
10505
+ // Get all nouns from the index
10506
+ const nouns = this.index.getNouns();
10507
+ // Count nouns that are not verbs
10508
+ let nounCount = 0;
10509
+ for (const [id] of nouns.entries()) {
10510
+ if (!verbIds.has(id)) {
10511
+ nounCount++;
10512
+ }
10513
+ }
10514
+ // Count metadata entries by checking each noun for metadata
10515
+ let metadataCount = 0;
10516
+ for (const [id] of nouns.entries()) {
10517
+ try {
10518
+ const metadata = await this.storage.getMetadata(id);
10519
+ if (metadata !== null && metadata !== undefined) {
10520
+ metadataCount++;
10521
+ }
10522
+ }
10523
+ catch (error) {
10524
+ // Ignore errors when checking individual metadata entries
10525
+ // This could happen if metadata is corrupted or missing
10526
+ }
10527
+ }
10528
+ // Get HNSW index size (excluding verbs)
10529
+ // The test expects this to be the same as the noun count
10530
+ const hnswIndexSize = nounCount;
10531
+ return {
10532
+ nounCount,
10533
+ verbCount,
10534
+ metadataCount,
10535
+ hnswIndexSize
10536
+ };
10537
+ }
10538
+ catch (error) {
10539
+ console.error('Failed to get statistics:', error);
10540
+ throw new Error(`Failed to get statistics: ${error}`);
10541
+ }
10542
+ }
10454
10543
  /**
10455
10544
  * Check if the database is in read-only mode
10456
10545
  * @returns True if the database is in read-only mode, false otherwise
@@ -87376,5 +87465,5 @@ var universalSentenceEncoder_esm = /*#__PURE__*/Object.freeze({
87376
87465
  version: version
87377
87466
  });
87378
87467
 
87379
- export { AugmentationType, BrainyData, BrainyMCPAdapter, BrainyMCPService, ExecutionMode$1 as ExecutionMode, FileSystemStorage, FileSystemStorageAugmentation, HNSWIndex, HNSWIndexOptimized, MCPAugmentationToolset, MCPRequestType, MCP_VERSION, MemoryStorage, MemoryStorageAugmentation, NounType, OPFSStorage, OPFSStorageAugmentation, Pipeline, S3CompatibleStorage as R2Storage, S3CompatibleStorage, SequentialPipeline, ServerSearchActivationAugmentation, ServerSearchConduitAugmentation, StreamlinedExecutionMode, UniversalSentenceEncoder$1 as UniversalSentenceEncoder, VerbType, WebRTCConduitAugmentation, WebSocketConduitAugmentation, addWebSocketSupport, applyTensorFlowPatch, areWebWorkersAvailable, areWorkerThreadsAvailable, areWorkerThreadsAvailableSync, augmentationPipeline$1 as augmentationPipeline, availableAugmentations, cleanupWorkerPools, cosineDistance$1 as cosineDistance, createAugmentationRegistryPlugin, createAugmentationRegistryRollupPlugin, createConduitAugmentation, createEmbeddingFunction, createMemoryAugmentation, createPipeline, createSenseAugmentation, createServerSearchAugmentations, createStorage, createStreamingPipeline, createTensorFlowEmbeddingFunction, createThreadedEmbeddingFunction, defaultEmbeddingFunction, dotProductDistance, environment, euclideanDistance, executeAugmentation, executeByType, executeInThread, executeSingle, executeStreamlined, getAugmentationsByType, initializeAugmentationPipeline, isBrowser$1 as isBrowser, isNode, isThreadingAvailable, isThreadingAvailableAsync, isWebWorker, loadAugmentationModule, loadAugmentationsFromModules, manhattanDistance, pipeline, processStaticData, processStreamingData, registerAugmentation, sequentialPipeline, setAugmentationEnabled };
87468
+ export { AugmentationType, BrainyData, BrainyMCPAdapter, BrainyMCPService, ExecutionMode$1 as ExecutionMode, FileSystemStorage, FileSystemStorageAugmentation, HNSWIndex, HNSWIndexOptimized, MCPAugmentationToolset, MCPRequestType, MCP_VERSION, MemoryStorage, MemoryStorageAugmentation, NounType, OPFSStorage, OPFSStorageAugmentation, Pipeline, S3CompatibleStorage as R2Storage, S3CompatibleStorage, SequentialPipeline, ServerSearchActivationAugmentation, ServerSearchConduitAugmentation, StreamlinedExecutionMode, UniversalSentenceEncoder$1 as UniversalSentenceEncoder, VerbType, WebRTCConduitAugmentation, WebSocketConduitAugmentation, addWebSocketSupport, applyTensorFlowPatch, areWebWorkersAvailable, areWorkerThreadsAvailable, areWorkerThreadsAvailableSync, augmentationPipeline$1 as augmentationPipeline, availableAugmentations, cleanupWorkerPools, cosineDistance$1 as cosineDistance, createAugmentationRegistryPlugin, createAugmentationRegistryRollupPlugin, createConduitAugmentation, createEmbeddingFunction, createMemoryAugmentation, createPipeline, createSenseAugmentation, createServerSearchAugmentations, createStorage, createStreamingPipeline, createTensorFlowEmbeddingFunction, createThreadedEmbeddingFunction, defaultEmbeddingFunction, dotProductDistance, environment, euclideanDistance, executeAugmentation, executeByType, executeInThread, executeSingle, executeStreamlined, getAugmentationsByType, getStatistics, initializeAugmentationPipeline, isBrowser$1 as isBrowser, isNode, isThreadingAvailable, isThreadingAvailableAsync, isWebWorker, loadAugmentationModule, loadAugmentationsFromModules, manhattanDistance, pipeline, processStaticData, processStreamingData, registerAugmentation, sequentialPipeline, setAugmentationEnabled };
87380
87469
  //# sourceMappingURL=unified.js.map