agentdb 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +38 -0
- package/LICENSE-APACHE +190 -0
- package/LICENSE-MIT +21 -0
- package/README.md +953 -0
- package/bin/agentdb.js +485 -0
- package/bin/plugin-cli-wrapper.mjs +21 -0
- package/dist/cache/query-cache.d.ts +105 -0
- package/dist/cache/query-cache.d.ts.map +1 -0
- package/dist/cache/query-cache.js +224 -0
- package/dist/cache/query-cache.js.map +1 -0
- package/dist/cache/query-cache.mjs +219 -0
- package/dist/cli/cache/query-cache.d.ts +104 -0
- package/dist/cli/cache/query-cache.js +244 -0
- package/dist/cli/cli/db-commands.d.ts +48 -0
- package/dist/cli/cli/db-commands.js +613 -0
- package/dist/cli/commands.d.ts +7 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +113 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/commands.mjs +104 -0
- package/dist/cli/core/backend-interface.d.ts +70 -0
- package/dist/cli/core/backend-interface.js +15 -0
- package/dist/cli/core/native-backend.d.ts +140 -0
- package/dist/cli/core/native-backend.js +432 -0
- package/dist/cli/core/vector-db.d.ts +126 -0
- package/dist/cli/core/vector-db.js +338 -0
- package/dist/cli/core/wasm-backend.d.ts +95 -0
- package/dist/cli/core/wasm-backend.js +418 -0
- package/dist/cli/db-commands.d.ts +49 -0
- package/dist/cli/db-commands.d.ts.map +1 -0
- package/dist/cli/db-commands.js +533 -0
- package/dist/cli/db-commands.js.map +1 -0
- package/dist/cli/db-commands.mjs +522 -0
- package/dist/cli/generator.d.ts +11 -0
- package/dist/cli/generator.d.ts.map +1 -0
- package/dist/cli/generator.js +567 -0
- package/dist/cli/generator.js.map +1 -0
- package/dist/cli/generator.mjs +527 -0
- package/dist/cli/help.d.ts +18 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +676 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/help.mjs +667 -0
- package/dist/cli/index/hnsw.d.ts +164 -0
- package/dist/cli/index/hnsw.js +558 -0
- package/dist/cli/plugin-cli.d.ts +7 -0
- package/dist/cli/plugin-cli.d.ts.map +1 -0
- package/dist/cli/plugin-cli.js +295 -0
- package/dist/cli/plugin-cli.js.map +1 -0
- package/dist/cli/plugin-cli.mjs +289 -0
- package/dist/cli/quantization/product-quantization.d.ts +108 -0
- package/dist/cli/quantization/product-quantization.js +350 -0
- package/dist/cli/query/query-builder.d.ts +322 -0
- package/dist/cli/query/query-builder.js +600 -0
- package/dist/cli/templates.d.ts +14 -0
- package/dist/cli/templates.d.ts.map +1 -0
- package/dist/cli/templates.js +182 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/cli/templates.mjs +176 -0
- package/dist/cli/types/index.d.ts +116 -0
- package/dist/cli/types/index.js +5 -0
- package/dist/cli/types.d.ts +91 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +6 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/types.mjs +4 -0
- package/dist/cli/wizard/index.d.ts +6 -0
- package/dist/cli/wizard/index.d.ts.map +1 -0
- package/dist/cli/wizard/index.js +138 -0
- package/dist/cli/wizard/index.js.map +1 -0
- package/dist/cli/wizard/index.mjs +131 -0
- package/dist/cli/wizard/prompts.d.ts +11 -0
- package/dist/cli/wizard/prompts.d.ts.map +1 -0
- package/dist/cli/wizard/prompts.js +482 -0
- package/dist/cli/wizard/prompts.js.map +1 -0
- package/dist/cli/wizard/prompts.mjs +470 -0
- package/dist/cli/wizard/validator.d.ts +13 -0
- package/dist/cli/wizard/validator.d.ts.map +1 -0
- package/dist/cli/wizard/validator.js +234 -0
- package/dist/cli/wizard/validator.js.map +1 -0
- package/dist/cli/wizard/validator.mjs +224 -0
- package/dist/core/backend-interface.d.ts +71 -0
- package/dist/core/backend-interface.d.ts.map +1 -0
- package/dist/core/backend-interface.js +16 -0
- package/dist/core/backend-interface.js.map +1 -0
- package/dist/core/backend-interface.mjs +12 -0
- package/dist/core/native-backend.d.ts +141 -0
- package/dist/core/native-backend.d.ts.map +1 -0
- package/dist/core/native-backend.js +457 -0
- package/dist/core/native-backend.js.map +1 -0
- package/dist/core/native-backend.mjs +449 -0
- package/dist/core/vector-db.d.ts +127 -0
- package/dist/core/vector-db.d.ts.map +1 -0
- package/dist/core/vector-db.js +266 -0
- package/dist/core/vector-db.js.map +1 -0
- package/dist/core/vector-db.mjs +261 -0
- package/dist/core/wasm-backend.d.ts +96 -0
- package/dist/core/wasm-backend.d.ts.map +1 -0
- package/dist/core/wasm-backend.js +393 -0
- package/dist/core/wasm-backend.js.map +1 -0
- package/dist/core/wasm-backend.mjs +385 -0
- package/dist/index/hnsw-optimized.d.ts +75 -0
- package/dist/index/hnsw-optimized.d.ts.map +1 -0
- package/dist/index/hnsw-optimized.js +412 -0
- package/dist/index/hnsw-optimized.js.map +1 -0
- package/dist/index/hnsw-optimized.mjs +407 -0
- package/dist/index/hnsw.d.ts +165 -0
- package/dist/index/hnsw.d.ts.map +1 -0
- package/dist/index/hnsw.js +521 -0
- package/dist/index/hnsw.js.map +1 -0
- package/dist/index/hnsw.mjs +516 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +63 -0
- package/dist/mcp-server.d.ts +27 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +789 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/mcp-server.mjs +784 -0
- package/dist/plugins/base-plugin.d.ts +114 -0
- package/dist/plugins/base-plugin.d.ts.map +1 -0
- package/dist/plugins/base-plugin.js +313 -0
- package/dist/plugins/base-plugin.js.map +1 -0
- package/dist/plugins/base-plugin.mjs +275 -0
- package/dist/plugins/implementations/active-learning.d.ts +135 -0
- package/dist/plugins/implementations/active-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/active-learning.js +372 -0
- package/dist/plugins/implementations/active-learning.js.map +1 -0
- package/dist/plugins/implementations/active-learning.mjs +367 -0
- package/dist/plugins/implementations/actor-critic.d.ts +64 -0
- package/dist/plugins/implementations/actor-critic.d.ts.map +1 -0
- package/dist/plugins/implementations/actor-critic.js +363 -0
- package/dist/plugins/implementations/actor-critic.js.map +1 -0
- package/dist/plugins/implementations/actor-critic.mjs +358 -0
- package/dist/plugins/implementations/adversarial-training.d.ts +133 -0
- package/dist/plugins/implementations/adversarial-training.d.ts.map +1 -0
- package/dist/plugins/implementations/adversarial-training.js +409 -0
- package/dist/plugins/implementations/adversarial-training.js.map +1 -0
- package/dist/plugins/implementations/adversarial-training.mjs +404 -0
- package/dist/plugins/implementations/curriculum-learning.d.ts +132 -0
- package/dist/plugins/implementations/curriculum-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/curriculum-learning.js +354 -0
- package/dist/plugins/implementations/curriculum-learning.js.map +1 -0
- package/dist/plugins/implementations/curriculum-learning.mjs +349 -0
- package/dist/plugins/implementations/decision-transformer.d.ts +77 -0
- package/dist/plugins/implementations/decision-transformer.d.ts.map +1 -0
- package/dist/plugins/implementations/decision-transformer.js +422 -0
- package/dist/plugins/implementations/decision-transformer.js.map +1 -0
- package/dist/plugins/implementations/decision-transformer.mjs +417 -0
- package/dist/plugins/implementations/federated-learning.d.ts +126 -0
- package/dist/plugins/implementations/federated-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/federated-learning.js +436 -0
- package/dist/plugins/implementations/federated-learning.js.map +1 -0
- package/dist/plugins/implementations/federated-learning.mjs +431 -0
- package/dist/plugins/implementations/index.d.ts +30 -0
- package/dist/plugins/implementations/index.d.ts.map +1 -0
- package/dist/plugins/implementations/index.js +45 -0
- package/dist/plugins/implementations/index.js.map +1 -0
- package/dist/plugins/implementations/index.mjs +31 -0
- package/dist/plugins/implementations/multi-task-learning.d.ts +115 -0
- package/dist/plugins/implementations/multi-task-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/multi-task-learning.js +369 -0
- package/dist/plugins/implementations/multi-task-learning.js.map +1 -0
- package/dist/plugins/implementations/multi-task-learning.mjs +364 -0
- package/dist/plugins/implementations/neural-architecture-search.d.ts +148 -0
- package/dist/plugins/implementations/neural-architecture-search.d.ts.map +1 -0
- package/dist/plugins/implementations/neural-architecture-search.js +379 -0
- package/dist/plugins/implementations/neural-architecture-search.js.map +1 -0
- package/dist/plugins/implementations/neural-architecture-search.mjs +374 -0
- package/dist/plugins/implementations/q-learning.d.ts +98 -0
- package/dist/plugins/implementations/q-learning.d.ts.map +1 -0
- package/dist/plugins/implementations/q-learning.js +435 -0
- package/dist/plugins/implementations/q-learning.js.map +1 -0
- package/dist/plugins/implementations/q-learning.mjs +430 -0
- package/dist/plugins/implementations/sarsa.d.ts +103 -0
- package/dist/plugins/implementations/sarsa.d.ts.map +1 -0
- package/dist/plugins/implementations/sarsa.js +347 -0
- package/dist/plugins/implementations/sarsa.js.map +1 -0
- package/dist/plugins/implementations/sarsa.mjs +342 -0
- package/dist/plugins/index.d.ts +107 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +179 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/index.mjs +168 -0
- package/dist/plugins/interface.d.ts +439 -0
- package/dist/plugins/interface.d.ts.map +1 -0
- package/dist/plugins/interface.js +12 -0
- package/dist/plugins/interface.js.map +1 -0
- package/dist/plugins/interface.mjs +10 -0
- package/dist/plugins/learning-plugin.interface.d.ts +257 -0
- package/dist/plugins/learning-plugin.interface.d.ts.map +1 -0
- package/dist/plugins/learning-plugin.interface.js +7 -0
- package/dist/plugins/learning-plugin.interface.js.map +1 -0
- package/dist/plugins/learning-plugin.interface.mjs +5 -0
- package/dist/plugins/plugin-exports.d.ts +71 -0
- package/dist/plugins/plugin-exports.d.ts.map +1 -0
- package/dist/plugins/plugin-exports.js +78 -0
- package/dist/plugins/plugin-exports.js.map +1 -0
- package/dist/plugins/plugin-exports.mjs +69 -0
- package/dist/plugins/registry.d.ts +206 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +365 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/registry.mjs +356 -0
- package/dist/plugins/validator.d.ts +63 -0
- package/dist/plugins/validator.d.ts.map +1 -0
- package/dist/plugins/validator.js +464 -0
- package/dist/plugins/validator.js.map +1 -0
- package/dist/plugins/validator.mjs +458 -0
- package/dist/quantization/binary-quantization.d.ts +104 -0
- package/dist/quantization/binary-quantization.d.ts.map +1 -0
- package/dist/quantization/binary-quantization.js +246 -0
- package/dist/quantization/binary-quantization.js.map +1 -0
- package/dist/quantization/binary-quantization.mjs +240 -0
- package/dist/quantization/optimized-pq.d.ts +138 -0
- package/dist/quantization/optimized-pq.d.ts.map +1 -0
- package/dist/quantization/optimized-pq.js +320 -0
- package/dist/quantization/optimized-pq.js.map +1 -0
- package/dist/quantization/optimized-pq.mjs +313 -0
- package/dist/quantization/product-quantization.d.ts +109 -0
- package/dist/quantization/product-quantization.d.ts.map +1 -0
- package/dist/quantization/product-quantization.js +287 -0
- package/dist/quantization/product-quantization.js.map +1 -0
- package/dist/quantization/product-quantization.mjs +282 -0
- package/dist/quantization/scalar-quantization.d.ts +100 -0
- package/dist/quantization/scalar-quantization.d.ts.map +1 -0
- package/dist/quantization/scalar-quantization.js +324 -0
- package/dist/quantization/scalar-quantization.js.map +1 -0
- package/dist/quantization/scalar-quantization.mjs +319 -0
- package/dist/query/index.d.ts +6 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +9 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/index.mjs +4 -0
- package/dist/query/query-builder.d.ts +323 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/query-builder.js +524 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-builder.mjs +519 -0
- package/dist/reasoning/context-synthesizer.d.ts +57 -0
- package/dist/reasoning/context-synthesizer.d.ts.map +1 -0
- package/dist/reasoning/context-synthesizer.js +224 -0
- package/dist/reasoning/context-synthesizer.js.map +1 -0
- package/dist/reasoning/context-synthesizer.mjs +219 -0
- package/dist/reasoning/experience-curator.d.ts +66 -0
- package/dist/reasoning/experience-curator.d.ts.map +1 -0
- package/dist/reasoning/experience-curator.js +288 -0
- package/dist/reasoning/experience-curator.js.map +1 -0
- package/dist/reasoning/experience-curator.mjs +283 -0
- package/dist/reasoning/memory-optimizer.d.ts +69 -0
- package/dist/reasoning/memory-optimizer.d.ts.map +1 -0
- package/dist/reasoning/memory-optimizer.js +331 -0
- package/dist/reasoning/memory-optimizer.js.map +1 -0
- package/dist/reasoning/memory-optimizer.mjs +326 -0
- package/dist/reasoning/pattern-matcher.d.ts +59 -0
- package/dist/reasoning/pattern-matcher.d.ts.map +1 -0
- package/dist/reasoning/pattern-matcher.js +229 -0
- package/dist/reasoning/pattern-matcher.js.map +1 -0
- package/dist/reasoning/pattern-matcher.mjs +224 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts +118 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.d.ts.map +1 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.js +477 -0
- package/dist/reasoningbank/adapter/agentdb-adapter.js.map +1 -0
- package/dist/reasoningbank/adapter/types.d.ts +113 -0
- package/dist/reasoningbank/adapter/types.d.ts.map +1 -0
- package/dist/reasoningbank/adapter/types.js +9 -0
- package/dist/reasoningbank/adapter/types.js.map +1 -0
- package/dist/reasoningbank/cli/commands.d.ts +16 -0
- package/dist/reasoningbank/cli/commands.d.ts.map +1 -0
- package/dist/reasoningbank/cli/commands.js +272 -0
- package/dist/reasoningbank/cli/commands.js.map +1 -0
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts +319 -0
- package/dist/reasoningbank/mcp/agentdb-tools.d.ts.map +1 -0
- package/dist/reasoningbank/mcp/agentdb-tools.js +301 -0
- package/dist/reasoningbank/mcp/agentdb-tools.js.map +1 -0
- package/dist/reasoningbank/migration/migrate.d.ts +25 -0
- package/dist/reasoningbank/migration/migrate.d.ts.map +1 -0
- package/dist/reasoningbank/migration/migrate.js +178 -0
- package/dist/reasoningbank/migration/migrate.js.map +1 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts +37 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.js +114 -0
- package/dist/reasoningbank/reasoning/context-synthesizer.js.map +1 -0
- package/dist/reasoningbank/reasoning/experience-curator.d.ts +39 -0
- package/dist/reasoningbank/reasoning/experience-curator.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/experience-curator.js +98 -0
- package/dist/reasoningbank/reasoning/experience-curator.js.map +1 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts +44 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.js +184 -0
- package/dist/reasoningbank/reasoning/memory-optimizer.js.map +1 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts +40 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.d.ts.map +1 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.js +87 -0
- package/dist/reasoningbank/reasoning/pattern-matcher.js.map +1 -0
- package/dist/reasoningbank/sync/quic-sync.d.ts +77 -0
- package/dist/reasoningbank/sync/quic-sync.d.ts.map +1 -0
- package/dist/reasoningbank/sync/quic-sync.js +165 -0
- package/dist/reasoningbank/sync/quic-sync.js.map +1 -0
- package/dist/sync/conflict.d.ts +78 -0
- package/dist/sync/conflict.d.ts.map +1 -0
- package/dist/sync/conflict.js +202 -0
- package/dist/sync/conflict.js.map +1 -0
- package/dist/sync/conflict.mjs +196 -0
- package/dist/sync/coordinator.d.ts +111 -0
- package/dist/sync/coordinator.d.ts.map +1 -0
- package/dist/sync/coordinator.js +256 -0
- package/dist/sync/coordinator.js.map +1 -0
- package/dist/sync/coordinator.mjs +250 -0
- package/dist/sync/delta.d.ts +81 -0
- package/dist/sync/delta.d.ts.map +1 -0
- package/dist/sync/delta.js +245 -0
- package/dist/sync/delta.js.map +1 -0
- package/dist/sync/delta.mjs +238 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +22 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/index.mjs +9 -0
- package/dist/sync/quic-sync.d.ts +81 -0
- package/dist/sync/quic-sync.d.ts.map +1 -0
- package/dist/sync/quic-sync.js +329 -0
- package/dist/sync/quic-sync.js.map +1 -0
- package/dist/sync/quic-sync.mjs +323 -0
- package/dist/sync/types.d.ts +168 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +8 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/sync/types.mjs +6 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +4 -0
- package/dist/wasm-loader.d.ts +32 -0
- package/dist/wasm-loader.d.ts.map +1 -0
- package/dist/wasm-loader.js +75 -0
- package/dist/wasm-loader.js.map +1 -0
- package/dist/wasm-loader.mjs +64 -0
- package/examples/adaptive-learning.ts +284 -0
- package/examples/browser/README.md +732 -0
- package/examples/browser/adaptive-recommendations/index.html +427 -0
- package/examples/browser/collaborative-filtering/index.html +310 -0
- package/examples/browser/continual-learning/index.html +736 -0
- package/examples/browser/experience-replay/index.html +616 -0
- package/examples/browser/index.html +369 -0
- package/examples/browser/meta-learning/index.html +789 -0
- package/examples/browser/neuro-symbolic/index.html +692 -0
- package/examples/browser/pattern-learning/index.html +620 -0
- package/examples/browser/quantum-inspired/index.html +728 -0
- package/examples/browser/rag/index.html +624 -0
- package/examples/browser/swarm-intelligence/index.html +811 -0
- package/examples/browser-basic.html +170 -0
- package/examples/hnsw-example.ts +148 -0
- package/examples/node-basic.js +70 -0
- package/examples/quic-sync-example.ts +310 -0
- package/examples/quick-start.js +68 -0
- package/examples/wasm-example.ts +222 -0
- package/package.json +118 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native backend implementation using better-sqlite3
|
|
3
|
+
* High-performance backend for Node.js environments
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { Vector, SearchResult, SimilarityMetric, DatabaseConfig } from '../types';
|
|
7
|
+
import { VectorBackend } from './backend-interface';
|
|
8
|
+
import { HNSWConfig } from '../index/hnsw';
|
|
9
|
+
/**
|
|
10
|
+
* Extended database configuration with HNSW index support
|
|
11
|
+
*/
|
|
12
|
+
export interface NativeBackendConfig extends DatabaseConfig {
|
|
13
|
+
hnsw?: Partial<HNSWConfig>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Native backend using better-sqlite3
|
|
17
|
+
* Optimized for Node.js with native SQLite bindings
|
|
18
|
+
* Features HNSW index for high-performance approximate nearest neighbor search
|
|
19
|
+
*/
|
|
20
|
+
export declare class NativeBackend implements VectorBackend {
|
|
21
|
+
private db;
|
|
22
|
+
private insertStmt;
|
|
23
|
+
private initialized;
|
|
24
|
+
private hnswIndex;
|
|
25
|
+
private hnswConfig;
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the native backend
|
|
28
|
+
*/
|
|
29
|
+
initialize(config?: NativeBackendConfig): void;
|
|
30
|
+
/**
|
|
31
|
+
* Initialize database schema
|
|
32
|
+
*/
|
|
33
|
+
private initializeSchema;
|
|
34
|
+
/**
|
|
35
|
+
* Register custom SQL functions for similarity calculations
|
|
36
|
+
*/
|
|
37
|
+
private registerCustomFunctions;
|
|
38
|
+
/**
|
|
39
|
+
* Prepare frequently used statements
|
|
40
|
+
*/
|
|
41
|
+
private prepareStatements;
|
|
42
|
+
/**
|
|
43
|
+
* Calculate L2 norm of a vector
|
|
44
|
+
*/
|
|
45
|
+
private calculateNorm;
|
|
46
|
+
/**
|
|
47
|
+
* Serialize embedding to binary format
|
|
48
|
+
*/
|
|
49
|
+
private serializeEmbedding;
|
|
50
|
+
/**
|
|
51
|
+
* Deserialize embedding from binary format
|
|
52
|
+
*/
|
|
53
|
+
private deserializeEmbedding;
|
|
54
|
+
/**
|
|
55
|
+
* Generate unique ID
|
|
56
|
+
*/
|
|
57
|
+
private generateId;
|
|
58
|
+
/**
|
|
59
|
+
* Insert a single vector
|
|
60
|
+
*/
|
|
61
|
+
insert(vector: Vector): string;
|
|
62
|
+
/**
|
|
63
|
+
* Insert multiple vectors in a transaction with optimized batch processing
|
|
64
|
+
* Performance improvements:
|
|
65
|
+
* - Single transaction for all inserts
|
|
66
|
+
* - Reused prepared statement
|
|
67
|
+
* - No wrapper function overhead
|
|
68
|
+
* - Chunked processing for large batches
|
|
69
|
+
* - Automatic HNSW index building after batch insert
|
|
70
|
+
*/
|
|
71
|
+
insertBatch(vectors: Vector[]): string[];
|
|
72
|
+
/**
|
|
73
|
+
* Check if HNSW index should be used
|
|
74
|
+
*/
|
|
75
|
+
private shouldUseHNSW;
|
|
76
|
+
/**
|
|
77
|
+
* Search for k-nearest neighbors
|
|
78
|
+
* Automatically uses HNSW index when available and beneficial
|
|
79
|
+
*/
|
|
80
|
+
search(queryEmbedding: number[], k?: number, metric?: SimilarityMetric, threshold?: number): SearchResult[];
|
|
81
|
+
/**
|
|
82
|
+
* Search using HNSW index (fast approximate search)
|
|
83
|
+
*/
|
|
84
|
+
private searchWithHNSW;
|
|
85
|
+
/**
|
|
86
|
+
* Brute-force search (accurate but slower)
|
|
87
|
+
*/
|
|
88
|
+
private bruteForceSearch;
|
|
89
|
+
/**
|
|
90
|
+
* Get vector by ID
|
|
91
|
+
*/
|
|
92
|
+
get(id: string): Vector | null;
|
|
93
|
+
/**
|
|
94
|
+
* Delete vector by ID
|
|
95
|
+
*/
|
|
96
|
+
delete(id: string): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Get database statistics
|
|
99
|
+
*/
|
|
100
|
+
stats(): {
|
|
101
|
+
count: number;
|
|
102
|
+
size: number;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Close database connection
|
|
106
|
+
*/
|
|
107
|
+
close(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Get raw database instance (for advanced usage)
|
|
110
|
+
*/
|
|
111
|
+
getDatabase(): Database.Database | null;
|
|
112
|
+
/**
|
|
113
|
+
* Check if backend is initialized
|
|
114
|
+
*/
|
|
115
|
+
isInitialized(): boolean;
|
|
116
|
+
/**
|
|
117
|
+
* Build HNSW index manually
|
|
118
|
+
* Useful for pre-building index on existing data
|
|
119
|
+
*/
|
|
120
|
+
buildHNSWIndex(): void;
|
|
121
|
+
/**
|
|
122
|
+
* Get HNSW index statistics
|
|
123
|
+
*/
|
|
124
|
+
getHNSWStats(): {
|
|
125
|
+
enabled: boolean;
|
|
126
|
+
ready: boolean;
|
|
127
|
+
nodeCount: number;
|
|
128
|
+
edgeCount: number;
|
|
129
|
+
maxLevel: number;
|
|
130
|
+
avgDegree: number;
|
|
131
|
+
} | null;
|
|
132
|
+
/**
|
|
133
|
+
* Clear HNSW index
|
|
134
|
+
*/
|
|
135
|
+
clearHNSWIndex(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Update HNSW configuration and rebuild if needed
|
|
138
|
+
*/
|
|
139
|
+
updateHNSWConfig(config: Partial<HNSWConfig>, rebuild?: boolean): void;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=native-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-backend.d.ts","sourceRoot":"","sources":["../../src/core/native-backend.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAa,UAAU,EAAuB,MAAM,eAAe,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;CAC5B;AAED;;;;GAIG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,EAAE,CAAkC;IAC5C,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,UAAU,CAAmC;IAErD;;OAEG;IACH,UAAU,CAAC,MAAM,GAAE,mBAAwB,GAAG,IAAI;IA+BlD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA4C/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAK5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAmB9B;;;;;;;;OAQG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IAiDxC;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;;OAGG;IACH,MAAM,CACJ,cAAc,EAAE,MAAM,EAAE,EACxB,CAAC,GAAE,MAAU,EACb,MAAM,GAAE,gBAA2B,EACnC,SAAS,GAAE,MAAY,GACtB,YAAY,EAAE;IAajB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2ExB;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiB9B;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAa3B;;OAEG;IACH,KAAK,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;IAYxC;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,WAAW,IAAI,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIvC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;;OAGG;IACH,cAAc,IAAI,IAAI;IActB;;OAEG;IACH,YAAY,IAAI;QACd,OAAO,EAAE,OAAO,CAAC;QACjB,KAAK,EAAE,OAAO,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,IAAI;IAaR;;OAEG;IACH,cAAc,IAAI,IAAI;IAMtB;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,GAAE,OAAe,GAAG,IAAI;CAY9E"}
|
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Native backend implementation using better-sqlite3
|
|
4
|
+
* High-performance backend for Node.js environments
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.NativeBackend = void 0;
|
|
11
|
+
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
12
|
+
const hnsw_1 = require("../index/hnsw");
|
|
13
|
+
/**
|
|
14
|
+
* Native backend using better-sqlite3
|
|
15
|
+
* Optimized for Node.js with native SQLite bindings
|
|
16
|
+
* Features HNSW index for high-performance approximate nearest neighbor search
|
|
17
|
+
*/
|
|
18
|
+
class NativeBackend {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.db = null;
|
|
21
|
+
this.insertStmt = null;
|
|
22
|
+
this.initialized = false;
|
|
23
|
+
this.hnswIndex = null;
|
|
24
|
+
this.hnswConfig = hnsw_1.DEFAULT_HNSW_CONFIG;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the native backend
|
|
28
|
+
*/
|
|
29
|
+
initialize(config = {}) {
|
|
30
|
+
if (this.initialized) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const { path = ':memory:', memoryMode = true, cacheSize = 100 * 1024, // 100MB in KB
|
|
34
|
+
walMode = true, mmapSize = 256 * 1024 * 1024, // 256MB
|
|
35
|
+
hnsw = {} } = config;
|
|
36
|
+
// Create database instance
|
|
37
|
+
this.db = new better_sqlite3_1.default(memoryMode ? ':memory:' : path);
|
|
38
|
+
// Initialize schema and prepare statements
|
|
39
|
+
this.initializeSchema(cacheSize, walMode, mmapSize);
|
|
40
|
+
this.registerCustomFunctions();
|
|
41
|
+
this.prepareStatements();
|
|
42
|
+
// Initialize HNSW index
|
|
43
|
+
this.hnswConfig = { ...hnsw_1.DEFAULT_HNSW_CONFIG, ...hnsw };
|
|
44
|
+
if (this.hnswConfig.enabled) {
|
|
45
|
+
this.hnswIndex = new hnsw_1.HNSWIndex(this.db, this.hnswConfig);
|
|
46
|
+
}
|
|
47
|
+
this.initialized = true;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Initialize database schema
|
|
51
|
+
*/
|
|
52
|
+
initializeSchema(cacheSize, walMode, mmapSize) {
|
|
53
|
+
if (!this.db)
|
|
54
|
+
throw new Error('Database not initialized');
|
|
55
|
+
// Optimize SQLite for vector operations
|
|
56
|
+
this.db.pragma('journal_mode = ' + (walMode ? 'WAL' : 'MEMORY'));
|
|
57
|
+
this.db.pragma('synchronous = NORMAL');
|
|
58
|
+
this.db.pragma(`cache_size = -${cacheSize}`);
|
|
59
|
+
this.db.pragma('temp_store = MEMORY');
|
|
60
|
+
this.db.pragma(`mmap_size = ${mmapSize}`);
|
|
61
|
+
this.db.pragma('page_size = 4096');
|
|
62
|
+
// Create vectors table with optimized schema
|
|
63
|
+
this.db.exec(`
|
|
64
|
+
CREATE TABLE IF NOT EXISTS vectors (
|
|
65
|
+
id TEXT PRIMARY KEY,
|
|
66
|
+
embedding BLOB NOT NULL,
|
|
67
|
+
norm REAL NOT NULL,
|
|
68
|
+
metadata TEXT,
|
|
69
|
+
timestamp INTEGER NOT NULL
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_vectors_norm ON vectors(norm);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_vectors_timestamp ON vectors(timestamp);
|
|
74
|
+
`);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Register custom SQL functions for similarity calculations
|
|
78
|
+
*/
|
|
79
|
+
registerCustomFunctions() {
|
|
80
|
+
if (!this.db)
|
|
81
|
+
throw new Error('Database not initialized');
|
|
82
|
+
// Cosine similarity
|
|
83
|
+
this.db.function('cosine_similarity', { deterministic: true }, (a, b, normA, normB) => {
|
|
84
|
+
const arrA = new Float32Array(a.buffer, a.byteOffset, a.byteLength / 4);
|
|
85
|
+
const arrB = new Float32Array(b.buffer, b.byteOffset, b.byteLength / 4);
|
|
86
|
+
let dotProduct = 0;
|
|
87
|
+
for (let i = 0; i < arrA.length; i++) {
|
|
88
|
+
dotProduct += arrA[i] * arrB[i];
|
|
89
|
+
}
|
|
90
|
+
return dotProduct / (normA * normB);
|
|
91
|
+
});
|
|
92
|
+
// Euclidean distance
|
|
93
|
+
this.db.function('euclidean_distance', { deterministic: true }, (a, b) => {
|
|
94
|
+
const arrA = new Float32Array(a.buffer, a.byteOffset, a.byteLength / 4);
|
|
95
|
+
const arrB = new Float32Array(b.buffer, b.byteOffset, b.byteLength / 4);
|
|
96
|
+
let sum = 0;
|
|
97
|
+
for (let i = 0; i < arrA.length; i++) {
|
|
98
|
+
const diff = arrA[i] - arrB[i];
|
|
99
|
+
sum += diff * diff;
|
|
100
|
+
}
|
|
101
|
+
return Math.sqrt(sum);
|
|
102
|
+
});
|
|
103
|
+
// Dot product
|
|
104
|
+
this.db.function('dot_product', { deterministic: true }, (a, b) => {
|
|
105
|
+
const arrA = new Float32Array(a.buffer, a.byteOffset, a.byteLength / 4);
|
|
106
|
+
const arrB = new Float32Array(b.buffer, b.byteOffset, b.byteLength / 4);
|
|
107
|
+
let dotProduct = 0;
|
|
108
|
+
for (let i = 0; i < arrA.length; i++) {
|
|
109
|
+
dotProduct += arrA[i] * arrB[i];
|
|
110
|
+
}
|
|
111
|
+
return dotProduct;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Prepare frequently used statements
|
|
116
|
+
*/
|
|
117
|
+
prepareStatements() {
|
|
118
|
+
if (!this.db)
|
|
119
|
+
throw new Error('Database not initialized');
|
|
120
|
+
this.insertStmt = this.db.prepare(`
|
|
121
|
+
INSERT OR REPLACE INTO vectors (id, embedding, norm, metadata, timestamp)
|
|
122
|
+
VALUES (?, ?, ?, ?, ?)
|
|
123
|
+
`);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Calculate L2 norm of a vector
|
|
127
|
+
*/
|
|
128
|
+
calculateNorm(embedding) {
|
|
129
|
+
let sum = 0;
|
|
130
|
+
for (const val of embedding) {
|
|
131
|
+
sum += val * val;
|
|
132
|
+
}
|
|
133
|
+
return Math.sqrt(sum);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Serialize embedding to binary format
|
|
137
|
+
*/
|
|
138
|
+
serializeEmbedding(embedding) {
|
|
139
|
+
const buffer = Buffer.allocUnsafe(embedding.length * 4);
|
|
140
|
+
const view = new Float32Array(buffer.buffer, buffer.byteOffset, embedding.length);
|
|
141
|
+
view.set(embedding);
|
|
142
|
+
return buffer;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Deserialize embedding from binary format
|
|
146
|
+
*/
|
|
147
|
+
deserializeEmbedding(buffer) {
|
|
148
|
+
const view = new Float32Array(buffer.buffer, buffer.byteOffset, buffer.byteLength / 4);
|
|
149
|
+
return Array.from(view);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Generate unique ID
|
|
153
|
+
*/
|
|
154
|
+
generateId() {
|
|
155
|
+
return `vec_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Insert a single vector
|
|
159
|
+
*/
|
|
160
|
+
insert(vector) {
|
|
161
|
+
if (!this.db || !this.insertStmt)
|
|
162
|
+
throw new Error('Database not initialized');
|
|
163
|
+
const id = vector.id || this.generateId();
|
|
164
|
+
const norm = this.calculateNorm(vector.embedding);
|
|
165
|
+
const embedding = this.serializeEmbedding(vector.embedding);
|
|
166
|
+
const metadata = vector.metadata ? JSON.stringify(vector.metadata) : null;
|
|
167
|
+
const timestamp = vector.timestamp || Date.now();
|
|
168
|
+
this.insertStmt.run(id, embedding, norm, metadata, timestamp);
|
|
169
|
+
// Update HNSW index if enabled
|
|
170
|
+
if (this.hnswIndex && this.shouldUseHNSW()) {
|
|
171
|
+
this.hnswIndex.insert(id, vector.embedding);
|
|
172
|
+
}
|
|
173
|
+
return id;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Insert multiple vectors in a transaction with optimized batch processing
|
|
177
|
+
* Performance improvements:
|
|
178
|
+
* - Single transaction for all inserts
|
|
179
|
+
* - Reused prepared statement
|
|
180
|
+
* - No wrapper function overhead
|
|
181
|
+
* - Chunked processing for large batches
|
|
182
|
+
* - Automatic HNSW index building after batch insert
|
|
183
|
+
*/
|
|
184
|
+
insertBatch(vectors) {
|
|
185
|
+
if (!this.db || !this.insertStmt)
|
|
186
|
+
throw new Error('Database not initialized');
|
|
187
|
+
const ids = [];
|
|
188
|
+
const CHUNK_SIZE = 5000; // Process in chunks to avoid memory spikes
|
|
189
|
+
// Helper function to process a chunk of vectors
|
|
190
|
+
const processChunk = (chunk) => {
|
|
191
|
+
const chunkIds = [];
|
|
192
|
+
const transaction = this.db.transaction((vecs) => {
|
|
193
|
+
// Reuse the prepared statement for all inserts
|
|
194
|
+
for (const vector of vecs) {
|
|
195
|
+
const id = vector.id || this.generateId();
|
|
196
|
+
const norm = this.calculateNorm(vector.embedding);
|
|
197
|
+
const embedding = this.serializeEmbedding(vector.embedding);
|
|
198
|
+
const metadata = vector.metadata ? JSON.stringify(vector.metadata) : null;
|
|
199
|
+
const timestamp = vector.timestamp || Date.now();
|
|
200
|
+
this.insertStmt.run(id, embedding, norm, metadata, timestamp);
|
|
201
|
+
chunkIds.push(id);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
transaction(chunk);
|
|
205
|
+
return chunkIds;
|
|
206
|
+
};
|
|
207
|
+
// Process vectors in chunks
|
|
208
|
+
if (vectors.length <= CHUNK_SIZE) {
|
|
209
|
+
// Small batch - process directly
|
|
210
|
+
ids.push(...processChunk(vectors));
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
// Large batch - process in chunks to manage memory
|
|
214
|
+
for (let i = 0; i < vectors.length; i += CHUNK_SIZE) {
|
|
215
|
+
const chunk = vectors.slice(i, i + CHUNK_SIZE);
|
|
216
|
+
ids.push(...processChunk(chunk));
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Build HNSW index if threshold reached and not already built
|
|
220
|
+
if (this.hnswIndex && this.shouldUseHNSW() && !this.hnswIndex.isReady()) {
|
|
221
|
+
console.log('Building HNSW index after batch insert...');
|
|
222
|
+
this.hnswIndex.build();
|
|
223
|
+
}
|
|
224
|
+
return ids;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Check if HNSW index should be used
|
|
228
|
+
*/
|
|
229
|
+
shouldUseHNSW() {
|
|
230
|
+
if (!this.hnswIndex || !this.hnswConfig.enabled) {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
const stats = this.stats();
|
|
234
|
+
return stats.count >= this.hnswConfig.minVectorsForIndex;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Search for k-nearest neighbors
|
|
238
|
+
* Automatically uses HNSW index when available and beneficial
|
|
239
|
+
*/
|
|
240
|
+
search(queryEmbedding, k = 5, metric = 'cosine', threshold = 0.0) {
|
|
241
|
+
if (!this.db)
|
|
242
|
+
throw new Error('Database not initialized');
|
|
243
|
+
// Use HNSW index for euclidean distance if available
|
|
244
|
+
// Note: HNSW currently optimized for euclidean, can be extended for other metrics
|
|
245
|
+
if (this.hnswIndex && this.hnswIndex.isReady() && this.shouldUseHNSW() && metric === 'euclidean') {
|
|
246
|
+
return this.searchWithHNSW(queryEmbedding, k, threshold);
|
|
247
|
+
}
|
|
248
|
+
// Fall back to brute-force search
|
|
249
|
+
return this.bruteForceSearch(queryEmbedding, k, metric, threshold);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Search using HNSW index (fast approximate search)
|
|
253
|
+
*/
|
|
254
|
+
searchWithHNSW(queryEmbedding, k, threshold) {
|
|
255
|
+
if (!this.hnswIndex || !this.db) {
|
|
256
|
+
throw new Error('HNSW index not initialized');
|
|
257
|
+
}
|
|
258
|
+
const results = this.hnswIndex.search(queryEmbedding, k);
|
|
259
|
+
// Filter by threshold and get metadata from main table
|
|
260
|
+
return results
|
|
261
|
+
.filter(r => threshold === 0 || r.distance <= threshold)
|
|
262
|
+
.map(result => {
|
|
263
|
+
const stmt = this.db.prepare('SELECT metadata FROM vectors WHERE id = ?');
|
|
264
|
+
const row = stmt.get(result.vectorId);
|
|
265
|
+
return {
|
|
266
|
+
id: result.vectorId,
|
|
267
|
+
score: result.distance,
|
|
268
|
+
embedding: result.embedding,
|
|
269
|
+
metadata: row?.metadata ? JSON.parse(row.metadata) : undefined
|
|
270
|
+
};
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Brute-force search (accurate but slower)
|
|
275
|
+
*/
|
|
276
|
+
bruteForceSearch(queryEmbedding, k, metric, threshold) {
|
|
277
|
+
if (!this.db)
|
|
278
|
+
throw new Error('Database not initialized');
|
|
279
|
+
const queryBuffer = this.serializeEmbedding(queryEmbedding);
|
|
280
|
+
const queryNorm = this.calculateNorm(queryEmbedding);
|
|
281
|
+
let sql;
|
|
282
|
+
let params;
|
|
283
|
+
switch (metric) {
|
|
284
|
+
case 'cosine':
|
|
285
|
+
sql = `
|
|
286
|
+
SELECT
|
|
287
|
+
id,
|
|
288
|
+
embedding,
|
|
289
|
+
metadata,
|
|
290
|
+
cosine_similarity(embedding, ?, norm, ?) as score
|
|
291
|
+
FROM vectors
|
|
292
|
+
WHERE cosine_similarity(embedding, ?, norm, ?) >= ?
|
|
293
|
+
ORDER BY score DESC
|
|
294
|
+
LIMIT ?
|
|
295
|
+
`;
|
|
296
|
+
params = [queryBuffer, queryNorm, queryBuffer, queryNorm, threshold, k];
|
|
297
|
+
break;
|
|
298
|
+
case 'euclidean':
|
|
299
|
+
sql = `
|
|
300
|
+
SELECT
|
|
301
|
+
id,
|
|
302
|
+
embedding,
|
|
303
|
+
metadata,
|
|
304
|
+
euclidean_distance(embedding, ?) as score
|
|
305
|
+
FROM vectors
|
|
306
|
+
WHERE euclidean_distance(embedding, ?) <= ? OR ? = 0
|
|
307
|
+
ORDER BY score ASC
|
|
308
|
+
LIMIT ?
|
|
309
|
+
`;
|
|
310
|
+
params = [queryBuffer, queryBuffer, threshold, threshold, k];
|
|
311
|
+
break;
|
|
312
|
+
case 'dot':
|
|
313
|
+
sql = `
|
|
314
|
+
SELECT
|
|
315
|
+
id,
|
|
316
|
+
embedding,
|
|
317
|
+
metadata,
|
|
318
|
+
dot_product(embedding, ?) as score
|
|
319
|
+
FROM vectors
|
|
320
|
+
WHERE dot_product(embedding, ?) >= ?
|
|
321
|
+
ORDER BY score DESC
|
|
322
|
+
LIMIT ?
|
|
323
|
+
`;
|
|
324
|
+
params = [queryBuffer, queryBuffer, threshold, k];
|
|
325
|
+
break;
|
|
326
|
+
default:
|
|
327
|
+
throw new Error(`Unsupported similarity metric: ${metric}`);
|
|
328
|
+
}
|
|
329
|
+
const stmt = this.db.prepare(sql);
|
|
330
|
+
const rows = stmt.all(...params);
|
|
331
|
+
return rows.map(row => ({
|
|
332
|
+
id: row.id,
|
|
333
|
+
score: row.score,
|
|
334
|
+
embedding: this.deserializeEmbedding(row.embedding),
|
|
335
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined
|
|
336
|
+
}));
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Get vector by ID
|
|
340
|
+
*/
|
|
341
|
+
get(id) {
|
|
342
|
+
if (!this.db)
|
|
343
|
+
throw new Error('Database not initialized');
|
|
344
|
+
const stmt = this.db.prepare('SELECT * FROM vectors WHERE id = ?');
|
|
345
|
+
const row = stmt.get(id);
|
|
346
|
+
if (!row)
|
|
347
|
+
return null;
|
|
348
|
+
return {
|
|
349
|
+
id: row.id,
|
|
350
|
+
embedding: this.deserializeEmbedding(row.embedding),
|
|
351
|
+
metadata: row.metadata ? JSON.parse(row.metadata) : undefined,
|
|
352
|
+
norm: row.norm,
|
|
353
|
+
timestamp: row.timestamp
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Delete vector by ID
|
|
358
|
+
*/
|
|
359
|
+
delete(id) {
|
|
360
|
+
if (!this.db)
|
|
361
|
+
throw new Error('Database not initialized');
|
|
362
|
+
// Delete from HNSW index if enabled
|
|
363
|
+
if (this.hnswIndex && this.shouldUseHNSW()) {
|
|
364
|
+
this.hnswIndex.delete(id);
|
|
365
|
+
}
|
|
366
|
+
const stmt = this.db.prepare('DELETE FROM vectors WHERE id = ?');
|
|
367
|
+
const result = stmt.run(id);
|
|
368
|
+
return result.changes > 0;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Get database statistics
|
|
372
|
+
*/
|
|
373
|
+
stats() {
|
|
374
|
+
if (!this.db)
|
|
375
|
+
throw new Error('Database not initialized');
|
|
376
|
+
const countStmt = this.db.prepare('SELECT COUNT(*) as count FROM vectors');
|
|
377
|
+
const sizeStmt = this.db.prepare('SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size()');
|
|
378
|
+
const count = countStmt.get().count;
|
|
379
|
+
const size = sizeStmt.get().size;
|
|
380
|
+
return { count, size };
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Close database connection
|
|
384
|
+
*/
|
|
385
|
+
close() {
|
|
386
|
+
if (this.db) {
|
|
387
|
+
this.db.close();
|
|
388
|
+
this.db = null;
|
|
389
|
+
}
|
|
390
|
+
this.insertStmt = null;
|
|
391
|
+
this.initialized = false;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Get raw database instance (for advanced usage)
|
|
395
|
+
*/
|
|
396
|
+
getDatabase() {
|
|
397
|
+
return this.db;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Check if backend is initialized
|
|
401
|
+
*/
|
|
402
|
+
isInitialized() {
|
|
403
|
+
return this.initialized;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Build HNSW index manually
|
|
407
|
+
* Useful for pre-building index on existing data
|
|
408
|
+
*/
|
|
409
|
+
buildHNSWIndex() {
|
|
410
|
+
if (!this.hnswIndex) {
|
|
411
|
+
throw new Error('HNSW index not enabled');
|
|
412
|
+
}
|
|
413
|
+
if (!this.shouldUseHNSW()) {
|
|
414
|
+
const stats = this.stats();
|
|
415
|
+
console.warn(`Vector count (${stats.count}) below threshold (${this.hnswConfig.minVectorsForIndex}). Index build skipped.`);
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
this.hnswIndex.build();
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Get HNSW index statistics
|
|
422
|
+
*/
|
|
423
|
+
getHNSWStats() {
|
|
424
|
+
if (!this.hnswIndex) {
|
|
425
|
+
return null;
|
|
426
|
+
}
|
|
427
|
+
const stats = this.hnswIndex.getStats();
|
|
428
|
+
return {
|
|
429
|
+
enabled: this.hnswConfig.enabled,
|
|
430
|
+
ready: this.hnswIndex.isReady(),
|
|
431
|
+
...stats
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Clear HNSW index
|
|
436
|
+
*/
|
|
437
|
+
clearHNSWIndex() {
|
|
438
|
+
if (this.hnswIndex) {
|
|
439
|
+
this.hnswIndex.clear();
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Update HNSW configuration and rebuild if needed
|
|
444
|
+
*/
|
|
445
|
+
updateHNSWConfig(config, rebuild = false) {
|
|
446
|
+
if (!this.hnswIndex) {
|
|
447
|
+
throw new Error('HNSW index not enabled');
|
|
448
|
+
}
|
|
449
|
+
this.hnswIndex.updateConfig(config);
|
|
450
|
+
this.hnswConfig = { ...this.hnswConfig, ...config };
|
|
451
|
+
if (rebuild) {
|
|
452
|
+
this.hnswIndex.build();
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
exports.NativeBackend = NativeBackend;
|
|
457
|
+
//# sourceMappingURL=native-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-backend.js","sourceRoot":"","sources":["../../src/core/native-backend.ts"],"names":[],"mappings":"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"}
|