agentdb 2.0.0-alpha.2 → 2.0.0-alpha.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/dist/agentdb.min.js +4 -4
  2. package/dist/simulation/cli.js +0 -0
  3. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  4. package/dist/src/cli/agentdb-cli.js +78 -0
  5. package/dist/src/cli/agentdb-cli.js.map +1 -1
  6. package/package.json +3 -3
  7. package/src/cli/agentdb-cli.ts +78 -0
  8. package/dist/agentdb-advanced.js +0 -2110
  9. package/dist/agentdb-advanced.min.js +0 -1
  10. package/dist/backends/GraphBackend.d.ts +0 -196
  11. package/dist/backends/GraphBackend.d.ts.map +0 -1
  12. package/dist/backends/GraphBackend.js +0 -33
  13. package/dist/backends/GraphBackend.js.map +0 -1
  14. package/dist/backends/LearningBackend.d.ts +0 -148
  15. package/dist/backends/LearningBackend.d.ts.map +0 -1
  16. package/dist/backends/LearningBackend.js +0 -27
  17. package/dist/backends/LearningBackend.js.map +0 -1
  18. package/dist/backends/VectorBackend.d.ts +0 -119
  19. package/dist/backends/VectorBackend.d.ts.map +0 -1
  20. package/dist/backends/VectorBackend.js +0 -14
  21. package/dist/backends/VectorBackend.js.map +0 -1
  22. package/dist/backends/detector.d.ts +0 -81
  23. package/dist/backends/detector.d.ts.map +0 -1
  24. package/dist/backends/detector.js +0 -192
  25. package/dist/backends/detector.js.map +0 -1
  26. package/dist/backends/factory.d.ts +0 -50
  27. package/dist/backends/factory.d.ts.map +0 -1
  28. package/dist/backends/factory.js +0 -161
  29. package/dist/backends/factory.js.map +0 -1
  30. package/dist/backends/graph/GraphDatabaseAdapter.d.ts +0 -139
  31. package/dist/backends/graph/GraphDatabaseAdapter.d.ts.map +0 -1
  32. package/dist/backends/graph/GraphDatabaseAdapter.js +0 -194
  33. package/dist/backends/graph/GraphDatabaseAdapter.js.map +0 -1
  34. package/dist/backends/hnswlib/HNSWLibBackend.d.ts +0 -92
  35. package/dist/backends/hnswlib/HNSWLibBackend.d.ts.map +0 -1
  36. package/dist/backends/hnswlib/HNSWLibBackend.js +0 -316
  37. package/dist/backends/hnswlib/HNSWLibBackend.js.map +0 -1
  38. package/dist/backends/hnswlib/index.d.ts +0 -7
  39. package/dist/backends/hnswlib/index.d.ts.map +0 -1
  40. package/dist/backends/hnswlib/index.js +0 -7
  41. package/dist/backends/hnswlib/index.js.map +0 -1
  42. package/dist/backends/index.d.ts +0 -14
  43. package/dist/backends/index.d.ts.map +0 -1
  44. package/dist/backends/index.js +0 -13
  45. package/dist/backends/index.js.map +0 -1
  46. package/dist/backends/ruvector/RuVectorBackend.d.ts +0 -75
  47. package/dist/backends/ruvector/RuVectorBackend.d.ts.map +0 -1
  48. package/dist/backends/ruvector/RuVectorBackend.js +0 -198
  49. package/dist/backends/ruvector/RuVectorBackend.js.map +0 -1
  50. package/dist/backends/ruvector/RuVectorLearning.d.ts +0 -104
  51. package/dist/backends/ruvector/RuVectorLearning.d.ts.map +0 -1
  52. package/dist/backends/ruvector/RuVectorLearning.js +0 -177
  53. package/dist/backends/ruvector/RuVectorLearning.js.map +0 -1
  54. package/dist/backends/ruvector/index.d.ts +0 -9
  55. package/dist/backends/ruvector/index.d.ts.map +0 -1
  56. package/dist/backends/ruvector/index.js +0 -8
  57. package/dist/backends/ruvector/index.js.map +0 -1
  58. package/dist/benchmarks/wasm-vector-benchmark.d.ts +0 -10
  59. package/dist/benchmarks/wasm-vector-benchmark.d.ts.map +0 -1
  60. package/dist/benchmarks/wasm-vector-benchmark.js +0 -196
  61. package/dist/benchmarks/wasm-vector-benchmark.js.map +0 -1
  62. package/dist/browser/AdvancedFeatures.d.ts +0 -144
  63. package/dist/browser/AdvancedFeatures.d.ts.map +0 -1
  64. package/dist/browser/AdvancedFeatures.js +0 -430
  65. package/dist/browser/AdvancedFeatures.js.map +0 -1
  66. package/dist/browser/HNSWIndex.d.ts +0 -117
  67. package/dist/browser/HNSWIndex.d.ts.map +0 -1
  68. package/dist/browser/HNSWIndex.js +0 -402
  69. package/dist/browser/HNSWIndex.js.map +0 -1
  70. package/dist/browser/ProductQuantization.d.ts +0 -107
  71. package/dist/browser/ProductQuantization.d.ts.map +0 -1
  72. package/dist/browser/ProductQuantization.js +0 -337
  73. package/dist/browser/ProductQuantization.js.map +0 -1
  74. package/dist/browser/browser/AdvancedFeatures.d.ts +0 -144
  75. package/dist/browser/browser/AdvancedFeatures.d.ts.map +0 -1
  76. package/dist/browser/browser/AdvancedFeatures.js +0 -427
  77. package/dist/browser/browser/HNSWIndex.d.ts +0 -117
  78. package/dist/browser/browser/HNSWIndex.d.ts.map +0 -1
  79. package/dist/browser/browser/HNSWIndex.js +0 -402
  80. package/dist/browser/browser/ProductQuantization.d.ts +0 -107
  81. package/dist/browser/browser/ProductQuantization.d.ts.map +0 -1
  82. package/dist/browser/browser/ProductQuantization.js +0 -348
  83. package/dist/browser/browser/index.d.ts +0 -223
  84. package/dist/browser/browser/index.d.ts.map +0 -1
  85. package/dist/browser/browser/index.js +0 -233
  86. package/dist/browser/index.d.ts +0 -223
  87. package/dist/browser/index.d.ts.map +0 -1
  88. package/dist/browser/index.js +0 -225
  89. package/dist/browser/index.js.map +0 -1
  90. package/dist/cli/agentdb-cli.d.ts +0 -154
  91. package/dist/cli/agentdb-cli.d.ts.map +0 -1
  92. package/dist/cli/agentdb-cli.js +0 -2273
  93. package/dist/cli/agentdb-cli.js.map +0 -1
  94. package/dist/cli/agentdb.db +0 -0
  95. package/dist/cli/commands/init.d.ts +0 -12
  96. package/dist/cli/commands/init.d.ts.map +0 -1
  97. package/dist/cli/commands/init.js +0 -115
  98. package/dist/cli/commands/init.js.map +0 -1
  99. package/dist/cli/commands/install-embeddings.d.ts +0 -10
  100. package/dist/cli/commands/install-embeddings.d.ts.map +0 -1
  101. package/dist/cli/commands/install-embeddings.js +0 -68
  102. package/dist/cli/commands/install-embeddings.js.map +0 -1
  103. package/dist/cli/commands/migrate.d.ts +0 -15
  104. package/dist/cli/commands/migrate.d.ts.map +0 -1
  105. package/dist/cli/commands/migrate.js +0 -425
  106. package/dist/cli/commands/migrate.js.map +0 -1
  107. package/dist/cli/commands/status.d.ts +0 -10
  108. package/dist/cli/commands/status.d.ts.map +0 -1
  109. package/dist/cli/commands/status.js +0 -129
  110. package/dist/cli/commands/status.js.map +0 -1
  111. package/dist/controllers/CausalMemoryGraph.d.ts +0 -126
  112. package/dist/controllers/CausalMemoryGraph.d.ts.map +0 -1
  113. package/dist/controllers/CausalMemoryGraph.js +0 -323
  114. package/dist/controllers/CausalMemoryGraph.js.map +0 -1
  115. package/dist/controllers/CausalRecall.d.ts +0 -139
  116. package/dist/controllers/CausalRecall.d.ts.map +0 -1
  117. package/dist/controllers/CausalRecall.js +0 -356
  118. package/dist/controllers/CausalRecall.js.map +0 -1
  119. package/dist/controllers/ContextSynthesizer.d.ts +0 -65
  120. package/dist/controllers/ContextSynthesizer.d.ts.map +0 -1
  121. package/dist/controllers/ContextSynthesizer.js +0 -208
  122. package/dist/controllers/ContextSynthesizer.js.map +0 -1
  123. package/dist/controllers/EmbeddingService.d.ts +0 -37
  124. package/dist/controllers/EmbeddingService.d.ts.map +0 -1
  125. package/dist/controllers/EmbeddingService.js +0 -136
  126. package/dist/controllers/EmbeddingService.js.map +0 -1
  127. package/dist/controllers/EnhancedEmbeddingService.d.ts +0 -50
  128. package/dist/controllers/EnhancedEmbeddingService.d.ts.map +0 -1
  129. package/dist/controllers/EnhancedEmbeddingService.js +0 -119
  130. package/dist/controllers/EnhancedEmbeddingService.js.map +0 -1
  131. package/dist/controllers/ExplainableRecall.d.ts +0 -163
  132. package/dist/controllers/ExplainableRecall.d.ts.map +0 -1
  133. package/dist/controllers/ExplainableRecall.js +0 -485
  134. package/dist/controllers/ExplainableRecall.js.map +0 -1
  135. package/dist/controllers/HNSWIndex.d.ts +0 -128
  136. package/dist/controllers/HNSWIndex.d.ts.map +0 -1
  137. package/dist/controllers/HNSWIndex.js +0 -361
  138. package/dist/controllers/HNSWIndex.js.map +0 -1
  139. package/dist/controllers/LearningSystem.d.ts +0 -195
  140. package/dist/controllers/LearningSystem.d.ts.map +0 -1
  141. package/dist/controllers/LearningSystem.js +0 -929
  142. package/dist/controllers/LearningSystem.js.map +0 -1
  143. package/dist/controllers/MMRDiversityRanker.d.ts +0 -50
  144. package/dist/controllers/MMRDiversityRanker.d.ts.map +0 -1
  145. package/dist/controllers/MMRDiversityRanker.js +0 -130
  146. package/dist/controllers/MMRDiversityRanker.js.map +0 -1
  147. package/dist/controllers/MetadataFilter.d.ts +0 -70
  148. package/dist/controllers/MetadataFilter.d.ts.map +0 -1
  149. package/dist/controllers/MetadataFilter.js +0 -243
  150. package/dist/controllers/MetadataFilter.js.map +0 -1
  151. package/dist/controllers/NightlyLearner.d.ts +0 -114
  152. package/dist/controllers/NightlyLearner.d.ts.map +0 -1
  153. package/dist/controllers/NightlyLearner.js +0 -394
  154. package/dist/controllers/NightlyLearner.js.map +0 -1
  155. package/dist/controllers/QUICClient.d.ts +0 -109
  156. package/dist/controllers/QUICClient.d.ts.map +0 -1
  157. package/dist/controllers/QUICClient.js +0 -299
  158. package/dist/controllers/QUICClient.js.map +0 -1
  159. package/dist/controllers/QUICServer.d.ts +0 -121
  160. package/dist/controllers/QUICServer.d.ts.map +0 -1
  161. package/dist/controllers/QUICServer.js +0 -383
  162. package/dist/controllers/QUICServer.js.map +0 -1
  163. package/dist/controllers/ReasoningBank.d.ts +0 -196
  164. package/dist/controllers/ReasoningBank.d.ts.map +0 -1
  165. package/dist/controllers/ReasoningBank.js +0 -494
  166. package/dist/controllers/ReasoningBank.js.map +0 -1
  167. package/dist/controllers/ReflexionMemory.d.ts +0 -125
  168. package/dist/controllers/ReflexionMemory.d.ts.map +0 -1
  169. package/dist/controllers/ReflexionMemory.js +0 -521
  170. package/dist/controllers/ReflexionMemory.js.map +0 -1
  171. package/dist/controllers/SkillLibrary.d.ts +0 -149
  172. package/dist/controllers/SkillLibrary.d.ts.map +0 -1
  173. package/dist/controllers/SkillLibrary.js +0 -547
  174. package/dist/controllers/SkillLibrary.js.map +0 -1
  175. package/dist/controllers/SyncCoordinator.d.ts +0 -120
  176. package/dist/controllers/SyncCoordinator.d.ts.map +0 -1
  177. package/dist/controllers/SyncCoordinator.js +0 -441
  178. package/dist/controllers/SyncCoordinator.js.map +0 -1
  179. package/dist/controllers/WASMVectorSearch.d.ts +0 -89
  180. package/dist/controllers/WASMVectorSearch.d.ts.map +0 -1
  181. package/dist/controllers/WASMVectorSearch.js +0 -234
  182. package/dist/controllers/WASMVectorSearch.js.map +0 -1
  183. package/dist/controllers/frontier-index.d.ts +0 -14
  184. package/dist/controllers/frontier-index.d.ts.map +0 -1
  185. package/dist/controllers/frontier-index.js +0 -10
  186. package/dist/controllers/frontier-index.js.map +0 -1
  187. package/dist/controllers/index.d.ts +0 -30
  188. package/dist/controllers/index.d.ts.map +0 -1
  189. package/dist/controllers/index.js +0 -18
  190. package/dist/controllers/index.js.map +0 -1
  191. package/dist/db-fallback.d.ts +0 -26
  192. package/dist/db-fallback.d.ts.map +0 -1
  193. package/dist/db-fallback.js +0 -264
  194. package/dist/db-fallback.js.map +0 -1
  195. package/dist/db-test.d.ts +0 -13
  196. package/dist/db-test.d.ts.map +0 -1
  197. package/dist/db-test.js +0 -55
  198. package/dist/db-test.js.map +0 -1
  199. package/dist/db-unified.d.ts +0 -76
  200. package/dist/db-unified.d.ts.map +0 -1
  201. package/dist/db-unified.js +0 -278
  202. package/dist/db-unified.js.map +0 -1
  203. package/dist/examples/quic-sync-example.d.ts +0 -9
  204. package/dist/examples/quic-sync-example.d.ts.map +0 -1
  205. package/dist/examples/quic-sync-example.js +0 -169
  206. package/dist/examples/quic-sync-example.js.map +0 -1
  207. package/dist/examples/wasm-vector-usage.d.ts +0 -12
  208. package/dist/examples/wasm-vector-usage.d.ts.map +0 -1
  209. package/dist/examples/wasm-vector-usage.js +0 -190
  210. package/dist/examples/wasm-vector-usage.js.map +0 -1
  211. package/dist/index.d.ts +0 -28
  212. package/dist/index.d.ts.map +0 -1
  213. package/dist/index.js +0 -35
  214. package/dist/index.js.map +0 -1
  215. package/dist/malp/core/ccc.d.ts +0 -99
  216. package/dist/malp/core/ccc.d.ts.map +0 -1
  217. package/dist/malp/core/ccc.js +0 -181
  218. package/dist/malp/core/ccc.js.map +0 -1
  219. package/dist/malp/core/index.d.ts +0 -9
  220. package/dist/malp/core/index.d.ts.map +0 -1
  221. package/dist/malp/core/index.js +0 -9
  222. package/dist/malp/core/index.js.map +0 -1
  223. package/dist/malp/core/linalg.d.ts +0 -101
  224. package/dist/malp/core/linalg.d.ts.map +0 -1
  225. package/dist/malp/core/linalg.js +0 -278
  226. package/dist/malp/core/linalg.js.map +0 -1
  227. package/dist/malp/core/optimizer.d.ts +0 -68
  228. package/dist/malp/core/optimizer.d.ts.map +0 -1
  229. package/dist/malp/core/optimizer.js +0 -160
  230. package/dist/malp/core/optimizer.js.map +0 -1
  231. package/dist/malp/index.d.ts +0 -33
  232. package/dist/malp/index.d.ts.map +0 -1
  233. package/dist/malp/index.js +0 -37
  234. package/dist/malp/index.js.map +0 -1
  235. package/dist/malp/metrics/agreement.d.ts +0 -106
  236. package/dist/malp/metrics/agreement.d.ts.map +0 -1
  237. package/dist/malp/metrics/agreement.js +0 -199
  238. package/dist/malp/metrics/agreement.js.map +0 -1
  239. package/dist/malp/metrics/comparison.d.ts +0 -93
  240. package/dist/malp/metrics/comparison.d.ts.map +0 -1
  241. package/dist/malp/metrics/comparison.js +0 -256
  242. package/dist/malp/metrics/comparison.js.map +0 -1
  243. package/dist/malp/metrics/index.d.ts +0 -8
  244. package/dist/malp/metrics/index.d.ts.map +0 -1
  245. package/dist/malp/metrics/index.js +0 -8
  246. package/dist/malp/metrics/index.js.map +0 -1
  247. package/dist/malp/metrics/performance.d.ts +0 -61
  248. package/dist/malp/metrics/performance.d.ts.map +0 -1
  249. package/dist/malp/metrics/performance.js +0 -190
  250. package/dist/malp/metrics/performance.js.map +0 -1
  251. package/dist/malp/models/index.d.ts +0 -7
  252. package/dist/malp/models/index.d.ts.map +0 -1
  253. package/dist/malp/models/index.js +0 -7
  254. package/dist/malp/models/index.js.map +0 -1
  255. package/dist/malp/models/malp.d.ts +0 -116
  256. package/dist/malp/models/malp.d.ts.map +0 -1
  257. package/dist/malp/models/malp.js +0 -206
  258. package/dist/malp/models/malp.js.map +0 -1
  259. package/dist/malp/models/regressor.d.ts +0 -80
  260. package/dist/malp/models/regressor.d.ts.map +0 -1
  261. package/dist/malp/models/regressor.js +0 -229
  262. package/dist/malp/models/regressor.js.map +0 -1
  263. package/dist/malp/reasoningbank_validator.d.ts +0 -187
  264. package/dist/malp/reasoningbank_validator.d.ts.map +0 -1
  265. package/dist/malp/reasoningbank_validator.js +0 -246
  266. package/dist/malp/reasoningbank_validator.js.map +0 -1
  267. package/dist/malp/wasm_bindings.d.ts +0 -344
  268. package/dist/malp/wasm_bindings.d.ts.map +0 -1
  269. package/dist/malp/wasm_bindings.js +0 -9
  270. package/dist/malp/wasm_bindings.js.map +0 -1
  271. package/dist/mcp/agentdb-mcp-server.d.ts +0 -8
  272. package/dist/mcp/agentdb-mcp-server.d.ts.map +0 -1
  273. package/dist/mcp/agentdb-mcp-server.js +0 -2116
  274. package/dist/mcp/agentdb-mcp-server.js.map +0 -1
  275. package/dist/mcp/learning-tools-handlers.d.ts +0 -16
  276. package/dist/mcp/learning-tools-handlers.d.ts.map +0 -1
  277. package/dist/mcp/learning-tools-handlers.js +0 -105
  278. package/dist/mcp/learning-tools-handlers.js.map +0 -1
  279. package/dist/optimizations/BatchOperations.d.ts +0 -109
  280. package/dist/optimizations/BatchOperations.d.ts.map +0 -1
  281. package/dist/optimizations/BatchOperations.js +0 -407
  282. package/dist/optimizations/BatchOperations.js.map +0 -1
  283. package/dist/optimizations/QueryOptimizer.d.ts +0 -83
  284. package/dist/optimizations/QueryOptimizer.d.ts.map +0 -1
  285. package/dist/optimizations/QueryOptimizer.js +0 -228
  286. package/dist/optimizations/QueryOptimizer.js.map +0 -1
  287. package/dist/optimizations/ToolCache.d.ts +0 -137
  288. package/dist/optimizations/ToolCache.d.ts.map +0 -1
  289. package/dist/optimizations/ToolCache.js +0 -281
  290. package/dist/optimizations/ToolCache.js.map +0 -1
  291. package/dist/optimizations/index.d.ts +0 -10
  292. package/dist/optimizations/index.d.ts.map +0 -1
  293. package/dist/optimizations/index.js +0 -8
  294. package/dist/optimizations/index.js.map +0 -1
  295. package/dist/security/input-validation.d.ts +0 -109
  296. package/dist/security/input-validation.d.ts.map +0 -1
  297. package/dist/security/input-validation.js +0 -398
  298. package/dist/security/input-validation.js.map +0 -1
  299. package/dist/security/limits.d.ts +0 -150
  300. package/dist/security/limits.d.ts.map +0 -1
  301. package/dist/security/limits.js +0 -288
  302. package/dist/security/limits.js.map +0 -1
  303. package/dist/security/path-security.d.ts +0 -100
  304. package/dist/security/path-security.d.ts.map +0 -1
  305. package/dist/security/path-security.js +0 -337
  306. package/dist/security/path-security.js.map +0 -1
  307. package/dist/security/validation.d.ts +0 -95
  308. package/dist/security/validation.d.ts.map +0 -1
  309. package/dist/security/validation.js +0 -315
  310. package/dist/security/validation.js.map +0 -1
  311. package/dist/types/quic.d.ts +0 -518
  312. package/dist/types/quic.d.ts.map +0 -1
  313. package/dist/types/quic.js +0 -272
  314. package/dist/types/quic.js.map +0 -1
@@ -1,402 +0,0 @@
1
- /**
2
- * HNSW (Hierarchical Navigable Small World) Index for Browser
3
- *
4
- * JavaScript implementation of HNSW algorithm for fast approximate nearest neighbor search.
5
- * Achieves O(log n) search complexity vs O(n) for linear scan.
6
- *
7
- * Features:
8
- * - Multi-layer graph structure
9
- * - Probabilistic layer assignment
10
- * - Greedy search algorithm
11
- * - Dynamic insertion
12
- * - Configurable M (connections per node)
13
- * - Configurable efConstruction and efSearch
14
- *
15
- * Performance:
16
- * - 10-20x faster than linear scan (vs 150x for native HNSW)
17
- * - Memory: ~16 bytes per edge + vector storage
18
- * - Suitable for datasets up to 100K vectors in browser
19
- */
20
- class MinHeap {
21
- constructor() {
22
- this.items = [];
23
- }
24
- push(item, priority) {
25
- this.items.push({ item, priority });
26
- this.bubbleUp(this.items.length - 1);
27
- }
28
- pop() {
29
- if (this.items.length === 0)
30
- return undefined;
31
- const result = this.items[0].item;
32
- const last = this.items.pop();
33
- if (this.items.length > 0) {
34
- this.items[0] = last;
35
- this.bubbleDown(0);
36
- }
37
- return result;
38
- }
39
- peek() {
40
- var _a;
41
- return (_a = this.items[0]) === null || _a === void 0 ? void 0 : _a.item;
42
- }
43
- size() {
44
- return this.items.length;
45
- }
46
- bubbleUp(index) {
47
- while (index > 0) {
48
- const parentIndex = Math.floor((index - 1) / 2);
49
- if (this.items[index].priority >= this.items[parentIndex].priority)
50
- break;
51
- [this.items[index], this.items[parentIndex]] = [this.items[parentIndex], this.items[index]];
52
- index = parentIndex;
53
- }
54
- }
55
- bubbleDown(index) {
56
- while (true) {
57
- const leftChild = 2 * index + 1;
58
- const rightChild = 2 * index + 2;
59
- let smallest = index;
60
- if (leftChild < this.items.length && this.items[leftChild].priority < this.items[smallest].priority) {
61
- smallest = leftChild;
62
- }
63
- if (rightChild < this.items.length && this.items[rightChild].priority < this.items[smallest].priority) {
64
- smallest = rightChild;
65
- }
66
- if (smallest === index)
67
- break;
68
- [this.items[index], this.items[smallest]] = [this.items[smallest], this.items[index]];
69
- index = smallest;
70
- }
71
- }
72
- }
73
- export class HNSWIndex {
74
- constructor(config = {}) {
75
- this.nodes = new Map();
76
- this.entryPoint = null;
77
- this.currentId = 0;
78
- this.config = {
79
- dimension: config.dimension || 384,
80
- M: config.M || 16,
81
- efConstruction: config.efConstruction || 200,
82
- efSearch: config.efSearch || 50,
83
- ml: config.ml || 1 / Math.log(2),
84
- maxLayers: config.maxLayers || 16,
85
- distanceFunction: config.distanceFunction || 'cosine'
86
- };
87
- this.ml = this.config.ml;
88
- }
89
- /**
90
- * Add vector to index
91
- */
92
- add(vector, id) {
93
- const nodeId = id !== undefined ? id : this.currentId++;
94
- const level = this.randomLevel();
95
- const node = {
96
- id: nodeId,
97
- vector,
98
- level,
99
- connections: new Map()
100
- };
101
- // Initialize connections for each layer
102
- for (let l = 0; l <= level; l++) {
103
- node.connections.set(l, []);
104
- }
105
- if (this.entryPoint === null) {
106
- // First node
107
- this.entryPoint = nodeId;
108
- this.nodes.set(nodeId, node);
109
- return nodeId;
110
- }
111
- // Find nearest neighbors at each layer
112
- const ep = this.entryPoint;
113
- let nearest = ep;
114
- // Search from top layer to target layer + 1
115
- for (let lc = this.nodes.get(ep).level; lc > level; lc--) {
116
- nearest = this.searchLayer(vector, nearest, 1, lc)[0];
117
- }
118
- // Insert node at layers 0 to level
119
- for (let lc = Math.min(level, this.nodes.get(ep).level); lc >= 0; lc--) {
120
- const candidates = this.searchLayer(vector, nearest, this.config.efConstruction, lc);
121
- // Select M neighbors
122
- const M = lc === 0 ? this.config.M * 2 : this.config.M;
123
- const neighbors = this.selectNeighbors(vector, candidates, M);
124
- // Add bidirectional connections
125
- for (const neighbor of neighbors) {
126
- this.connect(nodeId, neighbor, lc);
127
- this.connect(neighbor, nodeId, lc);
128
- // Prune connections if necessary
129
- const neighborNode = this.nodes.get(neighbor);
130
- const neighborConnections = neighborNode.connections.get(lc);
131
- if (neighborConnections.length > M) {
132
- const newNeighbors = this.selectNeighbors(neighborNode.vector, neighborConnections, M);
133
- neighborNode.connections.set(lc, newNeighbors);
134
- }
135
- }
136
- nearest = candidates[0];
137
- }
138
- // Update entry point if necessary
139
- if (level > this.nodes.get(this.entryPoint).level) {
140
- this.entryPoint = nodeId;
141
- }
142
- this.nodes.set(nodeId, node);
143
- return nodeId;
144
- }
145
- /**
146
- * Search for k nearest neighbors
147
- */
148
- search(query, k, ef) {
149
- if (this.entryPoint === null)
150
- return [];
151
- ef = ef || Math.max(this.config.efSearch, k);
152
- let ep = this.entryPoint;
153
- let nearest = ep;
154
- // Search from top to layer 1
155
- for (let lc = this.nodes.get(ep).level; lc > 0; lc--) {
156
- nearest = this.searchLayer(query, nearest, 1, lc)[0];
157
- }
158
- // Search at layer 0
159
- const candidates = this.searchLayer(query, nearest, ef, 0);
160
- // Convert to SearchResult and return top k
161
- return candidates
162
- .slice(0, k)
163
- .map(id => ({
164
- id,
165
- distance: this.distance(query, this.nodes.get(id).vector),
166
- vector: this.nodes.get(id).vector
167
- }));
168
- }
169
- /**
170
- * Search at specific layer
171
- */
172
- searchLayer(query, ep, ef, layer) {
173
- const visited = new Set();
174
- const candidates = new MinHeap();
175
- const w = new MinHeap();
176
- const dist = this.distance(query, this.nodes.get(ep).vector);
177
- candidates.push(ep, dist);
178
- w.push(ep, -dist); // Max heap (negate for min heap)
179
- visited.add(ep);
180
- while (candidates.size() > 0) {
181
- const c = candidates.pop();
182
- const fDist = -w.peek(); // Furthest point distance
183
- const cDist = this.distance(query, this.nodes.get(c).vector);
184
- if (cDist > fDist)
185
- break;
186
- const neighbors = this.nodes.get(c).connections.get(layer) || [];
187
- for (const e of neighbors) {
188
- if (visited.has(e))
189
- continue;
190
- visited.add(e);
191
- const eDist = this.distance(query, this.nodes.get(e).vector);
192
- const fDist = -w.peek();
193
- if (eDist < fDist || w.size() < ef) {
194
- candidates.push(e, eDist);
195
- w.push(e, -eDist);
196
- if (w.size() > ef) {
197
- w.pop();
198
- }
199
- }
200
- }
201
- }
202
- // Return ef nearest neighbors
203
- const result = [];
204
- while (w.size() > 0) {
205
- result.unshift(w.pop());
206
- }
207
- return result;
208
- }
209
- /**
210
- * Select best neighbors using heuristic
211
- */
212
- selectNeighbors(base, candidates, M) {
213
- if (candidates.length <= M)
214
- return candidates;
215
- // Sort by distance
216
- const sorted = candidates
217
- .map(id => ({
218
- id,
219
- distance: this.distance(base, this.nodes.get(id).vector)
220
- }))
221
- .sort((a, b) => a.distance - b.distance);
222
- return sorted.slice(0, M).map(x => x.id);
223
- }
224
- /**
225
- * Connect two nodes at layer
226
- */
227
- connect(from, to, layer) {
228
- const node = this.nodes.get(from);
229
- const connections = node.connections.get(layer);
230
- if (!connections.includes(to)) {
231
- connections.push(to);
232
- }
233
- }
234
- /**
235
- * Random level assignment
236
- */
237
- randomLevel() {
238
- let level = 0;
239
- while (Math.random() < this.ml && level < this.config.maxLayers - 1) {
240
- level++;
241
- }
242
- return level;
243
- }
244
- /**
245
- * Distance function
246
- */
247
- distance(a, b) {
248
- switch (this.config.distanceFunction) {
249
- case 'cosine':
250
- return 1 - this.cosineSimilarity(a, b);
251
- case 'euclidean':
252
- return this.euclideanDistance(a, b);
253
- case 'manhattan':
254
- return this.manhattanDistance(a, b);
255
- default:
256
- return 1 - this.cosineSimilarity(a, b);
257
- }
258
- }
259
- cosineSimilarity(a, b) {
260
- let dotProduct = 0;
261
- let normA = 0;
262
- let normB = 0;
263
- for (let i = 0; i < a.length; i++) {
264
- dotProduct += a[i] * b[i];
265
- normA += a[i] * a[i];
266
- normB += b[i] * b[i];
267
- }
268
- return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
269
- }
270
- euclideanDistance(a, b) {
271
- let sum = 0;
272
- for (let i = 0; i < a.length; i++) {
273
- const diff = a[i] - b[i];
274
- sum += diff * diff;
275
- }
276
- return Math.sqrt(sum);
277
- }
278
- manhattanDistance(a, b) {
279
- let sum = 0;
280
- for (let i = 0; i < a.length; i++) {
281
- sum += Math.abs(a[i] - b[i]);
282
- }
283
- return sum;
284
- }
285
- /**
286
- * Get index statistics
287
- */
288
- getStats() {
289
- if (this.nodes.size === 0) {
290
- return {
291
- numNodes: 0,
292
- numLayers: 0,
293
- avgConnections: 0,
294
- entryPointLevel: 0,
295
- memoryBytes: 0
296
- };
297
- }
298
- const maxLevel = Math.max(...Array.from(this.nodes.values()).map(n => n.level));
299
- let totalConnections = 0;
300
- for (const node of this.nodes.values()) {
301
- for (const connections of node.connections.values()) {
302
- totalConnections += connections.length;
303
- }
304
- }
305
- const avgConnections = totalConnections / this.nodes.size;
306
- // Estimate memory: vector + connections + metadata
307
- const vectorBytes = this.config.dimension * 4; // Float32Array
308
- const connectionBytes = avgConnections * 4; // number array
309
- const metadataBytes = 100; // rough estimate for node object
310
- const memoryBytes = this.nodes.size * (vectorBytes + connectionBytes + metadataBytes);
311
- return {
312
- numNodes: this.nodes.size,
313
- numLayers: maxLevel + 1,
314
- avgConnections,
315
- entryPointLevel: this.entryPoint ? this.nodes.get(this.entryPoint).level : 0,
316
- memoryBytes
317
- };
318
- }
319
- /**
320
- * Export index for persistence
321
- */
322
- export() {
323
- const data = {
324
- config: this.config,
325
- entryPoint: this.entryPoint,
326
- currentId: this.currentId,
327
- nodes: Array.from(this.nodes.entries()).map(([id, node]) => ({
328
- id,
329
- vector: Array.from(node.vector),
330
- level: node.level,
331
- connections: Array.from(node.connections.entries())
332
- }))
333
- };
334
- return JSON.stringify(data);
335
- }
336
- /**
337
- * Import index from JSON
338
- */
339
- import(json) {
340
- const data = JSON.parse(json);
341
- this.config = data.config;
342
- this.entryPoint = data.entryPoint;
343
- this.currentId = data.currentId;
344
- this.nodes.clear();
345
- for (const nodeData of data.nodes) {
346
- const node = {
347
- id: nodeData.id,
348
- vector: new Float32Array(nodeData.vector),
349
- level: nodeData.level,
350
- connections: new Map(nodeData.connections)
351
- };
352
- this.nodes.set(nodeData.id, node);
353
- }
354
- }
355
- /**
356
- * Clear index
357
- */
358
- clear() {
359
- this.nodes.clear();
360
- this.entryPoint = null;
361
- this.currentId = 0;
362
- }
363
- /**
364
- * Get number of nodes
365
- */
366
- size() {
367
- return this.nodes.size;
368
- }
369
- }
370
- /**
371
- * Helper function to create HNSW index with default settings
372
- */
373
- export function createHNSW(dimension) {
374
- return new HNSWIndex({
375
- dimension,
376
- M: 16,
377
- efConstruction: 200,
378
- efSearch: 50
379
- });
380
- }
381
- /**
382
- * Helper function to create fast HNSW (lower quality, faster build)
383
- */
384
- export function createFastHNSW(dimension) {
385
- return new HNSWIndex({
386
- dimension,
387
- M: 8,
388
- efConstruction: 100,
389
- efSearch: 30
390
- });
391
- }
392
- /**
393
- * Helper function to create accurate HNSW (higher quality, slower build)
394
- */
395
- export function createAccurateHNSW(dimension) {
396
- return new HNSWIndex({
397
- dimension,
398
- M: 32,
399
- efConstruction: 400,
400
- efSearch: 100
401
- });
402
- }
@@ -1,107 +0,0 @@
1
- /**
2
- * Product Quantization for Browser
3
- *
4
- * Compresses high-dimensional vectors using product quantization.
5
- * Achieves 4-32x memory reduction with minimal accuracy loss.
6
- *
7
- * Features:
8
- * - PQ8: 8 subvectors, 256 centroids each (4x compression)
9
- * - PQ16: 16 subvectors, 256 centroids each (8x compression)
10
- * - Asymmetric distance computation (ADC)
11
- * - K-means clustering for codebook training
12
- *
13
- * Performance:
14
- * - Memory: Float32 (4 bytes) → uint8 (1 byte) per subvector
15
- * - Speed: ~1.5x slower search vs uncompressed
16
- * - Accuracy: 95-99% recall@10
17
- */
18
- export interface PQConfig {
19
- dimension: number;
20
- numSubvectors: number;
21
- numCentroids: number;
22
- maxIterations?: number;
23
- convergenceThreshold?: number;
24
- }
25
- export interface PQCodebook {
26
- subvectorDim: number;
27
- numSubvectors: number;
28
- numCentroids: number;
29
- centroids: Float32Array[];
30
- }
31
- export interface CompressedVector {
32
- codes: Uint8Array;
33
- norm: number;
34
- }
35
- export declare class ProductQuantization {
36
- private config;
37
- private codebook;
38
- private trained;
39
- constructor(config: PQConfig);
40
- /**
41
- * Train codebook using k-means on training vectors
42
- */
43
- train(vectors: Float32Array[]): Promise<void>;
44
- /**
45
- * K-means clustering for centroids
46
- */
47
- private kMeans;
48
- /**
49
- * K-means++ initialization for better centroid selection
50
- */
51
- private kMeansPlusPlus;
52
- /**
53
- * Compress a vector using trained codebook
54
- */
55
- compress(vector: Float32Array): CompressedVector;
56
- /**
57
- * Decompress a vector (approximate reconstruction)
58
- */
59
- decompress(compressed: CompressedVector): Float32Array;
60
- /**
61
- * Asymmetric Distance Computation (ADC)
62
- * Computes distance from query vector to compressed vector
63
- */
64
- asymmetricDistance(query: Float32Array, compressed: CompressedVector): number;
65
- /**
66
- * Batch compression for multiple vectors
67
- */
68
- batchCompress(vectors: Float32Array[]): CompressedVector[];
69
- /**
70
- * Get memory savings
71
- */
72
- getCompressionRatio(): number;
73
- /**
74
- * Export codebook for persistence
75
- */
76
- exportCodebook(): string;
77
- /**
78
- * Import codebook
79
- */
80
- importCodebook(json: string): void;
81
- /**
82
- * Utility: Squared Euclidean distance
83
- */
84
- private squaredDistance;
85
- /**
86
- * Get statistics
87
- */
88
- getStats(): {
89
- trained: boolean;
90
- compressionRatio: number;
91
- memoryPerVector: number;
92
- codebookSize: number;
93
- };
94
- }
95
- /**
96
- * Helper function to create PQ8 (8 subvectors, 4x compression)
97
- */
98
- export declare function createPQ8(dimension: number): ProductQuantization;
99
- /**
100
- * Helper function to create PQ16 (16 subvectors, 8x compression)
101
- */
102
- export declare function createPQ16(dimension: number): ProductQuantization;
103
- /**
104
- * Helper function to create PQ32 (32 subvectors, 16x compression)
105
- */
106
- export declare function createPQ32(dimension: number): ProductQuantization;
107
- //# sourceMappingURL=ProductQuantization.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductQuantization.d.ts","sourceRoot":"","sources":["../../../src/browser/ProductQuantization.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAA2B;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,QAAQ;IAe5B;;OAEG;IACG,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCnD;;OAEG;YACW,MAAM;IA0DpB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuCtB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,gBAAgB;IAwChD;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,gBAAgB,GAAG,YAAY;IAsBtD;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,GAAG,MAAM;IAsB7E;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE;IAI1D;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAQ7B;;OAEG;IACH,cAAc,IAAI,MAAM;IAgBxB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYlC;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,QAAQ,IAAI;QACV,OAAO,EAAE,OAAO,CAAC;QACjB,gBAAgB,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;KACtB;CAcF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAOhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAOjE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,CAOjE"}