agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agentdb.min.js +4 -4
- package/dist/simulation/cli.js +0 -0
- package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/src/cli/agentdb-cli.js +78 -0
- package/dist/src/cli/agentdb-cli.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/agentdb-cli.ts +78 -0
- package/dist/agentdb-advanced.js +0 -2110
- package/dist/agentdb-advanced.min.js +0 -1
- package/dist/backends/GraphBackend.d.ts +0 -196
- package/dist/backends/GraphBackend.d.ts.map +0 -1
- package/dist/backends/GraphBackend.js +0 -33
- package/dist/backends/GraphBackend.js.map +0 -1
- package/dist/backends/LearningBackend.d.ts +0 -148
- package/dist/backends/LearningBackend.d.ts.map +0 -1
- package/dist/backends/LearningBackend.js +0 -27
- package/dist/backends/LearningBackend.js.map +0 -1
- package/dist/backends/VectorBackend.d.ts +0 -119
- package/dist/backends/VectorBackend.d.ts.map +0 -1
- package/dist/backends/VectorBackend.js +0 -14
- package/dist/backends/VectorBackend.js.map +0 -1
- package/dist/backends/detector.d.ts +0 -81
- package/dist/backends/detector.d.ts.map +0 -1
- package/dist/backends/detector.js +0 -192
- package/dist/backends/detector.js.map +0 -1
- package/dist/backends/factory.d.ts +0 -50
- package/dist/backends/factory.d.ts.map +0 -1
- package/dist/backends/factory.js +0 -161
- package/dist/backends/factory.js.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
- package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
- package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
- package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
- package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
- package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
- package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
- package/dist/backends/hnswlib/index.d.ts +0 -7
- package/dist/backends/hnswlib/index.d.ts.map +0 -1
- package/dist/backends/hnswlib/index.js +0 -7
- package/dist/backends/hnswlib/index.js.map +0 -1
- package/dist/backends/index.d.ts +0 -14
- package/dist/backends/index.d.ts.map +0 -1
- package/dist/backends/index.js +0 -13
- package/dist/backends/index.js.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
- package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorBackend.js +0 -198
- package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
- package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
- package/dist/backends/ruvector/RuVectorLearning.js +0 -177
- package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
- package/dist/backends/ruvector/index.d.ts +0 -9
- package/dist/backends/ruvector/index.d.ts.map +0 -1
- package/dist/backends/ruvector/index.js +0 -8
- package/dist/backends/ruvector/index.js.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
- package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
- package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
- package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
- package/dist/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/AdvancedFeatures.js +0 -430
- package/dist/browser/AdvancedFeatures.js.map +0 -1
- package/dist/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/HNSWIndex.js +0 -402
- package/dist/browser/HNSWIndex.js.map +0 -1
- package/dist/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/ProductQuantization.js +0 -337
- package/dist/browser/ProductQuantization.js.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
- package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
- package/dist/browser/browser/AdvancedFeatures.js +0 -427
- package/dist/browser/browser/HNSWIndex.d.ts +0 -117
- package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
- package/dist/browser/browser/HNSWIndex.js +0 -402
- package/dist/browser/browser/ProductQuantization.d.ts +0 -107
- package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
- package/dist/browser/browser/ProductQuantization.js +0 -348
- package/dist/browser/browser/index.d.ts +0 -223
- package/dist/browser/browser/index.d.ts.map +0 -1
- package/dist/browser/browser/index.js +0 -233
- package/dist/browser/index.d.ts +0 -223
- package/dist/browser/index.d.ts.map +0 -1
- package/dist/browser/index.js +0 -225
- package/dist/browser/index.js.map +0 -1
- package/dist/cli/agentdb-cli.d.ts +0 -154
- package/dist/cli/agentdb-cli.d.ts.map +0 -1
- package/dist/cli/agentdb-cli.js +0 -2273
- package/dist/cli/agentdb-cli.js.map +0 -1
- package/dist/cli/agentdb.db +0 -0
- package/dist/cli/commands/init.d.ts +0 -12
- package/dist/cli/commands/init.d.ts.map +0 -1
- package/dist/cli/commands/init.js +0 -115
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/cli/commands/install-embeddings.d.ts +0 -10
- package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
- package/dist/cli/commands/install-embeddings.js +0 -68
- package/dist/cli/commands/install-embeddings.js.map +0 -1
- package/dist/cli/commands/migrate.d.ts +0 -15
- package/dist/cli/commands/migrate.d.ts.map +0 -1
- package/dist/cli/commands/migrate.js +0 -425
- package/dist/cli/commands/migrate.js.map +0 -1
- package/dist/cli/commands/status.d.ts +0 -10
- package/dist/cli/commands/status.d.ts.map +0 -1
- package/dist/cli/commands/status.js +0 -129
- package/dist/cli/commands/status.js.map +0 -1
- package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
- package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
- package/dist/controllers/CausalMemoryGraph.js +0 -323
- package/dist/controllers/CausalMemoryGraph.js.map +0 -1
- package/dist/controllers/CausalRecall.d.ts +0 -139
- package/dist/controllers/CausalRecall.d.ts.map +0 -1
- package/dist/controllers/CausalRecall.js +0 -356
- package/dist/controllers/CausalRecall.js.map +0 -1
- package/dist/controllers/ContextSynthesizer.d.ts +0 -65
- package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
- package/dist/controllers/ContextSynthesizer.js +0 -208
- package/dist/controllers/ContextSynthesizer.js.map +0 -1
- package/dist/controllers/EmbeddingService.d.ts +0 -37
- package/dist/controllers/EmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EmbeddingService.js +0 -136
- package/dist/controllers/EmbeddingService.js.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
- package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
- package/dist/controllers/EnhancedEmbeddingService.js +0 -119
- package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
- package/dist/controllers/ExplainableRecall.d.ts +0 -163
- package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
- package/dist/controllers/ExplainableRecall.js +0 -485
- package/dist/controllers/ExplainableRecall.js.map +0 -1
- package/dist/controllers/HNSWIndex.d.ts +0 -128
- package/dist/controllers/HNSWIndex.d.ts.map +0 -1
- package/dist/controllers/HNSWIndex.js +0 -361
- package/dist/controllers/HNSWIndex.js.map +0 -1
- package/dist/controllers/LearningSystem.d.ts +0 -195
- package/dist/controllers/LearningSystem.d.ts.map +0 -1
- package/dist/controllers/LearningSystem.js +0 -929
- package/dist/controllers/LearningSystem.js.map +0 -1
- package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
- package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
- package/dist/controllers/MMRDiversityRanker.js +0 -130
- package/dist/controllers/MMRDiversityRanker.js.map +0 -1
- package/dist/controllers/MetadataFilter.d.ts +0 -70
- package/dist/controllers/MetadataFilter.d.ts.map +0 -1
- package/dist/controllers/MetadataFilter.js +0 -243
- package/dist/controllers/MetadataFilter.js.map +0 -1
- package/dist/controllers/NightlyLearner.d.ts +0 -114
- package/dist/controllers/NightlyLearner.d.ts.map +0 -1
- package/dist/controllers/NightlyLearner.js +0 -394
- package/dist/controllers/NightlyLearner.js.map +0 -1
- package/dist/controllers/QUICClient.d.ts +0 -109
- package/dist/controllers/QUICClient.d.ts.map +0 -1
- package/dist/controllers/QUICClient.js +0 -299
- package/dist/controllers/QUICClient.js.map +0 -1
- package/dist/controllers/QUICServer.d.ts +0 -121
- package/dist/controllers/QUICServer.d.ts.map +0 -1
- package/dist/controllers/QUICServer.js +0 -383
- package/dist/controllers/QUICServer.js.map +0 -1
- package/dist/controllers/ReasoningBank.d.ts +0 -196
- package/dist/controllers/ReasoningBank.d.ts.map +0 -1
- package/dist/controllers/ReasoningBank.js +0 -494
- package/dist/controllers/ReasoningBank.js.map +0 -1
- package/dist/controllers/ReflexionMemory.d.ts +0 -125
- package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
- package/dist/controllers/ReflexionMemory.js +0 -521
- package/dist/controllers/ReflexionMemory.js.map +0 -1
- package/dist/controllers/SkillLibrary.d.ts +0 -149
- package/dist/controllers/SkillLibrary.d.ts.map +0 -1
- package/dist/controllers/SkillLibrary.js +0 -547
- package/dist/controllers/SkillLibrary.js.map +0 -1
- package/dist/controllers/SyncCoordinator.d.ts +0 -120
- package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
- package/dist/controllers/SyncCoordinator.js +0 -441
- package/dist/controllers/SyncCoordinator.js.map +0 -1
- package/dist/controllers/WASMVectorSearch.d.ts +0 -89
- package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
- package/dist/controllers/WASMVectorSearch.js +0 -234
- package/dist/controllers/WASMVectorSearch.js.map +0 -1
- package/dist/controllers/frontier-index.d.ts +0 -14
- package/dist/controllers/frontier-index.d.ts.map +0 -1
- package/dist/controllers/frontier-index.js +0 -10
- package/dist/controllers/frontier-index.js.map +0 -1
- package/dist/controllers/index.d.ts +0 -30
- package/dist/controllers/index.d.ts.map +0 -1
- package/dist/controllers/index.js +0 -18
- package/dist/controllers/index.js.map +0 -1
- package/dist/db-fallback.d.ts +0 -26
- package/dist/db-fallback.d.ts.map +0 -1
- package/dist/db-fallback.js +0 -264
- package/dist/db-fallback.js.map +0 -1
- package/dist/db-test.d.ts +0 -13
- package/dist/db-test.d.ts.map +0 -1
- package/dist/db-test.js +0 -55
- package/dist/db-test.js.map +0 -1
- package/dist/db-unified.d.ts +0 -76
- package/dist/db-unified.d.ts.map +0 -1
- package/dist/db-unified.js +0 -278
- package/dist/db-unified.js.map +0 -1
- package/dist/examples/quic-sync-example.d.ts +0 -9
- package/dist/examples/quic-sync-example.d.ts.map +0 -1
- package/dist/examples/quic-sync-example.js +0 -169
- package/dist/examples/quic-sync-example.js.map +0 -1
- package/dist/examples/wasm-vector-usage.d.ts +0 -12
- package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
- package/dist/examples/wasm-vector-usage.js +0 -190
- package/dist/examples/wasm-vector-usage.js.map +0 -1
- package/dist/index.d.ts +0 -28
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -35
- package/dist/index.js.map +0 -1
- package/dist/malp/core/ccc.d.ts +0 -99
- package/dist/malp/core/ccc.d.ts.map +0 -1
- package/dist/malp/core/ccc.js +0 -181
- package/dist/malp/core/ccc.js.map +0 -1
- package/dist/malp/core/index.d.ts +0 -9
- package/dist/malp/core/index.d.ts.map +0 -1
- package/dist/malp/core/index.js +0 -9
- package/dist/malp/core/index.js.map +0 -1
- package/dist/malp/core/linalg.d.ts +0 -101
- package/dist/malp/core/linalg.d.ts.map +0 -1
- package/dist/malp/core/linalg.js +0 -278
- package/dist/malp/core/linalg.js.map +0 -1
- package/dist/malp/core/optimizer.d.ts +0 -68
- package/dist/malp/core/optimizer.d.ts.map +0 -1
- package/dist/malp/core/optimizer.js +0 -160
- package/dist/malp/core/optimizer.js.map +0 -1
- package/dist/malp/index.d.ts +0 -33
- package/dist/malp/index.d.ts.map +0 -1
- package/dist/malp/index.js +0 -37
- package/dist/malp/index.js.map +0 -1
- package/dist/malp/metrics/agreement.d.ts +0 -106
- package/dist/malp/metrics/agreement.d.ts.map +0 -1
- package/dist/malp/metrics/agreement.js +0 -199
- package/dist/malp/metrics/agreement.js.map +0 -1
- package/dist/malp/metrics/comparison.d.ts +0 -93
- package/dist/malp/metrics/comparison.d.ts.map +0 -1
- package/dist/malp/metrics/comparison.js +0 -256
- package/dist/malp/metrics/comparison.js.map +0 -1
- package/dist/malp/metrics/index.d.ts +0 -8
- package/dist/malp/metrics/index.d.ts.map +0 -1
- package/dist/malp/metrics/index.js +0 -8
- package/dist/malp/metrics/index.js.map +0 -1
- package/dist/malp/metrics/performance.d.ts +0 -61
- package/dist/malp/metrics/performance.d.ts.map +0 -1
- package/dist/malp/metrics/performance.js +0 -190
- package/dist/malp/metrics/performance.js.map +0 -1
- package/dist/malp/models/index.d.ts +0 -7
- package/dist/malp/models/index.d.ts.map +0 -1
- package/dist/malp/models/index.js +0 -7
- package/dist/malp/models/index.js.map +0 -1
- package/dist/malp/models/malp.d.ts +0 -116
- package/dist/malp/models/malp.d.ts.map +0 -1
- package/dist/malp/models/malp.js +0 -206
- package/dist/malp/models/malp.js.map +0 -1
- package/dist/malp/models/regressor.d.ts +0 -80
- package/dist/malp/models/regressor.d.ts.map +0 -1
- package/dist/malp/models/regressor.js +0 -229
- package/dist/malp/models/regressor.js.map +0 -1
- package/dist/malp/reasoningbank_validator.d.ts +0 -187
- package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
- package/dist/malp/reasoningbank_validator.js +0 -246
- package/dist/malp/reasoningbank_validator.js.map +0 -1
- package/dist/malp/wasm_bindings.d.ts +0 -344
- package/dist/malp/wasm_bindings.d.ts.map +0 -1
- package/dist/malp/wasm_bindings.js +0 -9
- package/dist/malp/wasm_bindings.js.map +0 -1
- package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
- package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
- package/dist/mcp/agentdb-mcp-server.js +0 -2116
- package/dist/mcp/agentdb-mcp-server.js.map +0 -1
- package/dist/mcp/learning-tools-handlers.d.ts +0 -16
- package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
- package/dist/mcp/learning-tools-handlers.js +0 -105
- package/dist/mcp/learning-tools-handlers.js.map +0 -1
- package/dist/optimizations/BatchOperations.d.ts +0 -109
- package/dist/optimizations/BatchOperations.d.ts.map +0 -1
- package/dist/optimizations/BatchOperations.js +0 -407
- package/dist/optimizations/BatchOperations.js.map +0 -1
- package/dist/optimizations/QueryOptimizer.d.ts +0 -83
- package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
- package/dist/optimizations/QueryOptimizer.js +0 -228
- package/dist/optimizations/QueryOptimizer.js.map +0 -1
- package/dist/optimizations/ToolCache.d.ts +0 -137
- package/dist/optimizations/ToolCache.d.ts.map +0 -1
- package/dist/optimizations/ToolCache.js +0 -281
- package/dist/optimizations/ToolCache.js.map +0 -1
- package/dist/optimizations/index.d.ts +0 -10
- package/dist/optimizations/index.d.ts.map +0 -1
- package/dist/optimizations/index.js +0 -8
- package/dist/optimizations/index.js.map +0 -1
- package/dist/security/input-validation.d.ts +0 -109
- package/dist/security/input-validation.d.ts.map +0 -1
- package/dist/security/input-validation.js +0 -398
- package/dist/security/input-validation.js.map +0 -1
- package/dist/security/limits.d.ts +0 -150
- package/dist/security/limits.d.ts.map +0 -1
- package/dist/security/limits.js +0 -288
- package/dist/security/limits.js.map +0 -1
- package/dist/security/path-security.d.ts +0 -100
- package/dist/security/path-security.d.ts.map +0 -1
- package/dist/security/path-security.js +0 -337
- package/dist/security/path-security.js.map +0 -1
- package/dist/security/validation.d.ts +0 -95
- package/dist/security/validation.d.ts.map +0 -1
- package/dist/security/validation.js +0 -315
- package/dist/security/validation.js.map +0 -1
- package/dist/types/quic.d.ts +0 -518
- package/dist/types/quic.d.ts.map +0 -1
- package/dist/types/quic.js +0 -272
- package/dist/types/quic.js.map +0 -1
|
@@ -1,316 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HNSWLibBackend - Vector backend adapter for hnswlib-node
|
|
3
|
-
*
|
|
4
|
-
* Wraps existing HNSWIndex controller to implement VectorBackend interface.
|
|
5
|
-
* Handles string ID to numeric label mapping required by hnswlib.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - String ID support (maps to hnswlib numeric labels)
|
|
9
|
-
* - Metadata storage alongside vectors
|
|
10
|
-
* - Persistent save/load with mappings
|
|
11
|
-
* - Backward compatible with existing HNSWIndex usage
|
|
12
|
-
*
|
|
13
|
-
* Note: hnswlib-node doesn't support true deletion - removed IDs are
|
|
14
|
-
* tracked but vectors remain until rebuild.
|
|
15
|
-
*/
|
|
16
|
-
import hnswlibNode from 'hnswlib-node';
|
|
17
|
-
import * as fs from 'fs/promises';
|
|
18
|
-
import * as fsSync from 'fs';
|
|
19
|
-
import * as path from 'path';
|
|
20
|
-
const { HierarchicalNSW } = hnswlibNode;
|
|
21
|
-
export class HNSWLibBackend {
|
|
22
|
-
name = 'hnswlib';
|
|
23
|
-
index = null;
|
|
24
|
-
config;
|
|
25
|
-
// String ID <-> Numeric Label mappings (hnswlib requires numeric labels)
|
|
26
|
-
idToLabel = new Map();
|
|
27
|
-
labelToId = new Map();
|
|
28
|
-
metadata = new Map();
|
|
29
|
-
nextLabel = 0;
|
|
30
|
-
// Tracking for deletions (hnswlib doesn't support true deletion)
|
|
31
|
-
deletedIds = new Set();
|
|
32
|
-
constructor(config) {
|
|
33
|
-
this.config = {
|
|
34
|
-
maxElements: 100000,
|
|
35
|
-
M: 16,
|
|
36
|
-
efConstruction: 200,
|
|
37
|
-
efSearch: 100,
|
|
38
|
-
...config,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Initialize the HNSW index
|
|
43
|
-
* Must be called after construction
|
|
44
|
-
*/
|
|
45
|
-
async initialize() {
|
|
46
|
-
// Map metric names to hnswlib format
|
|
47
|
-
const metricMap = {
|
|
48
|
-
cosine: 'cosine',
|
|
49
|
-
l2: 'l2',
|
|
50
|
-
ip: 'ip',
|
|
51
|
-
};
|
|
52
|
-
const metric = metricMap[this.config.metric] || 'cosine';
|
|
53
|
-
// Create new HNSW index
|
|
54
|
-
this.index = new HierarchicalNSW(metric, this.config.dimension);
|
|
55
|
-
this.index.initIndex(this.config.maxElements, this.config.M, this.config.efConstruction);
|
|
56
|
-
this.index.setEf(this.config.efSearch);
|
|
57
|
-
console.log(`[HNSWLibBackend] Initialized with dimension=${this.config.dimension}, ` +
|
|
58
|
-
`metric=${metric}, M=${this.config.M}, efConstruction=${this.config.efConstruction}`);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Insert a single vector with optional metadata
|
|
62
|
-
*/
|
|
63
|
-
insert(id, embedding, metadata) {
|
|
64
|
-
if (!this.index) {
|
|
65
|
-
throw new Error('Backend not initialized. Call initialize() first.');
|
|
66
|
-
}
|
|
67
|
-
// Check if ID already exists
|
|
68
|
-
if (this.idToLabel.has(id)) {
|
|
69
|
-
throw new Error(`Vector with ID '${id}' already exists`);
|
|
70
|
-
}
|
|
71
|
-
// Allocate numeric label
|
|
72
|
-
const label = this.nextLabel++;
|
|
73
|
-
// Add to index (hnswlib requires number[] not Float32Array)
|
|
74
|
-
this.index.addPoint(Array.from(embedding), label);
|
|
75
|
-
// Store mappings
|
|
76
|
-
this.idToLabel.set(id, label);
|
|
77
|
-
this.labelToId.set(label, id);
|
|
78
|
-
// Store metadata if provided
|
|
79
|
-
if (metadata) {
|
|
80
|
-
this.metadata.set(id, metadata);
|
|
81
|
-
}
|
|
82
|
-
// Remove from deleted set if re-inserting
|
|
83
|
-
this.deletedIds.delete(id);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Insert multiple vectors in batch
|
|
87
|
-
*/
|
|
88
|
-
insertBatch(items) {
|
|
89
|
-
for (const item of items) {
|
|
90
|
-
this.insert(item.id, item.embedding, item.metadata);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Search for k-nearest neighbors
|
|
95
|
-
*/
|
|
96
|
-
search(query, k, options) {
|
|
97
|
-
if (!this.index) {
|
|
98
|
-
throw new Error('Backend not initialized. Call initialize() first.');
|
|
99
|
-
}
|
|
100
|
-
// Update efSearch if specified
|
|
101
|
-
if (options?.efSearch) {
|
|
102
|
-
this.index.setEf(options.efSearch);
|
|
103
|
-
}
|
|
104
|
-
// Perform HNSW search
|
|
105
|
-
const result = this.index.searchKnn(Array.from(query), k);
|
|
106
|
-
const results = [];
|
|
107
|
-
for (let i = 0; i < result.neighbors.length; i++) {
|
|
108
|
-
const label = result.neighbors[i];
|
|
109
|
-
const distance = result.distances[i];
|
|
110
|
-
// Map label back to ID
|
|
111
|
-
const id = this.labelToId.get(label);
|
|
112
|
-
if (!id) {
|
|
113
|
-
console.warn(`[HNSWLibBackend] Label ${label} not found in mapping`);
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
// Skip deleted IDs
|
|
117
|
-
if (this.deletedIds.has(id)) {
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
// Convert distance to similarity
|
|
121
|
-
const similarity = this.distanceToSimilarity(distance);
|
|
122
|
-
// Apply threshold if specified
|
|
123
|
-
if (options?.threshold !== undefined && similarity < options.threshold) {
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
results.push({
|
|
127
|
-
id,
|
|
128
|
-
distance,
|
|
129
|
-
similarity,
|
|
130
|
-
metadata: this.metadata.get(id),
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
// Apply metadata filters if specified (post-filtering)
|
|
134
|
-
if (options?.filter) {
|
|
135
|
-
return this.applyFilters(results, options.filter);
|
|
136
|
-
}
|
|
137
|
-
return results;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Remove a vector by ID
|
|
141
|
-
* Note: hnswlib doesn't support true deletion - we mark as deleted
|
|
142
|
-
*/
|
|
143
|
-
remove(id) {
|
|
144
|
-
const label = this.idToLabel.get(id);
|
|
145
|
-
if (label === undefined) {
|
|
146
|
-
return false; // Not found
|
|
147
|
-
}
|
|
148
|
-
// Mark as deleted (can't actually remove from hnswlib)
|
|
149
|
-
this.deletedIds.add(id);
|
|
150
|
-
this.metadata.delete(id);
|
|
151
|
-
// Note: We keep idToLabel/labelToId mappings for consistency
|
|
152
|
-
// A full rebuild would be needed to reclaim space
|
|
153
|
-
return true;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Get backend statistics
|
|
157
|
-
*/
|
|
158
|
-
getStats() {
|
|
159
|
-
const activeCount = this.idToLabel.size - this.deletedIds.size;
|
|
160
|
-
return {
|
|
161
|
-
count: activeCount,
|
|
162
|
-
dimension: this.config.dimension,
|
|
163
|
-
metric: this.config.metric,
|
|
164
|
-
backend: 'hnswlib',
|
|
165
|
-
memoryUsage: 0, // hnswlib doesn't expose memory usage
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Save index to disk with mappings
|
|
170
|
-
*/
|
|
171
|
-
async save(savePath) {
|
|
172
|
-
if (!this.index) {
|
|
173
|
-
throw new Error('No index to save');
|
|
174
|
-
}
|
|
175
|
-
try {
|
|
176
|
-
// Create directory if needed
|
|
177
|
-
const indexDir = path.dirname(savePath);
|
|
178
|
-
if (!fsSync.existsSync(indexDir)) {
|
|
179
|
-
await fs.mkdir(indexDir, { recursive: true });
|
|
180
|
-
}
|
|
181
|
-
// Save HNSW index
|
|
182
|
-
this.index.writeIndex(savePath);
|
|
183
|
-
// Save mappings and metadata
|
|
184
|
-
const mappingsPath = savePath + '.mappings.json';
|
|
185
|
-
const mappings = {
|
|
186
|
-
idToLabel: Object.fromEntries(this.idToLabel.entries()),
|
|
187
|
-
labelToId: Object.fromEntries(Array.from(this.labelToId.entries()).map(([k, v]) => [k.toString(), v])),
|
|
188
|
-
metadata: Object.fromEntries(this.metadata.entries()),
|
|
189
|
-
nextLabel: this.nextLabel,
|
|
190
|
-
config: this.config,
|
|
191
|
-
};
|
|
192
|
-
await fs.writeFile(mappingsPath, JSON.stringify(mappings, null, 2));
|
|
193
|
-
console.log(`[HNSWLibBackend] Index saved to ${savePath}`);
|
|
194
|
-
console.log(`[HNSWLibBackend] Mappings saved to ${mappingsPath}`);
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
console.error('[HNSWLibBackend] Failed to save index:', error);
|
|
198
|
-
throw error;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Load index from disk with mappings
|
|
203
|
-
*/
|
|
204
|
-
async load(loadPath) {
|
|
205
|
-
if (!fsSync.existsSync(loadPath)) {
|
|
206
|
-
throw new Error(`Index file not found: ${loadPath}`);
|
|
207
|
-
}
|
|
208
|
-
try {
|
|
209
|
-
console.log(`[HNSWLibBackend] Loading index from ${loadPath}...`);
|
|
210
|
-
// Initialize index first
|
|
211
|
-
const metricMap = {
|
|
212
|
-
cosine: 'cosine',
|
|
213
|
-
l2: 'l2',
|
|
214
|
-
ip: 'ip',
|
|
215
|
-
};
|
|
216
|
-
const metric = metricMap[this.config.metric] || 'cosine';
|
|
217
|
-
this.index = new HierarchicalNSW(metric, this.config.dimension);
|
|
218
|
-
// Load HNSW index
|
|
219
|
-
this.index.readIndex(loadPath);
|
|
220
|
-
this.index.setEf(this.config.efSearch);
|
|
221
|
-
// Load mappings and metadata
|
|
222
|
-
const mappingsPath = loadPath + '.mappings.json';
|
|
223
|
-
if (fsSync.existsSync(mappingsPath)) {
|
|
224
|
-
const mappingsData = JSON.parse(await fs.readFile(mappingsPath, 'utf-8'));
|
|
225
|
-
// Restore mappings
|
|
226
|
-
this.idToLabel = new Map(Object.entries(mappingsData.idToLabel));
|
|
227
|
-
this.labelToId = new Map(Object.entries(mappingsData.labelToId).map(([k, v]) => [Number(k), v]));
|
|
228
|
-
this.metadata = new Map(Object.entries(mappingsData.metadata || {}));
|
|
229
|
-
this.nextLabel = mappingsData.nextLabel;
|
|
230
|
-
// Update config if saved
|
|
231
|
-
if (mappingsData.config) {
|
|
232
|
-
this.config = { ...this.config, ...mappingsData.config };
|
|
233
|
-
}
|
|
234
|
-
console.log(`[HNSWLibBackend] ✅ Index loaded successfully (${this.idToLabel.size} vectors)`);
|
|
235
|
-
}
|
|
236
|
-
else {
|
|
237
|
-
console.warn('[HNSWLibBackend] No mappings file found - index loaded without ID mappings');
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
catch (error) {
|
|
241
|
-
console.error('[HNSWLibBackend] Failed to load index:', error);
|
|
242
|
-
this.index = null;
|
|
243
|
-
throw error;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Close and cleanup resources
|
|
248
|
-
*/
|
|
249
|
-
close() {
|
|
250
|
-
this.index = null;
|
|
251
|
-
this.idToLabel.clear();
|
|
252
|
-
this.labelToId.clear();
|
|
253
|
-
this.metadata.clear();
|
|
254
|
-
this.deletedIds.clear();
|
|
255
|
-
this.nextLabel = 0;
|
|
256
|
-
}
|
|
257
|
-
/**
|
|
258
|
-
* Convert distance to similarity based on metric
|
|
259
|
-
* Maps to [0, 1] range where 1 = most similar
|
|
260
|
-
*/
|
|
261
|
-
distanceToSimilarity(distance) {
|
|
262
|
-
switch (this.config.metric) {
|
|
263
|
-
case 'cosine':
|
|
264
|
-
// Cosine distance is 1 - similarity, so invert
|
|
265
|
-
return 1 - distance;
|
|
266
|
-
case 'l2':
|
|
267
|
-
// Euclidean distance: use exponential decay
|
|
268
|
-
return Math.exp(-distance);
|
|
269
|
-
case 'ip':
|
|
270
|
-
// Inner product: negate distance (higher IP = more similar)
|
|
271
|
-
return -distance;
|
|
272
|
-
default:
|
|
273
|
-
return 1 - distance;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Apply metadata filters (post-filtering)
|
|
278
|
-
*/
|
|
279
|
-
applyFilters(results, filters) {
|
|
280
|
-
return results.filter((result) => {
|
|
281
|
-
if (!result.metadata)
|
|
282
|
-
return false;
|
|
283
|
-
// Check if all filter conditions match
|
|
284
|
-
return Object.entries(filters).every(([key, value]) => {
|
|
285
|
-
return result.metadata[key] === value;
|
|
286
|
-
});
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Check if needs rebuilding (for backward compat with HNSWIndex)
|
|
291
|
-
* @param updateThreshold - Percentage of deletes to trigger rebuild (default: 0.1)
|
|
292
|
-
*/
|
|
293
|
-
needsRebuild(updateThreshold = 0.1) {
|
|
294
|
-
if (this.idToLabel.size === 0)
|
|
295
|
-
return false;
|
|
296
|
-
const deletePercentage = this.deletedIds.size / this.idToLabel.size;
|
|
297
|
-
return deletePercentage > updateThreshold;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Update efSearch parameter
|
|
301
|
-
*/
|
|
302
|
-
setEfSearch(ef) {
|
|
303
|
-
if (this.index) {
|
|
304
|
-
this.index.setEf(ef);
|
|
305
|
-
this.config.efSearch = ef;
|
|
306
|
-
console.log(`[HNSWLibBackend] efSearch updated to ${ef}`);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
/**
|
|
310
|
-
* Check if backend is ready
|
|
311
|
-
*/
|
|
312
|
-
isReady() {
|
|
313
|
-
return this.index !== null;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
//# sourceMappingURL=HNSWLibBackend.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HNSWLibBackend.js","sourceRoot":"","sources":["../../../src/backends/hnswlib/HNSWLibBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/hnswlib/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/hnswlib/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/backends/index.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDB Backends - Unified Vector Storage Interface
|
|
3
|
-
*
|
|
4
|
-
* Provides automatic backend selection between RuVector and HNSWLib
|
|
5
|
-
* with graceful fallback and clear error messages.
|
|
6
|
-
*/
|
|
7
|
-
export type { VectorBackend, VectorConfig, SearchResult, SearchOptions, VectorStats } from './VectorBackend.js';
|
|
8
|
-
export { RuVectorBackend } from './ruvector/RuVectorBackend.js';
|
|
9
|
-
export { RuVectorLearning } from './ruvector/RuVectorLearning.js';
|
|
10
|
-
export { HNSWLibBackend } from './hnswlib/HNSWLibBackend.js';
|
|
11
|
-
export { createBackend, detectBackends, getRecommendedBackend, isBackendAvailable, getInstallCommand } from './factory.js';
|
|
12
|
-
export type { BackendType, BackendDetection } from './factory.js';
|
|
13
|
-
export type { LearningConfig, EnhancementOptions } from './ruvector/RuVectorLearning.js';
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/backends/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentDB Backends - Unified Vector Storage Interface
|
|
3
|
-
*
|
|
4
|
-
* Provides automatic backend selection between RuVector and HNSWLib
|
|
5
|
-
* with graceful fallback and clear error messages.
|
|
6
|
-
*/
|
|
7
|
-
// Backend implementations
|
|
8
|
-
export { RuVectorBackend } from './ruvector/RuVectorBackend.js';
|
|
9
|
-
export { RuVectorLearning } from './ruvector/RuVectorLearning.js';
|
|
10
|
-
export { HNSWLibBackend } from './hnswlib/HNSWLibBackend.js';
|
|
11
|
-
// Factory and detection
|
|
12
|
-
export { createBackend, detectBackends, getRecommendedBackend, isBackendAvailable, getInstallCommand } from './factory.js';
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,wBAAwB;AACxB,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuVectorBackend - High-Performance Vector Storage
|
|
3
|
-
*
|
|
4
|
-
* Implements VectorBackend using @ruvector/core with optional GNN support.
|
|
5
|
-
* Provides <100µs search latency with native SIMD optimizations.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - Automatic fallback when @ruvector packages not installed
|
|
9
|
-
* - Separate metadata storage for rich queries
|
|
10
|
-
* - Distance-to-similarity conversion for all metrics
|
|
11
|
-
* - Batch operations for optimal throughput
|
|
12
|
-
* - Persistent storage with separate metadata files
|
|
13
|
-
*/
|
|
14
|
-
import type { VectorBackend, VectorConfig, SearchResult, SearchOptions, VectorStats } from '../VectorBackend.js';
|
|
15
|
-
export declare class RuVectorBackend implements VectorBackend {
|
|
16
|
-
readonly name: "ruvector";
|
|
17
|
-
private db;
|
|
18
|
-
private config;
|
|
19
|
-
private metadata;
|
|
20
|
-
private initialized;
|
|
21
|
-
constructor(config: VectorConfig);
|
|
22
|
-
/**
|
|
23
|
-
* Initialize RuVector database with optional dependency handling
|
|
24
|
-
*/
|
|
25
|
-
initialize(): Promise<void>;
|
|
26
|
-
/**
|
|
27
|
-
* Insert single vector with optional metadata
|
|
28
|
-
*/
|
|
29
|
-
insert(id: string, embedding: Float32Array, metadata?: Record<string, any>): void;
|
|
30
|
-
/**
|
|
31
|
-
* Batch insert for optimal performance
|
|
32
|
-
*/
|
|
33
|
-
insertBatch(items: Array<{
|
|
34
|
-
id: string;
|
|
35
|
-
embedding: Float32Array;
|
|
36
|
-
metadata?: Record<string, any>;
|
|
37
|
-
}>): void;
|
|
38
|
-
/**
|
|
39
|
-
* Search for k-nearest neighbors with optional filtering
|
|
40
|
-
*/
|
|
41
|
-
search(query: Float32Array, k: number, options?: SearchOptions): SearchResult[];
|
|
42
|
-
/**
|
|
43
|
-
* Remove vector by ID
|
|
44
|
-
*/
|
|
45
|
-
remove(id: string): boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Get database statistics
|
|
48
|
-
*/
|
|
49
|
-
getStats(): VectorStats;
|
|
50
|
-
/**
|
|
51
|
-
* Save index and metadata to disk
|
|
52
|
-
*/
|
|
53
|
-
save(path: string): Promise<void>;
|
|
54
|
-
/**
|
|
55
|
-
* Load index and metadata from disk
|
|
56
|
-
*/
|
|
57
|
-
load(path: string): Promise<void>;
|
|
58
|
-
/**
|
|
59
|
-
* Close and cleanup resources
|
|
60
|
-
*/
|
|
61
|
-
close(): void;
|
|
62
|
-
/**
|
|
63
|
-
* Convert distance to similarity score based on metric
|
|
64
|
-
*
|
|
65
|
-
* Cosine: distance is already in [0, 2], where 0 = identical
|
|
66
|
-
* L2: exponential decay for unbounded distances
|
|
67
|
-
* IP: negative inner product, so negate for similarity
|
|
68
|
-
*/
|
|
69
|
-
private distanceToSimilarity;
|
|
70
|
-
/**
|
|
71
|
-
* Ensure database is initialized before operations
|
|
72
|
-
*/
|
|
73
|
-
private ensureInitialized;
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=RuVectorBackend.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RuVectorBackend.d.ts","sourceRoot":"","sources":["../../../src/backends/ruvector/RuVectorBackend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEjH,qBAAa,eAAgB,YAAW,aAAa;IACnD,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,OAAO,CAAC,EAAE,CAAM;IAChB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE,YAAY;IAIhC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCjC;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAWjF;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,YAAY,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAQxG;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY,EAAE;IAoC/E;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAY3B;;OAEG;IACH,QAAQ,IAAI,WAAW;IAYvB;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevC;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBvC;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* RuVectorBackend - High-Performance Vector Storage
|
|
3
|
-
*
|
|
4
|
-
* Implements VectorBackend using @ruvector/core with optional GNN support.
|
|
5
|
-
* Provides <100µs search latency with native SIMD optimizations.
|
|
6
|
-
*
|
|
7
|
-
* Features:
|
|
8
|
-
* - Automatic fallback when @ruvector packages not installed
|
|
9
|
-
* - Separate metadata storage for rich queries
|
|
10
|
-
* - Distance-to-similarity conversion for all metrics
|
|
11
|
-
* - Batch operations for optimal throughput
|
|
12
|
-
* - Persistent storage with separate metadata files
|
|
13
|
-
*/
|
|
14
|
-
export class RuVectorBackend {
|
|
15
|
-
name = 'ruvector';
|
|
16
|
-
db; // VectorDB from @ruvector/core
|
|
17
|
-
config;
|
|
18
|
-
metadata = new Map();
|
|
19
|
-
initialized = false;
|
|
20
|
-
constructor(config) {
|
|
21
|
-
this.config = config;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Initialize RuVector database with optional dependency handling
|
|
25
|
-
*/
|
|
26
|
-
async initialize() {
|
|
27
|
-
if (this.initialized)
|
|
28
|
-
return;
|
|
29
|
-
try {
|
|
30
|
-
// Try main ruvector package first (includes core, gnn, graph)
|
|
31
|
-
let VectorDB;
|
|
32
|
-
try {
|
|
33
|
-
const ruvector = await import('ruvector');
|
|
34
|
-
VectorDB = ruvector.VectorDB || ruvector.default?.VectorDB;
|
|
35
|
-
}
|
|
36
|
-
catch {
|
|
37
|
-
// Fallback to @ruvector/core for backward compatibility
|
|
38
|
-
const core = await import('@ruvector/core');
|
|
39
|
-
VectorDB = core.VectorDB || core.default;
|
|
40
|
-
}
|
|
41
|
-
this.db = new VectorDB(this.config.dimension, {
|
|
42
|
-
metric: this.config.metric,
|
|
43
|
-
maxElements: this.config.maxElements || 100000,
|
|
44
|
-
efConstruction: this.config.efConstruction || 200,
|
|
45
|
-
M: this.config.M || 16
|
|
46
|
-
});
|
|
47
|
-
this.initialized = true;
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
throw new Error(`RuVector initialization failed. Please install: npm install ruvector\n` +
|
|
51
|
-
`Or legacy packages: npm install @ruvector/core\n` +
|
|
52
|
-
`Error: ${error.message}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Insert single vector with optional metadata
|
|
57
|
-
*/
|
|
58
|
-
insert(id, embedding, metadata) {
|
|
59
|
-
this.ensureInitialized();
|
|
60
|
-
// RuVector expects regular arrays
|
|
61
|
-
this.db.insert(id, Array.from(embedding));
|
|
62
|
-
if (metadata) {
|
|
63
|
-
this.metadata.set(id, metadata);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Batch insert for optimal performance
|
|
68
|
-
*/
|
|
69
|
-
insertBatch(items) {
|
|
70
|
-
this.ensureInitialized();
|
|
71
|
-
for (const item of items) {
|
|
72
|
-
this.insert(item.id, item.embedding, item.metadata);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Search for k-nearest neighbors with optional filtering
|
|
77
|
-
*/
|
|
78
|
-
search(query, k, options) {
|
|
79
|
-
this.ensureInitialized();
|
|
80
|
-
// Apply efSearch parameter if provided
|
|
81
|
-
if (options?.efSearch) {
|
|
82
|
-
this.db.setEfSearch(options.efSearch);
|
|
83
|
-
}
|
|
84
|
-
// Perform vector search
|
|
85
|
-
const results = this.db.search(Array.from(query), k);
|
|
86
|
-
// Convert results and apply filtering
|
|
87
|
-
return results
|
|
88
|
-
.map((r) => ({
|
|
89
|
-
id: r.id,
|
|
90
|
-
distance: r.distance,
|
|
91
|
-
similarity: this.distanceToSimilarity(r.distance),
|
|
92
|
-
metadata: this.metadata.get(r.id)
|
|
93
|
-
}))
|
|
94
|
-
.filter((r) => {
|
|
95
|
-
// Apply similarity threshold
|
|
96
|
-
if (options?.threshold && r.similarity < options.threshold) {
|
|
97
|
-
return false;
|
|
98
|
-
}
|
|
99
|
-
// Apply metadata filters
|
|
100
|
-
if (options?.filter && r.metadata) {
|
|
101
|
-
return Object.entries(options.filter).every(([key, value]) => r.metadata[key] === value);
|
|
102
|
-
}
|
|
103
|
-
return true;
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Remove vector by ID
|
|
108
|
-
*/
|
|
109
|
-
remove(id) {
|
|
110
|
-
this.ensureInitialized();
|
|
111
|
-
this.metadata.delete(id);
|
|
112
|
-
try {
|
|
113
|
-
return this.db.remove(id);
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
return false;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get database statistics
|
|
121
|
-
*/
|
|
122
|
-
getStats() {
|
|
123
|
-
this.ensureInitialized();
|
|
124
|
-
return {
|
|
125
|
-
count: this.db.count(),
|
|
126
|
-
dimension: this.config.dimension,
|
|
127
|
-
metric: this.config.metric,
|
|
128
|
-
backend: 'ruvector',
|
|
129
|
-
memoryUsage: this.db.memoryUsage?.() || 0
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Save index and metadata to disk
|
|
134
|
-
*/
|
|
135
|
-
async save(path) {
|
|
136
|
-
this.ensureInitialized();
|
|
137
|
-
// Save vector index
|
|
138
|
-
this.db.save(path);
|
|
139
|
-
// Save metadata separately as JSON
|
|
140
|
-
const metadataPath = path + '.meta.json';
|
|
141
|
-
const fs = await import('fs/promises');
|
|
142
|
-
await fs.writeFile(metadataPath, JSON.stringify(Object.fromEntries(this.metadata), null, 2));
|
|
143
|
-
}
|
|
144
|
-
/**
|
|
145
|
-
* Load index and metadata from disk
|
|
146
|
-
*/
|
|
147
|
-
async load(path) {
|
|
148
|
-
this.ensureInitialized();
|
|
149
|
-
// Load vector index
|
|
150
|
-
this.db.load(path);
|
|
151
|
-
// Load metadata
|
|
152
|
-
const metadataPath = path + '.meta.json';
|
|
153
|
-
try {
|
|
154
|
-
const fs = await import('fs/promises');
|
|
155
|
-
const data = await fs.readFile(metadataPath, 'utf-8');
|
|
156
|
-
this.metadata = new Map(Object.entries(JSON.parse(data)));
|
|
157
|
-
}
|
|
158
|
-
catch {
|
|
159
|
-
// No metadata file - this is okay for backward compatibility
|
|
160
|
-
console.debug(`[RuVectorBackend] No metadata file found at ${metadataPath}`);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
/**
|
|
164
|
-
* Close and cleanup resources
|
|
165
|
-
*/
|
|
166
|
-
close() {
|
|
167
|
-
// RuVector cleanup if needed
|
|
168
|
-
this.metadata.clear();
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Convert distance to similarity score based on metric
|
|
172
|
-
*
|
|
173
|
-
* Cosine: distance is already in [0, 2], where 0 = identical
|
|
174
|
-
* L2: exponential decay for unbounded distances
|
|
175
|
-
* IP: negative inner product, so negate for similarity
|
|
176
|
-
*/
|
|
177
|
-
distanceToSimilarity(distance) {
|
|
178
|
-
switch (this.config.metric) {
|
|
179
|
-
case 'cosine':
|
|
180
|
-
return 1 - distance; // cosine distance is 1 - similarity
|
|
181
|
-
case 'l2':
|
|
182
|
-
return Math.exp(-distance); // exponential decay
|
|
183
|
-
case 'ip':
|
|
184
|
-
return -distance; // inner product: higher is better
|
|
185
|
-
default:
|
|
186
|
-
return 1 - distance;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Ensure database is initialized before operations
|
|
191
|
-
*/
|
|
192
|
-
ensureInitialized() {
|
|
193
|
-
if (!this.initialized) {
|
|
194
|
-
throw new Error('RuVectorBackend not initialized. Call initialize() first.');
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=RuVectorBackend.js.map
|