agentdb 3.0.0-alpha.2 → 3.0.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +978 -2342
- package/dist/agentdb.browser.js +1492 -0
- package/dist/agentdb.browser.js.map +7 -0
- package/dist/agentdb.browser.min.js +3 -0
- package/dist/agentdb.browser.min.js.map +7 -0
- package/dist/agentdb.wasm-loader.js +207 -0
- package/dist/schemas/frontier-schema.sql +0 -7
- package/dist/schemas/schema.sql +0 -7
- package/dist/simulation/cli.d.ts +9 -0
- package/dist/simulation/cli.d.ts.map +1 -0
- package/dist/simulation/cli.js +68 -0
- package/dist/simulation/cli.js.map +1 -0
- package/dist/simulation/runner.d.ts +21 -0
- package/dist/simulation/runner.d.ts.map +1 -0
- package/dist/simulation/runner.js +241 -0
- package/dist/simulation/runner.js.map +1 -0
- package/dist/simulation/scenarios/aidefence-integration.d.ts +24 -0
- package/dist/simulation/scenarios/aidefence-integration.d.ts.map +1 -0
- package/dist/simulation/scenarios/aidefence-integration.js +124 -0
- package/dist/simulation/scenarios/aidefence-integration.js.map +1 -0
- package/dist/simulation/scenarios/bmssp-integration.d.ts +23 -0
- package/dist/simulation/scenarios/bmssp-integration.d.ts.map +1 -0
- package/dist/simulation/scenarios/bmssp-integration.js +104 -0
- package/dist/simulation/scenarios/bmssp-integration.js.map +1 -0
- package/dist/simulation/scenarios/causal-reasoning.d.ts +16 -0
- package/dist/simulation/scenarios/causal-reasoning.d.ts.map +1 -0
- package/dist/simulation/scenarios/causal-reasoning.js +108 -0
- package/dist/simulation/scenarios/causal-reasoning.js.map +1 -0
- package/dist/simulation/scenarios/consciousness-explorer.d.ts +25 -0
- package/dist/simulation/scenarios/consciousness-explorer.d.ts.map +1 -0
- package/dist/simulation/scenarios/consciousness-explorer.js +108 -0
- package/dist/simulation/scenarios/consciousness-explorer.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts +135 -0
- package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js +158 -0
- package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/index.d.ts +14 -0
- package/dist/simulation/scenarios/domain-examples/index.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/index.js +14 -0
- package/dist/simulation/scenarios/domain-examples/index.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts +178 -0
- package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js +218 -0
- package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts +122 -0
- package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/medical-imaging.js +129 -0
- package/dist/simulation/scenarios/domain-examples/medical-imaging.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts +166 -0
- package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/robotics-navigation.js +161 -0
- package/dist/simulation/scenarios/domain-examples/robotics-navigation.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts +151 -0
- package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/scientific-research.js +187 -0
- package/dist/simulation/scenarios/domain-examples/scientific-research.js.map +1 -0
- package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts +102 -0
- package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts.map +1 -0
- package/dist/simulation/scenarios/domain-examples/trading-systems.js +100 -0
- package/dist/simulation/scenarios/domain-examples/trading-systems.js.map +1 -0
- package/dist/simulation/scenarios/goalie-integration.d.ts +24 -0
- package/dist/simulation/scenarios/goalie-integration.d.ts.map +1 -0
- package/dist/simulation/scenarios/goalie-integration.js +121 -0
- package/dist/simulation/scenarios/goalie-integration.js.map +1 -0
- package/dist/simulation/scenarios/graph-traversal.d.ts +17 -0
- package/dist/simulation/scenarios/graph-traversal.d.ts.map +1 -0
- package/dist/simulation/scenarios/graph-traversal.js +101 -0
- package/dist/simulation/scenarios/graph-traversal.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts +45 -0
- package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/attention-analysis.js +435 -0
- package/dist/simulation/scenarios/latent-space/attention-analysis.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts +55 -0
- package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/clustering-analysis.js +606 -0
- package/dist/simulation/scenarios/latent-space/clustering-analysis.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts +74 -0
- package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/hnsw-exploration.js +391 -0
- package/dist/simulation/scenarios/latent-space/hnsw-exploration.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts +51 -0
- package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js +536 -0
- package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/index.d.ts +35 -0
- package/dist/simulation/scenarios/latent-space/index.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/index.js +35 -0
- package/dist/simulation/scenarios/latent-space/index.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts +52 -0
- package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/neural-augmentation.js +472 -0
- package/dist/simulation/scenarios/latent-space/neural-augmentation.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts +53 -0
- package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/quantum-hybrid.js +391 -0
- package/dist/simulation/scenarios/latent-space/quantum-hybrid.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts +52 -0
- package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js +514 -0
- package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js.map +1 -0
- package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts +53 -0
- package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts.map +1 -0
- package/dist/simulation/scenarios/latent-space/traversal-optimization.js +595 -0
- package/dist/simulation/scenarios/latent-space/traversal-optimization.js.map +1 -0
- package/dist/simulation/scenarios/lean-agentic-swarm.d.ts +18 -0
- package/dist/simulation/scenarios/lean-agentic-swarm.d.ts.map +1 -0
- package/dist/simulation/scenarios/lean-agentic-swarm.js +132 -0
- package/dist/simulation/scenarios/lean-agentic-swarm.js.map +1 -0
- package/dist/simulation/scenarios/multi-agent-swarm.d.ts +17 -0
- package/dist/simulation/scenarios/multi-agent-swarm.d.ts.map +1 -0
- package/dist/simulation/scenarios/multi-agent-swarm.js +111 -0
- package/dist/simulation/scenarios/multi-agent-swarm.js.map +1 -0
- package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts +23 -0
- package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts.map +1 -0
- package/dist/simulation/scenarios/psycho-symbolic-reasoner.js +98 -0
- package/dist/simulation/scenarios/psycho-symbolic-reasoner.js.map +1 -0
- package/dist/simulation/scenarios/reflexion-learning.d.ts +16 -0
- package/dist/simulation/scenarios/reflexion-learning.d.ts.map +1 -0
- package/dist/simulation/scenarios/reflexion-learning.js +98 -0
- package/dist/simulation/scenarios/reflexion-learning.js.map +1 -0
- package/dist/simulation/scenarios/research-swarm.d.ts +24 -0
- package/dist/simulation/scenarios/research-swarm.d.ts.map +1 -0
- package/dist/simulation/scenarios/research-swarm.js +146 -0
- package/dist/simulation/scenarios/research-swarm.js.map +1 -0
- package/dist/simulation/scenarios/skill-evolution.d.ts +16 -0
- package/dist/simulation/scenarios/skill-evolution.d.ts.map +1 -0
- package/dist/simulation/scenarios/skill-evolution.js +109 -0
- package/dist/simulation/scenarios/skill-evolution.js.map +1 -0
- package/dist/simulation/scenarios/stock-market-emergence.d.ts +33 -0
- package/dist/simulation/scenarios/stock-market-emergence.d.ts.map +1 -0
- package/dist/simulation/scenarios/stock-market-emergence.js +246 -0
- package/dist/simulation/scenarios/stock-market-emergence.js.map +1 -0
- package/dist/simulation/scenarios/strange-loops.d.ts +18 -0
- package/dist/simulation/scenarios/strange-loops.d.ts.map +1 -0
- package/dist/simulation/scenarios/strange-loops.js +133 -0
- package/dist/simulation/scenarios/strange-loops.js.map +1 -0
- package/dist/simulation/scenarios/sublinear-solver.d.ts +22 -0
- package/dist/simulation/scenarios/sublinear-solver.d.ts.map +1 -0
- package/dist/simulation/scenarios/sublinear-solver.js +82 -0
- package/dist/simulation/scenarios/sublinear-solver.js.map +1 -0
- package/dist/simulation/scenarios/temporal-lead-solver.d.ts +23 -0
- package/dist/simulation/scenarios/temporal-lead-solver.d.ts.map +1 -0
- package/dist/simulation/scenarios/temporal-lead-solver.js +90 -0
- package/dist/simulation/scenarios/temporal-lead-solver.js.map +1 -0
- package/dist/simulation/scenarios/voting-system-consensus.d.ts +27 -0
- package/dist/simulation/scenarios/voting-system-consensus.d.ts.map +1 -0
- package/dist/simulation/scenarios/voting-system-consensus.js +175 -0
- package/dist/simulation/scenarios/voting-system-consensus.js.map +1 -0
- package/dist/simulation/types.d.ts +162 -0
- package/dist/simulation/types.d.ts.map +1 -0
- package/dist/simulation/types.js +5 -0
- package/dist/simulation/types.js.map +1 -0
- package/dist/simulation/utils/PerformanceOptimizer.d.ts +115 -0
- package/dist/simulation/utils/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/simulation/utils/PerformanceOptimizer.js +223 -0
- package/dist/simulation/utils/PerformanceOptimizer.js.map +1 -0
- package/dist/src/backends/GraphBackend.d.ts +8 -8
- package/dist/src/backends/GraphBackend.d.ts.map +1 -1
- package/dist/src/backends/GraphBackend.js +15 -16
- package/dist/src/backends/GraphBackend.js.map +1 -1
- package/dist/src/backends/LearningBackend.d.ts +2 -2
- package/dist/src/backends/LearningBackend.d.ts.map +1 -1
- package/dist/src/backends/LearningBackend.js +10 -11
- package/dist/src/backends/LearningBackend.js.map +1 -1
- package/dist/src/backends/VectorBackend.d.ts +6 -31
- package/dist/src/backends/VectorBackend.d.ts.map +1 -1
- package/dist/src/backends/detector.d.ts +3 -25
- package/dist/src/backends/detector.d.ts.map +1 -1
- package/dist/src/backends/detector.js +15 -119
- package/dist/src/backends/detector.js.map +1 -1
- package/dist/src/backends/factory.d.ts +32 -16
- package/dist/src/backends/factory.d.ts.map +1 -1
- package/dist/src/backends/factory.js +70 -133
- package/dist/src/backends/factory.js.map +1 -1
- package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts +1 -1
- package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
- package/dist/src/backends/graph/GraphDatabaseAdapter.js +1 -5
- package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
- package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts +2 -2
- package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts.map +1 -1
- package/dist/src/backends/hnswlib/HNSWLibBackend.js +13 -49
- package/dist/src/backends/hnswlib/HNSWLibBackend.js.map +1 -1
- package/dist/src/backends/index.d.ts +3 -25
- package/dist/src/backends/index.d.ts.map +1 -1
- package/dist/src/backends/index.js +1 -23
- package/dist/src/backends/index.js.map +1 -1
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +93 -0
- package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +1 -0
- package/dist/src/backends/ruvector/GuardedVectorBackend.js +182 -0
- package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +1 -0
- package/dist/src/backends/ruvector/RuVectorBackend.d.ts +16 -187
- package/dist/src/backends/ruvector/RuVectorBackend.d.ts.map +1 -1
- package/dist/src/backends/ruvector/RuVectorBackend.js +94 -576
- package/dist/src/backends/ruvector/RuVectorBackend.js.map +1 -1
- package/dist/src/backends/ruvector/RuVectorLearning.d.ts +4 -0
- package/dist/src/backends/ruvector/RuVectorLearning.d.ts.map +1 -1
- package/dist/src/backends/ruvector/RuVectorLearning.js +11 -10
- package/dist/src/backends/ruvector/RuVectorLearning.js.map +1 -1
- package/dist/src/benchmarks/wasm-vector-benchmark.d.ts +10 -0
- package/dist/src/benchmarks/wasm-vector-benchmark.d.ts.map +1 -0
- package/dist/src/benchmarks/wasm-vector-benchmark.js +196 -0
- package/dist/src/benchmarks/wasm-vector-benchmark.js.map +1 -0
- package/dist/src/browser/AdvancedFeatures.d.ts.map +1 -1
- package/dist/src/browser/AdvancedFeatures.js +10 -3
- package/dist/src/browser/AdvancedFeatures.js.map +1 -1
- package/dist/src/browser/AttentionBrowser.d.ts.map +1 -1
- package/dist/src/browser/AttentionBrowser.js +12 -5
- package/dist/src/browser/AttentionBrowser.js.map +1 -1
- package/dist/src/browser/HNSWIndex.d.ts +1 -31
- package/dist/src/browser/HNSWIndex.d.ts.map +1 -1
- package/dist/src/browser/HNSWIndex.js +18 -136
- package/dist/src/browser/HNSWIndex.js.map +1 -1
- package/dist/src/browser/ProductQuantization.d.ts.map +1 -1
- package/dist/src/browser/ProductQuantization.js +1 -0
- package/dist/src/browser/ProductQuantization.js.map +1 -1
- package/dist/src/browser/index.d.ts +3 -3
- package/dist/src/browser/index.d.ts.map +1 -1
- package/dist/src/browser/index.js +1 -2
- package/dist/src/browser/index.js.map +1 -1
- package/dist/src/cli/agentdb-cli.d.ts +2 -16
- package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
- package/dist/src/cli/agentdb-cli.js +216 -853
- package/dist/src/cli/agentdb-cli.js.map +1 -1
- package/dist/src/cli/commands/attention.js +3 -3
- package/dist/src/cli/commands/attention.js.map +1 -1
- package/dist/src/cli/commands/doctor.d.ts +0 -2
- package/dist/src/cli/commands/doctor.d.ts.map +1 -1
- package/dist/src/cli/commands/doctor.js +1 -106
- package/dist/src/cli/commands/doctor.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts +1 -2
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +7 -30
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/install-embeddings.d.ts.map +1 -1
- package/dist/src/cli/commands/install-embeddings.js.map +1 -1
- package/dist/src/cli/commands/migrate.d.ts +0 -15
- package/dist/src/cli/commands/migrate.d.ts.map +1 -1
- package/dist/src/cli/commands/migrate.js +5 -164
- package/dist/src/cli/commands/migrate.js.map +1 -1
- package/dist/src/cli/commands/simulate-report.js.map +1 -1
- package/dist/src/cli/commands/simulate-wizard.js.map +1 -1
- package/dist/src/cli/commands/simulate.d.ts +7 -0
- package/dist/src/cli/commands/simulate.d.ts.map +1 -0
- package/dist/src/cli/commands/simulate.js +100 -0
- package/dist/src/cli/commands/simulate.js.map +1 -0
- package/dist/src/cli/commands/status.js +1 -5
- package/dist/src/cli/commands/status.js.map +1 -1
- package/dist/src/cli/lib/attention-config.d.ts +2 -2
- package/dist/src/cli/lib/attention-config.d.ts.map +1 -1
- package/dist/src/cli/lib/attention-config.js +1 -2
- package/dist/src/cli/lib/attention-config.js.map +1 -1
- package/dist/src/cli/lib/config-manager.d.ts +110 -0
- package/dist/src/cli/lib/config-manager.d.ts.map +1 -0
- package/dist/src/cli/lib/config-manager.js +512 -0
- package/dist/src/cli/lib/config-manager.js.map +1 -0
- package/dist/src/cli/lib/config-validator.d.ts +1 -1
- package/dist/src/cli/lib/config-validator.d.ts.map +1 -1
- package/dist/src/cli/lib/health-monitor.d.ts +149 -0
- package/dist/src/cli/lib/health-monitor.d.ts.map +1 -0
- package/dist/src/cli/lib/health-monitor.js +380 -0
- package/dist/src/cli/lib/health-monitor.js.map +1 -0
- package/dist/src/cli/lib/history-tracker.d.ts +103 -0
- package/dist/src/cli/lib/history-tracker.d.ts.map +1 -0
- package/dist/src/cli/lib/history-tracker.js +352 -0
- package/dist/src/cli/lib/history-tracker.js.map +1 -0
- package/dist/src/cli/lib/report-store.d.ts +1 -2
- package/dist/src/cli/lib/report-store.d.ts.map +1 -1
- package/dist/src/cli/lib/report-store.js +65 -87
- package/dist/src/cli/lib/report-store.js.map +1 -1
- package/dist/src/cli/lib/simulation-registry.d.ts +1 -1
- package/dist/src/cli/lib/simulation-registry.d.ts.map +1 -1
- package/dist/src/cli/lib/simulation-registry.js +0 -1
- package/dist/src/cli/lib/simulation-registry.js.map +1 -1
- package/dist/src/cli/lib/simulation-runner.d.ts +4 -41
- package/dist/src/cli/lib/simulation-runner.d.ts.map +1 -1
- package/dist/src/cli/lib/simulation-runner.js +6 -251
- package/dist/src/cli/lib/simulation-runner.js.map +1 -1
- package/dist/src/controllers/AttentionService.d.ts.map +1 -1
- package/dist/src/controllers/AttentionService.js +5 -3
- package/dist/src/controllers/AttentionService.js.map +1 -1
- package/dist/src/controllers/CausalMemoryGraph.d.ts +8 -33
- package/dist/src/controllers/CausalMemoryGraph.d.ts.map +1 -1
- package/dist/src/controllers/CausalMemoryGraph.js +16 -93
- package/dist/src/controllers/CausalMemoryGraph.js.map +1 -1
- package/dist/src/controllers/CausalRecall.d.ts +3 -6
- package/dist/src/controllers/CausalRecall.d.ts.map +1 -1
- package/dist/src/controllers/CausalRecall.js +8 -14
- package/dist/src/controllers/CausalRecall.js.map +1 -1
- package/dist/src/controllers/ContextSynthesizer.d.ts +1 -1
- package/dist/src/controllers/ContextSynthesizer.d.ts.map +1 -1
- package/dist/src/controllers/EmbeddingService.d.ts.map +1 -1
- package/dist/src/controllers/EmbeddingService.js +3 -10
- package/dist/src/controllers/EmbeddingService.js.map +1 -1
- package/dist/src/controllers/EnhancedEmbeddingService.d.ts +0 -4
- package/dist/src/controllers/EnhancedEmbeddingService.d.ts.map +1 -1
- package/dist/src/controllers/EnhancedEmbeddingService.js +3 -10
- package/dist/src/controllers/EnhancedEmbeddingService.js.map +1 -1
- package/dist/src/controllers/ExplainableRecall.d.ts +6 -5
- package/dist/src/controllers/ExplainableRecall.d.ts.map +1 -1
- package/dist/src/controllers/ExplainableRecall.js +13 -21
- package/dist/src/controllers/ExplainableRecall.js.map +1 -1
- package/dist/src/controllers/HNSWIndex.d.ts +7 -24
- package/dist/src/controllers/HNSWIndex.d.ts.map +1 -1
- package/dist/src/controllers/HNSWIndex.js +10 -89
- package/dist/src/controllers/HNSWIndex.js.map +1 -1
- package/dist/src/controllers/LearningSystem.d.ts +10 -106
- package/dist/src/controllers/LearningSystem.d.ts.map +1 -1
- package/dist/src/controllers/LearningSystem.js +14 -39
- package/dist/src/controllers/LearningSystem.js.map +1 -1
- package/dist/src/controllers/MMRDiversityRanker.d.ts +1 -1
- package/dist/src/controllers/MMRDiversityRanker.d.ts.map +1 -1
- package/dist/src/controllers/MetadataFilter.d.ts +3 -3
- package/dist/src/controllers/MetadataFilter.d.ts.map +1 -1
- package/dist/src/controllers/MetadataFilter.js +6 -9
- package/dist/src/controllers/MetadataFilter.js.map +1 -1
- package/dist/src/controllers/NightlyLearner.d.ts +4 -9
- package/dist/src/controllers/NightlyLearner.d.ts.map +1 -1
- package/dist/src/controllers/NightlyLearner.js +9 -28
- package/dist/src/controllers/NightlyLearner.js.map +1 -1
- package/dist/src/controllers/QUICClient.d.ts +2 -50
- package/dist/src/controllers/QUICClient.d.ts.map +1 -1
- package/dist/src/controllers/QUICClient.js +3 -193
- package/dist/src/controllers/QUICClient.js.map +1 -1
- package/dist/src/controllers/QUICServer.d.ts +4 -4
- package/dist/src/controllers/QUICServer.d.ts.map +1 -1
- package/dist/src/controllers/QUICServer.js +14 -22
- package/dist/src/controllers/QUICServer.js.map +1 -1
- package/dist/src/controllers/ReasoningBank.d.ts +4 -14
- package/dist/src/controllers/ReasoningBank.d.ts.map +1 -1
- package/dist/src/controllers/ReasoningBank.js +46 -59
- package/dist/src/controllers/ReasoningBank.js.map +1 -1
- package/dist/src/controllers/ReflexionMemory.d.ts +7 -80
- package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
- package/dist/src/controllers/ReflexionMemory.js +214 -372
- package/dist/src/controllers/ReflexionMemory.js.map +1 -1
- package/dist/src/controllers/SkillLibrary.d.ts +7 -37
- package/dist/src/controllers/SkillLibrary.d.ts.map +1 -1
- package/dist/src/controllers/SkillLibrary.js +96 -212
- package/dist/src/controllers/SkillLibrary.js.map +1 -1
- package/dist/src/controllers/SyncCoordinator.d.ts +3 -2
- package/dist/src/controllers/SyncCoordinator.d.ts.map +1 -1
- package/dist/src/controllers/SyncCoordinator.js +5 -117
- package/dist/src/controllers/SyncCoordinator.js.map +1 -1
- package/dist/src/controllers/WASMVectorSearch.d.ts +9 -20
- package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
- package/dist/src/controllers/WASMVectorSearch.js +29 -154
- package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
- package/dist/src/controllers/frontier-index.d.ts +14 -0
- package/dist/src/controllers/frontier-index.d.ts.map +1 -0
- package/dist/src/controllers/frontier-index.js +10 -0
- package/dist/src/controllers/frontier-index.js.map +1 -0
- package/dist/src/controllers/index.d.ts +17 -8
- package/dist/src/controllers/index.d.ts.map +1 -1
- package/dist/src/controllers/index.js +12 -6
- package/dist/src/controllers/index.js.map +1 -1
- package/dist/src/core/AgentDB.d.ts +25 -57
- package/dist/src/core/AgentDB.d.ts.map +1 -1
- package/dist/src/core/AgentDB.js +115 -137
- package/dist/src/core/AgentDB.js.map +1 -1
- package/dist/src/db-fallback.d.ts +1 -10
- package/dist/src/db-fallback.d.ts.map +1 -1
- package/dist/src/db-fallback.js +4 -171
- package/dist/src/db-fallback.js.map +1 -1
- package/dist/src/db-test.d.ts +13 -0
- package/dist/src/db-test.d.ts.map +1 -0
- package/dist/src/db-test.js +55 -0
- package/dist/src/db-test.js.map +1 -0
- package/dist/src/db-unified.d.ts +76 -0
- package/dist/src/db-unified.d.ts.map +1 -0
- package/dist/src/db-unified.js +279 -0
- package/dist/src/db-unified.js.map +1 -0
- package/dist/src/examples/quic-sync-example.d.ts +9 -0
- package/dist/src/examples/quic-sync-example.d.ts.map +1 -0
- package/dist/src/examples/quic-sync-example.js +169 -0
- package/dist/src/examples/quic-sync-example.js.map +1 -0
- package/dist/src/examples/wasm-vector-usage.d.ts +12 -0
- package/dist/src/examples/wasm-vector-usage.d.ts.map +1 -0
- package/dist/src/examples/wasm-vector-usage.js +190 -0
- package/dist/src/examples/wasm-vector-usage.js.map +1 -0
- package/dist/src/index.d.ts +12 -38
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +11 -46
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/agentdb-mcp-server.js +63 -219
- package/dist/src/mcp/agentdb-mcp-server.js.map +1 -1
- package/dist/src/mcp/learning-tools-handlers.d.ts +16 -0
- package/dist/src/mcp/learning-tools-handlers.d.ts.map +1 -0
- package/dist/src/mcp/learning-tools-handlers.js +105 -0
- package/dist/src/mcp/learning-tools-handlers.js.map +1 -0
- package/dist/src/optimizations/BatchOperations.d.ts +5 -52
- package/dist/src/optimizations/BatchOperations.d.ts.map +1 -1
- package/dist/src/optimizations/BatchOperations.js +33 -186
- package/dist/src/optimizations/BatchOperations.js.map +1 -1
- package/dist/src/optimizations/QueryOptimizer.d.ts +4 -4
- package/dist/src/optimizations/QueryOptimizer.d.ts.map +1 -1
- package/dist/src/optimizations/QueryOptimizer.js +1 -3
- package/dist/src/optimizations/QueryOptimizer.js.map +1 -1
- package/dist/src/optimizations/ToolCache.d.ts +4 -4
- package/dist/src/optimizations/ToolCache.d.ts.map +1 -1
- package/dist/src/optimizations/ToolCache.js.map +1 -1
- package/dist/src/optimizations/index.d.ts +1 -1
- package/dist/src/optimizations/index.d.ts.map +1 -1
- package/dist/src/security/AttestationLog.d.ts +70 -0
- package/dist/src/security/AttestationLog.d.ts.map +1 -0
- package/dist/src/security/AttestationLog.js +174 -0
- package/dist/src/security/AttestationLog.js.map +1 -0
- package/dist/src/security/MutationGuard.d.ts +83 -0
- package/dist/src/security/MutationGuard.d.ts.map +1 -0
- package/dist/src/security/MutationGuard.js +379 -0
- package/dist/src/security/MutationGuard.js.map +1 -0
- package/dist/src/security/index.d.ts +15 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +18 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/input-validation.d.ts +12 -12
- package/dist/src/security/input-validation.d.ts.map +1 -1
- package/dist/src/security/input-validation.js +0 -1
- package/dist/src/security/input-validation.js.map +1 -1
- package/dist/src/security/limits.d.ts +150 -0
- package/dist/src/security/limits.d.ts.map +1 -0
- package/dist/src/security/limits.js +288 -0
- package/dist/src/security/limits.js.map +1 -0
- package/dist/src/security/path-security.d.ts +100 -0
- package/dist/src/security/path-security.d.ts.map +1 -0
- package/dist/src/security/path-security.js +337 -0
- package/dist/src/security/path-security.js.map +1 -0
- package/dist/src/security/validation.d.ts +95 -0
- package/dist/src/security/validation.d.ts.map +1 -0
- package/dist/src/security/validation.js +315 -0
- package/dist/src/security/validation.js.map +1 -0
- package/dist/src/services/GraphTransformerService.d.ts +79 -0
- package/dist/src/services/GraphTransformerService.d.ts.map +1 -0
- package/dist/src/services/GraphTransformerService.js +331 -0
- package/dist/src/services/GraphTransformerService.js.map +1 -0
- package/dist/src/services/LLMRouter.d.ts +7 -61
- package/dist/src/services/LLMRouter.d.ts.map +1 -1
- package/dist/src/services/LLMRouter.js +25 -295
- package/dist/src/services/LLMRouter.js.map +1 -1
- package/dist/src/services/SemanticRouter.d.ts +78 -0
- package/dist/src/services/SemanticRouter.d.ts.map +1 -0
- package/dist/src/services/SemanticRouter.js +149 -0
- package/dist/src/services/SemanticRouter.js.map +1 -0
- package/dist/src/services/SonaTrajectoryService.d.ts +100 -0
- package/dist/src/services/SonaTrajectoryService.d.ts.map +1 -0
- package/dist/src/services/SonaTrajectoryService.js +231 -0
- package/dist/src/services/SonaTrajectoryService.js.map +1 -0
- package/dist/src/types/attention.d.ts +249 -0
- package/dist/src/types/attention.d.ts.map +1 -0
- package/dist/src/types/attention.js +43 -0
- package/dist/src/types/attention.js.map +1 -0
- package/dist/src/types/quic.d.ts +518 -0
- package/dist/src/types/quic.d.ts.map +1 -0
- package/dist/src/types/quic.js +272 -0
- package/dist/src/types/quic.js.map +1 -0
- package/dist/src/utils/LegacyAttentionAdapter.d.ts +93 -0
- package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +1 -0
- package/dist/src/utils/LegacyAttentionAdapter.js +241 -0
- package/dist/src/utils/LegacyAttentionAdapter.js.map +1 -0
- package/dist/src/utils/attention-metrics.d.ts +76 -0
- package/dist/src/utils/attention-metrics.d.ts.map +1 -0
- package/dist/src/utils/attention-metrics.js +178 -0
- package/dist/src/utils/attention-metrics.js.map +1 -0
- package/dist/src/utils/vector-math.d.ts +29 -0
- package/dist/src/utils/vector-math.d.ts.map +1 -0
- package/dist/src/utils/vector-math.js +66 -0
- package/dist/src/utils/vector-math.js.map +1 -0
- package/examples/README.md +105 -0
- package/examples/browser/attention-demo.html +499 -0
- package/examples/browser/flash-consolidation.html +598 -0
- package/examples/browser/hyperbolic-hierarchy.html +497 -0
- package/examples/quickstart.js +43 -0
- package/package.json +53 -56
- package/simulation/.claude-flow/metrics/agent-metrics.json +1 -0
- package/simulation/.claude-flow/metrics/performance.json +87 -0
- package/simulation/.claude-flow/metrics/task-metrics.json +10 -0
- package/simulation/COMPLETION-STATUS.md +139 -0
- package/simulation/FINAL-RESULTS.md +414 -0
- package/simulation/FINAL-STATUS.md +281 -0
- package/simulation/INTEGRATION-COMPLETE.md +452 -0
- package/simulation/MIGRATION-STATUS.md +231 -0
- package/simulation/OPTIMIZATION-RESULTS.md +397 -0
- package/simulation/PHASE1-COMPLETE.md +163 -0
- package/simulation/README.md +848 -0
- package/simulation/SIMULATION-RESULTS.md +239 -0
- package/simulation/cli.ts +78 -0
- package/simulation/configs/default.json +37 -0
- package/simulation/data/advanced/aidefence.graph +0 -0
- package/simulation/data/advanced/bmssp.graph +0 -0
- package/simulation/data/advanced/consciousness.graph +0 -0
- package/simulation/data/advanced/goalie.graph +0 -0
- package/simulation/data/advanced/psycho-symbolic.graph +0 -0
- package/simulation/data/advanced/research-swarm.graph +0 -0
- package/simulation/data/advanced/sublinear.graph +0 -0
- package/simulation/data/advanced/temporal.graph +0 -0
- package/simulation/data/causal.graph +0 -0
- package/simulation/data/graph-traversal.graph +0 -0
- package/simulation/data/lean-agentic.graph +0 -0
- package/simulation/data/reflexion.graph +0 -0
- package/simulation/data/skills.graph +0 -0
- package/simulation/data/stock-market.graph +0 -0
- package/simulation/data/strange-loops.graph +0 -0
- package/simulation/data/swarm.graph +0 -0
- package/simulation/data/voting-consensus.graph +0 -0
- package/simulation/docs/CLI-INTEGRATION-PLAN.md +1038 -0
- package/simulation/docs/COMPREHENSIVE-LATENT-SPACE-COMPLETION.md +354 -0
- package/simulation/docs/DOCUMENTATION-INDEX.md +226 -0
- package/simulation/docs/IMPLEMENTATION-COMPLETE.md +521 -0
- package/simulation/docs/OPTIMIZATION-SUMMARY.md +279 -0
- package/simulation/docs/README.md +229 -0
- package/simulation/docs/SWARM-5-INTEGRATION-SUMMARY.md +528 -0
- package/simulation/docs/TESTING-SUMMARY.md +304 -0
- package/simulation/docs/architecture/EXTENSION-API.md +868 -0
- package/simulation/docs/architecture/INTEGRATION-ARCHITECTURE.md +1138 -0
- package/simulation/docs/architecture/OPTIMIZATION-STRATEGY.md +778 -0
- package/simulation/docs/architecture/SIMULATION-ARCHITECTURE.md +892 -0
- package/simulation/docs/guides/CLI-REFERENCE.md +896 -0
- package/simulation/docs/guides/CUSTOM-SIMULATIONS.md +931 -0
- package/simulation/docs/guides/DEPLOYMENT.md +832 -0
- package/simulation/docs/guides/IMPLEMENTATION-SUMMARY.md +544 -0
- package/simulation/docs/guides/MIGRATION-GUIDE.md +591 -0
- package/simulation/docs/guides/QUICK-START.md +361 -0
- package/simulation/docs/guides/README.md +736 -0
- package/simulation/docs/guides/TROUBLESHOOTING.md +817 -0
- package/simulation/docs/guides/WIZARD-GUIDE.md +869 -0
- package/simulation/docs/reports/latent-space/MASTER-SYNTHESIS.md +345 -0
- package/simulation/docs/reports/latent-space/README.md +132 -0
- package/simulation/docs/reports/latent-space/attention-analysis-RESULTS.md +238 -0
- package/simulation/docs/reports/latent-space/clustering-analysis-RESULTS.md +210 -0
- package/simulation/docs/reports/latent-space/hnsw-exploration-RESULTS.md +332 -0
- package/simulation/docs/reports/latent-space/hypergraph-exploration-RESULTS.md +37 -0
- package/simulation/docs/reports/latent-space/neural-augmentation-RESULTS.md +69 -0
- package/simulation/docs/reports/latent-space/quantum-hybrid-RESULTS.md +91 -0
- package/simulation/docs/reports/latent-space/self-organizing-hnsw-RESULTS.md +51 -0
- package/simulation/docs/reports/latent-space/traversal-optimization-RESULTS.md +238 -0
- package/simulation/reports/README.md +397 -0
- package/simulation/reports/advanced-simulations-performance.md +1241 -0
- package/simulation/reports/aidefence-integration-2025-11-30T01-36-53-486Z.json +30 -0
- package/simulation/reports/architecture-analysis.md +1396 -0
- package/simulation/reports/basic-scenarios-performance.md +1840 -0
- package/simulation/reports/bmssp-integration-2025-11-30T01-36-27-193Z.json +30 -0
- package/simulation/reports/bmssp-integration-2025-11-30T03-38-12-887Z.json +30 -0
- package/simulation/reports/causal-reasoning-2025-11-29T23-35-21-795Z.json +36 -0
- package/simulation/reports/causal-reasoning-2025-11-30T00-58-42-862Z.json +30 -0
- package/simulation/reports/causal-reasoning-2025-11-30T00-59-12-546Z.json +40 -0
- package/simulation/reports/consciousness-explorer-2025-11-30T01-36-51-269Z.json +31 -0
- package/simulation/reports/core-benchmarks.md +727 -0
- package/simulation/reports/goalie-integration-2025-11-30T01-36-52-377Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-29T23-35-35-279Z.json +78 -0
- package/simulation/reports/graph-traversal-2025-11-29T23-37-36-697Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-03-59-716Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-05-10-984Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-06-16-334Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-06-53-312Z.json +30 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-07-51-075Z.json +24 -0
- package/simulation/reports/graph-traversal-2025-11-30T01-08-22-179Z.json +42 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-29T23-37-23-804Z.json +148 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-30T01-31-24-401Z.json +31 -0
- package/simulation/reports/lean-agentic-swarm-2025-11-30T03-38-01-470Z.json +31 -0
- package/simulation/reports/multi-agent-swarm-2025-11-29T23-35-28-093Z.json +78 -0
- package/simulation/reports/multi-agent-swarm-2025-11-30T01-03-54-062Z.json +42 -0
- package/simulation/reports/multi-agent-swarm-2025-11-30T01-05-06-092Z.json +42 -0
- package/simulation/reports/psycho-symbolic-reasoner-2025-11-30T01-36-50-180Z.json +30 -0
- package/simulation/reports/quality-metrics.md +727 -0
- package/simulation/reports/reflexion-learning-2025-11-29T23-35-09-774Z.json +48 -0
- package/simulation/reports/reflexion-learning-2025-11-29T23-37-16-934Z.json +36 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-07-49-259Z.json +30 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-09-29-319Z.json +51 -0
- package/simulation/reports/reflexion-learning-2025-11-30T00-28-37-659Z.json +51 -0
- package/simulation/reports/reflexion-learning-2025-11-30T01-31-30-690Z.json +29 -0
- package/simulation/reports/reflexion-learning-2025-11-30T03-38-06-937Z.json +29 -0
- package/simulation/reports/research-foundations.md +2004 -0
- package/simulation/reports/research-swarm-2025-11-30T01-36-54-647Z.json +30 -0
- package/simulation/reports/scalability-deployment.md +2404 -0
- package/simulation/reports/skill-evolution-2025-11-29T23-35-15-945Z.json +36 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-03-17-995Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-03-48-441Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-05-00-554Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-06-11-436Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-06-51-979Z.json +30 -0
- package/simulation/reports/skill-evolution-2025-11-30T01-07-32-695Z.json +40 -0
- package/simulation/reports/stock-market-emergence-2025-11-30T00-11-43-865Z.json +56 -0
- package/simulation/reports/stock-market-emergence-2025-11-30T00-28-57-495Z.json +56 -0
- package/simulation/reports/strange-loops-2025-11-29T23-37-30-621Z.json +78 -0
- package/simulation/reports/strange-loops-2025-11-30T00-07-55-415Z.json +30 -0
- package/simulation/reports/strange-loops-2025-11-30T00-09-35-133Z.json +30 -0
- package/simulation/reports/strange-loops-2025-11-30T00-48-50-744Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-54-48-044Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-57-27-633Z.json +24 -0
- package/simulation/reports/strange-loops-2025-11-30T00-57-59-135Z.json +42 -0
- package/simulation/reports/sublinear-solver-2025-11-30T01-36-33-134Z.json +30 -0
- package/simulation/reports/temporal-lead-solver-2025-11-30T01-36-38-628Z.json +30 -0
- package/simulation/reports/use-cases-applications.md +2212 -0
- package/simulation/reports/voting-system-consensus-2025-11-30T00-11-37-199Z.json +58 -0
- package/simulation/reports/voting-system-consensus-2025-11-30T00-28-47-735Z.json +58 -0
- package/simulation/runner.ts +300 -0
- package/simulation/scenarios/README-advanced/aidefence-integration.md +63 -0
- package/simulation/scenarios/README-advanced/bmssp-integration.md +58 -0
- package/simulation/scenarios/README-advanced/consciousness-explorer.md +53 -0
- package/simulation/scenarios/README-advanced/goalie-integration.md +61 -0
- package/simulation/scenarios/README-advanced/psycho-symbolic-reasoner.md +55 -0
- package/simulation/scenarios/README-advanced/research-swarm.md +63 -0
- package/simulation/scenarios/README-advanced/sublinear-solver.md +58 -0
- package/simulation/scenarios/README-advanced/temporal-lead-solver.md +55 -0
- package/simulation/scenarios/README-basic/causal-reasoning.md +39 -0
- package/simulation/scenarios/README-basic/graph-traversal.md +41 -0
- package/simulation/scenarios/README-basic/lean-agentic-swarm.md +122 -0
- package/simulation/scenarios/README-basic/multi-agent-swarm.md +34 -0
- package/simulation/scenarios/README-basic/reflexion-learning.md +41 -0
- package/simulation/scenarios/README-basic/skill-evolution.md +38 -0
- package/simulation/scenarios/README-basic/stock-market-emergence.md +28 -0
- package/simulation/scenarios/README-basic/strange-loops.md +36 -0
- package/simulation/scenarios/README-basic/voting-system-consensus.md +28 -0
- package/simulation/scenarios/README.md +438 -0
- package/simulation/scenarios/aidefence-integration.ts +165 -0
- package/simulation/scenarios/bmssp-integration.ts +137 -0
- package/simulation/scenarios/causal-reasoning.ts +143 -0
- package/simulation/scenarios/consciousness-explorer.ts +139 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/agent-metrics.json +1 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/performance.json +87 -0
- package/simulation/scenarios/domain-examples/.claude-flow/metrics/task-metrics.json +10 -0
- package/simulation/scenarios/domain-examples/README.md +525 -0
- package/simulation/scenarios/domain-examples/e-commerce-recommendations.ts +220 -0
- package/simulation/scenarios/domain-examples/index.ts +81 -0
- package/simulation/scenarios/domain-examples/iot-sensor-networks.ts +290 -0
- package/simulation/scenarios/domain-examples/medical-imaging.ts +181 -0
- package/simulation/scenarios/domain-examples/robotics-navigation.ts +214 -0
- package/simulation/scenarios/domain-examples/scientific-research.ts +250 -0
- package/simulation/scenarios/domain-examples/trading-systems.ts +138 -0
- package/simulation/scenarios/goalie-integration.ts +161 -0
- package/simulation/scenarios/graph-traversal.ts +129 -0
- package/simulation/scenarios/latent-space/OPTIMIZATION-COMPLETE.md +287 -0
- package/simulation/scenarios/latent-space/README-attention-analysis.md +170 -0
- package/simulation/scenarios/latent-space/README-clustering-analysis.md +239 -0
- package/simulation/scenarios/latent-space/README-hnsw-exploration.md +199 -0
- package/simulation/scenarios/latent-space/README-hypergraph-exploration.md +279 -0
- package/simulation/scenarios/latent-space/README-neural-augmentation.md +267 -0
- package/simulation/scenarios/latent-space/README-quantum-hybrid.md +276 -0
- package/simulation/scenarios/latent-space/README-self-organizing-hnsw.md +244 -0
- package/simulation/scenarios/latent-space/README-traversal-optimization.md +212 -0
- package/simulation/scenarios/latent-space/attention-analysis.ts +598 -0
- package/simulation/scenarios/latent-space/clustering-analysis.ts +796 -0
- package/simulation/scenarios/latent-space/hnsw-exploration.ts +526 -0
- package/simulation/scenarios/latent-space/hypergraph-exploration.ts +706 -0
- package/simulation/scenarios/latent-space/index.ts +47 -0
- package/simulation/scenarios/latent-space/neural-augmentation.ts +604 -0
- package/simulation/scenarios/latent-space/quantum-hybrid.ts +508 -0
- package/simulation/scenarios/latent-space/self-organizing-hnsw.ts +680 -0
- package/simulation/scenarios/latent-space/traversal-optimization.ts +782 -0
- package/simulation/scenarios/lean-agentic-swarm.ts +182 -0
- package/simulation/scenarios/multi-agent-swarm.ts +146 -0
- package/simulation/scenarios/psycho-symbolic-reasoner.ts +136 -0
- package/simulation/scenarios/reflexion-learning.ts +132 -0
- package/simulation/scenarios/research-swarm.ts +187 -0
- package/simulation/scenarios/skill-evolution.ts +135 -0
- package/simulation/scenarios/stock-market-emergence.ts +323 -0
- package/simulation/scenarios/strange-loops.ts +175 -0
- package/simulation/scenarios/sublinear-solver.ts +108 -0
- package/simulation/scenarios/temporal-lead-solver.ts +121 -0
- package/simulation/scenarios/voting-system-consensus.ts +251 -0
- package/simulation/tests/latent-space/attention-analysis.test.ts +204 -0
- package/simulation/tests/latent-space/clustering-analysis.test.ts +281 -0
- package/simulation/tests/latent-space/hnsw-exploration.test.ts +253 -0
- package/simulation/tests/latent-space/hypergraph-exploration.test.ts +295 -0
- package/simulation/tests/latent-space/neural-augmentation.test.ts +326 -0
- package/simulation/tests/latent-space/quantum-hybrid.test.ts +307 -0
- package/simulation/tests/latent-space/self-organizing-hnsw.test.ts +291 -0
- package/simulation/tests/latent-space/traversal-optimization.test.ts +261 -0
- package/simulation/types.ts +177 -0
- package/simulation/utils/PerformanceOptimizer.ts +269 -0
- package/src/backends/GraphBackend.ts +290 -0
- package/src/backends/LearningBackend.ts +210 -0
- package/src/backends/README.md +389 -0
- package/src/backends/VectorBackend.ts +147 -0
- package/src/backends/detector.ts +283 -0
- package/src/backends/factory.ts +279 -0
- package/src/backends/graph/GraphDatabaseAdapter.ts +334 -0
- package/src/backends/hnswlib/HNSWLibBackend.ts +419 -0
- package/src/backends/hnswlib/index.ts +7 -0
- package/src/backends/index.ts +32 -0
- package/src/backends/ruvector/GuardedVectorBackend.ts +219 -0
- package/src/backends/ruvector/RuVectorBackend.ts +343 -0
- package/src/backends/ruvector/RuVectorLearning.ts +254 -0
- package/src/backends/ruvector/index.ts +9 -0
- package/src/benchmarks/wasm-vector-benchmark.ts +250 -0
- package/src/browser/AdvancedFeatures.ts +565 -0
- package/src/browser/AttentionBrowser.ts +387 -0
- package/src/browser/HNSWIndex.ts +494 -0
- package/src/browser/ProductQuantization.ts +419 -0
- package/src/browser/index.ts +317 -0
- package/src/cli/agentdb-cli.ts +2712 -0
- package/src/cli/attention-cli-integration.ts +91 -0
- package/src/cli/commands/attention.ts +656 -0
- package/src/cli/commands/doctor.ts +322 -0
- package/src/cli/commands/init.ts +176 -0
- package/src/cli/commands/install-embeddings.ts +81 -0
- package/src/cli/commands/migrate.ts +545 -0
- package/src/cli/commands/simulate-custom.ts +232 -0
- package/src/cli/commands/simulate-report.ts +171 -0
- package/src/cli/commands/simulate-wizard.ts +379 -0
- package/src/cli/commands/simulate.ts +115 -0
- package/src/cli/commands/status.ts +156 -0
- package/src/cli/examples.sh +83 -0
- package/src/cli/lib/attention-config.ts +326 -0
- package/src/cli/lib/config-manager.ts +627 -0
- package/src/cli/lib/config-validator.ts +261 -0
- package/src/cli/lib/health-monitor.ts +513 -0
- package/src/cli/lib/help-formatter.ts +406 -0
- package/src/cli/lib/history-tracker.ts +503 -0
- package/src/cli/lib/report-generator.ts +455 -0
- package/src/cli/lib/report-store.ts +582 -0
- package/src/cli/lib/simulation-registry.ts +503 -0
- package/src/cli/lib/simulation-runner.ts +291 -0
- package/src/cli/tests/agentdb-cli.test.ts +58 -0
- package/src/cli/tests/attention-cli.test.ts +335 -0
- package/src/controllers/AttentionService.ts +770 -0
- package/src/controllers/CausalMemoryGraph.ts +773 -0
- package/src/controllers/CausalRecall.ts +484 -0
- package/src/controllers/ContextSynthesizer.ts +285 -0
- package/src/controllers/EmbeddingService.ts +161 -0
- package/src/controllers/EnhancedEmbeddingService.ts +143 -0
- package/src/controllers/ExplainableRecall.ts +746 -0
- package/src/controllers/HNSWIndex.ts +495 -0
- package/src/controllers/LearningSystem.ts +1270 -0
- package/src/controllers/MMRDiversityRanker.ts +187 -0
- package/src/controllers/MetadataFilter.ts +280 -0
- package/src/controllers/NightlyLearner.ts +647 -0
- package/src/controllers/QUICClient.ts +413 -0
- package/src/controllers/QUICServer.ts +498 -0
- package/src/controllers/ReasoningBank.ts +665 -0
- package/src/controllers/ReflexionMemory.ts +872 -0
- package/src/controllers/SkillLibrary.ts +795 -0
- package/src/controllers/SyncCoordinator.ts +597 -0
- package/src/controllers/WASMVectorSearch.ts +292 -0
- package/src/controllers/frontier-index.ts +35 -0
- package/src/controllers/index.ts +57 -0
- package/src/coordination/MultiDatabaseCoordinator.ts +1107 -0
- package/src/coordination/index.ts +24 -0
- package/src/core/AgentDB.ts +211 -0
- package/src/db-fallback.ts +296 -0
- package/src/db-test.ts +59 -0
- package/src/db-unified.ts +327 -0
- package/src/examples/quic-sync-example.ts +198 -0
- package/src/examples/wasm-vector-usage.ts +245 -0
- package/src/index.ts +69 -0
- package/src/mcp/agentdb-mcp-server.ts +2318 -0
- package/src/mcp/attention-mcp-integration.ts +145 -0
- package/src/mcp/attention-tools-handlers.ts +586 -0
- package/src/mcp/learning-tools-handlers.ts +106 -0
- package/src/optimizations/BatchOperations.ts +594 -0
- package/src/optimizations/QueryOptimizer.ts +297 -0
- package/src/optimizations/ToolCache.ts +355 -0
- package/src/optimizations/index.ts +11 -0
- package/src/schemas/frontier-schema.sql +378 -0
- package/src/schemas/schema.sql +382 -0
- package/src/security/AttestationLog.ts +252 -0
- package/src/security/MutationGuard.ts +420 -0
- package/src/security/index.ts +52 -0
- package/src/security/input-validation.ts +543 -0
- package/src/security/limits.ts +375 -0
- package/src/security/path-security.ts +436 -0
- package/src/security/validation.ts +556 -0
- package/src/services/GraphTransformerService.ts +389 -0
- package/src/services/LLMRouter.ts +380 -0
- package/src/services/SemanticRouter.ts +169 -0
- package/src/services/SonaTrajectoryService.ts +264 -0
- package/src/tests/attention-service.test.ts +492 -0
- package/src/tests/wasm-vector-search.test.ts +240 -0
- package/src/types/attention.ts +392 -0
- package/src/types/quic.ts +772 -0
- package/src/utils/LegacyAttentionAdapter.ts +393 -0
- package/src/utils/NodeIdMapper.ts +64 -0
- package/src/utils/attention-metrics.ts +253 -0
- package/src/utils/vector-math.ts +71 -0
- package/LICENSE +0 -21
- package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts +0 -175
- package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts.map +0 -1
- package/dist/src/backends/rvf/AdaptiveIndexTuner.js +0 -559
- package/dist/src/backends/rvf/AdaptiveIndexTuner.js.map +0 -1
- package/dist/src/backends/rvf/ContrastiveTrainer.d.ts +0 -148
- package/dist/src/backends/rvf/ContrastiveTrainer.d.ts.map +0 -1
- package/dist/src/backends/rvf/ContrastiveTrainer.js +0 -438
- package/dist/src/backends/rvf/ContrastiveTrainer.js.map +0 -1
- package/dist/src/backends/rvf/FederatedSessionManager.d.ts +0 -211
- package/dist/src/backends/rvf/FederatedSessionManager.d.ts.map +0 -1
- package/dist/src/backends/rvf/FederatedSessionManager.js +0 -389
- package/dist/src/backends/rvf/FederatedSessionManager.js.map +0 -1
- package/dist/src/backends/rvf/FilterBuilder.d.ts +0 -136
- package/dist/src/backends/rvf/FilterBuilder.d.ts.map +0 -1
- package/dist/src/backends/rvf/FilterBuilder.js +0 -157
- package/dist/src/backends/rvf/FilterBuilder.js.map +0 -1
- package/dist/src/backends/rvf/NativeAccelerator.d.ts +0 -140
- package/dist/src/backends/rvf/NativeAccelerator.d.ts.map +0 -1
- package/dist/src/backends/rvf/NativeAccelerator.js +0 -630
- package/dist/src/backends/rvf/NativeAccelerator.js.map +0 -1
- package/dist/src/backends/rvf/RvfBackend.d.ts +0 -194
- package/dist/src/backends/rvf/RvfBackend.d.ts.map +0 -1
- package/dist/src/backends/rvf/RvfBackend.js +0 -607
- package/dist/src/backends/rvf/RvfBackend.js.map +0 -1
- package/dist/src/backends/rvf/RvfSolver.d.ts +0 -175
- package/dist/src/backends/rvf/RvfSolver.d.ts.map +0 -1
- package/dist/src/backends/rvf/RvfSolver.js +0 -176
- package/dist/src/backends/rvf/RvfSolver.js.map +0 -1
- package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts +0 -143
- package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts.map +0 -1
- package/dist/src/backends/rvf/SelfLearningRvfBackend.js +0 -569
- package/dist/src/backends/rvf/SelfLearningRvfBackend.js.map +0 -1
- package/dist/src/backends/rvf/SemanticQueryRouter.d.ts +0 -128
- package/dist/src/backends/rvf/SemanticQueryRouter.d.ts.map +0 -1
- package/dist/src/backends/rvf/SemanticQueryRouter.js +0 -415
- package/dist/src/backends/rvf/SemanticQueryRouter.js.map +0 -1
- package/dist/src/backends/rvf/SimdFallbacks.d.ts +0 -25
- package/dist/src/backends/rvf/SimdFallbacks.d.ts.map +0 -1
- package/dist/src/backends/rvf/SimdFallbacks.js +0 -287
- package/dist/src/backends/rvf/SimdFallbacks.js.map +0 -1
- package/dist/src/backends/rvf/SolverBandit.d.ts +0 -100
- package/dist/src/backends/rvf/SolverBandit.d.ts.map +0 -1
- package/dist/src/backends/rvf/SolverBandit.js +0 -216
- package/dist/src/backends/rvf/SolverBandit.js.map +0 -1
- package/dist/src/backends/rvf/SonaLearningBackend.d.ts +0 -157
- package/dist/src/backends/rvf/SonaLearningBackend.d.ts.map +0 -1
- package/dist/src/backends/rvf/SonaLearningBackend.js +0 -283
- package/dist/src/backends/rvf/SonaLearningBackend.js.map +0 -1
- package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts +0 -77
- package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts.map +0 -1
- package/dist/src/backends/rvf/SqlJsRvfBackend.js +0 -382
- package/dist/src/backends/rvf/SqlJsRvfBackend.js.map +0 -1
- package/dist/src/backends/rvf/WasmStoreBridge.d.ts +0 -27
- package/dist/src/backends/rvf/WasmStoreBridge.d.ts.map +0 -1
- package/dist/src/backends/rvf/WasmStoreBridge.js +0 -87
- package/dist/src/backends/rvf/WasmStoreBridge.js.map +0 -1
- package/dist/src/backends/rvf/validation.d.ts +0 -20
- package/dist/src/backends/rvf/validation.d.ts.map +0 -1
- package/dist/src/backends/rvf/validation.js +0 -78
- package/dist/src/backends/rvf/validation.js.map +0 -1
- package/dist/src/benchmark/BenchmarkSuite.d.ts +0 -318
- package/dist/src/benchmark/BenchmarkSuite.d.ts.map +0 -1
- package/dist/src/benchmark/BenchmarkSuite.js +0 -986
- package/dist/src/benchmark/BenchmarkSuite.js.map +0 -1
- package/dist/src/benchmark/index.d.ts +0 -29
- package/dist/src/benchmark/index.d.ts.map +0 -1
- package/dist/src/benchmark/index.js +0 -39
- package/dist/src/benchmark/index.js.map +0 -1
- package/dist/src/cli/commands/hyperbolic.d.ts +0 -11
- package/dist/src/cli/commands/hyperbolic.d.ts.map +0 -1
- package/dist/src/cli/commands/hyperbolic.js +0 -428
- package/dist/src/cli/commands/hyperbolic.js.map +0 -1
- package/dist/src/cli/commands/learn.d.ts +0 -11
- package/dist/src/cli/commands/learn.d.ts.map +0 -1
- package/dist/src/cli/commands/learn.js +0 -404
- package/dist/src/cli/commands/learn.js.map +0 -1
- package/dist/src/cli/commands/route.d.ts +0 -11
- package/dist/src/cli/commands/route.d.ts.map +0 -1
- package/dist/src/cli/commands/route.js +0 -414
- package/dist/src/cli/commands/route.js.map +0 -1
- package/dist/src/cli/commands/rvf.d.ts +0 -21
- package/dist/src/cli/commands/rvf.d.ts.map +0 -1
- package/dist/src/cli/commands/rvf.js +0 -448
- package/dist/src/cli/commands/rvf.js.map +0 -1
- package/dist/src/cli/tests/agentdb-cli.test.d.ts +0 -8
- package/dist/src/cli/tests/agentdb-cli.test.d.ts.map +0 -1
- package/dist/src/cli/tests/agentdb-cli.test.js +0 -50
- package/dist/src/cli/tests/agentdb-cli.test.js.map +0 -1
- package/dist/src/cli/tests/attention-cli.test.d.ts +0 -5
- package/dist/src/cli/tests/attention-cli.test.d.ts.map +0 -1
- package/dist/src/cli/tests/attention-cli.test.js +0 -257
- package/dist/src/cli/tests/attention-cli.test.js.map +0 -1
- package/dist/src/compatibility/DeprecationWarnings.d.ts +0 -54
- package/dist/src/compatibility/DeprecationWarnings.d.ts.map +0 -1
- package/dist/src/compatibility/DeprecationWarnings.js +0 -131
- package/dist/src/compatibility/DeprecationWarnings.js.map +0 -1
- package/dist/src/compatibility/MigrationUtilities.d.ts +0 -30
- package/dist/src/compatibility/MigrationUtilities.d.ts.map +0 -1
- package/dist/src/compatibility/MigrationUtilities.js +0 -184
- package/dist/src/compatibility/MigrationUtilities.js.map +0 -1
- package/dist/src/compatibility/V1toV2Adapter.d.ts +0 -76
- package/dist/src/compatibility/V1toV2Adapter.d.ts.map +0 -1
- package/dist/src/compatibility/V1toV2Adapter.js +0 -198
- package/dist/src/compatibility/V1toV2Adapter.js.map +0 -1
- package/dist/src/compatibility/VersionDetector.d.ts +0 -32
- package/dist/src/compatibility/VersionDetector.d.ts.map +0 -1
- package/dist/src/compatibility/VersionDetector.js +0 -144
- package/dist/src/compatibility/VersionDetector.js.map +0 -1
- package/dist/src/compatibility/index.d.ts +0 -11
- package/dist/src/compatibility/index.d.ts.map +0 -1
- package/dist/src/compatibility/index.js +0 -10
- package/dist/src/compatibility/index.js.map +0 -1
- package/dist/src/compatibility/types.d.ts +0 -103
- package/dist/src/compatibility/types.d.ts.map +0 -1
- package/dist/src/compatibility/types.js +0 -5
- package/dist/src/compatibility/types.js.map +0 -1
- package/dist/src/controllers/MemoryController.d.ts +0 -161
- package/dist/src/controllers/MemoryController.d.ts.map +0 -1
- package/dist/src/controllers/MemoryController.js +0 -290
- package/dist/src/controllers/MemoryController.js.map +0 -1
- package/dist/src/controllers/attention/CrossAttentionController.d.ts +0 -141
- package/dist/src/controllers/attention/CrossAttentionController.d.ts.map +0 -1
- package/dist/src/controllers/attention/CrossAttentionController.js +0 -325
- package/dist/src/controllers/attention/CrossAttentionController.js.map +0 -1
- package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts +0 -137
- package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts.map +0 -1
- package/dist/src/controllers/attention/MultiHeadAttentionController.js +0 -339
- package/dist/src/controllers/attention/MultiHeadAttentionController.js.map +0 -1
- package/dist/src/controllers/attention/SelfAttentionController.d.ts +0 -117
- package/dist/src/controllers/attention/SelfAttentionController.d.ts.map +0 -1
- package/dist/src/controllers/attention/SelfAttentionController.js +0 -205
- package/dist/src/controllers/attention/SelfAttentionController.js.map +0 -1
- package/dist/src/controllers/attention/index.d.ts +0 -15
- package/dist/src/controllers/attention/index.d.ts.map +0 -1
- package/dist/src/controllers/attention/index.js +0 -12
- package/dist/src/controllers/attention/index.js.map +0 -1
- package/dist/src/core/QueryCache.d.ts +0 -138
- package/dist/src/core/QueryCache.d.ts.map +0 -1
- package/dist/src/core/QueryCache.js +0 -313
- package/dist/src/core/QueryCache.js.map +0 -1
- package/dist/src/observability/index.d.ts +0 -8
- package/dist/src/observability/index.d.ts.map +0 -1
- package/dist/src/observability/index.js +0 -8
- package/dist/src/observability/index.js.map +0 -1
- package/dist/src/observability/integration.d.ts +0 -32
- package/dist/src/observability/integration.d.ts.map +0 -1
- package/dist/src/observability/integration.js +0 -157
- package/dist/src/observability/integration.js.map +0 -1
- package/dist/src/observability/telemetry.d.ts +0 -137
- package/dist/src/observability/telemetry.d.ts.map +0 -1
- package/dist/src/observability/telemetry.js +0 -420
- package/dist/src/observability/telemetry.js.map +0 -1
- package/dist/src/quantization/index.d.ts +0 -7
- package/dist/src/quantization/index.d.ts.map +0 -1
- package/dist/src/quantization/index.js +0 -15
- package/dist/src/quantization/index.js.map +0 -1
- package/dist/src/quantization/vector-quantization.d.ts +0 -388
- package/dist/src/quantization/vector-quantization.d.ts.map +0 -1
- package/dist/src/quantization/vector-quantization.js +0 -1136
- package/dist/src/quantization/vector-quantization.js.map +0 -1
- package/dist/src/search/HybridSearch.d.ts +0 -311
- package/dist/src/search/HybridSearch.d.ts.map +0 -1
- package/dist/src/search/HybridSearch.js +0 -712
- package/dist/src/search/HybridSearch.js.map +0 -1
- package/dist/src/search/index.d.ts +0 -12
- package/dist/src/search/index.d.ts.map +0 -1
- package/dist/src/search/index.js +0 -16
- package/dist/src/search/index.js.map +0 -1
- package/dist/src/services/AttentionService.d.ts +0 -303
- package/dist/src/services/AttentionService.d.ts.map +0 -1
- package/dist/src/services/AttentionService.js +0 -1167
- package/dist/src/services/AttentionService.js.map +0 -1
- package/dist/src/simd/index.d.ts +0 -9
- package/dist/src/simd/index.d.ts.map +0 -1
- package/dist/src/simd/index.js +0 -27
- package/dist/src/simd/index.js.map +0 -1
- package/dist/src/simd/simd-vector-ops.d.ts +0 -332
- package/dist/src/simd/simd-vector-ops.d.ts.map +0 -1
- package/dist/src/simd/simd-vector-ops.js +0 -947
- package/dist/src/simd/simd-vector-ops.js.map +0 -1
- package/dist/src/tests/attention-service.test.d.ts +0 -7
- package/dist/src/tests/attention-service.test.d.ts.map +0 -1
- package/dist/src/tests/attention-service.test.js +0 -401
- package/dist/src/tests/attention-service.test.js.map +0 -1
- package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.d.ts +0 -7
- package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.d.ts.map +0 -1
- package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.js +0 -283
- package/dist/src/tests/integration/compatibility/backwards-compat.integration.test.js.map +0 -1
- package/dist/src/tests/query-cache.test.d.ts +0 -7
- package/dist/src/tests/query-cache.test.d.ts.map +0 -1
- package/dist/src/tests/query-cache.test.js +0 -343
- package/dist/src/tests/query-cache.test.js.map +0 -1
- package/dist/src/tests/ruvector-integration.test.d.ts +0 -14
- package/dist/src/tests/ruvector-integration.test.d.ts.map +0 -1
- package/dist/src/tests/ruvector-integration.test.js +0 -1156
- package/dist/src/tests/ruvector-integration.test.js.map +0 -1
- package/dist/src/tests/unit/auth/crypto.utils.test.d.ts +0 -6
- package/dist/src/tests/unit/auth/crypto.utils.test.d.ts.map +0 -1
- package/dist/src/tests/unit/auth/crypto.utils.test.js +0 -310
- package/dist/src/tests/unit/auth/crypto.utils.test.js.map +0 -1
- package/dist/src/tests/unit/compatibility/deprecation-warnings.test.d.ts +0 -5
- package/dist/src/tests/unit/compatibility/deprecation-warnings.test.d.ts.map +0 -1
- package/dist/src/tests/unit/compatibility/deprecation-warnings.test.js +0 -207
- package/dist/src/tests/unit/compatibility/deprecation-warnings.test.js.map +0 -1
- package/dist/src/tests/unit/compatibility/migration-utils.test.d.ts +0 -5
- package/dist/src/tests/unit/compatibility/migration-utils.test.d.ts.map +0 -1
- package/dist/src/tests/unit/compatibility/migration-utils.test.js +0 -264
- package/dist/src/tests/unit/compatibility/migration-utils.test.js.map +0 -1
- package/dist/src/tests/unit/compatibility/v1-adapter.test.d.ts +0 -7
- package/dist/src/tests/unit/compatibility/v1-adapter.test.d.ts.map +0 -1
- package/dist/src/tests/unit/compatibility/v1-adapter.test.js +0 -228
- package/dist/src/tests/unit/compatibility/v1-adapter.test.js.map +0 -1
- package/dist/src/tests/unit/compatibility/version-detector.test.d.ts +0 -10
- package/dist/src/tests/unit/compatibility/version-detector.test.d.ts.map +0 -1
- package/dist/src/tests/unit/compatibility/version-detector.test.js +0 -162
- package/dist/src/tests/unit/compatibility/version-detector.test.js.map +0 -1
- package/dist/src/tests/vector-quantization.test.d.ts +0 -5
- package/dist/src/tests/vector-quantization.test.d.ts.map +0 -1
- package/dist/src/tests/vector-quantization.test.js +0 -338
- package/dist/src/tests/vector-quantization.test.js.map +0 -1
- package/dist/src/tests/wasm-vector-search.test.d.ts +0 -7
- package/dist/src/tests/wasm-vector-search.test.d.ts.map +0 -1
- package/dist/src/tests/wasm-vector-search.test.js +0 -193
- package/dist/src/tests/wasm-vector-search.test.js.map +0 -1
- package/dist/src/types/database.types.d.ts +0 -275
- package/dist/src/types/database.types.d.ts.map +0 -1
- package/dist/src/types/database.types.js +0 -57
- package/dist/src/types/database.types.js.map +0 -1
- package/dist/src/utils/chalk-fallback.d.ts +0 -3
- package/dist/src/utils/chalk-fallback.d.ts.map +0 -1
- package/dist/src/utils/chalk-fallback.js +0 -20
- package/dist/src/utils/chalk-fallback.js.map +0 -1
- package/dist/src/utils/crypto.utils.d.ts +0 -122
- package/dist/src/utils/crypto.utils.d.ts.map +0 -1
- package/dist/src/utils/crypto.utils.js +0 -296
- package/dist/src/utils/crypto.utils.js.map +0 -1
- package/dist/src/utils/similarity.d.ts +0 -11
- package/dist/src/utils/similarity.d.ts.map +0 -1
- package/dist/src/utils/similarity.js +0 -25
- package/dist/src/utils/similarity.js.map +0 -1
- package/dist/src/wasm-loader.d.ts +0 -67
- package/dist/src/wasm-loader.d.ts.map +0 -1
- package/dist/src/wasm-loader.js +0 -78
- package/dist/src/wasm-loader.js.map +0 -1
- package/dist/src/wrappers/agentdb-fast.d.ts +0 -139
- package/dist/src/wrappers/agentdb-fast.d.ts.map +0 -1
- package/dist/src/wrappers/agentdb-fast.js +0 -316
- package/dist/src/wrappers/agentdb-fast.js.map +0 -1
- package/dist/src/wrappers/attention-fallbacks.d.ts +0 -351
- package/dist/src/wrappers/attention-fallbacks.d.ts.map +0 -1
- package/dist/src/wrappers/attention-fallbacks.js +0 -1487
- package/dist/src/wrappers/attention-fallbacks.js.map +0 -1
- package/dist/src/wrappers/embedding-service.d.ts +0 -117
- package/dist/src/wrappers/embedding-service.d.ts.map +0 -1
- package/dist/src/wrappers/embedding-service.js +0 -376
- package/dist/src/wrappers/embedding-service.js.map +0 -1
- package/dist/src/wrappers/gnn-wrapper.d.ts +0 -71
- package/dist/src/wrappers/gnn-wrapper.d.ts.map +0 -1
- package/dist/src/wrappers/gnn-wrapper.js +0 -240
- package/dist/src/wrappers/gnn-wrapper.js.map +0 -1
- package/dist/src/wrappers/index.d.ts +0 -48
- package/dist/src/wrappers/index.d.ts.map +0 -1
- package/dist/src/wrappers/index.js +0 -83
- package/dist/src/wrappers/index.js.map +0 -1
|
@@ -1,1136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vector Quantization for AgentDB
|
|
3
|
-
*
|
|
4
|
-
* Provides memory-efficient vector storage through quantization techniques:
|
|
5
|
-
*
|
|
6
|
-
* 1. Scalar Quantization (8-bit and 4-bit)
|
|
7
|
-
* - 8-bit: 4x memory reduction (Float32 -> Uint8)
|
|
8
|
-
* - 4-bit: 8x memory reduction (Float32 -> 4-bit packed)
|
|
9
|
-
*
|
|
10
|
-
* 2. Product Quantization
|
|
11
|
-
* - Configurable subspaces and centroids
|
|
12
|
-
* - Higher compression ratios (up to 32x+)
|
|
13
|
-
* - Requires training on representative data
|
|
14
|
-
*
|
|
15
|
-
* 3. QuantizedVectorStore
|
|
16
|
-
* - Wraps vector collections with quantized storage
|
|
17
|
-
* - Asymmetric distance computation (full precision queries)
|
|
18
|
-
* - On-the-fly dequantization for similarity calculations
|
|
19
|
-
*/
|
|
20
|
-
// ============================================================================
|
|
21
|
-
// Performance & Security Constants
|
|
22
|
-
// ============================================================================
|
|
23
|
-
/** @inline Maximum allowed vector dimension to prevent DoS via large allocations */
|
|
24
|
-
export const MAX_VECTOR_DIMENSION = 4096;
|
|
25
|
-
/** @inline Maximum number of vectors in a store */
|
|
26
|
-
const MAX_STORE_SIZE = 10_000_000;
|
|
27
|
-
/** @inline Maximum k-means iterations to prevent CPU exhaustion */
|
|
28
|
-
const MAX_KMEANS_ITERATIONS = 500;
|
|
29
|
-
/** @inline Maximum training vectors for product quantization */
|
|
30
|
-
const MAX_TRAINING_VECTORS = 1_000_000;
|
|
31
|
-
/** @inline Maximum batch size for optimal cache utilization */
|
|
32
|
-
export const MAX_BATCH_SIZE = 10000;
|
|
33
|
-
/** @inline Default cache size for embedding storage */
|
|
34
|
-
export const DEFAULT_CACHE_SIZE = 10000;
|
|
35
|
-
/** @inline Pre-computed inverse of 255 for 8-bit dequantization */
|
|
36
|
-
const INV_255 = 1 / 255;
|
|
37
|
-
/** @inline Pre-computed inverse of 15 for 4-bit dequantization */
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- pre-computed constant reserved for 4-bit dequantization path
|
|
39
|
-
const INV_15 = 1 / 15;
|
|
40
|
-
/** @inline Small epsilon for numerical stability */
|
|
41
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- pre-computed constant reserved for numerical stability checks
|
|
42
|
-
const EPSILON = 1e-10;
|
|
43
|
-
// ============================================================================
|
|
44
|
-
// Input Validation Helpers
|
|
45
|
-
// ============================================================================
|
|
46
|
-
/**
|
|
47
|
-
* Validate Float32Array input
|
|
48
|
-
*/
|
|
49
|
-
function validateFloat32Array(arr, name) {
|
|
50
|
-
if (arr === null || arr === undefined) {
|
|
51
|
-
throw new Error(`${name} cannot be null or undefined`);
|
|
52
|
-
}
|
|
53
|
-
if (!(arr instanceof Float32Array)) {
|
|
54
|
-
throw new Error(`${name} must be a Float32Array`);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Validate dimension is within safe limits
|
|
59
|
-
*/
|
|
60
|
-
function validateDimension(dimension, name = 'dimension') {
|
|
61
|
-
if (!Number.isFinite(dimension) || dimension < 0) {
|
|
62
|
-
throw new Error(`${name} must be a non-negative finite number`);
|
|
63
|
-
}
|
|
64
|
-
if (dimension > MAX_VECTOR_DIMENSION) {
|
|
65
|
-
throw new Error(`${name} exceeds maximum allowed size of ${MAX_VECTOR_DIMENSION}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Safely parse JSON with validation
|
|
70
|
-
*/
|
|
71
|
-
function safeJSONParse(json, validator) {
|
|
72
|
-
let parsed;
|
|
73
|
-
try {
|
|
74
|
-
parsed = JSON.parse(json);
|
|
75
|
-
}
|
|
76
|
-
catch (e) {
|
|
77
|
-
throw new Error('Invalid JSON format');
|
|
78
|
-
}
|
|
79
|
-
if (!validator(parsed)) {
|
|
80
|
-
throw new Error('JSON structure does not match expected format');
|
|
81
|
-
}
|
|
82
|
-
return parsed;
|
|
83
|
-
}
|
|
84
|
-
// ============================================================================
|
|
85
|
-
// Scalar Quantization Functions
|
|
86
|
-
// ============================================================================
|
|
87
|
-
/**
|
|
88
|
-
* Quantize a vector to 8-bit values (4x memory reduction)
|
|
89
|
-
*
|
|
90
|
-
* Formula: quantized = round((value - min) / (max - min) * 255)
|
|
91
|
-
*
|
|
92
|
-
* @param vector - Input vector as Float32Array
|
|
93
|
-
* @returns Object containing quantized data and min/max for dequantization
|
|
94
|
-
*/
|
|
95
|
-
export function quantize8bit(vector) {
|
|
96
|
-
// Input validation
|
|
97
|
-
validateFloat32Array(vector, 'Input vector');
|
|
98
|
-
validateDimension(vector.length, 'Vector dimension');
|
|
99
|
-
if (vector.length === 0) {
|
|
100
|
-
return {
|
|
101
|
-
data: new Uint8Array(0),
|
|
102
|
-
min: 0,
|
|
103
|
-
max: 0,
|
|
104
|
-
dimension: 0,
|
|
105
|
-
type: '8bit',
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
// Find min and max values
|
|
109
|
-
let min = vector[0];
|
|
110
|
-
let max = vector[0];
|
|
111
|
-
for (let i = 1; i < vector.length; i++) {
|
|
112
|
-
if (vector[i] < min)
|
|
113
|
-
min = vector[i];
|
|
114
|
-
if (vector[i] > max)
|
|
115
|
-
max = vector[i];
|
|
116
|
-
}
|
|
117
|
-
// Handle edge case where all values are the same
|
|
118
|
-
const range = max - min;
|
|
119
|
-
const scale = range === 0 ? 0 : 255 / range;
|
|
120
|
-
// Quantize
|
|
121
|
-
const quantized = new Uint8Array(vector.length);
|
|
122
|
-
for (let i = 0; i < vector.length; i++) {
|
|
123
|
-
quantized[i] = Math.round((vector[i] - min) * scale);
|
|
124
|
-
}
|
|
125
|
-
return {
|
|
126
|
-
data: quantized,
|
|
127
|
-
min,
|
|
128
|
-
max,
|
|
129
|
-
dimension: vector.length,
|
|
130
|
-
type: '8bit',
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Quantize a vector to 4-bit values (8x memory reduction)
|
|
135
|
-
*
|
|
136
|
-
* Formula: quantized = round((value - min) / (max - min) * 15)
|
|
137
|
-
* Two 4-bit values are packed into each byte.
|
|
138
|
-
*
|
|
139
|
-
* @param vector - Input vector as Float32Array
|
|
140
|
-
* @returns Object containing quantized data (packed) and min/max for dequantization
|
|
141
|
-
*/
|
|
142
|
-
export function quantize4bit(vector) {
|
|
143
|
-
// Input validation
|
|
144
|
-
validateFloat32Array(vector, 'Input vector');
|
|
145
|
-
validateDimension(vector.length, 'Vector dimension');
|
|
146
|
-
if (vector.length === 0) {
|
|
147
|
-
return {
|
|
148
|
-
data: new Uint8Array(0),
|
|
149
|
-
min: 0,
|
|
150
|
-
max: 0,
|
|
151
|
-
dimension: 0,
|
|
152
|
-
type: '4bit',
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
// Find min and max values
|
|
156
|
-
let min = vector[0];
|
|
157
|
-
let max = vector[0];
|
|
158
|
-
for (let i = 1; i < vector.length; i++) {
|
|
159
|
-
if (vector[i] < min)
|
|
160
|
-
min = vector[i];
|
|
161
|
-
if (vector[i] > max)
|
|
162
|
-
max = vector[i];
|
|
163
|
-
}
|
|
164
|
-
// Handle edge case where all values are the same
|
|
165
|
-
const range = max - min;
|
|
166
|
-
const scale = range === 0 ? 0 : 15 / range;
|
|
167
|
-
// Quantize and pack two values per byte
|
|
168
|
-
const packedLength = Math.ceil(vector.length / 2);
|
|
169
|
-
const quantized = new Uint8Array(packedLength);
|
|
170
|
-
for (let i = 0; i < vector.length; i += 2) {
|
|
171
|
-
const high = Math.round((vector[i] - min) * scale) & 0x0f;
|
|
172
|
-
const low = i + 1 < vector.length
|
|
173
|
-
? Math.round((vector[i + 1] - min) * scale) & 0x0f
|
|
174
|
-
: 0;
|
|
175
|
-
quantized[i >> 1] = (high << 4) | low;
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
data: quantized,
|
|
179
|
-
min,
|
|
180
|
-
max,
|
|
181
|
-
dimension: vector.length,
|
|
182
|
-
type: '4bit',
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Dequantize an 8-bit vector back to Float32
|
|
187
|
-
*
|
|
188
|
-
* @param quantized - Quantized data as Uint8Array
|
|
189
|
-
* @param min - Minimum value from original quantization
|
|
190
|
-
* @param max - Maximum value from original quantization
|
|
191
|
-
* @returns Reconstructed Float32Array
|
|
192
|
-
*/
|
|
193
|
-
export function dequantize8bit(quantized, min, max) {
|
|
194
|
-
if (quantized.length === 0) {
|
|
195
|
-
return new Float32Array(0);
|
|
196
|
-
}
|
|
197
|
-
const range = max - min;
|
|
198
|
-
// @inline Use pre-computed constant when possible, fallback to computed scale
|
|
199
|
-
const scale = range === 0 ? 0 : range * INV_255;
|
|
200
|
-
const len = quantized.length | 0; // Force integer
|
|
201
|
-
const result = new Float32Array(len);
|
|
202
|
-
// @inline 4x loop unrolling for better ILP
|
|
203
|
-
const loopEnd = (len - (len & 3)) | 0;
|
|
204
|
-
for (let i = 0; i < loopEnd; i = (i + 4) | 0) {
|
|
205
|
-
result[i] = quantized[i] * scale + min;
|
|
206
|
-
result[i + 1] = quantized[i + 1] * scale + min;
|
|
207
|
-
result[i + 2] = quantized[i + 2] * scale + min;
|
|
208
|
-
result[i + 3] = quantized[i + 3] * scale + min;
|
|
209
|
-
}
|
|
210
|
-
// Handle remainder
|
|
211
|
-
for (let i = loopEnd; i < len; i++) {
|
|
212
|
-
result[i] = quantized[i] * scale + min;
|
|
213
|
-
}
|
|
214
|
-
return result;
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Dequantize a 4-bit packed vector back to Float32
|
|
218
|
-
*
|
|
219
|
-
* @param quantized - Packed quantized data as Uint8Array
|
|
220
|
-
* @param min - Minimum value from original quantization
|
|
221
|
-
* @param max - Maximum value from original quantization
|
|
222
|
-
* @param originalLength - Original vector length (needed due to packing)
|
|
223
|
-
* @returns Reconstructed Float32Array
|
|
224
|
-
*/
|
|
225
|
-
export function dequantize4bit(quantized, min, max, originalLength) {
|
|
226
|
-
if (quantized.length === 0) {
|
|
227
|
-
return new Float32Array(0);
|
|
228
|
-
}
|
|
229
|
-
// Validate min/max are valid numbers
|
|
230
|
-
if (!Number.isFinite(min) || !Number.isFinite(max)) {
|
|
231
|
-
throw new Error('min and max must be finite numbers');
|
|
232
|
-
}
|
|
233
|
-
const range = max - min;
|
|
234
|
-
const scale = range === 0 ? 0 : range / 15;
|
|
235
|
-
// Calculate output length with bounds checking
|
|
236
|
-
const maxPossibleLength = quantized.length * 2;
|
|
237
|
-
const length = originalLength ?? maxPossibleLength;
|
|
238
|
-
// Security check: originalLength should not exceed what the data can provide
|
|
239
|
-
if (length > maxPossibleLength) {
|
|
240
|
-
throw new Error(`originalLength (${length}) exceeds maximum possible from data (${maxPossibleLength})`);
|
|
241
|
-
}
|
|
242
|
-
validateDimension(length, 'Output length');
|
|
243
|
-
const result = new Float32Array(length);
|
|
244
|
-
for (let i = 0; i < length; i++) {
|
|
245
|
-
const byteIdx = i >> 1;
|
|
246
|
-
// Bounds check
|
|
247
|
-
if (byteIdx >= quantized.length) {
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
const isHigh = (i & 1) === 0;
|
|
251
|
-
const nibble = isHigh
|
|
252
|
-
? (quantized[byteIdx] >> 4) & 0x0f
|
|
253
|
-
: quantized[byteIdx] & 0x0f;
|
|
254
|
-
result[i] = nibble * scale + min;
|
|
255
|
-
}
|
|
256
|
-
return result;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Calculate quantization error statistics
|
|
260
|
-
*
|
|
261
|
-
* @param original - Original vector
|
|
262
|
-
* @param reconstructed - Reconstructed vector after quantization/dequantization
|
|
263
|
-
* @returns Statistics about the quantization error
|
|
264
|
-
*/
|
|
265
|
-
export function calculateQuantizationError(original, reconstructed) {
|
|
266
|
-
if (original.length !== reconstructed.length) {
|
|
267
|
-
throw new Error('Vector lengths must match');
|
|
268
|
-
}
|
|
269
|
-
if (original.length === 0) {
|
|
270
|
-
return { meanError: 0, maxError: 0, mse: 0 };
|
|
271
|
-
}
|
|
272
|
-
let sumError = 0;
|
|
273
|
-
let sumSquaredError = 0;
|
|
274
|
-
let maxError = 0;
|
|
275
|
-
for (let i = 0; i < original.length; i++) {
|
|
276
|
-
const error = Math.abs(original[i] - reconstructed[i]);
|
|
277
|
-
sumError += error;
|
|
278
|
-
sumSquaredError += error * error;
|
|
279
|
-
if (error > maxError)
|
|
280
|
-
maxError = error;
|
|
281
|
-
}
|
|
282
|
-
return {
|
|
283
|
-
meanError: sumError / original.length,
|
|
284
|
-
maxError,
|
|
285
|
-
mse: sumSquaredError / original.length,
|
|
286
|
-
};
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Get quantization statistics for a vector
|
|
290
|
-
*
|
|
291
|
-
* @param vector - Original vector
|
|
292
|
-
* @param type - Quantization type ('8bit' or '4bit')
|
|
293
|
-
* @returns Quantization statistics including error metrics
|
|
294
|
-
*/
|
|
295
|
-
export function getQuantizationStats(vector, type) {
|
|
296
|
-
const quantized = type === '8bit' ? quantize8bit(vector) : quantize4bit(vector);
|
|
297
|
-
const reconstructed = type === '8bit'
|
|
298
|
-
? dequantize8bit(quantized.data, quantized.min, quantized.max)
|
|
299
|
-
: dequantize4bit(quantized.data, quantized.min, quantized.max, quantized.dimension);
|
|
300
|
-
const errors = calculateQuantizationError(vector, reconstructed);
|
|
301
|
-
// Calculate compression ratio
|
|
302
|
-
// Original: vector.length * 4 bytes (Float32)
|
|
303
|
-
// 8-bit: vector.length bytes
|
|
304
|
-
// 4-bit: ceil(vector.length / 2) bytes
|
|
305
|
-
const originalBytes = vector.length * 4;
|
|
306
|
-
const compressedBytes = type === '8bit' ? quantized.data.length : Math.ceil(vector.length / 2);
|
|
307
|
-
const compressionRatio = originalBytes / compressedBytes;
|
|
308
|
-
return {
|
|
309
|
-
min: quantized.min,
|
|
310
|
-
max: quantized.max,
|
|
311
|
-
meanError: errors.meanError,
|
|
312
|
-
maxError: errors.maxError,
|
|
313
|
-
compressionRatio,
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
// ============================================================================
|
|
317
|
-
// Product Quantization
|
|
318
|
-
// ============================================================================
|
|
319
|
-
/**
|
|
320
|
-
* Simple seeded random number generator (LCG)
|
|
321
|
-
*/
|
|
322
|
-
class SeededRandom {
|
|
323
|
-
seed;
|
|
324
|
-
constructor(seed) {
|
|
325
|
-
this.seed = seed;
|
|
326
|
-
}
|
|
327
|
-
next() {
|
|
328
|
-
this.seed = (this.seed * 1103515245 + 12345) & 0x7fffffff;
|
|
329
|
-
return this.seed / 0x7fffffff;
|
|
330
|
-
}
|
|
331
|
-
nextInt(max) {
|
|
332
|
-
return Math.floor(this.next() * max);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
/**
|
|
336
|
-
* Product Quantizer for high compression ratios
|
|
337
|
-
*
|
|
338
|
-
* Divides vectors into subspaces and learns centroids for each subspace.
|
|
339
|
-
* Vectors are encoded as indices into the centroid codebooks.
|
|
340
|
-
*/
|
|
341
|
-
export class ProductQuantizer {
|
|
342
|
-
config;
|
|
343
|
-
subspaceDim;
|
|
344
|
-
codebooks = null;
|
|
345
|
-
trained = false;
|
|
346
|
-
rng;
|
|
347
|
-
constructor(config) {
|
|
348
|
-
// Validate configuration
|
|
349
|
-
validateDimension(config.dimension, 'Dimension');
|
|
350
|
-
if (config.dimension % config.numSubspaces !== 0) {
|
|
351
|
-
throw new Error(`Dimension (${config.dimension}) must be divisible by numSubspaces (${config.numSubspaces})`);
|
|
352
|
-
}
|
|
353
|
-
if (config.numCentroids > 256) {
|
|
354
|
-
throw new Error('numCentroids must be <= 256 for uint8 encoding');
|
|
355
|
-
}
|
|
356
|
-
if (config.numCentroids < 2) {
|
|
357
|
-
throw new Error('numCentroids must be >= 2');
|
|
358
|
-
}
|
|
359
|
-
if (config.numSubspaces < 1 || config.numSubspaces > 256) {
|
|
360
|
-
throw new Error('numSubspaces must be between 1 and 256');
|
|
361
|
-
}
|
|
362
|
-
// Limit max iterations to prevent CPU exhaustion
|
|
363
|
-
const maxIterations = Math.min(config.maxIterations ?? 50, MAX_KMEANS_ITERATIONS);
|
|
364
|
-
this.config = {
|
|
365
|
-
dimension: config.dimension,
|
|
366
|
-
numSubspaces: config.numSubspaces,
|
|
367
|
-
numCentroids: config.numCentroids,
|
|
368
|
-
maxIterations: maxIterations,
|
|
369
|
-
convergenceThreshold: config.convergenceThreshold ?? 1e-4,
|
|
370
|
-
seed: config.seed ?? Date.now(),
|
|
371
|
-
};
|
|
372
|
-
this.subspaceDim = this.config.dimension / this.config.numSubspaces;
|
|
373
|
-
this.rng = new SeededRandom(this.config.seed);
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Train the codebooks using k-means clustering
|
|
377
|
-
*
|
|
378
|
-
* @param vectors - Training vectors (should be representative of the data)
|
|
379
|
-
*/
|
|
380
|
-
async train(vectors) {
|
|
381
|
-
if (vectors.length === 0) {
|
|
382
|
-
throw new Error('Training requires at least one vector');
|
|
383
|
-
}
|
|
384
|
-
// Limit training vectors to prevent memory exhaustion
|
|
385
|
-
if (vectors.length > MAX_TRAINING_VECTORS) {
|
|
386
|
-
throw new Error(`Training vectors exceed maximum of ${MAX_TRAINING_VECTORS}`);
|
|
387
|
-
}
|
|
388
|
-
if (vectors.length < this.config.numCentroids) {
|
|
389
|
-
throw new Error(`Need at least ${this.config.numCentroids} vectors to train ${this.config.numCentroids} centroids`);
|
|
390
|
-
}
|
|
391
|
-
// Validate vector dimensions
|
|
392
|
-
for (const vec of vectors) {
|
|
393
|
-
validateFloat32Array(vec, 'Training vector');
|
|
394
|
-
if (vec.length !== this.config.dimension) {
|
|
395
|
-
throw new Error(`Vector dimension (${vec.length}) does not match config (${this.config.dimension})`);
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
this.codebooks = [];
|
|
399
|
-
// Train each subspace independently
|
|
400
|
-
for (let s = 0; s < this.config.numSubspaces; s++) {
|
|
401
|
-
const startDim = s * this.subspaceDim;
|
|
402
|
-
// Extract subvectors for this subspace
|
|
403
|
-
const subvectors = vectors.map((v) => v.slice(startDim, startDim + this.subspaceDim));
|
|
404
|
-
// Run k-means to find centroids
|
|
405
|
-
const centroids = await this.kMeans(subvectors);
|
|
406
|
-
this.codebooks.push(centroids);
|
|
407
|
-
}
|
|
408
|
-
this.trained = true;
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* K-means clustering with k-means++ initialization
|
|
412
|
-
*/
|
|
413
|
-
async kMeans(subvectors) {
|
|
414
|
-
const n = subvectors.length;
|
|
415
|
-
const k = this.config.numCentroids;
|
|
416
|
-
// K-means++ initialization
|
|
417
|
-
const centroids = this.kMeansPlusPlus(subvectors, k);
|
|
418
|
-
const assignments = new Uint32Array(n);
|
|
419
|
-
let prevInertia = Infinity;
|
|
420
|
-
for (let iter = 0; iter < this.config.maxIterations; iter++) {
|
|
421
|
-
// Assign each vector to nearest centroid
|
|
422
|
-
let inertia = 0;
|
|
423
|
-
for (let i = 0; i < n; i++) {
|
|
424
|
-
let minDist = Infinity;
|
|
425
|
-
let minIdx = 0;
|
|
426
|
-
for (let c = 0; c < k; c++) {
|
|
427
|
-
const dist = this.squaredL2Distance(subvectors[i], centroids[c]);
|
|
428
|
-
if (dist < minDist) {
|
|
429
|
-
minDist = dist;
|
|
430
|
-
minIdx = c;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
assignments[i] = minIdx;
|
|
434
|
-
inertia += minDist;
|
|
435
|
-
}
|
|
436
|
-
// Check convergence
|
|
437
|
-
if (Math.abs(prevInertia - inertia) < this.config.convergenceThreshold) {
|
|
438
|
-
break;
|
|
439
|
-
}
|
|
440
|
-
prevInertia = inertia;
|
|
441
|
-
// Update centroids
|
|
442
|
-
const counts = new Uint32Array(k);
|
|
443
|
-
const sums = Array.from({ length: k }, () => new Float32Array(this.subspaceDim));
|
|
444
|
-
for (let i = 0; i < n; i++) {
|
|
445
|
-
const cluster = assignments[i];
|
|
446
|
-
counts[cluster]++;
|
|
447
|
-
for (let d = 0; d < this.subspaceDim; d++) {
|
|
448
|
-
sums[cluster][d] += subvectors[i][d];
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
for (let c = 0; c < k; c++) {
|
|
452
|
-
if (counts[c] > 0) {
|
|
453
|
-
for (let d = 0; d < this.subspaceDim; d++) {
|
|
454
|
-
centroids[c][d] = sums[c][d] / counts[c];
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
// Yield to event loop periodically
|
|
459
|
-
if (iter % 10 === 0) {
|
|
460
|
-
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
return centroids;
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* K-means++ initialization for better centroid selection
|
|
467
|
-
*/
|
|
468
|
-
kMeansPlusPlus(vectors, k) {
|
|
469
|
-
const n = vectors.length;
|
|
470
|
-
const centroids = [];
|
|
471
|
-
// Choose first centroid randomly
|
|
472
|
-
const firstIdx = this.rng.nextInt(n);
|
|
473
|
-
centroids.push(new Float32Array(vectors[firstIdx]));
|
|
474
|
-
// Choose remaining centroids with probability proportional to distance squared
|
|
475
|
-
for (let i = 1; i < k; i++) {
|
|
476
|
-
const distances = new Float32Array(n);
|
|
477
|
-
let sumDistances = 0;
|
|
478
|
-
for (let j = 0; j < n; j++) {
|
|
479
|
-
let minDist = Infinity;
|
|
480
|
-
for (const centroid of centroids) {
|
|
481
|
-
const dist = this.squaredL2Distance(vectors[j], centroid);
|
|
482
|
-
minDist = Math.min(minDist, dist);
|
|
483
|
-
}
|
|
484
|
-
distances[j] = minDist;
|
|
485
|
-
sumDistances += minDist;
|
|
486
|
-
}
|
|
487
|
-
// Sample next centroid
|
|
488
|
-
let r = this.rng.next() * sumDistances;
|
|
489
|
-
for (let j = 0; j < n; j++) {
|
|
490
|
-
r -= distances[j];
|
|
491
|
-
if (r <= 0) {
|
|
492
|
-
centroids.push(new Float32Array(vectors[j]));
|
|
493
|
-
break;
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
// Fallback if we didn't select (numerical issues)
|
|
497
|
-
if (centroids.length === i) {
|
|
498
|
-
centroids.push(new Float32Array(vectors[this.rng.nextInt(n)]));
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
return centroids;
|
|
502
|
-
}
|
|
503
|
-
/**
|
|
504
|
-
* Encode a vector using the trained codebooks
|
|
505
|
-
*
|
|
506
|
-
* @param vector - Vector to encode
|
|
507
|
-
* @returns Encoded vector with centroid codes and norm
|
|
508
|
-
*/
|
|
509
|
-
encode(vector) {
|
|
510
|
-
if (!this.trained || !this.codebooks) {
|
|
511
|
-
throw new Error('ProductQuantizer must be trained before encoding');
|
|
512
|
-
}
|
|
513
|
-
if (vector.length !== this.config.dimension) {
|
|
514
|
-
throw new Error(`Vector dimension (${vector.length}) does not match config (${this.config.dimension})`);
|
|
515
|
-
}
|
|
516
|
-
const codes = new Uint8Array(this.config.numSubspaces);
|
|
517
|
-
// Calculate norm for potential normalization
|
|
518
|
-
let norm = 0;
|
|
519
|
-
for (let i = 0; i < vector.length; i++) {
|
|
520
|
-
norm += vector[i] * vector[i];
|
|
521
|
-
}
|
|
522
|
-
norm = Math.sqrt(norm);
|
|
523
|
-
// Encode each subspace
|
|
524
|
-
for (let s = 0; s < this.config.numSubspaces; s++) {
|
|
525
|
-
const startDim = s * this.subspaceDim;
|
|
526
|
-
const subvector = vector.slice(startDim, startDim + this.subspaceDim);
|
|
527
|
-
// Find nearest centroid
|
|
528
|
-
let minDist = Infinity;
|
|
529
|
-
let minIdx = 0;
|
|
530
|
-
for (let c = 0; c < this.config.numCentroids; c++) {
|
|
531
|
-
const dist = this.squaredL2Distance(subvector, this.codebooks[s][c]);
|
|
532
|
-
if (dist < minDist) {
|
|
533
|
-
minDist = dist;
|
|
534
|
-
minIdx = c;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
codes[s] = minIdx;
|
|
538
|
-
}
|
|
539
|
-
return { codes, norm };
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Decode an encoded vector (approximate reconstruction)
|
|
543
|
-
*
|
|
544
|
-
* @param encoded - Encoded vector
|
|
545
|
-
* @returns Reconstructed Float32Array
|
|
546
|
-
*/
|
|
547
|
-
decode(encoded) {
|
|
548
|
-
if (!this.codebooks) {
|
|
549
|
-
throw new Error('ProductQuantizer must be trained before decoding');
|
|
550
|
-
}
|
|
551
|
-
const vector = new Float32Array(this.config.dimension);
|
|
552
|
-
for (let s = 0; s < this.config.numSubspaces; s++) {
|
|
553
|
-
const code = encoded.codes[s];
|
|
554
|
-
const centroid = this.codebooks[s][code];
|
|
555
|
-
const startDim = s * this.subspaceDim;
|
|
556
|
-
for (let d = 0; d < this.subspaceDim; d++) {
|
|
557
|
-
vector[startDim + d] = centroid[d];
|
|
558
|
-
}
|
|
559
|
-
}
|
|
560
|
-
return vector;
|
|
561
|
-
}
|
|
562
|
-
/**
|
|
563
|
-
* Compute asymmetric distance between a query and encoded vector
|
|
564
|
-
* Query is in full precision, database vector is encoded
|
|
565
|
-
*
|
|
566
|
-
* @param query - Full precision query vector
|
|
567
|
-
* @param encoded - Encoded database vector
|
|
568
|
-
* @returns Squared L2 distance
|
|
569
|
-
*/
|
|
570
|
-
asymmetricDistance(query, encoded) {
|
|
571
|
-
if (!this.codebooks) {
|
|
572
|
-
throw new Error('ProductQuantizer must be trained');
|
|
573
|
-
}
|
|
574
|
-
let distance = 0;
|
|
575
|
-
for (let s = 0; s < this.config.numSubspaces; s++) {
|
|
576
|
-
const startDim = s * this.subspaceDim;
|
|
577
|
-
const querySubvector = query.slice(startDim, startDim + this.subspaceDim);
|
|
578
|
-
const centroid = this.codebooks[s][encoded.codes[s]];
|
|
579
|
-
distance += this.squaredL2Distance(querySubvector, centroid);
|
|
580
|
-
}
|
|
581
|
-
return distance;
|
|
582
|
-
}
|
|
583
|
-
/**
|
|
584
|
-
* Precompute distance tables for efficient batch search
|
|
585
|
-
* Tables[s][c] = squared distance from query subvector s to centroid c
|
|
586
|
-
*
|
|
587
|
-
* @param query - Query vector
|
|
588
|
-
* @returns Distance lookup tables for each subspace
|
|
589
|
-
*/
|
|
590
|
-
precomputeDistanceTables(query) {
|
|
591
|
-
if (!this.codebooks) {
|
|
592
|
-
throw new Error('ProductQuantizer must be trained');
|
|
593
|
-
}
|
|
594
|
-
const tables = [];
|
|
595
|
-
for (let s = 0; s < this.config.numSubspaces; s++) {
|
|
596
|
-
const table = new Float32Array(this.config.numCentroids);
|
|
597
|
-
const startDim = s * this.subspaceDim;
|
|
598
|
-
const querySubvector = query.slice(startDim, startDim + this.subspaceDim);
|
|
599
|
-
for (let c = 0; c < this.config.numCentroids; c++) {
|
|
600
|
-
table[c] = this.squaredL2Distance(querySubvector, this.codebooks[s][c]);
|
|
601
|
-
}
|
|
602
|
-
tables.push(table);
|
|
603
|
-
}
|
|
604
|
-
return tables;
|
|
605
|
-
}
|
|
606
|
-
/**
|
|
607
|
-
* Compute distance using precomputed tables (very fast)
|
|
608
|
-
*
|
|
609
|
-
* @param tables - Precomputed distance tables from precomputeDistanceTables()
|
|
610
|
-
* @param encoded - Encoded vector
|
|
611
|
-
* @returns Squared L2 distance
|
|
612
|
-
*/
|
|
613
|
-
distanceFromTables(tables, encoded) {
|
|
614
|
-
let distance = 0;
|
|
615
|
-
for (let s = 0; s < this.config.numSubspaces; s++) {
|
|
616
|
-
distance += tables[s][encoded.codes[s]];
|
|
617
|
-
}
|
|
618
|
-
return distance;
|
|
619
|
-
}
|
|
620
|
-
/**
|
|
621
|
-
* Get compression ratio
|
|
622
|
-
*/
|
|
623
|
-
getCompressionRatio() {
|
|
624
|
-
// Original: dimension * 4 bytes (Float32)
|
|
625
|
-
// Encoded: numSubspaces * 1 byte (Uint8) + 4 bytes (norm)
|
|
626
|
-
const originalBytes = this.config.dimension * 4;
|
|
627
|
-
const encodedBytes = this.config.numSubspaces + 4;
|
|
628
|
-
return originalBytes / encodedBytes;
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* Get quantizer statistics
|
|
632
|
-
*/
|
|
633
|
-
getStats() {
|
|
634
|
-
const codebookSize = this.codebooks
|
|
635
|
-
? this.config.numSubspaces *
|
|
636
|
-
this.config.numCentroids *
|
|
637
|
-
this.subspaceDim *
|
|
638
|
-
4
|
|
639
|
-
: 0;
|
|
640
|
-
return {
|
|
641
|
-
trained: this.trained,
|
|
642
|
-
dimension: this.config.dimension,
|
|
643
|
-
numSubspaces: this.config.numSubspaces,
|
|
644
|
-
subspaceDim: this.subspaceDim,
|
|
645
|
-
numCentroids: this.config.numCentroids,
|
|
646
|
-
compressionRatio: this.getCompressionRatio(),
|
|
647
|
-
codebookSizeBytes: codebookSize,
|
|
648
|
-
};
|
|
649
|
-
}
|
|
650
|
-
/**
|
|
651
|
-
* Export codebooks for persistence
|
|
652
|
-
*/
|
|
653
|
-
exportCodebooks() {
|
|
654
|
-
if (!this.codebooks) {
|
|
655
|
-
throw new Error('No codebooks to export');
|
|
656
|
-
}
|
|
657
|
-
return JSON.stringify({
|
|
658
|
-
config: this.config,
|
|
659
|
-
codebooks: this.codebooks.map((subspace) => subspace.map((centroid) => Array.from(centroid))),
|
|
660
|
-
});
|
|
661
|
-
}
|
|
662
|
-
/**
|
|
663
|
-
* Import codebooks from persisted data
|
|
664
|
-
* Includes validation to prevent prototype pollution and type confusion
|
|
665
|
-
*/
|
|
666
|
-
importCodebooks(json) {
|
|
667
|
-
// Type guard for imported data
|
|
668
|
-
function isValidCodebookData(obj) {
|
|
669
|
-
if (typeof obj !== 'object' || obj === null)
|
|
670
|
-
return false;
|
|
671
|
-
const data = obj;
|
|
672
|
-
// Validate config
|
|
673
|
-
if (typeof data.config !== 'object' || data.config === null)
|
|
674
|
-
return false;
|
|
675
|
-
const config = data.config;
|
|
676
|
-
if (typeof config.dimension !== 'number' || !Number.isFinite(config.dimension))
|
|
677
|
-
return false;
|
|
678
|
-
if (typeof config.numSubspaces !== 'number' || !Number.isFinite(config.numSubspaces))
|
|
679
|
-
return false;
|
|
680
|
-
if (typeof config.numCentroids !== 'number' || !Number.isFinite(config.numCentroids))
|
|
681
|
-
return false;
|
|
682
|
-
// Validate codebooks is array of arrays
|
|
683
|
-
if (!Array.isArray(data.codebooks))
|
|
684
|
-
return false;
|
|
685
|
-
for (const subspace of data.codebooks) {
|
|
686
|
-
if (!Array.isArray(subspace))
|
|
687
|
-
return false;
|
|
688
|
-
for (const centroid of subspace) {
|
|
689
|
-
if (!Array.isArray(centroid))
|
|
690
|
-
return false;
|
|
691
|
-
for (const val of centroid) {
|
|
692
|
-
if (typeof val !== 'number')
|
|
693
|
-
return false;
|
|
694
|
-
}
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
return true;
|
|
698
|
-
}
|
|
699
|
-
const data = safeJSONParse(json, isValidCodebookData);
|
|
700
|
-
// Validate imported config
|
|
701
|
-
validateDimension(data.config.dimension, 'Imported dimension');
|
|
702
|
-
if (data.config.numCentroids > 256 || data.config.numCentroids < 2) {
|
|
703
|
-
throw new Error('Invalid numCentroids in imported data');
|
|
704
|
-
}
|
|
705
|
-
if (data.config.numSubspaces < 1 || data.config.numSubspaces > 256) {
|
|
706
|
-
throw new Error('Invalid numSubspaces in imported data');
|
|
707
|
-
}
|
|
708
|
-
if (data.config.dimension % data.config.numSubspaces !== 0) {
|
|
709
|
-
throw new Error('Dimension must be divisible by numSubspaces');
|
|
710
|
-
}
|
|
711
|
-
this.config = {
|
|
712
|
-
...data.config,
|
|
713
|
-
maxIterations: Math.min(data.config.maxIterations ?? 50, MAX_KMEANS_ITERATIONS),
|
|
714
|
-
convergenceThreshold: data.config.convergenceThreshold ?? 1e-4,
|
|
715
|
-
seed: data.config.seed ?? Date.now(),
|
|
716
|
-
};
|
|
717
|
-
this.subspaceDim = this.config.dimension / this.config.numSubspaces;
|
|
718
|
-
this.codebooks = data.codebooks.map((subspace) => subspace.map((centroid) => new Float32Array(centroid)));
|
|
719
|
-
this.trained = true;
|
|
720
|
-
}
|
|
721
|
-
/**
|
|
722
|
-
* Check if the quantizer is trained
|
|
723
|
-
*/
|
|
724
|
-
isTrained() {
|
|
725
|
-
return this.trained;
|
|
726
|
-
}
|
|
727
|
-
/**
|
|
728
|
-
* Squared L2 distance utility
|
|
729
|
-
*/
|
|
730
|
-
squaredL2Distance(a, b) {
|
|
731
|
-
let sum = 0;
|
|
732
|
-
for (let i = 0; i < a.length; i++) {
|
|
733
|
-
const diff = a[i] - b[i];
|
|
734
|
-
sum += diff * diff;
|
|
735
|
-
}
|
|
736
|
-
return sum;
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
/**
|
|
740
|
-
* QuantizedVectorStore - Memory-efficient vector storage
|
|
741
|
-
*
|
|
742
|
-
* Wraps vector collections with quantized storage while providing
|
|
743
|
-
* full-precision query support through asymmetric distance computation.
|
|
744
|
-
*/
|
|
745
|
-
export class QuantizedVectorStore {
|
|
746
|
-
config;
|
|
747
|
-
vectors = new Map();
|
|
748
|
-
productQuantizer = null;
|
|
749
|
-
constructor(config) {
|
|
750
|
-
this.config = {
|
|
751
|
-
dimension: config.dimension,
|
|
752
|
-
quantizationType: config.quantizationType,
|
|
753
|
-
productQuantizerConfig: config.productQuantizerConfig ?? {
|
|
754
|
-
numSubspaces: 8,
|
|
755
|
-
numCentroids: 256,
|
|
756
|
-
},
|
|
757
|
-
metric: config.metric ?? 'cosine',
|
|
758
|
-
};
|
|
759
|
-
if (this.config.quantizationType === 'product') {
|
|
760
|
-
this.productQuantizer = new ProductQuantizer({
|
|
761
|
-
dimension: this.config.dimension,
|
|
762
|
-
...this.config.productQuantizerConfig,
|
|
763
|
-
});
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
/**
|
|
767
|
-
* Train the product quantizer (required for 'product' quantization type)
|
|
768
|
-
*
|
|
769
|
-
* @param vectors - Training vectors
|
|
770
|
-
*/
|
|
771
|
-
async train(vectors) {
|
|
772
|
-
if (this.config.quantizationType !== 'product') {
|
|
773
|
-
throw new Error('Training only required for product quantization');
|
|
774
|
-
}
|
|
775
|
-
if (!this.productQuantizer) {
|
|
776
|
-
throw new Error('ProductQuantizer not initialized');
|
|
777
|
-
}
|
|
778
|
-
await this.productQuantizer.train(vectors);
|
|
779
|
-
}
|
|
780
|
-
/**
|
|
781
|
-
* Check if the store is ready for insertions
|
|
782
|
-
*/
|
|
783
|
-
isReady() {
|
|
784
|
-
if (this.config.quantizationType === 'product') {
|
|
785
|
-
return this.productQuantizer?.isTrained() ?? false;
|
|
786
|
-
}
|
|
787
|
-
return true;
|
|
788
|
-
}
|
|
789
|
-
/**
|
|
790
|
-
* Insert a vector into the store
|
|
791
|
-
*
|
|
792
|
-
* @param id - Unique identifier
|
|
793
|
-
* @param vector - Vector to store
|
|
794
|
-
* @param metadata - Optional metadata
|
|
795
|
-
*/
|
|
796
|
-
insert(id, vector, metadata) {
|
|
797
|
-
// Validate inputs
|
|
798
|
-
validateFloat32Array(vector, 'Vector');
|
|
799
|
-
if (vector.length !== this.config.dimension) {
|
|
800
|
-
throw new Error(`Vector dimension (${vector.length}) does not match store dimension (${this.config.dimension})`);
|
|
801
|
-
}
|
|
802
|
-
// Check store size limit
|
|
803
|
-
if (this.vectors.size >= MAX_STORE_SIZE) {
|
|
804
|
-
throw new Error(`Store has reached maximum capacity of ${MAX_STORE_SIZE} vectors`);
|
|
805
|
-
}
|
|
806
|
-
let quantized;
|
|
807
|
-
switch (this.config.quantizationType) {
|
|
808
|
-
case 'scalar8bit':
|
|
809
|
-
quantized = quantize8bit(vector);
|
|
810
|
-
break;
|
|
811
|
-
case 'scalar4bit':
|
|
812
|
-
quantized = quantize4bit(vector);
|
|
813
|
-
break;
|
|
814
|
-
case 'product':
|
|
815
|
-
if (!this.productQuantizer?.isTrained()) {
|
|
816
|
-
throw new Error('ProductQuantizer must be trained before inserting vectors');
|
|
817
|
-
}
|
|
818
|
-
quantized = this.productQuantizer.encode(vector);
|
|
819
|
-
break;
|
|
820
|
-
}
|
|
821
|
-
this.vectors.set(id, { id, quantized, metadata });
|
|
822
|
-
}
|
|
823
|
-
/**
|
|
824
|
-
* Insert multiple vectors in batch
|
|
825
|
-
*
|
|
826
|
-
* @param items - Array of {id, vector, metadata}
|
|
827
|
-
*/
|
|
828
|
-
insertBatch(items) {
|
|
829
|
-
for (const item of items) {
|
|
830
|
-
this.insert(item.id, item.vector, item.metadata);
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
/**
|
|
834
|
-
* Search for nearest neighbors
|
|
835
|
-
* Uses asymmetric distance computation: query in full precision,
|
|
836
|
-
* database vectors in quantized form.
|
|
837
|
-
*
|
|
838
|
-
* @param query - Query vector (full precision)
|
|
839
|
-
* @param k - Number of results to return
|
|
840
|
-
* @param threshold - Optional similarity threshold
|
|
841
|
-
* @returns Sorted search results (most similar first)
|
|
842
|
-
*/
|
|
843
|
-
search(query, k, threshold) {
|
|
844
|
-
if (query.length !== this.config.dimension) {
|
|
845
|
-
throw new Error(`Query dimension (${query.length}) does not match store dimension (${this.config.dimension})`);
|
|
846
|
-
}
|
|
847
|
-
if (this.vectors.size === 0) {
|
|
848
|
-
return [];
|
|
849
|
-
}
|
|
850
|
-
// Normalize query for cosine similarity
|
|
851
|
-
const normalizedQuery = this.config.metric === 'cosine' ? this.normalize(query) : query;
|
|
852
|
-
// Precompute distance tables for product quantization
|
|
853
|
-
let distanceTables = null;
|
|
854
|
-
if (this.config.quantizationType === 'product' &&
|
|
855
|
-
this.productQuantizer?.isTrained()) {
|
|
856
|
-
distanceTables = this.productQuantizer.precomputeDistanceTables(normalizedQuery);
|
|
857
|
-
}
|
|
858
|
-
// Calculate distances to all vectors
|
|
859
|
-
const results = [];
|
|
860
|
-
for (const stored of this.vectors.values()) {
|
|
861
|
-
const distance = this.computeAsymmetricDistance(normalizedQuery, stored.quantized, distanceTables);
|
|
862
|
-
results.push({ id: stored.id, distance, metadata: stored.metadata });
|
|
863
|
-
}
|
|
864
|
-
// Sort by distance (ascending for L2, we'll convert to similarity later)
|
|
865
|
-
results.sort((a, b) => a.distance - b.distance);
|
|
866
|
-
// Convert to search results with similarity scores
|
|
867
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- reserved for future distance normalization
|
|
868
|
-
const maxDistance = Math.max(...results.map((r) => r.distance), 1e-10);
|
|
869
|
-
const searchResults = [];
|
|
870
|
-
for (let i = 0; i < Math.min(k, results.length); i++) {
|
|
871
|
-
const r = results[i];
|
|
872
|
-
// Convert distance to similarity
|
|
873
|
-
let similarity;
|
|
874
|
-
if (this.config.metric === 'cosine' || this.config.metric === 'ip') {
|
|
875
|
-
// For cosine/IP, we stored squared distance but actually want similarity
|
|
876
|
-
// Similarity = 1 - (distance / 2) for normalized vectors with L2
|
|
877
|
-
similarity = Math.max(0, 1 - Math.sqrt(r.distance) / 2);
|
|
878
|
-
}
|
|
879
|
-
else {
|
|
880
|
-
// For L2, use inverse distance normalization
|
|
881
|
-
similarity = 1 / (1 + r.distance);
|
|
882
|
-
}
|
|
883
|
-
if (threshold !== undefined && similarity < threshold) {
|
|
884
|
-
continue;
|
|
885
|
-
}
|
|
886
|
-
searchResults.push({
|
|
887
|
-
id: r.id,
|
|
888
|
-
distance: r.distance,
|
|
889
|
-
similarity,
|
|
890
|
-
metadata: r.metadata,
|
|
891
|
-
});
|
|
892
|
-
}
|
|
893
|
-
return searchResults;
|
|
894
|
-
}
|
|
895
|
-
/**
|
|
896
|
-
* Remove a vector by ID
|
|
897
|
-
*
|
|
898
|
-
* @param id - Vector ID to remove
|
|
899
|
-
* @returns true if removed, false if not found
|
|
900
|
-
*/
|
|
901
|
-
remove(id) {
|
|
902
|
-
return this.vectors.delete(id);
|
|
903
|
-
}
|
|
904
|
-
/**
|
|
905
|
-
* Get a dequantized vector by ID
|
|
906
|
-
*
|
|
907
|
-
* @param id - Vector ID
|
|
908
|
-
* @returns Reconstructed vector or null if not found
|
|
909
|
-
*/
|
|
910
|
-
getVector(id) {
|
|
911
|
-
const stored = this.vectors.get(id);
|
|
912
|
-
if (!stored) {
|
|
913
|
-
return null;
|
|
914
|
-
}
|
|
915
|
-
return this.dequantizeStored(stored.quantized);
|
|
916
|
-
}
|
|
917
|
-
/**
|
|
918
|
-
* Get store statistics
|
|
919
|
-
*/
|
|
920
|
-
getStats() {
|
|
921
|
-
let bytesPerVector;
|
|
922
|
-
let codebookBytes = 0;
|
|
923
|
-
switch (this.config.quantizationType) {
|
|
924
|
-
case 'scalar8bit':
|
|
925
|
-
bytesPerVector = this.config.dimension + 8 + 4; // data + min/max + dimension
|
|
926
|
-
break;
|
|
927
|
-
case 'scalar4bit':
|
|
928
|
-
bytesPerVector = Math.ceil(this.config.dimension / 2) + 8 + 4;
|
|
929
|
-
break;
|
|
930
|
-
case 'product': {
|
|
931
|
-
const pqStats = this.productQuantizer?.getStats();
|
|
932
|
-
bytesPerVector = (pqStats?.numSubspaces ?? 8) + 4; // codes + norm
|
|
933
|
-
codebookBytes = pqStats?.codebookSizeBytes ?? 0;
|
|
934
|
-
break;
|
|
935
|
-
}
|
|
936
|
-
default:
|
|
937
|
-
bytesPerVector = this.config.dimension * 4;
|
|
938
|
-
}
|
|
939
|
-
const originalBytesPerVector = this.config.dimension * 4;
|
|
940
|
-
const compressionRatio = originalBytesPerVector / bytesPerVector;
|
|
941
|
-
return {
|
|
942
|
-
count: this.vectors.size,
|
|
943
|
-
dimension: this.config.dimension,
|
|
944
|
-
quantizationType: this.config.quantizationType,
|
|
945
|
-
metric: this.config.metric,
|
|
946
|
-
compressionRatio,
|
|
947
|
-
memoryUsageBytes: this.vectors.size * bytesPerVector + codebookBytes,
|
|
948
|
-
productQuantizerStats: this.productQuantizer?.getStats(),
|
|
949
|
-
};
|
|
950
|
-
}
|
|
951
|
-
/**
|
|
952
|
-
* Clear all vectors
|
|
953
|
-
*/
|
|
954
|
-
clear() {
|
|
955
|
-
this.vectors.clear();
|
|
956
|
-
}
|
|
957
|
-
/**
|
|
958
|
-
* Export store to JSON (for persistence)
|
|
959
|
-
*/
|
|
960
|
-
export() {
|
|
961
|
-
const data = {
|
|
962
|
-
config: this.config,
|
|
963
|
-
vectors: [],
|
|
964
|
-
};
|
|
965
|
-
for (const stored of this.vectors.values()) {
|
|
966
|
-
const exportedQuantized = this.config.quantizationType === 'product'
|
|
967
|
-
? {
|
|
968
|
-
codes: Array.from(stored.quantized.codes),
|
|
969
|
-
norm: stored.quantized.norm,
|
|
970
|
-
}
|
|
971
|
-
: {
|
|
972
|
-
data: Array.from(stored.quantized.data),
|
|
973
|
-
min: stored.quantized.min,
|
|
974
|
-
max: stored.quantized.max,
|
|
975
|
-
dimension: stored.quantized.dimension,
|
|
976
|
-
type: stored.quantized.type,
|
|
977
|
-
};
|
|
978
|
-
data.vectors.push({
|
|
979
|
-
id: stored.id,
|
|
980
|
-
quantized: exportedQuantized,
|
|
981
|
-
metadata: stored.metadata,
|
|
982
|
-
});
|
|
983
|
-
}
|
|
984
|
-
if (this.productQuantizer?.isTrained()) {
|
|
985
|
-
data.codebooks = this.productQuantizer.exportCodebooks();
|
|
986
|
-
}
|
|
987
|
-
return JSON.stringify(data);
|
|
988
|
-
}
|
|
989
|
-
/**
|
|
990
|
-
* Import store from JSON
|
|
991
|
-
*/
|
|
992
|
-
import(json) {
|
|
993
|
-
const data = JSON.parse(json);
|
|
994
|
-
this.config = data.config;
|
|
995
|
-
this.vectors.clear();
|
|
996
|
-
if (data.codebooks && this.config.quantizationType === 'product') {
|
|
997
|
-
this.productQuantizer = new ProductQuantizer({
|
|
998
|
-
dimension: this.config.dimension,
|
|
999
|
-
...this.config.productQuantizerConfig,
|
|
1000
|
-
});
|
|
1001
|
-
this.productQuantizer.importCodebooks(data.codebooks);
|
|
1002
|
-
}
|
|
1003
|
-
for (const stored of data.vectors) {
|
|
1004
|
-
const quantized = this.config.quantizationType === 'product'
|
|
1005
|
-
? {
|
|
1006
|
-
codes: new Uint8Array(stored.quantized.codes),
|
|
1007
|
-
norm: stored.quantized.norm,
|
|
1008
|
-
}
|
|
1009
|
-
: {
|
|
1010
|
-
data: new Uint8Array(stored.quantized.data),
|
|
1011
|
-
min: stored.quantized.min,
|
|
1012
|
-
max: stored.quantized.max,
|
|
1013
|
-
dimension: stored.quantized.dimension,
|
|
1014
|
-
type: stored.quantized.type,
|
|
1015
|
-
};
|
|
1016
|
-
this.vectors.set(stored.id, {
|
|
1017
|
-
id: stored.id,
|
|
1018
|
-
quantized: quantized,
|
|
1019
|
-
metadata: stored.metadata,
|
|
1020
|
-
});
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1023
|
-
/**
|
|
1024
|
-
* Compute asymmetric distance (query full precision, database quantized)
|
|
1025
|
-
*/
|
|
1026
|
-
computeAsymmetricDistance(query, quantized, distanceTables) {
|
|
1027
|
-
switch (this.config.quantizationType) {
|
|
1028
|
-
case 'scalar8bit':
|
|
1029
|
-
case 'scalar4bit': {
|
|
1030
|
-
const q = quantized;
|
|
1031
|
-
const dequantized = q.type === '8bit'
|
|
1032
|
-
? dequantize8bit(q.data, q.min, q.max)
|
|
1033
|
-
: dequantize4bit(q.data, q.min, q.max, q.dimension);
|
|
1034
|
-
// Normalize for cosine
|
|
1035
|
-
const normalizedDeq = this.config.metric === 'cosine' ? this.normalize(dequantized) : dequantized;
|
|
1036
|
-
return this.squaredL2Distance(query, normalizedDeq);
|
|
1037
|
-
}
|
|
1038
|
-
case 'product': {
|
|
1039
|
-
if (distanceTables && this.productQuantizer) {
|
|
1040
|
-
return this.productQuantizer.distanceFromTables(distanceTables, quantized);
|
|
1041
|
-
}
|
|
1042
|
-
if (this.productQuantizer) {
|
|
1043
|
-
return this.productQuantizer.asymmetricDistance(query, quantized);
|
|
1044
|
-
}
|
|
1045
|
-
throw new Error('ProductQuantizer not initialized');
|
|
1046
|
-
}
|
|
1047
|
-
}
|
|
1048
|
-
}
|
|
1049
|
-
/**
|
|
1050
|
-
* Dequantize a stored vector
|
|
1051
|
-
*/
|
|
1052
|
-
dequantizeStored(quantized) {
|
|
1053
|
-
if (this.config.quantizationType === 'product') {
|
|
1054
|
-
if (!this.productQuantizer) {
|
|
1055
|
-
throw new Error('ProductQuantizer not initialized');
|
|
1056
|
-
}
|
|
1057
|
-
return this.productQuantizer.decode(quantized);
|
|
1058
|
-
}
|
|
1059
|
-
const q = quantized;
|
|
1060
|
-
return q.type === '8bit'
|
|
1061
|
-
? dequantize8bit(q.data, q.min, q.max)
|
|
1062
|
-
: dequantize4bit(q.data, q.min, q.max, q.dimension);
|
|
1063
|
-
}
|
|
1064
|
-
/**
|
|
1065
|
-
* Normalize a vector to unit length
|
|
1066
|
-
*/
|
|
1067
|
-
normalize(vector) {
|
|
1068
|
-
let norm = 0;
|
|
1069
|
-
for (let i = 0; i < vector.length; i++) {
|
|
1070
|
-
norm += vector[i] * vector[i];
|
|
1071
|
-
}
|
|
1072
|
-
norm = Math.sqrt(norm);
|
|
1073
|
-
if (norm === 0) {
|
|
1074
|
-
return vector;
|
|
1075
|
-
}
|
|
1076
|
-
const result = new Float32Array(vector.length);
|
|
1077
|
-
for (let i = 0; i < vector.length; i++) {
|
|
1078
|
-
result[i] = vector[i] / norm;
|
|
1079
|
-
}
|
|
1080
|
-
return result;
|
|
1081
|
-
}
|
|
1082
|
-
/**
|
|
1083
|
-
* Squared L2 distance
|
|
1084
|
-
*/
|
|
1085
|
-
squaredL2Distance(a, b) {
|
|
1086
|
-
let sum = 0;
|
|
1087
|
-
for (let i = 0; i < a.length; i++) {
|
|
1088
|
-
const diff = a[i] - b[i];
|
|
1089
|
-
sum += diff * diff;
|
|
1090
|
-
}
|
|
1091
|
-
return sum;
|
|
1092
|
-
}
|
|
1093
|
-
}
|
|
1094
|
-
// ============================================================================
|
|
1095
|
-
// Factory Functions
|
|
1096
|
-
// ============================================================================
|
|
1097
|
-
/**
|
|
1098
|
-
* Create an 8-bit scalar quantized vector store (4x compression)
|
|
1099
|
-
*/
|
|
1100
|
-
export function createScalar8BitStore(dimension, metric = 'cosine') {
|
|
1101
|
-
return new QuantizedVectorStore({
|
|
1102
|
-
dimension,
|
|
1103
|
-
quantizationType: 'scalar8bit',
|
|
1104
|
-
metric,
|
|
1105
|
-
});
|
|
1106
|
-
}
|
|
1107
|
-
/**
|
|
1108
|
-
* Create a 4-bit scalar quantized vector store (8x compression)
|
|
1109
|
-
*/
|
|
1110
|
-
export function createScalar4BitStore(dimension, metric = 'cosine') {
|
|
1111
|
-
return new QuantizedVectorStore({
|
|
1112
|
-
dimension,
|
|
1113
|
-
quantizationType: 'scalar4bit',
|
|
1114
|
-
metric,
|
|
1115
|
-
});
|
|
1116
|
-
}
|
|
1117
|
-
/**
|
|
1118
|
-
* Create a product quantized vector store (configurable compression)
|
|
1119
|
-
*
|
|
1120
|
-
* @param dimension - Vector dimension
|
|
1121
|
-
* @param numSubspaces - Number of subspaces (8, 16, 32, 64 typical)
|
|
1122
|
-
* @param numCentroids - Number of centroids per subspace (256 max for uint8)
|
|
1123
|
-
* @param metric - Distance metric
|
|
1124
|
-
*/
|
|
1125
|
-
export function createProductQuantizedStore(dimension, numSubspaces = 8, numCentroids = 256, metric = 'cosine') {
|
|
1126
|
-
return new QuantizedVectorStore({
|
|
1127
|
-
dimension,
|
|
1128
|
-
quantizationType: 'product',
|
|
1129
|
-
productQuantizerConfig: {
|
|
1130
|
-
numSubspaces,
|
|
1131
|
-
numCentroids,
|
|
1132
|
-
},
|
|
1133
|
-
metric,
|
|
1134
|
-
});
|
|
1135
|
-
}
|
|
1136
|
-
//# sourceMappingURL=vector-quantization.js.map
|