agentdb 3.0.0-alpha.9 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (718) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +248 -269
  3. package/dist/schemas/frontier-schema.sql +7 -0
  4. package/dist/schemas/schema.sql +7 -0
  5. package/dist/src/backends/VectorBackend.d.ts +48 -6
  6. package/dist/src/backends/VectorBackend.d.ts.map +1 -1
  7. package/dist/src/backends/VectorBackend.js +13 -1
  8. package/dist/src/backends/VectorBackend.js.map +1 -1
  9. package/dist/src/backends/detector.js.map +1 -1
  10. package/dist/src/backends/factory.d.ts +16 -33
  11. package/dist/src/backends/factory.d.ts.map +1 -1
  12. package/dist/src/backends/factory.js +140 -110
  13. package/dist/src/backends/factory.js.map +1 -1
  14. package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts +54 -6
  15. package/dist/src/backends/graph/GraphDatabaseAdapter.d.ts.map +1 -1
  16. package/dist/src/backends/graph/GraphDatabaseAdapter.js +143 -6
  17. package/dist/src/backends/graph/GraphDatabaseAdapter.js.map +1 -1
  18. package/dist/src/backends/hnswlib/HNSWLibBackend.d.ts.map +1 -1
  19. package/dist/src/backends/hnswlib/HNSWLibBackend.js +35 -8
  20. package/dist/src/backends/hnswlib/HNSWLibBackend.js.map +1 -1
  21. package/dist/src/backends/index.d.ts +2 -1
  22. package/dist/src/backends/index.d.ts.map +1 -1
  23. package/dist/src/backends/index.js +2 -0
  24. package/dist/src/backends/index.js.map +1 -1
  25. package/dist/src/backends/ruvector/RuVectorBackend.d.ts +256 -45
  26. package/dist/src/backends/ruvector/RuVectorBackend.d.ts.map +1 -1
  27. package/dist/src/backends/ruvector/RuVectorBackend.js +764 -290
  28. package/dist/src/backends/ruvector/RuVectorBackend.js.map +1 -1
  29. package/dist/src/backends/ruvector/RuVectorLearning.d.ts +0 -4
  30. package/dist/src/backends/ruvector/RuVectorLearning.d.ts.map +1 -1
  31. package/dist/src/backends/ruvector/RuVectorLearning.js +0 -6
  32. package/dist/src/backends/ruvector/RuVectorLearning.js.map +1 -1
  33. package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts +175 -0
  34. package/dist/src/backends/rvf/AdaptiveIndexTuner.d.ts.map +1 -0
  35. package/dist/src/backends/rvf/AdaptiveIndexTuner.js +567 -0
  36. package/dist/src/backends/rvf/AdaptiveIndexTuner.js.map +1 -0
  37. package/dist/src/backends/rvf/ContrastiveTrainer.d.ts +148 -0
  38. package/dist/src/backends/rvf/ContrastiveTrainer.d.ts.map +1 -0
  39. package/dist/src/backends/rvf/ContrastiveTrainer.js +438 -0
  40. package/dist/src/backends/rvf/ContrastiveTrainer.js.map +1 -0
  41. package/dist/src/backends/rvf/FederatedSessionManager.d.ts +212 -0
  42. package/dist/src/backends/rvf/FederatedSessionManager.d.ts.map +1 -0
  43. package/dist/src/backends/rvf/FederatedSessionManager.js +397 -0
  44. package/dist/src/backends/rvf/FederatedSessionManager.js.map +1 -0
  45. package/dist/src/backends/rvf/FilterBuilder.d.ts +136 -0
  46. package/dist/src/backends/rvf/FilterBuilder.d.ts.map +1 -0
  47. package/dist/src/backends/rvf/FilterBuilder.js +157 -0
  48. package/dist/src/backends/rvf/FilterBuilder.js.map +1 -0
  49. package/dist/src/backends/rvf/NativeAccelerator.d.ts +158 -0
  50. package/dist/src/backends/rvf/NativeAccelerator.d.ts.map +1 -0
  51. package/dist/src/backends/rvf/NativeAccelerator.js +702 -0
  52. package/dist/src/backends/rvf/NativeAccelerator.js.map +1 -0
  53. package/dist/src/backends/rvf/RvfBackend.d.ts +207 -0
  54. package/dist/src/backends/rvf/RvfBackend.d.ts.map +1 -0
  55. package/dist/src/backends/rvf/RvfBackend.js +651 -0
  56. package/dist/src/backends/rvf/RvfBackend.js.map +1 -0
  57. package/dist/src/backends/rvf/RvfSolver.d.ts +175 -0
  58. package/dist/src/backends/rvf/RvfSolver.d.ts.map +1 -0
  59. package/dist/src/backends/rvf/RvfSolver.js +176 -0
  60. package/dist/src/backends/rvf/RvfSolver.js.map +1 -0
  61. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts +143 -0
  62. package/dist/src/backends/rvf/SelfLearningRvfBackend.d.ts.map +1 -0
  63. package/dist/src/backends/rvf/SelfLearningRvfBackend.js +612 -0
  64. package/dist/src/backends/rvf/SelfLearningRvfBackend.js.map +1 -0
  65. package/dist/src/backends/rvf/SemanticQueryRouter.d.ts +128 -0
  66. package/dist/src/backends/rvf/SemanticQueryRouter.d.ts.map +1 -0
  67. package/dist/src/backends/rvf/SemanticQueryRouter.js +415 -0
  68. package/dist/src/backends/rvf/SemanticQueryRouter.js.map +1 -0
  69. package/dist/src/backends/rvf/SimdFallbacks.d.ts +25 -0
  70. package/dist/src/backends/rvf/SimdFallbacks.d.ts.map +1 -0
  71. package/dist/src/backends/rvf/SimdFallbacks.js +287 -0
  72. package/dist/src/backends/rvf/SimdFallbacks.js.map +1 -0
  73. package/dist/src/backends/rvf/SolverBandit.d.ts +100 -0
  74. package/dist/src/backends/rvf/SolverBandit.d.ts.map +1 -0
  75. package/dist/src/backends/rvf/SolverBandit.js +216 -0
  76. package/dist/src/backends/rvf/SolverBandit.js.map +1 -0
  77. package/dist/src/backends/rvf/SonaLearningBackend.d.ts +157 -0
  78. package/dist/src/backends/rvf/SonaLearningBackend.d.ts.map +1 -0
  79. package/dist/src/backends/rvf/SonaLearningBackend.js +283 -0
  80. package/dist/src/backends/rvf/SonaLearningBackend.js.map +1 -0
  81. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts +104 -0
  82. package/dist/src/backends/rvf/SqlJsRvfBackend.d.ts.map +1 -0
  83. package/dist/src/backends/rvf/SqlJsRvfBackend.js +464 -0
  84. package/dist/src/backends/rvf/SqlJsRvfBackend.js.map +1 -0
  85. package/dist/src/backends/rvf/WasmStoreBridge.d.ts +27 -0
  86. package/dist/src/backends/rvf/WasmStoreBridge.d.ts.map +1 -0
  87. package/dist/src/backends/rvf/WasmStoreBridge.js +87 -0
  88. package/dist/src/backends/rvf/WasmStoreBridge.js.map +1 -0
  89. package/dist/src/backends/rvf/validation.d.ts +20 -0
  90. package/dist/src/backends/rvf/validation.d.ts.map +1 -0
  91. package/dist/src/backends/rvf/validation.js +78 -0
  92. package/dist/src/backends/rvf/validation.js.map +1 -0
  93. package/dist/src/benchmark/BenchmarkSuite.d.ts +318 -0
  94. package/dist/src/benchmark/BenchmarkSuite.d.ts.map +1 -0
  95. package/dist/src/benchmark/BenchmarkSuite.js +984 -0
  96. package/dist/src/benchmark/BenchmarkSuite.js.map +1 -0
  97. package/dist/src/benchmark/index.d.ts +29 -0
  98. package/dist/src/benchmark/index.d.ts.map +1 -0
  99. package/dist/src/benchmark/index.js +39 -0
  100. package/dist/src/benchmark/index.js.map +1 -0
  101. package/dist/src/browser/AttentionBrowser.d.ts.map +1 -1
  102. package/dist/src/browser/AttentionBrowser.js +1 -0
  103. package/dist/src/browser/AttentionBrowser.js.map +1 -1
  104. package/dist/src/cli/agentdb-cli.d.ts +14 -0
  105. package/dist/src/cli/agentdb-cli.d.ts.map +1 -1
  106. package/dist/src/cli/agentdb-cli.js +839 -143
  107. package/dist/src/cli/agentdb-cli.js.map +1 -1
  108. package/dist/src/cli/commands/attention.js +12 -2
  109. package/dist/src/cli/commands/attention.js.map +1 -1
  110. package/dist/src/cli/commands/doctor.js +5 -5
  111. package/dist/src/cli/commands/doctor.js.map +1 -1
  112. package/dist/src/cli/commands/hyperbolic.d.ts +11 -0
  113. package/dist/src/cli/commands/hyperbolic.d.ts.map +1 -0
  114. package/dist/src/cli/commands/hyperbolic.js +440 -0
  115. package/dist/src/cli/commands/hyperbolic.js.map +1 -0
  116. package/dist/src/cli/commands/install-embeddings.d.ts +1 -1
  117. package/dist/src/cli/commands/install-embeddings.d.ts.map +1 -1
  118. package/dist/src/cli/commands/install-embeddings.js +17 -11
  119. package/dist/src/cli/commands/install-embeddings.js.map +1 -1
  120. package/dist/src/cli/commands/learn.d.ts +11 -0
  121. package/dist/src/cli/commands/learn.d.ts.map +1 -0
  122. package/dist/src/cli/commands/learn.js +410 -0
  123. package/dist/src/cli/commands/learn.js.map +1 -0
  124. package/dist/src/cli/commands/migrate.d.ts +15 -0
  125. package/dist/src/cli/commands/migrate.d.ts.map +1 -1
  126. package/dist/src/cli/commands/migrate.js +190 -10
  127. package/dist/src/cli/commands/migrate.js.map +1 -1
  128. package/dist/src/cli/commands/route.d.ts +11 -0
  129. package/dist/src/cli/commands/route.d.ts.map +1 -0
  130. package/dist/src/cli/commands/route.js +419 -0
  131. package/dist/src/cli/commands/route.js.map +1 -0
  132. package/dist/src/cli/commands/rvf.d.ts +21 -0
  133. package/dist/src/cli/commands/rvf.d.ts.map +1 -0
  134. package/dist/src/cli/commands/rvf.js +448 -0
  135. package/dist/src/cli/commands/rvf.js.map +1 -0
  136. package/dist/src/cli/commands/simulate-report.js +14 -2
  137. package/dist/src/cli/commands/simulate-report.js.map +1 -1
  138. package/dist/src/cli/lib/report-store.d.ts +2 -1
  139. package/dist/src/cli/lib/report-store.d.ts.map +1 -1
  140. package/dist/src/cli/lib/report-store.js +85 -65
  141. package/dist/src/cli/lib/report-store.js.map +1 -1
  142. package/dist/src/cli/lib/simulation-runner.d.ts +40 -3
  143. package/dist/src/cli/lib/simulation-runner.d.ts.map +1 -1
  144. package/dist/src/cli/lib/simulation-runner.js +248 -6
  145. package/dist/src/cli/lib/simulation-runner.js.map +1 -1
  146. package/dist/src/compatibility/DeprecationWarnings.d.ts +54 -0
  147. package/dist/src/compatibility/DeprecationWarnings.d.ts.map +1 -0
  148. package/dist/src/compatibility/DeprecationWarnings.js +131 -0
  149. package/dist/src/compatibility/DeprecationWarnings.js.map +1 -0
  150. package/dist/src/compatibility/MigrationUtilities.d.ts +30 -0
  151. package/dist/src/compatibility/MigrationUtilities.d.ts.map +1 -0
  152. package/dist/src/compatibility/MigrationUtilities.js +184 -0
  153. package/dist/src/compatibility/MigrationUtilities.js.map +1 -0
  154. package/dist/src/compatibility/V1toV2Adapter.d.ts +76 -0
  155. package/dist/src/compatibility/V1toV2Adapter.d.ts.map +1 -0
  156. package/dist/src/compatibility/V1toV2Adapter.js +185 -0
  157. package/dist/src/compatibility/V1toV2Adapter.js.map +1 -0
  158. package/dist/src/compatibility/VersionDetector.d.ts +32 -0
  159. package/dist/src/compatibility/VersionDetector.d.ts.map +1 -0
  160. package/dist/src/compatibility/VersionDetector.js +144 -0
  161. package/dist/src/compatibility/VersionDetector.js.map +1 -0
  162. package/dist/src/compatibility/index.d.ts +14 -0
  163. package/dist/src/compatibility/index.d.ts.map +1 -0
  164. package/dist/src/compatibility/index.js +21 -0
  165. package/dist/src/compatibility/index.js.map +1 -0
  166. package/dist/src/compatibility/types.d.ts +103 -0
  167. package/dist/src/compatibility/types.d.ts.map +1 -0
  168. package/dist/src/compatibility/types.js +5 -0
  169. package/dist/src/compatibility/types.js.map +1 -0
  170. package/dist/src/controllers/AttentionService.d.ts +99 -202
  171. package/dist/src/controllers/AttentionService.d.ts.map +1 -1
  172. package/dist/src/controllers/AttentionService.js +450 -558
  173. package/dist/src/controllers/AttentionService.js.map +1 -1
  174. package/dist/src/controllers/CausalMemoryGraph.d.ts +30 -5
  175. package/dist/src/controllers/CausalMemoryGraph.d.ts.map +1 -1
  176. package/dist/src/controllers/CausalMemoryGraph.js +92 -15
  177. package/dist/src/controllers/CausalMemoryGraph.js.map +1 -1
  178. package/dist/src/controllers/CausalRecall.d.ts +4 -0
  179. package/dist/src/controllers/CausalRecall.d.ts.map +1 -1
  180. package/dist/src/controllers/CausalRecall.js +23 -5
  181. package/dist/src/controllers/CausalRecall.js.map +1 -1
  182. package/dist/src/controllers/EmbeddingService.d.ts +29 -0
  183. package/dist/src/controllers/EmbeddingService.d.ts.map +1 -1
  184. package/dist/src/controllers/EmbeddingService.js +154 -32
  185. package/dist/src/controllers/EmbeddingService.js.map +1 -1
  186. package/dist/src/controllers/EnhancedEmbeddingService.d.ts +4 -0
  187. package/dist/src/controllers/EnhancedEmbeddingService.d.ts.map +1 -1
  188. package/dist/src/controllers/EnhancedEmbeddingService.js +21 -7
  189. package/dist/src/controllers/EnhancedEmbeddingService.js.map +1 -1
  190. package/dist/src/controllers/ExplainableRecall.d.ts +1 -1
  191. package/dist/src/controllers/ExplainableRecall.d.ts.map +1 -1
  192. package/dist/src/controllers/ExplainableRecall.js +1 -1
  193. package/dist/src/controllers/ExplainableRecall.js.map +1 -1
  194. package/dist/src/controllers/HNSWIndex.d.ts +20 -2
  195. package/dist/src/controllers/HNSWIndex.d.ts.map +1 -1
  196. package/dist/src/controllers/HNSWIndex.js +114 -39
  197. package/dist/src/controllers/HNSWIndex.js.map +1 -1
  198. package/dist/src/controllers/LearningSystem.d.ts +6 -17
  199. package/dist/src/controllers/LearningSystem.d.ts.map +1 -1
  200. package/dist/src/controllers/LearningSystem.js +66 -155
  201. package/dist/src/controllers/LearningSystem.js.map +1 -1
  202. package/dist/src/controllers/MemoryController.d.ts +174 -0
  203. package/dist/src/controllers/MemoryController.d.ts.map +1 -0
  204. package/dist/src/controllers/MemoryController.js +320 -0
  205. package/dist/src/controllers/MemoryController.js.map +1 -0
  206. package/dist/src/controllers/MetadataFilter.d.ts.map +1 -1
  207. package/dist/src/controllers/MetadataFilter.js +38 -26
  208. package/dist/src/controllers/MetadataFilter.js.map +1 -1
  209. package/dist/src/controllers/MincutService.d.ts +92 -0
  210. package/dist/src/controllers/MincutService.d.ts.map +1 -0
  211. package/dist/src/controllers/MincutService.js +336 -0
  212. package/dist/src/controllers/MincutService.js.map +1 -0
  213. package/dist/src/controllers/NightlyLearner.d.ts +5 -1
  214. package/dist/src/controllers/NightlyLearner.d.ts.map +1 -1
  215. package/dist/src/controllers/NightlyLearner.js +45 -31
  216. package/dist/src/controllers/NightlyLearner.js.map +1 -1
  217. package/dist/src/controllers/QUICClient.d.ts +45 -0
  218. package/dist/src/controllers/QUICClient.d.ts.map +1 -1
  219. package/dist/src/controllers/QUICClient.js +211 -21
  220. package/dist/src/controllers/QUICClient.js.map +1 -1
  221. package/dist/src/controllers/QUICServer.d.ts.map +1 -1
  222. package/dist/src/controllers/QUICServer.js +36 -27
  223. package/dist/src/controllers/QUICServer.js.map +1 -1
  224. package/dist/src/controllers/ReasoningBank.d.ts +6 -3
  225. package/dist/src/controllers/ReasoningBank.d.ts.map +1 -1
  226. package/dist/src/controllers/ReasoningBank.js +77 -56
  227. package/dist/src/controllers/ReasoningBank.js.map +1 -1
  228. package/dist/src/controllers/ReflexionMemory.d.ts +129 -6
  229. package/dist/src/controllers/ReflexionMemory.d.ts.map +1 -1
  230. package/dist/src/controllers/ReflexionMemory.js +678 -220
  231. package/dist/src/controllers/ReflexionMemory.js.map +1 -1
  232. package/dist/src/controllers/SkillLibrary.d.ts +32 -3
  233. package/dist/src/controllers/SkillLibrary.d.ts.map +1 -1
  234. package/dist/src/controllers/SkillLibrary.js +239 -104
  235. package/dist/src/controllers/SkillLibrary.js.map +1 -1
  236. package/dist/src/controllers/SparsificationService.d.ts +151 -0
  237. package/dist/src/controllers/SparsificationService.d.ts.map +1 -0
  238. package/dist/src/controllers/SparsificationService.js +375 -0
  239. package/dist/src/controllers/SparsificationService.js.map +1 -0
  240. package/dist/src/controllers/SyncCoordinator.d.ts.map +1 -1
  241. package/dist/src/controllers/SyncCoordinator.js +126 -12
  242. package/dist/src/controllers/SyncCoordinator.js.map +1 -1
  243. package/dist/src/controllers/WASMVectorSearch.d.ts +12 -30
  244. package/dist/src/controllers/WASMVectorSearch.d.ts.map +1 -1
  245. package/dist/src/controllers/WASMVectorSearch.js +161 -102
  246. package/dist/src/controllers/WASMVectorSearch.js.map +1 -1
  247. package/dist/src/controllers/attention/AttentionCache.d.ts +38 -0
  248. package/dist/src/controllers/attention/AttentionCache.d.ts.map +1 -0
  249. package/dist/src/controllers/attention/AttentionCache.js +80 -0
  250. package/dist/src/controllers/attention/AttentionCache.js.map +1 -0
  251. package/dist/src/controllers/attention/AttentionConfig.d.ts +127 -0
  252. package/dist/src/controllers/attention/AttentionConfig.d.ts.map +1 -0
  253. package/dist/src/controllers/attention/AttentionConfig.js +124 -0
  254. package/dist/src/controllers/attention/AttentionConfig.js.map +1 -0
  255. package/dist/src/controllers/attention/AttentionCore.d.ts +89 -0
  256. package/dist/src/controllers/attention/AttentionCore.d.ts.map +1 -0
  257. package/dist/src/controllers/attention/AttentionCore.js +289 -0
  258. package/dist/src/controllers/attention/AttentionCore.js.map +1 -0
  259. package/dist/src/controllers/attention/AttentionHelpers.d.ts +55 -0
  260. package/dist/src/controllers/attention/AttentionHelpers.d.ts.map +1 -0
  261. package/dist/src/controllers/attention/AttentionHelpers.js +148 -0
  262. package/dist/src/controllers/attention/AttentionHelpers.js.map +1 -0
  263. package/dist/src/controllers/attention/AttentionMetrics.d.ts +55 -0
  264. package/dist/src/controllers/attention/AttentionMetrics.d.ts.map +1 -0
  265. package/dist/src/controllers/attention/AttentionMetrics.js +72 -0
  266. package/dist/src/controllers/attention/AttentionMetrics.js.map +1 -0
  267. package/dist/src/controllers/attention/AttentionWASM.d.ts +98 -0
  268. package/dist/src/controllers/attention/AttentionWASM.d.ts.map +1 -0
  269. package/dist/src/controllers/attention/AttentionWASM.js +147 -0
  270. package/dist/src/controllers/attention/AttentionWASM.js.map +1 -0
  271. package/dist/src/controllers/attention/CrossAttentionController.d.ts +141 -0
  272. package/dist/src/controllers/attention/CrossAttentionController.d.ts.map +1 -0
  273. package/dist/src/controllers/attention/CrossAttentionController.js +325 -0
  274. package/dist/src/controllers/attention/CrossAttentionController.js.map +1 -0
  275. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts +137 -0
  276. package/dist/src/controllers/attention/MultiHeadAttentionController.d.ts.map +1 -0
  277. package/dist/src/controllers/attention/MultiHeadAttentionController.js +336 -0
  278. package/dist/src/controllers/attention/MultiHeadAttentionController.js.map +1 -0
  279. package/dist/src/controllers/attention/SelfAttentionController.d.ts +117 -0
  280. package/dist/src/controllers/attention/SelfAttentionController.d.ts.map +1 -0
  281. package/dist/src/controllers/attention/SelfAttentionController.js +205 -0
  282. package/dist/src/controllers/attention/SelfAttentionController.js.map +1 -0
  283. package/dist/src/controllers/attention/index.d.ts +24 -0
  284. package/dist/src/controllers/attention/index.d.ts.map +1 -0
  285. package/dist/src/controllers/attention/index.js +20 -0
  286. package/dist/src/controllers/attention/index.js.map +1 -0
  287. package/dist/src/controllers/index.d.ts +15 -28
  288. package/dist/src/controllers/index.d.ts.map +1 -1
  289. package/dist/src/controllers/index.js +11 -19
  290. package/dist/src/controllers/index.js.map +1 -1
  291. package/dist/src/controllers/prerequisites.d.ts +76 -0
  292. package/dist/src/controllers/prerequisites.d.ts.map +1 -0
  293. package/dist/src/controllers/prerequisites.js +235 -0
  294. package/dist/src/controllers/prerequisites.js.map +1 -0
  295. package/dist/src/core/AgentDB.d.ts +33 -19
  296. package/dist/src/core/AgentDB.d.ts.map +1 -1
  297. package/dist/src/core/AgentDB.js +87 -127
  298. package/dist/src/core/AgentDB.js.map +1 -1
  299. package/dist/src/core/QueryCache.d.ts +138 -0
  300. package/dist/src/core/QueryCache.d.ts.map +1 -0
  301. package/dist/src/core/QueryCache.js +309 -0
  302. package/dist/src/core/QueryCache.js.map +1 -0
  303. package/dist/src/db-fallback.d.ts +52 -4
  304. package/dist/src/db-fallback.d.ts.map +1 -1
  305. package/dist/src/db-fallback.js +521 -71
  306. package/dist/src/db-fallback.js.map +1 -1
  307. package/dist/src/db-unified.d.ts.map +1 -1
  308. package/dist/src/db-unified.js +32 -30
  309. package/dist/src/db-unified.js.map +1 -1
  310. package/dist/src/embedding/EmbeddingSpaceIdentity.d.ts +58 -0
  311. package/dist/src/embedding/EmbeddingSpaceIdentity.d.ts.map +1 -0
  312. package/dist/src/embedding/EmbeddingSpaceIdentity.js +137 -0
  313. package/dist/src/embedding/EmbeddingSpaceIdentity.js.map +1 -0
  314. package/dist/src/embedding/index.d.ts +3 -0
  315. package/dist/src/embedding/index.d.ts.map +1 -0
  316. package/dist/src/embedding/index.js +2 -0
  317. package/dist/src/embedding/index.js.map +1 -0
  318. package/dist/src/examples/quic-sync-example.js +2 -2
  319. package/dist/src/examples/quic-sync-example.js.map +1 -1
  320. package/dist/src/governance/MetaHarnessGateway.d.ts +55 -0
  321. package/dist/src/governance/MetaHarnessGateway.d.ts.map +1 -0
  322. package/dist/src/governance/MetaHarnessGateway.js +65 -0
  323. package/dist/src/governance/MetaHarnessGateway.js.map +1 -0
  324. package/dist/src/governance/RvfExperimentBranch.d.ts +65 -0
  325. package/dist/src/governance/RvfExperimentBranch.d.ts.map +1 -0
  326. package/dist/src/governance/RvfExperimentBranch.js +115 -0
  327. package/dist/src/governance/RvfExperimentBranch.js.map +1 -0
  328. package/dist/src/index.d.ts +20 -16
  329. package/dist/src/index.d.ts.map +1 -1
  330. package/dist/src/index.js +44 -12
  331. package/dist/src/index.js.map +1 -1
  332. package/dist/src/mcp/agentdb-mcp-server.js +178 -15
  333. package/dist/src/mcp/agentdb-mcp-server.js.map +1 -1
  334. package/dist/src/mcp/reset-database.d.ts +15 -0
  335. package/dist/src/mcp/reset-database.d.ts.map +1 -0
  336. package/dist/src/mcp/reset-database.js +45 -0
  337. package/dist/src/mcp/reset-database.js.map +1 -0
  338. package/dist/src/model/ModelCacheLoader.d.ts +31 -0
  339. package/dist/src/model/ModelCacheLoader.d.ts.map +1 -0
  340. package/dist/src/model/ModelCacheLoader.js +209 -0
  341. package/dist/src/model/ModelCacheLoader.js.map +1 -0
  342. package/dist/src/observability/index.d.ts +8 -0
  343. package/dist/src/observability/index.d.ts.map +1 -0
  344. package/dist/src/observability/index.js +8 -0
  345. package/dist/src/observability/index.js.map +1 -0
  346. package/dist/src/observability/integration.d.ts +32 -0
  347. package/dist/src/observability/integration.d.ts.map +1 -0
  348. package/dist/src/observability/integration.js +159 -0
  349. package/dist/src/observability/integration.js.map +1 -0
  350. package/dist/src/observability/telemetry.d.ts +137 -0
  351. package/dist/src/observability/telemetry.d.ts.map +1 -0
  352. package/dist/src/observability/telemetry.js +424 -0
  353. package/dist/src/observability/telemetry.js.map +1 -0
  354. package/dist/src/optimizations/BatchOperations.d.ts +47 -0
  355. package/dist/src/optimizations/BatchOperations.d.ts.map +1 -1
  356. package/dist/src/optimizations/BatchOperations.js +189 -35
  357. package/dist/src/optimizations/BatchOperations.js.map +1 -1
  358. package/dist/src/optimizations/Quantization.d.ts +330 -0
  359. package/dist/src/optimizations/Quantization.d.ts.map +1 -0
  360. package/dist/src/optimizations/Quantization.js +793 -0
  361. package/dist/src/optimizations/Quantization.js.map +1 -0
  362. package/dist/src/optimizations/index.d.ts +1 -3
  363. package/dist/src/optimizations/index.d.ts.map +1 -1
  364. package/dist/src/optimizations/index.js +0 -1
  365. package/dist/src/optimizations/index.js.map +1 -1
  366. package/dist/src/quantization/index.d.ts +7 -0
  367. package/dist/src/quantization/index.d.ts.map +1 -0
  368. package/dist/src/quantization/index.js +15 -0
  369. package/dist/src/quantization/index.js.map +1 -0
  370. package/dist/src/quantization/vector-quantization.d.ts +388 -0
  371. package/dist/src/quantization/vector-quantization.d.ts.map +1 -0
  372. package/dist/src/quantization/vector-quantization.js +1132 -0
  373. package/dist/src/quantization/vector-quantization.js.map +1 -0
  374. package/dist/src/schemas/inline.d.ts +3 -0
  375. package/dist/src/schemas/inline.d.ts.map +1 -0
  376. package/dist/src/schemas/inline.js +10 -0
  377. package/dist/src/schemas/inline.js.map +1 -0
  378. package/dist/src/search/HybridSearch.d.ts +311 -0
  379. package/dist/src/search/HybridSearch.d.ts.map +1 -0
  380. package/dist/src/search/HybridSearch.js +713 -0
  381. package/dist/src/search/HybridSearch.js.map +1 -0
  382. package/dist/src/search/index.d.ts +12 -0
  383. package/dist/src/search/index.d.ts.map +1 -0
  384. package/dist/src/search/index.js +16 -0
  385. package/dist/src/search/index.js.map +1 -0
  386. package/dist/src/security/input-validation.d.ts +30 -0
  387. package/dist/src/security/input-validation.d.ts.map +1 -1
  388. package/dist/src/security/input-validation.js +77 -3
  389. package/dist/src/security/input-validation.js.map +1 -1
  390. package/dist/src/security/limits.d.ts.map +1 -1
  391. package/dist/src/security/limits.js +12 -3
  392. package/dist/src/security/limits.js.map +1 -1
  393. package/dist/src/security/mcp-policy.d.ts +17 -0
  394. package/dist/src/security/mcp-policy.d.ts.map +1 -0
  395. package/dist/src/security/mcp-policy.js +90 -0
  396. package/dist/src/security/mcp-policy.js.map +1 -0
  397. package/dist/src/security/path-security.d.ts.map +1 -1
  398. package/dist/src/security/path-security.js +3 -1
  399. package/dist/src/security/path-security.js.map +1 -1
  400. package/dist/src/security/validation.js +3 -3
  401. package/dist/src/security/validation.js.map +1 -1
  402. package/dist/src/services/AttentionService.d.ts +303 -0
  403. package/dist/src/services/AttentionService.d.ts.map +1 -0
  404. package/dist/src/services/AttentionService.js +1165 -0
  405. package/dist/src/services/AttentionService.js.map +1 -0
  406. package/dist/src/services/LLMRouter.d.ts +70 -8
  407. package/dist/src/services/LLMRouter.d.ts.map +1 -1
  408. package/dist/src/services/LLMRouter.js +279 -28
  409. package/dist/src/services/LLMRouter.js.map +1 -1
  410. package/dist/src/services/audit-logger.service.d.ts +168 -0
  411. package/dist/src/services/audit-logger.service.d.ts.map +1 -0
  412. package/dist/src/services/audit-logger.service.js +331 -0
  413. package/dist/src/services/audit-logger.service.js.map +1 -0
  414. package/dist/src/services/enhanced-embeddings.d.ts +271 -0
  415. package/dist/src/services/enhanced-embeddings.d.ts.map +1 -0
  416. package/dist/src/services/enhanced-embeddings.js +1036 -0
  417. package/dist/src/services/enhanced-embeddings.js.map +1 -0
  418. package/dist/src/services/federated-learning.d.ts +172 -0
  419. package/dist/src/services/federated-learning.d.ts.map +1 -0
  420. package/dist/src/services/federated-learning.js +344 -0
  421. package/dist/src/services/federated-learning.js.map +1 -0
  422. package/dist/src/simd/index.d.ts +9 -0
  423. package/dist/src/simd/index.d.ts.map +1 -0
  424. package/dist/src/simd/index.js +27 -0
  425. package/dist/src/simd/index.js.map +1 -0
  426. package/dist/src/simd/simd-vector-ops.d.ts +332 -0
  427. package/dist/src/simd/simd-vector-ops.d.ts.map +1 -0
  428. package/dist/src/simd/simd-vector-ops.js +945 -0
  429. package/dist/src/simd/simd-vector-ops.js.map +1 -0
  430. package/dist/src/types/database.types.d.ts +275 -0
  431. package/dist/src/types/database.types.d.ts.map +1 -0
  432. package/dist/src/types/database.types.js +55 -0
  433. package/dist/src/types/database.types.js.map +1 -0
  434. package/dist/src/types/graph.d.ts +29 -0
  435. package/dist/src/types/graph.d.ts.map +1 -0
  436. package/dist/src/types/graph.js +8 -0
  437. package/dist/src/types/graph.js.map +1 -0
  438. package/dist/src/utils/chalk-fallback.d.ts +3 -0
  439. package/dist/src/utils/chalk-fallback.d.ts.map +1 -0
  440. package/dist/src/utils/chalk-fallback.js +20 -0
  441. package/dist/src/utils/chalk-fallback.js.map +1 -0
  442. package/dist/src/utils/similarity.d.ts +11 -0
  443. package/dist/src/utils/similarity.d.ts.map +1 -0
  444. package/dist/src/utils/similarity.js +25 -0
  445. package/dist/src/utils/similarity.js.map +1 -0
  446. package/dist/src/wasm-loader.d.ts +66 -0
  447. package/dist/src/wasm-loader.d.ts.map +1 -0
  448. package/dist/src/wasm-loader.js +76 -0
  449. package/dist/src/wasm-loader.js.map +1 -0
  450. package/dist/src/wrappers/agentdb-fast.d.ts +140 -0
  451. package/dist/src/wrappers/agentdb-fast.d.ts.map +1 -0
  452. package/dist/src/wrappers/agentdb-fast.js +309 -0
  453. package/dist/src/wrappers/agentdb-fast.js.map +1 -0
  454. package/dist/src/wrappers/attention-fallbacks.d.ts +343 -0
  455. package/dist/src/wrappers/attention-fallbacks.d.ts.map +1 -0
  456. package/dist/src/wrappers/attention-fallbacks.js +1484 -0
  457. package/dist/src/wrappers/attention-fallbacks.js.map +1 -0
  458. package/dist/src/wrappers/attention-native.d.ts +111 -0
  459. package/dist/src/wrappers/attention-native.d.ts.map +1 -0
  460. package/dist/src/wrappers/attention-native.js +273 -0
  461. package/dist/src/wrappers/attention-native.js.map +1 -0
  462. package/dist/src/wrappers/embedding-service.d.ts +117 -0
  463. package/dist/src/wrappers/embedding-service.d.ts.map +1 -0
  464. package/dist/src/wrappers/embedding-service.js +370 -0
  465. package/dist/src/wrappers/embedding-service.js.map +1 -0
  466. package/dist/src/wrappers/gnn-wrapper.d.ts +71 -0
  467. package/dist/src/wrappers/gnn-wrapper.d.ts.map +1 -0
  468. package/dist/src/wrappers/gnn-wrapper.js +236 -0
  469. package/dist/src/wrappers/gnn-wrapper.js.map +1 -0
  470. package/dist/src/wrappers/index.d.ts +48 -0
  471. package/dist/src/wrappers/index.d.ts.map +1 -0
  472. package/dist/src/wrappers/index.js +83 -0
  473. package/dist/src/wrappers/index.js.map +1 -0
  474. package/package.json +130 -80
  475. package/scripts/postinstall.cjs +13 -144
  476. package/dist/agentdb.browser.js +0 -1685
  477. package/dist/agentdb.browser.js.map +0 -7
  478. package/dist/agentdb.browser.min.js +0 -3
  479. package/dist/agentdb.browser.min.js.map +0 -7
  480. package/dist/agentdb.wasm-loader.js +0 -207
  481. package/dist/backends/VectorBackend.d.ts +0 -120
  482. package/dist/backends/VectorBackend.js +0 -14
  483. package/dist/backends/VectorBackend.js.map +0 -1
  484. package/dist/optimizations/RVFOptimizer.d.ts +0 -225
  485. package/dist/optimizations/RVFOptimizer.js +0 -541
  486. package/dist/optimizations/RVFOptimizer.js.map +0 -1
  487. package/dist/simulation/cli.d.ts +0 -9
  488. package/dist/simulation/cli.d.ts.map +0 -1
  489. package/dist/simulation/cli.js +0 -68
  490. package/dist/simulation/cli.js.map +0 -1
  491. package/dist/simulation/runner.d.ts +0 -21
  492. package/dist/simulation/runner.d.ts.map +0 -1
  493. package/dist/simulation/runner.js +0 -241
  494. package/dist/simulation/runner.js.map +0 -1
  495. package/dist/simulation/scenarios/aidefence-integration.d.ts +0 -24
  496. package/dist/simulation/scenarios/aidefence-integration.d.ts.map +0 -1
  497. package/dist/simulation/scenarios/aidefence-integration.js +0 -124
  498. package/dist/simulation/scenarios/aidefence-integration.js.map +0 -1
  499. package/dist/simulation/scenarios/bmssp-integration.d.ts +0 -23
  500. package/dist/simulation/scenarios/bmssp-integration.d.ts.map +0 -1
  501. package/dist/simulation/scenarios/bmssp-integration.js +0 -104
  502. package/dist/simulation/scenarios/bmssp-integration.js.map +0 -1
  503. package/dist/simulation/scenarios/causal-reasoning.d.ts +0 -16
  504. package/dist/simulation/scenarios/causal-reasoning.d.ts.map +0 -1
  505. package/dist/simulation/scenarios/causal-reasoning.js +0 -108
  506. package/dist/simulation/scenarios/causal-reasoning.js.map +0 -1
  507. package/dist/simulation/scenarios/consciousness-explorer.d.ts +0 -25
  508. package/dist/simulation/scenarios/consciousness-explorer.d.ts.map +0 -1
  509. package/dist/simulation/scenarios/consciousness-explorer.js +0 -108
  510. package/dist/simulation/scenarios/consciousness-explorer.js.map +0 -1
  511. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts +0 -135
  512. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.d.ts.map +0 -1
  513. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js +0 -158
  514. package/dist/simulation/scenarios/domain-examples/e-commerce-recommendations.js.map +0 -1
  515. package/dist/simulation/scenarios/domain-examples/index.d.ts +0 -14
  516. package/dist/simulation/scenarios/domain-examples/index.d.ts.map +0 -1
  517. package/dist/simulation/scenarios/domain-examples/index.js +0 -14
  518. package/dist/simulation/scenarios/domain-examples/index.js.map +0 -1
  519. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts +0 -178
  520. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.d.ts.map +0 -1
  521. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js +0 -218
  522. package/dist/simulation/scenarios/domain-examples/iot-sensor-networks.js.map +0 -1
  523. package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts +0 -122
  524. package/dist/simulation/scenarios/domain-examples/medical-imaging.d.ts.map +0 -1
  525. package/dist/simulation/scenarios/domain-examples/medical-imaging.js +0 -129
  526. package/dist/simulation/scenarios/domain-examples/medical-imaging.js.map +0 -1
  527. package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts +0 -166
  528. package/dist/simulation/scenarios/domain-examples/robotics-navigation.d.ts.map +0 -1
  529. package/dist/simulation/scenarios/domain-examples/robotics-navigation.js +0 -161
  530. package/dist/simulation/scenarios/domain-examples/robotics-navigation.js.map +0 -1
  531. package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts +0 -151
  532. package/dist/simulation/scenarios/domain-examples/scientific-research.d.ts.map +0 -1
  533. package/dist/simulation/scenarios/domain-examples/scientific-research.js +0 -187
  534. package/dist/simulation/scenarios/domain-examples/scientific-research.js.map +0 -1
  535. package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts +0 -102
  536. package/dist/simulation/scenarios/domain-examples/trading-systems.d.ts.map +0 -1
  537. package/dist/simulation/scenarios/domain-examples/trading-systems.js +0 -100
  538. package/dist/simulation/scenarios/domain-examples/trading-systems.js.map +0 -1
  539. package/dist/simulation/scenarios/goalie-integration.d.ts +0 -24
  540. package/dist/simulation/scenarios/goalie-integration.d.ts.map +0 -1
  541. package/dist/simulation/scenarios/goalie-integration.js +0 -121
  542. package/dist/simulation/scenarios/goalie-integration.js.map +0 -1
  543. package/dist/simulation/scenarios/graph-traversal.d.ts +0 -17
  544. package/dist/simulation/scenarios/graph-traversal.d.ts.map +0 -1
  545. package/dist/simulation/scenarios/graph-traversal.js +0 -101
  546. package/dist/simulation/scenarios/graph-traversal.js.map +0 -1
  547. package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts +0 -45
  548. package/dist/simulation/scenarios/latent-space/attention-analysis.d.ts.map +0 -1
  549. package/dist/simulation/scenarios/latent-space/attention-analysis.js +0 -435
  550. package/dist/simulation/scenarios/latent-space/attention-analysis.js.map +0 -1
  551. package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts +0 -55
  552. package/dist/simulation/scenarios/latent-space/clustering-analysis.d.ts.map +0 -1
  553. package/dist/simulation/scenarios/latent-space/clustering-analysis.js +0 -606
  554. package/dist/simulation/scenarios/latent-space/clustering-analysis.js.map +0 -1
  555. package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts +0 -74
  556. package/dist/simulation/scenarios/latent-space/hnsw-exploration.d.ts.map +0 -1
  557. package/dist/simulation/scenarios/latent-space/hnsw-exploration.js +0 -391
  558. package/dist/simulation/scenarios/latent-space/hnsw-exploration.js.map +0 -1
  559. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts +0 -51
  560. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.d.ts.map +0 -1
  561. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js +0 -536
  562. package/dist/simulation/scenarios/latent-space/hypergraph-exploration.js.map +0 -1
  563. package/dist/simulation/scenarios/latent-space/index.d.ts +0 -35
  564. package/dist/simulation/scenarios/latent-space/index.d.ts.map +0 -1
  565. package/dist/simulation/scenarios/latent-space/index.js +0 -35
  566. package/dist/simulation/scenarios/latent-space/index.js.map +0 -1
  567. package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts +0 -52
  568. package/dist/simulation/scenarios/latent-space/neural-augmentation.d.ts.map +0 -1
  569. package/dist/simulation/scenarios/latent-space/neural-augmentation.js +0 -472
  570. package/dist/simulation/scenarios/latent-space/neural-augmentation.js.map +0 -1
  571. package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts +0 -53
  572. package/dist/simulation/scenarios/latent-space/quantum-hybrid.d.ts.map +0 -1
  573. package/dist/simulation/scenarios/latent-space/quantum-hybrid.js +0 -391
  574. package/dist/simulation/scenarios/latent-space/quantum-hybrid.js.map +0 -1
  575. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts +0 -52
  576. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.d.ts.map +0 -1
  577. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js +0 -514
  578. package/dist/simulation/scenarios/latent-space/self-organizing-hnsw.js.map +0 -1
  579. package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts +0 -53
  580. package/dist/simulation/scenarios/latent-space/traversal-optimization.d.ts.map +0 -1
  581. package/dist/simulation/scenarios/latent-space/traversal-optimization.js +0 -595
  582. package/dist/simulation/scenarios/latent-space/traversal-optimization.js.map +0 -1
  583. package/dist/simulation/scenarios/lean-agentic-swarm.d.ts +0 -18
  584. package/dist/simulation/scenarios/lean-agentic-swarm.d.ts.map +0 -1
  585. package/dist/simulation/scenarios/lean-agentic-swarm.js +0 -132
  586. package/dist/simulation/scenarios/lean-agentic-swarm.js.map +0 -1
  587. package/dist/simulation/scenarios/multi-agent-swarm.d.ts +0 -17
  588. package/dist/simulation/scenarios/multi-agent-swarm.d.ts.map +0 -1
  589. package/dist/simulation/scenarios/multi-agent-swarm.js +0 -111
  590. package/dist/simulation/scenarios/multi-agent-swarm.js.map +0 -1
  591. package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts +0 -23
  592. package/dist/simulation/scenarios/psycho-symbolic-reasoner.d.ts.map +0 -1
  593. package/dist/simulation/scenarios/psycho-symbolic-reasoner.js +0 -98
  594. package/dist/simulation/scenarios/psycho-symbolic-reasoner.js.map +0 -1
  595. package/dist/simulation/scenarios/reflexion-learning.d.ts +0 -16
  596. package/dist/simulation/scenarios/reflexion-learning.d.ts.map +0 -1
  597. package/dist/simulation/scenarios/reflexion-learning.js +0 -98
  598. package/dist/simulation/scenarios/reflexion-learning.js.map +0 -1
  599. package/dist/simulation/scenarios/research-swarm.d.ts +0 -24
  600. package/dist/simulation/scenarios/research-swarm.d.ts.map +0 -1
  601. package/dist/simulation/scenarios/research-swarm.js +0 -146
  602. package/dist/simulation/scenarios/research-swarm.js.map +0 -1
  603. package/dist/simulation/scenarios/skill-evolution.d.ts +0 -16
  604. package/dist/simulation/scenarios/skill-evolution.d.ts.map +0 -1
  605. package/dist/simulation/scenarios/skill-evolution.js +0 -109
  606. package/dist/simulation/scenarios/skill-evolution.js.map +0 -1
  607. package/dist/simulation/scenarios/stock-market-emergence.d.ts +0 -33
  608. package/dist/simulation/scenarios/stock-market-emergence.d.ts.map +0 -1
  609. package/dist/simulation/scenarios/stock-market-emergence.js +0 -246
  610. package/dist/simulation/scenarios/stock-market-emergence.js.map +0 -1
  611. package/dist/simulation/scenarios/strange-loops.d.ts +0 -18
  612. package/dist/simulation/scenarios/strange-loops.d.ts.map +0 -1
  613. package/dist/simulation/scenarios/strange-loops.js +0 -133
  614. package/dist/simulation/scenarios/strange-loops.js.map +0 -1
  615. package/dist/simulation/scenarios/sublinear-solver.d.ts +0 -22
  616. package/dist/simulation/scenarios/sublinear-solver.d.ts.map +0 -1
  617. package/dist/simulation/scenarios/sublinear-solver.js +0 -82
  618. package/dist/simulation/scenarios/sublinear-solver.js.map +0 -1
  619. package/dist/simulation/scenarios/temporal-lead-solver.d.ts +0 -23
  620. package/dist/simulation/scenarios/temporal-lead-solver.d.ts.map +0 -1
  621. package/dist/simulation/scenarios/temporal-lead-solver.js +0 -90
  622. package/dist/simulation/scenarios/temporal-lead-solver.js.map +0 -1
  623. package/dist/simulation/scenarios/voting-system-consensus.d.ts +0 -27
  624. package/dist/simulation/scenarios/voting-system-consensus.d.ts.map +0 -1
  625. package/dist/simulation/scenarios/voting-system-consensus.js +0 -175
  626. package/dist/simulation/scenarios/voting-system-consensus.js.map +0 -1
  627. package/dist/simulation/types.d.ts +0 -162
  628. package/dist/simulation/types.d.ts.map +0 -1
  629. package/dist/simulation/types.js +0 -5
  630. package/dist/simulation/types.js.map +0 -1
  631. package/dist/simulation/utils/PerformanceOptimizer.d.ts +0 -115
  632. package/dist/simulation/utils/PerformanceOptimizer.d.ts.map +0 -1
  633. package/dist/simulation/utils/PerformanceOptimizer.js +0 -223
  634. package/dist/simulation/utils/PerformanceOptimizer.js.map +0 -1
  635. package/dist/src/backends/index.cjs +0 -6
  636. package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts +0 -93
  637. package/dist/src/backends/ruvector/GuardedVectorBackend.d.ts.map +0 -1
  638. package/dist/src/backends/ruvector/GuardedVectorBackend.js +0 -182
  639. package/dist/src/backends/ruvector/GuardedVectorBackend.js.map +0 -1
  640. package/dist/src/consensus/RaftConsensus.d.ts +0 -220
  641. package/dist/src/consensus/RaftConsensus.d.ts.map +0 -1
  642. package/dist/src/consensus/RaftConsensus.js +0 -762
  643. package/dist/src/consensus/RaftConsensus.js.map +0 -1
  644. package/dist/src/controllers/HierarchicalMemory.d.ts +0 -197
  645. package/dist/src/controllers/HierarchicalMemory.d.ts.map +0 -1
  646. package/dist/src/controllers/HierarchicalMemory.js +0 -519
  647. package/dist/src/controllers/HierarchicalMemory.js.map +0 -1
  648. package/dist/src/controllers/MemoryConsolidation.d.ts +0 -142
  649. package/dist/src/controllers/MemoryConsolidation.d.ts.map +0 -1
  650. package/dist/src/controllers/MemoryConsolidation.js +0 -479
  651. package/dist/src/controllers/MemoryConsolidation.js.map +0 -1
  652. package/dist/src/controllers/QUICConnection.d.ts +0 -122
  653. package/dist/src/controllers/QUICConnection.d.ts.map +0 -1
  654. package/dist/src/controllers/QUICConnection.js +0 -329
  655. package/dist/src/controllers/QUICConnection.js.map +0 -1
  656. package/dist/src/controllers/QUICConnectionPool.d.ts +0 -83
  657. package/dist/src/controllers/QUICConnectionPool.d.ts.map +0 -1
  658. package/dist/src/controllers/QUICConnectionPool.js +0 -256
  659. package/dist/src/controllers/QUICConnectionPool.js.map +0 -1
  660. package/dist/src/controllers/QUICStreamManager.d.ts +0 -114
  661. package/dist/src/controllers/QUICStreamManager.d.ts.map +0 -1
  662. package/dist/src/controllers/QUICStreamManager.js +0 -267
  663. package/dist/src/controllers/QUICStreamManager.js.map +0 -1
  664. package/dist/src/controllers/StreamingEmbeddingService.d.ts +0 -82
  665. package/dist/src/controllers/StreamingEmbeddingService.d.ts.map +0 -1
  666. package/dist/src/controllers/StreamingEmbeddingService.js +0 -243
  667. package/dist/src/controllers/StreamingEmbeddingService.js.map +0 -1
  668. package/dist/src/controllers/index.cjs +0 -6
  669. package/dist/src/coordination/MultiDatabaseCoordinator.d.ts +0 -348
  670. package/dist/src/coordination/MultiDatabaseCoordinator.d.ts.map +0 -1
  671. package/dist/src/coordination/MultiDatabaseCoordinator.js +0 -803
  672. package/dist/src/coordination/MultiDatabaseCoordinator.js.map +0 -1
  673. package/dist/src/coordination/index.d.ts +0 -10
  674. package/dist/src/coordination/index.d.ts.map +0 -1
  675. package/dist/src/coordination/index.js +0 -10
  676. package/dist/src/coordination/index.js.map +0 -1
  677. package/dist/src/index.cjs +0 -6
  678. package/dist/src/optimizations/RVFOptimizer.d.ts +0 -226
  679. package/dist/src/optimizations/RVFOptimizer.d.ts.map +0 -1
  680. package/dist/src/optimizations/RVFOptimizer.js +0 -541
  681. package/dist/src/optimizations/RVFOptimizer.js.map +0 -1
  682. package/dist/src/security/AttestationLog.d.ts +0 -70
  683. package/dist/src/security/AttestationLog.d.ts.map +0 -1
  684. package/dist/src/security/AttestationLog.js +0 -174
  685. package/dist/src/security/AttestationLog.js.map +0 -1
  686. package/dist/src/security/MutationGuard.d.ts +0 -83
  687. package/dist/src/security/MutationGuard.d.ts.map +0 -1
  688. package/dist/src/security/MutationGuard.js +0 -364
  689. package/dist/src/security/MutationGuard.js.map +0 -1
  690. package/dist/src/security/index.cjs +0 -6
  691. package/dist/src/security/index.d.ts +0 -15
  692. package/dist/src/security/index.d.ts.map +0 -1
  693. package/dist/src/security/index.js +0 -18
  694. package/dist/src/security/index.js.map +0 -1
  695. package/dist/src/services/GNNService.d.ts +0 -172
  696. package/dist/src/services/GNNService.d.ts.map +0 -1
  697. package/dist/src/services/GNNService.js +0 -612
  698. package/dist/src/services/GNNService.js.map +0 -1
  699. package/dist/src/services/GraphTransformerService.d.ts +0 -80
  700. package/dist/src/services/GraphTransformerService.d.ts.map +0 -1
  701. package/dist/src/services/GraphTransformerService.js +0 -369
  702. package/dist/src/services/GraphTransformerService.js.map +0 -1
  703. package/dist/src/services/SemanticRouter.d.ts +0 -83
  704. package/dist/src/services/SemanticRouter.d.ts.map +0 -1
  705. package/dist/src/services/SemanticRouter.js +0 -160
  706. package/dist/src/services/SemanticRouter.js.map +0 -1
  707. package/dist/src/services/SonaTrajectoryService.d.ts +0 -224
  708. package/dist/src/services/SonaTrajectoryService.d.ts.map +0 -1
  709. package/dist/src/services/SonaTrajectoryService.js +0 -539
  710. package/dist/src/services/SonaTrajectoryService.js.map +0 -1
  711. package/dist/src/utils/LegacyAttentionAdapter.d.ts +0 -93
  712. package/dist/src/utils/LegacyAttentionAdapter.d.ts.map +0 -1
  713. package/dist/src/utils/LegacyAttentionAdapter.js +0 -241
  714. package/dist/src/utils/LegacyAttentionAdapter.js.map +0 -1
  715. package/dist/src/utils/vector-math.d.ts +0 -29
  716. package/dist/src/utils/vector-math.d.ts.map +0 -1
  717. package/dist/src/utils/vector-math.js +0 -66
  718. package/dist/src/utils/vector-math.js.map +0 -1
@@ -0,0 +1,1165 @@
1
+ /**
2
+ * AttentionService - RuVector Attention Mechanisms Integration
3
+ *
4
+ * This service provides a unified interface for attention mechanisms with
5
+ * RuVector WASM/NAPI bindings and robust JavaScript fallback implementations.
6
+ *
7
+ * Architecture:
8
+ * - HyperbolicAttention: Tree-structured Poincare embeddings for causal chains
9
+ * - FlashAttention: Memory-efficient block-wise attention for consolidation
10
+ * - GraphRoPE: Hop-distance-aware positional encoding for graph queries
11
+ * - MoEAttention: Expert routing for specialized memory domains
12
+ *
13
+ * All mechanisms default to FALSE (opt-in) and provide backward-compatible fallbacks.
14
+ * WASM bindings are used when available for 10-100x performance improvements.
15
+ *
16
+ * @module AttentionService
17
+ * @version 2.0.0-alpha.4
18
+ */
19
+ // Performance logging utility
20
+ const PERFORMANCE_LOGGING = process.env.AGENTDB_PERF_LOGGING === 'true';
21
+ const performanceLogs = [];
22
+ function logPerformance(log) {
23
+ if (PERFORMANCE_LOGGING) {
24
+ performanceLogs.push(log);
25
+ console.error(`[AttentionService] ${log.mechanism} using ${log.backend}: ${log.durationMs.toFixed(2)}ms (input size: ${log.inputSize})`);
26
+ }
27
+ }
28
+ /**
29
+ * Get all performance logs (useful for debugging and optimization)
30
+ */
31
+ export function getPerformanceLogs() {
32
+ return [...performanceLogs];
33
+ }
34
+ /**
35
+ * Clear performance logs
36
+ */
37
+ export function clearPerformanceLogs() {
38
+ performanceLogs.length = 0;
39
+ }
40
+ // Lazy-loaded WASM/NAPI modules
41
+ let wasmModule = null;
42
+ let napiModule = null;
43
+ let wasmInitialized = false;
44
+ let napiInitialized = false;
45
+ let wasmLoadAttempted = false;
46
+ let napiLoadAttempted = false;
47
+ /**
48
+ * Attempt to load the ruvector-attention-wasm module
49
+ */
50
+ async function loadWasmModule() {
51
+ if (wasmLoadAttempted)
52
+ return wasmInitialized;
53
+ wasmLoadAttempted = true;
54
+ try {
55
+ // Dynamic import for WASM module
56
+ const wasm = await import('ruvector-attention-wasm');
57
+ if (wasm.default) {
58
+ await wasm.default(); // Initialize WASM
59
+ }
60
+ else if (wasm.init) {
61
+ wasm.init();
62
+ }
63
+ wasmModule = wasm;
64
+ wasmInitialized = true;
65
+ if (PERFORMANCE_LOGGING) {
66
+ console.error('[AttentionService] WASM module loaded successfully');
67
+ }
68
+ return true;
69
+ }
70
+ catch (error) {
71
+ if (PERFORMANCE_LOGGING) {
72
+ console.warn('[AttentionService] WASM module not available:', error.message);
73
+ }
74
+ return false;
75
+ }
76
+ }
77
+ /**
78
+ * Attempt to load the @ruvector/attention NAPI module
79
+ */
80
+ async function loadNapiModule() {
81
+ if (napiLoadAttempted)
82
+ return napiInitialized;
83
+ napiLoadAttempted = true;
84
+ try {
85
+ // Dynamic import for NAPI module
86
+ napiModule = await import('@ruvector/attention');
87
+ napiInitialized = true;
88
+ if (PERFORMANCE_LOGGING) {
89
+ console.error('[AttentionService] NAPI module loaded successfully');
90
+ }
91
+ return true;
92
+ }
93
+ catch (error) {
94
+ if (PERFORMANCE_LOGGING) {
95
+ console.warn('[AttentionService] NAPI module not available:', error.message);
96
+ }
97
+ return false;
98
+ }
99
+ }
100
+ /**
101
+ * Check if WASM backend is available
102
+ */
103
+ export function isWasmAvailable() {
104
+ return wasmInitialized;
105
+ }
106
+ /**
107
+ * Check if NAPI backend is available
108
+ */
109
+ export function isNapiAvailable() {
110
+ return napiInitialized;
111
+ }
112
+ /**
113
+ * Get the best available backend
114
+ */
115
+ export function getAvailableBackend() {
116
+ if (napiInitialized)
117
+ return 'napi';
118
+ if (wasmInitialized)
119
+ return 'wasm';
120
+ return 'fallback';
121
+ }
122
+ /**
123
+ * AttentionService - Unified interface for attention mechanisms
124
+ *
125
+ * Provides fallback implementations until RuVector WASM/NAPI bindings are available.
126
+ * All mechanisms are opt-in via configuration flags.
127
+ */
128
+ export class AttentionService {
129
+ db;
130
+ hyperbolicConfig;
131
+ flashConfig;
132
+ graphRoPEConfig;
133
+ moeConfig;
134
+ constructor(db, configs) {
135
+ this.db = db;
136
+ // Initialize configs with defaults (all disabled)
137
+ this.hyperbolicConfig = {
138
+ enabled: false,
139
+ curvature: 1.0,
140
+ dimension: 384,
141
+ temperature: 1.0,
142
+ ...configs?.hyperbolic,
143
+ };
144
+ this.flashConfig = {
145
+ enabled: false,
146
+ blockSize: 256,
147
+ useSIMD: true,
148
+ maxSeqLen: 4096,
149
+ ...configs?.flash,
150
+ };
151
+ this.graphRoPEConfig = {
152
+ enabled: false,
153
+ maxHops: 10,
154
+ rotaryDim: 64,
155
+ baseFreq: 10000,
156
+ ...configs?.graphRoPE,
157
+ };
158
+ this.moeConfig = {
159
+ enabled: false,
160
+ numExperts: 8,
161
+ topK: 2,
162
+ expertDomains: ['code', 'data', 'reasoning', 'planning', 'execution', 'review', 'documentation', 'optimization'],
163
+ ...configs?.moe,
164
+ };
165
+ }
166
+ /**
167
+ * HyperbolicAttention: Tree-structured Poincare attention for causal chains
168
+ *
169
+ * Uses hyperbolic geometry to model hierarchical relationships in causal memory.
170
+ * Attempts to use NAPI bindings first, then WASM, then falls back to JavaScript.
171
+ *
172
+ * @param queries - Query embeddings [num_queries, dim]
173
+ * @param keys - Key embeddings from causal chain [num_keys, dim]
174
+ * @param values - Value embeddings [num_keys, dim]
175
+ * @param hierarchyLevels - Hierarchy level for each key (0 = root)
176
+ * @returns Attention result with Poincare-weighted outputs
177
+ */
178
+ async hyperbolicAttention(queries, keys, values, hierarchyLevels) {
179
+ const startTime = Date.now();
180
+ const dim = this.hyperbolicConfig.dimension;
181
+ const numQueries = queries.length / dim;
182
+ const numKeys = keys.length / dim;
183
+ if (!this.hyperbolicConfig.enabled) {
184
+ // Fallback: Standard attention with hierarchical scaling
185
+ return this.fallbackHyperbolicAttention(queries, keys, values, hierarchyLevels, startTime);
186
+ }
187
+ // Try NAPI first (fastest for Node.js)
188
+ await loadNapiModule();
189
+ if (napiInitialized && napiModule?.HyperbolicAttention) {
190
+ try {
191
+ const attention = new napiModule.HyperbolicAttention(dim, this.hyperbolicConfig.curvature);
192
+ // Convert to format expected by NAPI: arrays of Float32Arrays
193
+ const keysArray = [];
194
+ const valuesArray = [];
195
+ for (let i = 0; i < numKeys; i++) {
196
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
197
+ valuesArray.push(values.slice(i * dim, (i + 1) * dim));
198
+ }
199
+ // Process each query
200
+ const attended = new Float32Array(numQueries * dim);
201
+ const allWeights = [];
202
+ for (let q = 0; q < numQueries; q++) {
203
+ const query = queries.slice(q * dim, (q + 1) * dim);
204
+ const result = attention.computeRaw(query, keysArray, valuesArray);
205
+ attended.set(result, q * dim);
206
+ // Approximate weights based on hierarchy
207
+ for (let k = 0; k < numKeys; k++) {
208
+ allWeights.push(Math.exp(-hierarchyLevels[k] * 0.5) / numKeys);
209
+ }
210
+ }
211
+ const durationMs = Date.now() - startTime;
212
+ logPerformance({
213
+ mechanism: 'hyperbolicAttention',
214
+ backend: 'napi',
215
+ durationMs,
216
+ inputSize: queries.length,
217
+ timestamp: Date.now(),
218
+ });
219
+ return {
220
+ attended,
221
+ weights: new Float32Array(allWeights),
222
+ distances: hierarchyLevels,
223
+ metrics: {
224
+ computeTimeMs: durationMs,
225
+ memoryUsedMB: (attended.byteLength + allWeights.length * 4) / (1024 * 1024),
226
+ },
227
+ };
228
+ }
229
+ catch (error) {
230
+ if (PERFORMANCE_LOGGING) {
231
+ console.warn('[AttentionService] NAPI hyperbolicAttention failed, trying WASM:', error.message);
232
+ }
233
+ }
234
+ }
235
+ // Try WASM (for browsers or Node.js fallback)
236
+ await loadWasmModule();
237
+ if (wasmInitialized && wasmModule?.WasmHyperbolicAttention) {
238
+ try {
239
+ const attention = new wasmModule.WasmHyperbolicAttention(dim, this.hyperbolicConfig.curvature);
240
+ // Convert to format expected by WASM
241
+ const keysArray = [];
242
+ const valuesArray = [];
243
+ for (let i = 0; i < numKeys; i++) {
244
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
245
+ valuesArray.push(values.slice(i * dim, (i + 1) * dim));
246
+ }
247
+ // Process each query
248
+ const attended = new Float32Array(numQueries * dim);
249
+ const allWeights = [];
250
+ for (let q = 0; q < numQueries; q++) {
251
+ const query = queries.slice(q * dim, (q + 1) * dim);
252
+ const result = attention.compute(query, keysArray, valuesArray);
253
+ attended.set(result, q * dim);
254
+ // Approximate weights based on hierarchy
255
+ for (let k = 0; k < numKeys; k++) {
256
+ allWeights.push(Math.exp(-hierarchyLevels[k] * 0.5) / numKeys);
257
+ }
258
+ }
259
+ // Clean up WASM instance
260
+ if (attention.free) {
261
+ attention.free();
262
+ }
263
+ const durationMs = Date.now() - startTime;
264
+ logPerformance({
265
+ mechanism: 'hyperbolicAttention',
266
+ backend: 'wasm',
267
+ durationMs,
268
+ inputSize: queries.length,
269
+ timestamp: Date.now(),
270
+ });
271
+ return {
272
+ attended,
273
+ weights: new Float32Array(allWeights),
274
+ distances: hierarchyLevels,
275
+ metrics: {
276
+ computeTimeMs: durationMs,
277
+ memoryUsedMB: (attended.byteLength + allWeights.length * 4) / (1024 * 1024),
278
+ },
279
+ };
280
+ }
281
+ catch (error) {
282
+ if (PERFORMANCE_LOGGING) {
283
+ console.warn('[AttentionService] WASM hyperbolicAttention failed, using fallback:', error.message);
284
+ }
285
+ }
286
+ }
287
+ // Fallback to JavaScript implementation
288
+ return this.fallbackHyperbolicAttention(queries, keys, values, hierarchyLevels, startTime);
289
+ }
290
+ /**
291
+ * FlashAttention: Memory-efficient block-wise attention for consolidation
292
+ *
293
+ * Processes attention in blocks to reduce peak memory usage.
294
+ * Ideal for episodic memory consolidation with large buffers.
295
+ * Attempts to use NAPI bindings first, then WASM, then falls back to JavaScript.
296
+ *
297
+ * @param queries - Query embeddings [num_queries, dim]
298
+ * @param keys - Key embeddings [num_keys, dim]
299
+ * @param values - Value embeddings [num_keys, dim]
300
+ * @returns Attention result with memory-efficient computation
301
+ */
302
+ async flashAttention(queries, keys, values) {
303
+ const startTime = Date.now();
304
+ const dim = 384; // Standard dimension
305
+ const numQueries = queries.length / dim;
306
+ const numKeys = keys.length / dim;
307
+ const blockSize = this.flashConfig.blockSize;
308
+ if (!this.flashConfig.enabled) {
309
+ // Fallback: Chunked attention
310
+ return this.fallbackFlashAttention(queries, keys, values, startTime);
311
+ }
312
+ // Try NAPI first (fastest for Node.js)
313
+ await loadNapiModule();
314
+ if (napiInitialized && napiModule?.FlashAttention) {
315
+ try {
316
+ const attention = new napiModule.FlashAttention(dim, blockSize);
317
+ // Convert to format expected by NAPI: arrays of Float32Arrays
318
+ const keysArray = [];
319
+ const valuesArray = [];
320
+ for (let i = 0; i < numKeys; i++) {
321
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
322
+ valuesArray.push(values.slice(i * dim, (i + 1) * dim));
323
+ }
324
+ // Process each query
325
+ const output = new Float32Array(numQueries * dim);
326
+ let blocksProcessed = 0;
327
+ for (let q = 0; q < numQueries; q++) {
328
+ const query = queries.slice(q * dim, (q + 1) * dim);
329
+ const result = attention.computeRaw(query, keysArray, valuesArray);
330
+ output.set(result, q * dim);
331
+ blocksProcessed += Math.ceil(numKeys / blockSize);
332
+ }
333
+ const durationMs = Date.now() - startTime;
334
+ logPerformance({
335
+ mechanism: 'flashAttention',
336
+ backend: 'napi',
337
+ durationMs,
338
+ inputSize: queries.length,
339
+ timestamp: Date.now(),
340
+ });
341
+ return {
342
+ output,
343
+ metrics: {
344
+ computeTimeMs: durationMs,
345
+ peakMemoryMB: (output.byteLength + blockSize * dim * 4 * 2) / (1024 * 1024),
346
+ blocksProcessed,
347
+ },
348
+ };
349
+ }
350
+ catch (error) {
351
+ if (PERFORMANCE_LOGGING) {
352
+ console.warn('[AttentionService] NAPI flashAttention failed, trying WASM:', error.message);
353
+ }
354
+ }
355
+ }
356
+ // Try WASM (for browsers or Node.js fallback)
357
+ await loadWasmModule();
358
+ if (wasmInitialized && wasmModule?.WasmFlashAttention) {
359
+ try {
360
+ const attention = new wasmModule.WasmFlashAttention(dim, blockSize);
361
+ // Convert to format expected by WASM
362
+ const keysArray = [];
363
+ const valuesArray = [];
364
+ for (let i = 0; i < numKeys; i++) {
365
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
366
+ valuesArray.push(values.slice(i * dim, (i + 1) * dim));
367
+ }
368
+ // Process each query
369
+ const output = new Float32Array(numQueries * dim);
370
+ let blocksProcessed = 0;
371
+ for (let q = 0; q < numQueries; q++) {
372
+ const query = queries.slice(q * dim, (q + 1) * dim);
373
+ const result = attention.compute(query, keysArray, valuesArray);
374
+ output.set(result, q * dim);
375
+ blocksProcessed += Math.ceil(numKeys / blockSize);
376
+ }
377
+ // Clean up WASM instance
378
+ if (attention.free) {
379
+ attention.free();
380
+ }
381
+ const durationMs = Date.now() - startTime;
382
+ logPerformance({
383
+ mechanism: 'flashAttention',
384
+ backend: 'wasm',
385
+ durationMs,
386
+ inputSize: queries.length,
387
+ timestamp: Date.now(),
388
+ });
389
+ return {
390
+ output,
391
+ metrics: {
392
+ computeTimeMs: durationMs,
393
+ peakMemoryMB: (output.byteLength + blockSize * dim * 4 * 2) / (1024 * 1024),
394
+ blocksProcessed,
395
+ },
396
+ };
397
+ }
398
+ catch (error) {
399
+ if (PERFORMANCE_LOGGING) {
400
+ console.warn('[AttentionService] WASM flashAttention failed, using fallback:', error.message);
401
+ }
402
+ }
403
+ }
404
+ // Fallback to JavaScript implementation
405
+ return this.fallbackFlashAttention(queries, keys, values, startTime);
406
+ }
407
+ /**
408
+ * GraphRoPE: Hop-distance-aware rotary positional encoding
409
+ *
410
+ * Encodes graph distances into query/key representations using rotary
411
+ * positional embeddings. Attempts to use NAPI bindings first, then falls
412
+ * back to JavaScript implementation.
413
+ *
414
+ * Note: The WASM module does not have a direct GraphRoPE binding, so we
415
+ * use the NAPI GraphRoPeAttention class when available.
416
+ *
417
+ * @param queries - Query embeddings [num_queries, dim]
418
+ * @param keys - Key embeddings [num_keys, dim]
419
+ * @param hopDistances - Hop distance matrix [num_queries, num_keys]
420
+ * @returns Position-encoded queries and keys
421
+ */
422
+ async graphRoPE(queries, keys, hopDistances) {
423
+ const startTime = Date.now();
424
+ const dim = 384; // Standard dimension
425
+ const numQueries = queries.length / dim;
426
+ const numKeys = keys.length / dim;
427
+ const maxPosition = this.graphRoPEConfig.maxHops;
428
+ if (!this.graphRoPEConfig.enabled) {
429
+ // Fallback: Distance scaling
430
+ return this.fallbackGraphRoPE(queries, keys, hopDistances, startTime);
431
+ }
432
+ // Try NAPI first (has GraphRoPeAttention)
433
+ await loadNapiModule();
434
+ if (napiInitialized && napiModule?.GraphRoPeAttention) {
435
+ try {
436
+ const rope = new napiModule.GraphRoPeAttention(dim, maxPosition);
437
+ // The GraphRoPeAttention is an attention mechanism, not just encoding
438
+ // We use it to compute position-aware attention, then extract the patterns
439
+ const keysArray = [];
440
+ const valuesArray = [];
441
+ for (let i = 0; i < numKeys; i++) {
442
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
443
+ valuesArray.push(keys.slice(i * dim, (i + 1) * dim)); // Use keys as values for encoding
444
+ }
445
+ // Apply RoPE encoding per query
446
+ const encodedQueries = new Float32Array(queries.length);
447
+ const encodedKeys = new Float32Array(keys.length);
448
+ const hopEncodings = new Float32Array(numQueries * numKeys);
449
+ // Copy original queries/keys as base
450
+ encodedQueries.set(queries);
451
+ encodedKeys.set(keys);
452
+ // Compute hop-aware encodings using the attention mechanism
453
+ for (let q = 0; q < numQueries; q++) {
454
+ const query = queries.slice(q * dim, (q + 1) * dim);
455
+ const result = rope.computeRaw(query, keysArray, valuesArray);
456
+ // The result gives us position-encoded output
457
+ // Extract encoding strength from the result
458
+ for (let k = 0; k < numKeys; k++) {
459
+ const hopDistance = hopDistances[q]?.[k] || 0;
460
+ const scale = 1.0 / (1.0 + hopDistance);
461
+ hopEncodings[q * numKeys + k] = scale;
462
+ // Apply rotary-like scaling to queries
463
+ if (q === 0) {
464
+ for (let d = 0; d < dim; d++) {
465
+ const theta = d / dim * Math.PI * hopDistance / maxPosition;
466
+ const cos_t = Math.cos(theta);
467
+ const sin_t = Math.sin(theta);
468
+ // Simple rotary application
469
+ if (d % 2 === 0 && d + 1 < dim) {
470
+ const x = keys[k * dim + d];
471
+ const y = keys[k * dim + d + 1];
472
+ encodedKeys[k * dim + d] = x * cos_t - y * sin_t;
473
+ encodedKeys[k * dim + d + 1] = x * sin_t + y * cos_t;
474
+ }
475
+ }
476
+ }
477
+ }
478
+ // Apply rotary to queries
479
+ for (let d = 0; d < dim; d++) {
480
+ const avgHop = hopDistances[q]?.reduce((a, b) => a + b, 0) / (numKeys || 1) || 0;
481
+ const theta = d / dim * Math.PI * avgHop / maxPosition;
482
+ const cos_t = Math.cos(theta);
483
+ const sin_t = Math.sin(theta);
484
+ if (d % 2 === 0 && d + 1 < dim) {
485
+ const x = queries[q * dim + d];
486
+ const y = queries[q * dim + d + 1];
487
+ encodedQueries[q * dim + d] = x * cos_t - y * sin_t;
488
+ encodedQueries[q * dim + d + 1] = x * sin_t + y * cos_t;
489
+ }
490
+ }
491
+ }
492
+ const durationMs = Date.now() - startTime;
493
+ logPerformance({
494
+ mechanism: 'graphRoPE',
495
+ backend: 'napi',
496
+ durationMs,
497
+ inputSize: queries.length,
498
+ timestamp: Date.now(),
499
+ });
500
+ return {
501
+ queries: encodedQueries,
502
+ keys: encodedKeys,
503
+ hopEncodings,
504
+ metrics: {
505
+ computeTimeMs: durationMs,
506
+ },
507
+ };
508
+ }
509
+ catch (error) {
510
+ if (PERFORMANCE_LOGGING) {
511
+ console.warn('[AttentionService] NAPI graphRoPE failed, using fallback:', error.message);
512
+ }
513
+ }
514
+ }
515
+ // WASM module does not have a direct GraphRoPE binding
516
+ // The WasmLocalGlobalAttention is the closest but not suitable for this use case
517
+ // Fall through to JavaScript implementation
518
+ // Fallback to JavaScript implementation
519
+ const result = this.fallbackGraphRoPE(queries, keys, hopDistances, startTime);
520
+ logPerformance({
521
+ mechanism: 'graphRoPE',
522
+ backend: 'fallback',
523
+ durationMs: Date.now() - startTime,
524
+ inputSize: queries.length,
525
+ timestamp: Date.now(),
526
+ });
527
+ return result;
528
+ }
529
+ /**
530
+ * MoEAttention: Mixture-of-Experts routing for specialized domains
531
+ *
532
+ * Routes queries to specialized expert networks based on domain.
533
+ * Ideal for ReasoningBank with diverse pattern types.
534
+ * Attempts to use NAPI bindings first, then WASM, then falls back to JavaScript.
535
+ *
536
+ * @param queries - Query embeddings [num_queries, dim]
537
+ * @param keys - Key embeddings [num_keys, dim]
538
+ * @param values - Value embeddings [num_keys, dim]
539
+ * @param domains - Domain labels for each key
540
+ * @returns Expert-routed attention output
541
+ */
542
+ async moeAttention(queries, keys, values, domains) {
543
+ const startTime = Date.now();
544
+ const dim = 384; // Standard dimension
545
+ const numQueries = queries.length / dim;
546
+ const numKeys = keys.length / dim;
547
+ const numExperts = this.moeConfig.numExperts;
548
+ const topK = this.moeConfig.topK;
549
+ if (!this.moeConfig.enabled) {
550
+ // Fallback: Domain-weighted attention
551
+ return this.fallbackMoEAttention(queries, keys, values, domains, startTime);
552
+ }
553
+ // Try NAPI first (fastest for Node.js)
554
+ await loadNapiModule();
555
+ if (napiInitialized && napiModule?.MoEAttention) {
556
+ try {
557
+ // MoEAttention constructor takes a config object
558
+ const moe = napiModule.MoEAttention.simple
559
+ ? napiModule.MoEAttention.simple(dim, numExperts, topK)
560
+ : new napiModule.MoEAttention({
561
+ dim,
562
+ numExperts,
563
+ topK,
564
+ });
565
+ // Convert to format expected by NAPI: arrays of Float32Arrays
566
+ const keysArray = [];
567
+ const valuesArray = [];
568
+ for (let i = 0; i < numKeys; i++) {
569
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
570
+ valuesArray.push(values.slice(i * dim, (i + 1) * dim));
571
+ }
572
+ // Process each query
573
+ const output = new Float32Array(numQueries * dim);
574
+ const expertAssignments = [];
575
+ const expertWeights = [];
576
+ const expertsUsed = new Set();
577
+ for (let q = 0; q < numQueries; q++) {
578
+ const query = queries.slice(q * dim, (q + 1) * dim);
579
+ const result = moe.computeRaw(query, keysArray, valuesArray);
580
+ output.set(result, q * dim);
581
+ // Compute expert assignments based on domain distribution
582
+ const domainCounts = new Map();
583
+ domains.forEach(d => domainCounts.set(d, (domainCounts.get(d) || 0) + 1));
584
+ const assignments = [];
585
+ const weights = [];
586
+ const sortedDomains = Array.from(domainCounts.entries())
587
+ .sort((a, b) => b[1] - a[1])
588
+ .slice(0, topK);
589
+ sortedDomains.forEach(([domain, count]) => {
590
+ const expertIdx = this.moeConfig.expertDomains.indexOf(domain);
591
+ if (expertIdx >= 0 && expertIdx < numExperts) {
592
+ assignments.push(expertIdx);
593
+ weights.push(count / domains.length);
594
+ expertsUsed.add(expertIdx);
595
+ }
596
+ });
597
+ expertAssignments.push(assignments);
598
+ expertWeights.push(weights);
599
+ }
600
+ const durationMs = Date.now() - startTime;
601
+ logPerformance({
602
+ mechanism: 'moeAttention',
603
+ backend: 'napi',
604
+ durationMs,
605
+ inputSize: queries.length,
606
+ timestamp: Date.now(),
607
+ });
608
+ return {
609
+ output,
610
+ expertAssignments,
611
+ expertWeights,
612
+ metrics: {
613
+ computeTimeMs: durationMs,
614
+ expertsUsed: expertsUsed.size,
615
+ routingEntropy: this.calculateEntropy(expertWeights.flat()),
616
+ },
617
+ };
618
+ }
619
+ catch (error) {
620
+ if (PERFORMANCE_LOGGING) {
621
+ console.warn('[AttentionService] NAPI moeAttention failed, trying WASM:', error.message);
622
+ }
623
+ }
624
+ }
625
+ // Try WASM (for browsers or Node.js fallback)
626
+ await loadWasmModule();
627
+ if (wasmInitialized && wasmModule?.WasmMoEAttention) {
628
+ try {
629
+ const moe = new wasmModule.WasmMoEAttention(dim, numExperts, topK);
630
+ // Convert to format expected by WASM
631
+ const keysArray = [];
632
+ const valuesArray = [];
633
+ for (let i = 0; i < numKeys; i++) {
634
+ keysArray.push(keys.slice(i * dim, (i + 1) * dim));
635
+ valuesArray.push(values.slice(i * dim, (i + 1) * dim));
636
+ }
637
+ // Process each query
638
+ const output = new Float32Array(numQueries * dim);
639
+ const expertAssignments = [];
640
+ const expertWeights = [];
641
+ const expertsUsed = new Set();
642
+ for (let q = 0; q < numQueries; q++) {
643
+ const query = queries.slice(q * dim, (q + 1) * dim);
644
+ const result = moe.compute(query, keysArray, valuesArray);
645
+ output.set(result, q * dim);
646
+ // Compute expert assignments based on domain distribution
647
+ const domainCounts = new Map();
648
+ domains.forEach(d => domainCounts.set(d, (domainCounts.get(d) || 0) + 1));
649
+ const assignments = [];
650
+ const weights = [];
651
+ const sortedDomains = Array.from(domainCounts.entries())
652
+ .sort((a, b) => b[1] - a[1])
653
+ .slice(0, topK);
654
+ sortedDomains.forEach(([domain, count]) => {
655
+ const expertIdx = this.moeConfig.expertDomains.indexOf(domain);
656
+ if (expertIdx >= 0 && expertIdx < numExperts) {
657
+ assignments.push(expertIdx);
658
+ weights.push(count / domains.length);
659
+ expertsUsed.add(expertIdx);
660
+ }
661
+ });
662
+ expertAssignments.push(assignments);
663
+ expertWeights.push(weights);
664
+ }
665
+ // Clean up WASM instance
666
+ if (moe.free) {
667
+ moe.free();
668
+ }
669
+ const durationMs = Date.now() - startTime;
670
+ logPerformance({
671
+ mechanism: 'moeAttention',
672
+ backend: 'wasm',
673
+ durationMs,
674
+ inputSize: queries.length,
675
+ timestamp: Date.now(),
676
+ });
677
+ return {
678
+ output,
679
+ expertAssignments,
680
+ expertWeights,
681
+ metrics: {
682
+ computeTimeMs: durationMs,
683
+ expertsUsed: expertsUsed.size,
684
+ routingEntropy: this.calculateEntropy(expertWeights.flat()),
685
+ },
686
+ };
687
+ }
688
+ catch (error) {
689
+ if (PERFORMANCE_LOGGING) {
690
+ console.warn('[AttentionService] WASM moeAttention failed, using fallback:', error.message);
691
+ }
692
+ }
693
+ }
694
+ // Fallback to JavaScript implementation
695
+ return this.fallbackMoEAttention(queries, keys, values, domains, startTime);
696
+ }
697
+ // ========================================================================
698
+ // Fallback Implementations (CPU-based, backward compatible)
699
+ // ========================================================================
700
+ fallbackHyperbolicAttention(queries, keys, values, hierarchyLevels, startTime) {
701
+ const dim = this.hyperbolicConfig.dimension;
702
+ const numQueries = queries.length / dim;
703
+ const numKeys = keys.length / dim;
704
+ // Compute attention scores with hierarchical scaling
705
+ // Uses Poincare ball approximation for hyperbolic distances
706
+ const scores = new Float32Array(numQueries * numKeys);
707
+ const distances = [];
708
+ const curvature = this.hyperbolicConfig.curvature;
709
+ for (let i = 0; i < numQueries; i++) {
710
+ for (let j = 0; j < numKeys; j++) {
711
+ // Dot product with hyperbolic distance weighting
712
+ let score = 0;
713
+ let qNormSq = 0;
714
+ let kNormSq = 0;
715
+ for (let d = 0; d < dim; d++) {
716
+ const qVal = queries[i * dim + d];
717
+ const kVal = keys[j * dim + d];
718
+ score += qVal * kVal;
719
+ qNormSq += qVal * qVal;
720
+ kNormSq += kVal * kVal;
721
+ }
722
+ // Apply hyperbolic distance correction
723
+ // d_H(x, y) = 2 * arctanh(||(-x) + y|| / (1 - ||x||^2)(1 - ||y||^2))
724
+ const qNorm = Math.sqrt(Math.min(qNormSq, 0.99)); // Clamp to Poincare ball
725
+ const kNorm = Math.sqrt(Math.min(kNormSq, 0.99));
726
+ const hyperbolicScale = 1.0 / (1.0 + curvature * qNorm * kNorm);
727
+ // Hierarchical scaling (deeper nodes get exponentially scaled)
728
+ const hierarchyScale = Math.exp(-hierarchyLevels[j] * 0.5);
729
+ score *= hierarchyScale * hyperbolicScale;
730
+ scores[i * numKeys + j] = score / Math.sqrt(dim); // Scale by sqrt(dim)
731
+ distances.push(hierarchyLevels[j]);
732
+ }
733
+ }
734
+ // Softmax with temperature
735
+ const temperature = this.hyperbolicConfig.temperature;
736
+ const weights = this.softmax(scores, numQueries, numKeys, temperature);
737
+ // Compute attended output
738
+ const attended = new Float32Array(numQueries * dim);
739
+ for (let i = 0; i < numQueries; i++) {
740
+ for (let j = 0; j < numKeys; j++) {
741
+ const weight = weights[i * numKeys + j];
742
+ for (let d = 0; d < dim; d++) {
743
+ attended[i * dim + d] += weight * values[j * dim + d];
744
+ }
745
+ }
746
+ }
747
+ const durationMs = Date.now() - startTime;
748
+ logPerformance({
749
+ mechanism: 'hyperbolicAttention',
750
+ backend: 'fallback',
751
+ durationMs,
752
+ inputSize: queries.length,
753
+ timestamp: Date.now(),
754
+ });
755
+ return {
756
+ attended,
757
+ weights,
758
+ distances,
759
+ metrics: {
760
+ computeTimeMs: durationMs,
761
+ memoryUsedMB: (attended.byteLength + weights.byteLength) / (1024 * 1024),
762
+ },
763
+ };
764
+ }
765
+ fallbackFlashAttention(queries, keys, values, startTime) {
766
+ const dim = 384; // Assume standard dimension
767
+ const numQueries = queries.length / dim;
768
+ const numKeys = keys.length / dim;
769
+ const blockSize = this.flashConfig.blockSize;
770
+ const scale = 1.0 / Math.sqrt(dim);
771
+ const output = new Float32Array(numQueries * dim);
772
+ let blocksProcessed = 0;
773
+ let peakMemory = 0;
774
+ // Process in blocks to reduce memory (Flash Attention algorithm)
775
+ // This implements a simplified version of the FlashAttention tiling strategy
776
+ for (let qStart = 0; qStart < numQueries; qStart += blockSize) {
777
+ const qEnd = Math.min(qStart + blockSize, numQueries);
778
+ const qBlockSize = qEnd - qStart;
779
+ // Track running max and sum for online softmax per query
780
+ const runningMax = new Float32Array(qBlockSize).fill(-Infinity);
781
+ const runningSum = new Float32Array(qBlockSize).fill(0);
782
+ const accumulatedOutput = new Float32Array(qBlockSize * dim);
783
+ for (let kStart = 0; kStart < numKeys; kStart += blockSize) {
784
+ const kEnd = Math.min(kStart + blockSize, numKeys);
785
+ const kBlockSize = kEnd - kStart;
786
+ // Compute block attention scores
787
+ const blockScores = new Float32Array(qBlockSize * kBlockSize);
788
+ for (let qi = 0; qi < qBlockSize; qi++) {
789
+ const i = qStart + qi;
790
+ for (let ki = 0; ki < kBlockSize; ki++) {
791
+ const j = kStart + ki;
792
+ let score = 0;
793
+ for (let d = 0; d < dim; d++) {
794
+ score += queries[i * dim + d] * keys[j * dim + d];
795
+ }
796
+ blockScores[qi * kBlockSize + ki] = score * scale;
797
+ }
798
+ }
799
+ // Online softmax update with proper rescaling
800
+ for (let qi = 0; qi < qBlockSize; qi++) {
801
+ // Find new max
802
+ let newMax = runningMax[qi];
803
+ for (let ki = 0; ki < kBlockSize; ki++) {
804
+ newMax = Math.max(newMax, blockScores[qi * kBlockSize + ki]);
805
+ }
806
+ // Rescale existing accumulator
807
+ const rescale = Math.exp(runningMax[qi] - newMax);
808
+ let newSum = runningSum[qi] * rescale;
809
+ // Rescale accumulated output
810
+ for (let d = 0; d < dim; d++) {
811
+ accumulatedOutput[qi * dim + d] *= rescale;
812
+ }
813
+ // Add new block contribution
814
+ for (let ki = 0; ki < kBlockSize; ki++) {
815
+ const j = kStart + ki;
816
+ const expScore = Math.exp(blockScores[qi * kBlockSize + ki] - newMax);
817
+ newSum += expScore;
818
+ for (let d = 0; d < dim; d++) {
819
+ accumulatedOutput[qi * dim + d] += expScore * values[j * dim + d];
820
+ }
821
+ }
822
+ runningMax[qi] = newMax;
823
+ runningSum[qi] = newSum;
824
+ }
825
+ peakMemory = Math.max(peakMemory, blockScores.byteLength + qBlockSize * dim * 4);
826
+ blocksProcessed++;
827
+ }
828
+ // Normalize and copy to output
829
+ for (let qi = 0; qi < qBlockSize; qi++) {
830
+ const i = qStart + qi;
831
+ const invSum = runningSum[qi] > 1e-8 ? 1.0 / runningSum[qi] : 0;
832
+ for (let d = 0; d < dim; d++) {
833
+ output[i * dim + d] = accumulatedOutput[qi * dim + d] * invSum;
834
+ }
835
+ }
836
+ }
837
+ const durationMs = Date.now() - startTime;
838
+ logPerformance({
839
+ mechanism: 'flashAttention',
840
+ backend: 'fallback',
841
+ durationMs,
842
+ inputSize: queries.length,
843
+ timestamp: Date.now(),
844
+ });
845
+ return {
846
+ output,
847
+ metrics: {
848
+ computeTimeMs: durationMs,
849
+ peakMemoryMB: peakMemory / (1024 * 1024),
850
+ blocksProcessed,
851
+ },
852
+ };
853
+ }
854
+ fallbackGraphRoPE(queries, keys, hopDistances, startTime) {
855
+ const dim = 384;
856
+ const numQueries = queries.length / dim;
857
+ const numKeys = keys.length / dim;
858
+ const rotaryDim = this.graphRoPEConfig.rotaryDim;
859
+ const baseFreq = this.graphRoPEConfig.baseFreq;
860
+ const maxHops = this.graphRoPEConfig.maxHops;
861
+ // Create output arrays (copy originals first)
862
+ const encodedQueries = new Float32Array(queries);
863
+ const encodedKeys = new Float32Array(keys);
864
+ const hopEncodings = new Float32Array(numQueries * numKeys);
865
+ // Apply rotary positional encoding based on hop distances
866
+ // RoPE: rotate pairs of dimensions based on position
867
+ for (let i = 0; i < numQueries; i++) {
868
+ // Calculate average hop distance for this query
869
+ let avgHop = 0;
870
+ let validHops = 0;
871
+ for (let j = 0; j < numKeys; j++) {
872
+ const distance = hopDistances[i]?.[j];
873
+ if (distance !== undefined) {
874
+ avgHop += distance;
875
+ validHops++;
876
+ }
877
+ }
878
+ avgHop = validHops > 0 ? avgHop / validHops : 0;
879
+ // Apply rotary encoding to query
880
+ for (let d = 0; d < Math.min(rotaryDim, dim); d += 2) {
881
+ if (d + 1 >= dim)
882
+ break;
883
+ // Frequency for this dimension pair
884
+ const freq = 1.0 / Math.pow(baseFreq, d / rotaryDim);
885
+ const theta = avgHop * freq * Math.PI / maxHops;
886
+ const cos_t = Math.cos(theta);
887
+ const sin_t = Math.sin(theta);
888
+ // Rotate the dimension pair
889
+ const x = encodedQueries[i * dim + d];
890
+ const y = encodedQueries[i * dim + d + 1];
891
+ encodedQueries[i * dim + d] = x * cos_t - y * sin_t;
892
+ encodedQueries[i * dim + d + 1] = x * sin_t + y * cos_t;
893
+ }
894
+ // Store hop encodings
895
+ for (let j = 0; j < numKeys; j++) {
896
+ const distance = hopDistances[i]?.[j] || 0;
897
+ const scale = 1.0 / (1.0 + distance);
898
+ hopEncodings[i * numKeys + j] = scale;
899
+ }
900
+ }
901
+ // Apply rotary encoding to keys based on their position in the graph
902
+ for (let j = 0; j < numKeys; j++) {
903
+ // Use key index as position (could be enhanced with actual graph positions)
904
+ const keyPosition = j;
905
+ for (let d = 0; d < Math.min(rotaryDim, dim); d += 2) {
906
+ if (d + 1 >= dim)
907
+ break;
908
+ const freq = 1.0 / Math.pow(baseFreq, d / rotaryDim);
909
+ const theta = keyPosition * freq * Math.PI / (numKeys || 1);
910
+ const cos_t = Math.cos(theta);
911
+ const sin_t = Math.sin(theta);
912
+ const x = encodedKeys[j * dim + d];
913
+ const y = encodedKeys[j * dim + d + 1];
914
+ encodedKeys[j * dim + d] = x * cos_t - y * sin_t;
915
+ encodedKeys[j * dim + d + 1] = x * sin_t + y * cos_t;
916
+ }
917
+ }
918
+ const durationMs = Date.now() - startTime;
919
+ return {
920
+ queries: encodedQueries,
921
+ keys: encodedKeys,
922
+ hopEncodings,
923
+ metrics: {
924
+ computeTimeMs: durationMs,
925
+ },
926
+ };
927
+ }
928
+ fallbackMoEAttention(queries, keys, values, domains, startTime) {
929
+ const dim = 384;
930
+ const numQueries = queries.length / dim;
931
+ const numKeys = keys.length / dim;
932
+ const numExperts = this.moeConfig.numExperts;
933
+ const topK = this.moeConfig.topK;
934
+ const expertDomains = this.moeConfig.expertDomains;
935
+ // Expert-based routing with gating mechanism
936
+ const expertAssignments = [];
937
+ const expertWeights = [];
938
+ const output = new Float32Array(numQueries * dim);
939
+ const expertsUsed = new Set();
940
+ // Pre-compute domain to expert mapping
941
+ const domainToExpert = new Map();
942
+ expertDomains.forEach((domain, idx) => {
943
+ domainToExpert.set(domain, idx);
944
+ });
945
+ for (let i = 0; i < numQueries; i++) {
946
+ const queryVec = queries.slice(i * dim, (i + 1) * dim);
947
+ // Compute gating scores for each expert based on query similarity to domain centroids
948
+ const expertScores = [];
949
+ // Count domain occurrences and compute weighted scores
950
+ const domainCounts = new Map();
951
+ const domainSims = new Map();
952
+ for (let j = 0; j < numKeys; j++) {
953
+ const keyDomain = domains[j];
954
+ domainCounts.set(keyDomain, (domainCounts.get(keyDomain) || 0) + 1);
955
+ // Compute similarity between query and this key
956
+ const keyVec = keys.slice(j * dim, (j + 1) * dim);
957
+ let sim = 0;
958
+ let qNorm = 0;
959
+ let kNorm = 0;
960
+ for (let d = 0; d < dim; d++) {
961
+ sim += queryVec[d] * keyVec[d];
962
+ qNorm += queryVec[d] * queryVec[d];
963
+ kNorm += keyVec[d] * keyVec[d];
964
+ }
965
+ // Cosine similarity
966
+ const cosSim = sim / (Math.sqrt(qNorm * kNorm) + 1e-8);
967
+ domainSims.set(keyDomain, (domainSims.get(keyDomain) || 0) + cosSim);
968
+ }
969
+ // Normalize similarities and create expert scores
970
+ domainCounts.forEach((count, domain) => {
971
+ const avgSim = (domainSims.get(domain) || 0) / count;
972
+ const expertIdx = domainToExpert.get(domain);
973
+ if (expertIdx !== undefined && expertIdx < numExperts) {
974
+ expertScores.push({ idx: expertIdx, score: avgSim * Math.log(count + 1) });
975
+ }
976
+ });
977
+ // Select top-K experts
978
+ expertScores.sort((a, b) => b.score - a.score);
979
+ const topExperts = expertScores.slice(0, topK);
980
+ // Compute softmax weights for selected experts
981
+ const assignments = [];
982
+ const weights = [];
983
+ if (topExperts.length > 0) {
984
+ const maxScore = topExperts[0].score;
985
+ let sumExp = 0;
986
+ const expScores = topExperts.map(e => {
987
+ const exp = Math.exp(e.score - maxScore);
988
+ sumExp += exp;
989
+ return exp;
990
+ });
991
+ topExperts.forEach((expert, idx) => {
992
+ const weight = expScores[idx] / (sumExp + 1e-8);
993
+ assignments.push(expert.idx);
994
+ weights.push(weight);
995
+ expertsUsed.add(expert.idx);
996
+ });
997
+ }
998
+ else {
999
+ // Fallback: use first expert with equal weight
1000
+ assignments.push(0);
1001
+ weights.push(1.0);
1002
+ expertsUsed.add(0);
1003
+ }
1004
+ expertAssignments.push(assignments);
1005
+ expertWeights.push(weights);
1006
+ // Compute weighted output from selected experts
1007
+ for (let j = 0; j < numKeys; j++) {
1008
+ const keyDomain = domains[j];
1009
+ const expertIdx = domainToExpert.get(keyDomain);
1010
+ if (expertIdx !== undefined) {
1011
+ const assignmentIdx = assignments.indexOf(expertIdx);
1012
+ if (assignmentIdx >= 0) {
1013
+ const weight = weights[assignmentIdx];
1014
+ for (let d = 0; d < dim; d++) {
1015
+ output[i * dim + d] += weight * values[j * dim + d] / numKeys;
1016
+ }
1017
+ }
1018
+ }
1019
+ }
1020
+ }
1021
+ // Calculate routing entropy (measures load balancing across experts)
1022
+ const routingEntropy = this.calculateEntropy(expertWeights.flat());
1023
+ const durationMs = Date.now() - startTime;
1024
+ logPerformance({
1025
+ mechanism: 'moeAttention',
1026
+ backend: 'fallback',
1027
+ durationMs,
1028
+ inputSize: queries.length,
1029
+ timestamp: Date.now(),
1030
+ });
1031
+ return {
1032
+ output,
1033
+ expertAssignments,
1034
+ expertWeights,
1035
+ metrics: {
1036
+ computeTimeMs: durationMs,
1037
+ expertsUsed: expertsUsed.size,
1038
+ routingEntropy,
1039
+ },
1040
+ };
1041
+ }
1042
+ // Helper: Softmax with optional temperature parameter
1043
+ softmax(scores, rows, cols, temperature = 1.0) {
1044
+ const result = new Float32Array(scores.length);
1045
+ const invTemp = 1.0 / Math.max(temperature, 1e-8); // Prevent division by zero
1046
+ for (let i = 0; i < rows; i++) {
1047
+ let max = -Infinity;
1048
+ for (let j = 0; j < cols; j++) {
1049
+ const scaledScore = scores[i * cols + j] * invTemp;
1050
+ max = Math.max(max, scaledScore);
1051
+ }
1052
+ let sum = 0;
1053
+ for (let j = 0; j < cols; j++) {
1054
+ const scaledScore = scores[i * cols + j] * invTemp;
1055
+ result[i * cols + j] = Math.exp(scaledScore - max);
1056
+ sum += result[i * cols + j];
1057
+ }
1058
+ // Normalize with numerical stability
1059
+ const invSum = sum > 1e-8 ? 1.0 / sum : 1.0 / cols;
1060
+ for (let j = 0; j < cols; j++) {
1061
+ result[i * cols + j] *= invSum;
1062
+ }
1063
+ }
1064
+ return result;
1065
+ }
1066
+ // Helper: Calculate entropy
1067
+ calculateEntropy(probs) {
1068
+ return probs.reduce((entropy, p) => {
1069
+ return p > 0 ? entropy - p * Math.log2(p) : entropy;
1070
+ }, 0);
1071
+ }
1072
+ /**
1073
+ * Get current configuration
1074
+ */
1075
+ getConfig() {
1076
+ return {
1077
+ hyperbolic: this.hyperbolicConfig,
1078
+ flash: this.flashConfig,
1079
+ graphRoPE: this.graphRoPEConfig,
1080
+ moe: this.moeConfig,
1081
+ };
1082
+ }
1083
+ /**
1084
+ * Update configuration dynamically
1085
+ */
1086
+ updateConfig(configs) {
1087
+ if (configs.hyperbolic) {
1088
+ this.hyperbolicConfig = { ...this.hyperbolicConfig, ...configs.hyperbolic };
1089
+ }
1090
+ if (configs.flash) {
1091
+ this.flashConfig = { ...this.flashConfig, ...configs.flash };
1092
+ }
1093
+ if (configs.graphRoPE) {
1094
+ this.graphRoPEConfig = { ...this.graphRoPEConfig, ...configs.graphRoPE };
1095
+ }
1096
+ if (configs.moe) {
1097
+ this.moeConfig = { ...this.moeConfig, ...configs.moe };
1098
+ }
1099
+ }
1100
+ /**
1101
+ * Get backend status information
1102
+ * Useful for debugging and monitoring
1103
+ */
1104
+ getBackendStatus() {
1105
+ return {
1106
+ wasmAvailable: wasmInitialized,
1107
+ napiAvailable: napiInitialized,
1108
+ activeBackend: getAvailableBackend(),
1109
+ performanceLoggingEnabled: PERFORMANCE_LOGGING,
1110
+ };
1111
+ }
1112
+ }
1113
+ /**
1114
+ * Initialize attention backends proactively
1115
+ * Call this at application startup for faster first-use performance
1116
+ *
1117
+ * @returns Promise resolving to backend status
1118
+ */
1119
+ export async function initializeAttentionBackends() {
1120
+ const [wasmLoaded, napiLoaded] = await Promise.all([
1121
+ loadWasmModule(),
1122
+ loadNapiModule(),
1123
+ ]);
1124
+ return {
1125
+ wasmLoaded,
1126
+ napiLoaded,
1127
+ recommendedBackend: getAvailableBackend(),
1128
+ };
1129
+ }
1130
+ /**
1131
+ * Create an AttentionService with all mechanisms enabled
1132
+ * Convenience factory for quick setup
1133
+ *
1134
+ * @param db - Database instance (can be null for standalone usage)
1135
+ * @returns Configured AttentionService instance
1136
+ */
1137
+ export function createAttentionService(db = null) {
1138
+ return new AttentionService(db, {
1139
+ hyperbolic: { enabled: true },
1140
+ flash: { enabled: true },
1141
+ graphRoPE: { enabled: true },
1142
+ moe: { enabled: true },
1143
+ });
1144
+ }
1145
+ /**
1146
+ * Create an AttentionService with only fallback implementations
1147
+ * Useful for environments where WASM/NAPI are unavailable
1148
+ *
1149
+ * @param db - Database instance (can be null for standalone usage)
1150
+ * @returns Configured AttentionService instance with fallbacks only
1151
+ */
1152
+ export function createFallbackAttentionService(db = null) {
1153
+ // Reset module loading flags to force fallback
1154
+ wasmLoadAttempted = true;
1155
+ napiLoadAttempted = true;
1156
+ wasmInitialized = false;
1157
+ napiInitialized = false;
1158
+ return new AttentionService(db, {
1159
+ hyperbolic: { enabled: true },
1160
+ flash: { enabled: true },
1161
+ graphRoPE: { enabled: true },
1162
+ moe: { enabled: true },
1163
+ });
1164
+ }
1165
+ //# sourceMappingURL=AttentionService.js.map