agentdb 3.0.0-alpha.7 → 3.0.0-alpha.9

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 (100) hide show
  1. package/README.md +214 -1204
  2. package/dist/agentdb.browser.js +1 -1
  3. package/dist/agentdb.browser.min.js +1 -1
  4. package/dist/backends/VectorBackend.d.ts +120 -0
  5. package/dist/backends/VectorBackend.js +14 -0
  6. package/dist/backends/VectorBackend.js.map +1 -0
  7. package/dist/optimizations/RVFOptimizer.d.ts +225 -0
  8. package/dist/optimizations/RVFOptimizer.js +541 -0
  9. package/dist/optimizations/RVFOptimizer.js.map +1 -0
  10. package/dist/src/backends/factory.d.ts +1 -0
  11. package/dist/src/backends/factory.d.ts.map +1 -1
  12. package/dist/src/backends/factory.js +40 -7
  13. package/dist/src/backends/factory.js.map +1 -1
  14. package/dist/src/backends/index.cjs +6 -0
  15. package/dist/src/backends/ruvector/RuVectorBackend.d.ts +40 -22
  16. package/dist/src/backends/ruvector/RuVectorBackend.d.ts.map +1 -1
  17. package/dist/src/backends/ruvector/RuVectorBackend.js +228 -81
  18. package/dist/src/backends/ruvector/RuVectorBackend.js.map +1 -1
  19. package/dist/src/consensus/RaftConsensus.d.ts +220 -0
  20. package/dist/src/consensus/RaftConsensus.d.ts.map +1 -0
  21. package/dist/src/consensus/RaftConsensus.js +762 -0
  22. package/dist/src/consensus/RaftConsensus.js.map +1 -0
  23. package/dist/src/controllers/AttentionService.d.ts +80 -1
  24. package/dist/src/controllers/AttentionService.d.ts.map +1 -1
  25. package/dist/src/controllers/AttentionService.js +344 -13
  26. package/dist/src/controllers/AttentionService.js.map +1 -1
  27. package/dist/src/controllers/HierarchicalMemory.d.ts +197 -0
  28. package/dist/src/controllers/HierarchicalMemory.d.ts.map +1 -0
  29. package/dist/src/controllers/HierarchicalMemory.js +519 -0
  30. package/dist/src/controllers/HierarchicalMemory.js.map +1 -0
  31. package/dist/src/controllers/LearningSystem.d.ts +17 -0
  32. package/dist/src/controllers/LearningSystem.d.ts.map +1 -1
  33. package/dist/src/controllers/LearningSystem.js +131 -0
  34. package/dist/src/controllers/LearningSystem.js.map +1 -1
  35. package/dist/src/controllers/MemoryConsolidation.d.ts +142 -0
  36. package/dist/src/controllers/MemoryConsolidation.d.ts.map +1 -0
  37. package/dist/src/controllers/MemoryConsolidation.js +479 -0
  38. package/dist/src/controllers/MemoryConsolidation.js.map +1 -0
  39. package/dist/src/controllers/QUICConnection.d.ts +122 -0
  40. package/dist/src/controllers/QUICConnection.d.ts.map +1 -0
  41. package/dist/src/controllers/QUICConnection.js +329 -0
  42. package/dist/src/controllers/QUICConnection.js.map +1 -0
  43. package/dist/src/controllers/QUICConnectionPool.d.ts +83 -0
  44. package/dist/src/controllers/QUICConnectionPool.d.ts.map +1 -0
  45. package/dist/src/controllers/QUICConnectionPool.js +256 -0
  46. package/dist/src/controllers/QUICConnectionPool.js.map +1 -0
  47. package/dist/src/controllers/QUICStreamManager.d.ts +114 -0
  48. package/dist/src/controllers/QUICStreamManager.d.ts.map +1 -0
  49. package/dist/src/controllers/QUICStreamManager.js +267 -0
  50. package/dist/src/controllers/QUICStreamManager.js.map +1 -0
  51. package/dist/src/controllers/StreamingEmbeddingService.d.ts +82 -0
  52. package/dist/src/controllers/StreamingEmbeddingService.d.ts.map +1 -0
  53. package/dist/src/controllers/StreamingEmbeddingService.js +243 -0
  54. package/dist/src/controllers/StreamingEmbeddingService.js.map +1 -0
  55. package/dist/src/controllers/WASMVectorSearch.d.ts +30 -0
  56. package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
  57. package/dist/src/controllers/WASMVectorSearch.js +70 -0
  58. package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
  59. package/dist/src/controllers/index.cjs +6 -0
  60. package/dist/src/controllers/index.d.ts +10 -0
  61. package/dist/src/controllers/index.d.ts.map +1 -1
  62. package/dist/src/controllers/index.js +6 -0
  63. package/dist/src/controllers/index.js.map +1 -1
  64. package/dist/src/core/AgentDB.d.ts.map +1 -1
  65. package/dist/src/core/AgentDB.js +1 -0
  66. package/dist/src/core/AgentDB.js.map +1 -1
  67. package/dist/src/index.cjs +6 -0
  68. package/dist/src/index.d.ts +4 -0
  69. package/dist/src/index.d.ts.map +1 -1
  70. package/dist/src/index.js +2 -0
  71. package/dist/src/index.js.map +1 -1
  72. package/dist/src/optimizations/RVFOptimizer.d.ts +226 -0
  73. package/dist/src/optimizations/RVFOptimizer.d.ts.map +1 -0
  74. package/dist/src/optimizations/RVFOptimizer.js +541 -0
  75. package/dist/src/optimizations/RVFOptimizer.js.map +1 -0
  76. package/dist/src/optimizations/index.d.ts +2 -0
  77. package/dist/src/optimizations/index.d.ts.map +1 -1
  78. package/dist/src/optimizations/index.js +1 -0
  79. package/dist/src/optimizations/index.js.map +1 -1
  80. package/dist/src/security/MutationGuard.d.ts.map +1 -1
  81. package/dist/src/security/MutationGuard.js +24 -39
  82. package/dist/src/security/MutationGuard.js.map +1 -1
  83. package/dist/src/security/index.cjs +6 -0
  84. package/dist/src/services/GNNService.d.ts +172 -0
  85. package/dist/src/services/GNNService.d.ts.map +1 -0
  86. package/dist/src/services/GNNService.js +612 -0
  87. package/dist/src/services/GNNService.js.map +1 -0
  88. package/dist/src/services/GraphTransformerService.d.ts +1 -0
  89. package/dist/src/services/GraphTransformerService.d.ts.map +1 -1
  90. package/dist/src/services/GraphTransformerService.js +41 -3
  91. package/dist/src/services/GraphTransformerService.js.map +1 -1
  92. package/dist/src/services/SemanticRouter.d.ts +7 -2
  93. package/dist/src/services/SemanticRouter.d.ts.map +1 -1
  94. package/dist/src/services/SemanticRouter.js +13 -2
  95. package/dist/src/services/SemanticRouter.js.map +1 -1
  96. package/dist/src/services/SonaTrajectoryService.d.ts +126 -2
  97. package/dist/src/services/SonaTrajectoryService.d.ts.map +1 -1
  98. package/dist/src/services/SonaTrajectoryService.js +311 -3
  99. package/dist/src/services/SonaTrajectoryService.js.map +1 -1
  100. package/package.json +22 -16
@@ -1,23 +1,27 @@
1
1
  /**
2
- * RuVectorBackend - High-Performance Vector Storage
2
+ * RuVectorBackend - High-Performance Vector Storage (v0.1.99+)
3
3
  *
4
- * Implements VectorBackend using @ruvector/core with optional GNN support.
5
- * Provides <100µs search latency with native SIMD optimizations.
4
+ * Implements VectorBackend using ruvector with native SIMD and multi-threading.
5
+ * Updated for ruvector 0.1.99+ async API with object-style insert/search.
6
6
  *
7
7
  * Features:
8
- * - Automatic fallback when @ruvector packages not installed
8
+ * - Native SIMD acceleration (2-4x faster vector ops)
9
+ * - Automatic fallback when ruvector packages not installed
9
10
  * - Separate metadata storage for rich queries
10
- * - Distance-to-similarity conversion for all metrics
11
+ * - Score-to-similarity conversion for all metrics
11
12
  * - Batch operations for optimal throughput
13
+ * - Parallel batch search via searchBatch()
12
14
  * - Persistent storage with separate metadata files
13
15
  */
14
16
  export class RuVectorBackend {
15
17
  name = 'ruvector';
16
- db; // VectorDB from @ruvector/core
18
+ db; // VectorDB from ruvector 0.1.99+
17
19
  config;
18
20
  metadata = new Map();
19
21
  initialized = false;
20
22
  learning = null;
23
+ nativeVersion = 'unknown';
24
+ isNativeImpl = false;
21
25
  constructor(config) {
22
26
  // Handle both dimension and dimensions for backward compatibility
23
27
  const dimension = config.dimension ?? config.dimensions;
@@ -28,84 +32,114 @@ export class RuVectorBackend {
28
32
  this.config = { ...config, dimension, dimensions: dimension };
29
33
  }
30
34
  /**
31
- * Initialize RuVector database with optional dependency handling
35
+ * Initialize RuVector database with SIMD and multi-threading (0.1.99+)
32
36
  */
33
37
  async initialize() {
34
38
  if (this.initialized)
35
39
  return;
36
40
  try {
37
- // Try main ruvector package first (includes core, gnn, graph)
41
+ // Try main ruvector package first (0.1.99+ with native SIMD)
38
42
  let VectorDB;
43
+ let ruvectorModule;
39
44
  try {
40
- const ruvector = await import('ruvector');
41
- VectorDB = ruvector.VectorDB || ruvector.default?.VectorDB;
45
+ ruvectorModule = await import('ruvector');
46
+ VectorDB = ruvectorModule.VectorDB || ruvectorModule.default?.VectorDB;
42
47
  }
43
48
  catch {
44
49
  // Fallback to @ruvector/core for backward compatibility
45
- const core = await import('@ruvector/core');
46
- // ESM and CommonJS both export as VectorDB (capital 'DB')
47
- VectorDB = core.VectorDB || core.default?.VectorDB;
50
+ ruvectorModule = await import('@ruvector/core');
51
+ VectorDB = ruvectorModule.VectorDB || ruvectorModule.default?.VectorDB;
48
52
  }
49
53
  if (!VectorDB) {
50
- throw new Error('Could not find VectorDB export in @ruvector/core');
54
+ throw new Error('Could not find VectorDB export in ruvector');
51
55
  }
52
56
  // Handle both 'dimension' and 'dimensions' for backward compatibility
53
57
  const dimensions = this.config.dimension ?? this.config.dimensions;
54
58
  if (!dimensions) {
55
59
  throw new Error('Vector dimension is required (use dimension or dimensions)');
56
60
  }
57
- // RuVector VectorDB constructor signature
61
+ // RuVector 0.1.99+ constructor - uses 'dimensions' (plural)
58
62
  this.db = new VectorDB({
59
- dimensions: dimensions, // Note: config object, not positional arg
63
+ dimensions: dimensions,
60
64
  metric: this.config.metric,
61
65
  maxElements: this.config.maxElements || 100000,
62
66
  efConstruction: this.config.efConstruction || 200,
63
- m: this.config.M || 16 // Note: lowercase 'm'
67
+ m: this.config.M || 16
64
68
  });
69
+ // Detect native SIMD availability
70
+ if (ruvectorModule.isNative) {
71
+ this.isNativeImpl = ruvectorModule.isNative();
72
+ }
73
+ if (ruvectorModule.getVersion) {
74
+ const vInfo = ruvectorModule.getVersion();
75
+ this.nativeVersion = typeof vInfo === 'string' ? vInfo : vInfo?.version || 'unknown';
76
+ }
65
77
  this.initialized = true;
66
78
  }
67
79
  catch (error) {
68
80
  const errorMessage = error.message;
69
- // Special handling for path validation errors (from ruvector package)
70
- // When using :memory:, ruvector may reject it as a path traversal attempt
71
- // This is expected and not critical - users should use file-based paths for ruvector persistence
72
81
  if (errorMessage.includes('Path traversal') || errorMessage.includes('Invalid path')) {
73
82
  throw new Error(`RuVector does not support :memory: database paths.\n` +
74
83
  `Use a file path instead, or RuVector will be skipped and fallback backend will be used.\n` +
75
84
  `Original error: ${errorMessage}`);
76
85
  }
77
- throw new Error(`RuVector initialization failed. Please install: npm install ruvector\n` +
86
+ throw new Error(`RuVector initialization failed. Please install: npm install ruvector@latest\n` +
78
87
  `Or legacy packages: npm install @ruvector/core\n` +
79
88
  `Error: ${errorMessage}`);
80
89
  }
81
90
  }
82
91
  /**
83
- * Insert single vector with optional metadata
92
+ * Insert single vector with optional metadata.
93
+ * Uses ruvector 0.1.99+ object-style API: insert({ id, vector, metadata? })
84
94
  */
85
95
  insert(id, embedding, metadata) {
86
96
  this.ensureInitialized();
87
- // RuVector expects regular arrays
88
- this.db.insert(id, Array.from(embedding));
97
+ // ruvector 0.1.99+ uses object-style insert with async support
98
+ // The VectorBackend interface is sync, so we call without awaiting.
99
+ // The underlying native impl handles this via napi-rs sync path.
100
+ const entry = {
101
+ id,
102
+ vector: Array.from(embedding)
103
+ };
89
104
  if (metadata) {
105
+ entry.metadata = metadata;
90
106
  this.metadata.set(id, metadata);
91
107
  }
108
+ // ruvector 0.1.99+ insert returns a promise, but the native layer
109
+ // executes synchronously. We fire-and-forget for interface compat.
110
+ const result = this.db.insert(entry);
111
+ if (result && typeof result.catch === 'function') {
112
+ result.catch((err) => {
113
+ console.error(`[RuVectorBackend] Insert failed for ${id}: ${err.message}`);
114
+ });
115
+ }
92
116
  }
93
117
  /**
94
- * Batch insert for optimal performance
118
+ * Batch insert for optimal performance.
119
+ * Uses ruvector 0.1.99+ insertBatch([{ id, vector, metadata? }])
95
120
  */
96
121
  insertBatch(items) {
97
122
  this.ensureInitialized();
98
- for (const item of items) {
99
- this.insert(item.id, item.embedding, item.metadata);
123
+ const entries = items.map(item => {
124
+ const entry = {
125
+ id: item.id,
126
+ vector: Array.from(item.embedding)
127
+ };
128
+ if (item.metadata) {
129
+ entry.metadata = item.metadata;
130
+ this.metadata.set(item.id, item.metadata);
131
+ }
132
+ return entry;
133
+ });
134
+ const result = this.db.insertBatch(entries);
135
+ if (result && typeof result.catch === 'function') {
136
+ result.catch((err) => {
137
+ console.error(`[RuVectorBackend] Batch insert failed: ${err.message}`);
138
+ });
100
139
  }
101
140
  }
102
141
  /**
103
142
  * Set a RuVectorLearning instance for GNN-enhanced search
104
- *
105
- * When set, search results will be enhanced using GNN neighbor context
106
- * from @ruvector/gnn. Falls through to raw HNSW results if enhancement fails.
107
- *
108
- * @param learning - Initialized RuVectorLearning instance, or null to disable
109
143
  */
110
144
  setLearning(learning) {
111
145
  this.learning = learning;
@@ -117,30 +151,57 @@ export class RuVectorBackend {
117
151
  return this.learning;
118
152
  }
119
153
  /**
120
- * Search for k-nearest neighbors with optional filtering and GNN enhancement
154
+ * Search for k-nearest neighbors with optional filtering and GNN enhancement.
155
+ * Uses ruvector 0.1.99+ search({ vector, k, efSearch?, filter? })
156
+ * Results contain { id, score, vector?, metadata? }
121
157
  */
122
158
  search(query, k, options) {
123
159
  this.ensureInitialized();
124
- // Apply efSearch parameter if provided
160
+ // Build search query for ruvector 0.1.99+ API
161
+ const searchQuery = {
162
+ vector: Array.from(query),
163
+ k
164
+ };
125
165
  if (options?.efSearch) {
126
- this.db.setEfSearch(options.efSearch);
166
+ searchQuery.efSearch = options.efSearch;
127
167
  }
128
- // Perform vector search
129
- const rawResults = this.db.search(Array.from(query), k);
130
- // Convert results and apply filtering
168
+ if (options?.filter) {
169
+ searchQuery.filter = options.filter;
170
+ }
171
+ // ruvector 0.1.99+ search is async but native layer is sync
172
+ let rawResults = [];
173
+ const searchPromise = this.db.search(searchQuery);
174
+ if (searchPromise && typeof searchPromise.then === 'function') {
175
+ // Synchronous extraction for interface compat - the native binding
176
+ // resolves immediately when using N-API sync path
177
+ // For truly async scenarios, use searchBatch() instead
178
+ let resolved = false;
179
+ searchPromise.then((r) => {
180
+ rawResults = r || [];
181
+ resolved = true;
182
+ });
183
+ // If promise resolved synchronously (common with native bindings)
184
+ if (!resolved) {
185
+ // Fallback: return empty and log warning
186
+ console.warn('[RuVectorBackend] Search returned async promise; use searchBatch() for async searches');
187
+ return [];
188
+ }
189
+ }
190
+ else {
191
+ rawResults = searchPromise || [];
192
+ }
193
+ // Convert ruvector 0.1.99+ results (score-based) to SearchResult format
131
194
  let results = rawResults
132
195
  .map((r) => ({
133
196
  id: r.id,
134
- distance: r.distance,
135
- similarity: this.distanceToSimilarity(r.distance),
136
- metadata: this.metadata.get(r.id)
197
+ distance: this.scoreToDistance(r.score),
198
+ similarity: r.score,
199
+ metadata: r.metadata || this.metadata.get(r.id)
137
200
  }))
138
201
  .filter((r) => {
139
- // Apply similarity threshold
140
202
  if (options?.threshold && r.similarity < options.threshold) {
141
203
  return false;
142
204
  }
143
- // Apply metadata filters
144
205
  if (options?.filter && r.metadata) {
145
206
  return Object.entries(options.filter).every(([key, value]) => r.metadata[key] === value);
146
207
  }
@@ -149,40 +210,50 @@ export class RuVectorBackend {
149
210
  // Enhance with GNN if available
150
211
  if (this.learning && this.learning.getState().initialized && results.length > 0) {
151
212
  try {
152
- // Extract neighbor embeddings and similarity weights from results
153
213
  const neighbors = [];
154
214
  const weights = [];
155
215
  for (const r of results) {
156
- // Retrieve the stored vector for this result by re-searching with k=1
157
- // We use the similarity score as the edge weight for GNN attention
158
216
  weights.push(r.similarity);
159
- // Use the query dimension to create a placeholder if we cannot retrieve the vector
160
- // The GNN will use attention weights to compensate
161
- neighbors.push(query); // Placeholder - actual retrieval depends on backend support
217
+ neighbors.push(query);
162
218
  }
163
- // Try to get actual embeddings from the raw search if available
164
219
  for (let i = 0; i < rawResults.length && i < results.length; i++) {
165
220
  const raw = rawResults[i];
166
- if (raw.vector || raw.embedding) {
167
- const vec = raw.vector || raw.embedding;
168
- neighbors[i] = vec instanceof Float32Array ? vec : new Float32Array(vec);
221
+ if (raw.vector) {
222
+ const vec = raw.vector instanceof Float32Array
223
+ ? raw.vector
224
+ : new Float32Array(Object.values(raw.vector));
225
+ neighbors[i] = vec;
169
226
  }
170
227
  }
171
228
  const enhanced = this.learning.enhance(query, neighbors, weights);
172
229
  if (enhanced && enhanced.length > 0) {
173
- // Re-search with the GNN-enhanced query vector for better results
174
- const enhancedRaw = this.db.search(Array.from(enhanced), k);
230
+ const enhancedQuery = {
231
+ vector: Array.from(enhanced),
232
+ k
233
+ };
234
+ if (options?.efSearch)
235
+ enhancedQuery.efSearch = options.efSearch;
236
+ const enhancedPromise = this.db.search(enhancedQuery);
237
+ let enhancedRaw = [];
238
+ if (enhancedPromise && typeof enhancedPromise.then === 'function') {
239
+ let resolved = false;
240
+ enhancedPromise.then((r) => { enhancedRaw = r || []; resolved = true; });
241
+ if (!resolved)
242
+ return results;
243
+ }
244
+ else {
245
+ enhancedRaw = enhancedPromise || [];
246
+ }
175
247
  const enhancedResults = enhancedRaw
176
248
  .map((r) => ({
177
249
  id: r.id,
178
- distance: r.distance,
179
- similarity: this.distanceToSimilarity(r.distance),
180
- metadata: this.metadata.get(r.id)
250
+ distance: this.scoreToDistance(r.score),
251
+ similarity: r.score,
252
+ metadata: r.metadata || this.metadata.get(r.id)
181
253
  }))
182
254
  .filter((r) => {
183
- if (options?.threshold && r.similarity < options.threshold) {
255
+ if (options?.threshold && r.similarity < options.threshold)
184
256
  return false;
185
- }
186
257
  if (options?.filter && r.metadata) {
187
258
  return Object.entries(options.filter).every(([key, value]) => r.metadata[key] === value);
188
259
  }
@@ -200,29 +271,106 @@ export class RuVectorBackend {
200
271
  return results;
201
272
  }
202
273
  /**
203
- * Remove vector by ID
274
+ * Batch search for parallel query processing (0.1.99+).
275
+ * Executes multiple searches concurrently for throughput.
276
+ */
277
+ async searchBatch(queries, k, options) {
278
+ this.ensureInitialized();
279
+ const results = await Promise.all(queries.map(async (query) => {
280
+ const searchQuery = {
281
+ vector: Array.from(query),
282
+ k
283
+ };
284
+ if (options?.efSearch)
285
+ searchQuery.efSearch = options.efSearch;
286
+ if (options?.filter)
287
+ searchQuery.filter = options.filter;
288
+ const rawResults = await this.db.search(searchQuery);
289
+ return (rawResults || []).map((r) => ({
290
+ id: r.id,
291
+ distance: this.scoreToDistance(r.score),
292
+ similarity: r.score,
293
+ metadata: r.metadata || this.metadata.get(r.id)
294
+ })).filter((r) => {
295
+ if (options?.threshold && r.similarity < options.threshold)
296
+ return false;
297
+ if (options?.filter && r.metadata) {
298
+ return Object.entries(options.filter).every(([key, value]) => r.metadata[key] === value);
299
+ }
300
+ return true;
301
+ });
302
+ }));
303
+ return results;
304
+ }
305
+ /**
306
+ * Remove vector by ID.
307
+ * Uses ruvector 0.1.99+ delete(id) instead of remove(id)
204
308
  */
205
309
  remove(id) {
206
310
  this.ensureInitialized();
207
311
  this.metadata.delete(id);
208
312
  try {
209
- return this.db.remove(id);
313
+ const result = this.db.delete(id);
314
+ // Handle async result
315
+ if (result && typeof result.then === 'function') {
316
+ let resolved = false;
317
+ let success = false;
318
+ result.then((r) => { success = r; resolved = true; });
319
+ if (resolved)
320
+ return success;
321
+ // Fire-and-forget for async case
322
+ result.catch(() => { });
323
+ return true;
324
+ }
325
+ return result !== false;
210
326
  }
211
327
  catch {
212
328
  return false;
213
329
  }
214
330
  }
215
331
  /**
216
- * Get database statistics
332
+ * Get database statistics including native SIMD status
217
333
  */
218
334
  getStats() {
219
335
  this.ensureInitialized();
336
+ let count = 0;
337
+ const lenResult = this.db.len();
338
+ if (lenResult && typeof lenResult.then === 'function') {
339
+ let resolved = false;
340
+ lenResult.then((c) => { count = c; resolved = true; });
341
+ if (!resolved)
342
+ count = this.metadata.size; // fallback
343
+ }
344
+ else {
345
+ count = lenResult || 0;
346
+ }
220
347
  return {
221
- count: this.db.count(),
348
+ count,
222
349
  dimension: this.config.dimension || 384,
223
350
  metric: this.config.metric,
224
351
  backend: 'ruvector',
225
- memoryUsage: this.db.memoryUsage?.() || 0
352
+ memoryUsage: 0,
353
+ // Extended stats for 0.1.99+
354
+ ...(this.isNativeImpl && {
355
+ nativeVersion: this.nativeVersion,
356
+ simdEnabled: true,
357
+ implementation: 'native'
358
+ })
359
+ };
360
+ }
361
+ /**
362
+ * Get extended stats including SIMD and version info
363
+ */
364
+ getExtendedStats() {
365
+ const base = this.getStats();
366
+ return {
367
+ count: base.count,
368
+ dimension: base.dimension,
369
+ metric: base.metric,
370
+ backend: base.backend,
371
+ nativeVersion: this.nativeVersion,
372
+ isNative: this.isNativeImpl,
373
+ simdEnabled: this.isNativeImpl
226
374
  };
227
375
  }
228
376
  /**
@@ -230,8 +378,10 @@ export class RuVectorBackend {
230
378
  */
231
379
  async save(path) {
232
380
  this.ensureInitialized();
233
- // Save vector index
234
- this.db.save(path);
381
+ // Save vector index (if ruvector supports it)
382
+ if (typeof this.db.save === 'function') {
383
+ await this.db.save(path);
384
+ }
235
385
  // Save metadata separately as JSON
236
386
  const metadataPath = path + '.meta.json';
237
387
  const fs = await import('fs/promises');
@@ -242,8 +392,10 @@ export class RuVectorBackend {
242
392
  */
243
393
  async load(path) {
244
394
  this.ensureInitialized();
245
- // Load vector index
246
- this.db.load(path);
395
+ // Load vector index (if ruvector supports it)
396
+ if (typeof this.db.load === 'function') {
397
+ await this.db.load(path);
398
+ }
247
399
  // Load metadata
248
400
  const metadataPath = path + '.meta.json';
249
401
  try {
@@ -252,7 +404,6 @@ export class RuVectorBackend {
252
404
  this.metadata = new Map(Object.entries(JSON.parse(data)));
253
405
  }
254
406
  catch {
255
- // No metadata file - this is okay for backward compatibility
256
407
  console.debug(`[RuVectorBackend] No metadata file found at ${metadataPath}`);
257
408
  }
258
409
  }
@@ -260,26 +411,22 @@ export class RuVectorBackend {
260
411
  * Close and cleanup resources
261
412
  */
262
413
  close() {
263
- // RuVector cleanup if needed
264
414
  this.metadata.clear();
265
415
  }
266
416
  /**
267
- * Convert distance to similarity score based on metric
268
- *
269
- * Cosine: distance is already in [0, 2], where 0 = identical
270
- * L2: exponential decay for unbounded distances
271
- * IP: negative inner product, so negate for similarity
417
+ * Convert score to distance for backward compatibility.
418
+ * ruvector 0.1.99+ returns scores (higher = more similar).
272
419
  */
273
- distanceToSimilarity(distance) {
420
+ scoreToDistance(score) {
274
421
  switch (this.config.metric) {
275
422
  case 'cosine':
276
- return 1 - distance; // cosine distance is 1 - similarity
423
+ return 1 - score;
277
424
  case 'l2':
278
- return Math.exp(-distance); // exponential decay
425
+ return score === 0 ? Infinity : -Math.log(score);
279
426
  case 'ip':
280
- return -distance; // inner product: higher is better
427
+ return -score;
281
428
  default:
282
- return 1 - distance;
429
+ return 1 - score;
283
430
  }
284
431
  }
285
432
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"RuVectorBackend.js","sourceRoot":"","sources":["../../../../src/backends/ruvector/RuVectorBackend.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RuVectorBackend.js","sourceRoot":"","sources":["../../../../src/backends/ruvector/RuVectorBackend.ts"],"names":[],"mappings":"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"}