agentdb 3.0.0-alpha.10 → 3.0.0-alpha.12

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