kynjal-cli 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/appliance/gguf-engine.d.ts +91 -0
- package/dist/src/appliance/gguf-engine.d.ts.map +1 -0
- package/dist/src/appliance/gguf-engine.js +286 -525
- package/dist/src/appliance/gguf-engine.js.map +1 -1
- package/dist/src/appliance/ruvllm-bridge.d.ts +102 -0
- package/dist/src/appliance/ruvllm-bridge.d.ts.map +1 -0
- package/dist/src/appliance/ruvllm-bridge.js +203 -403
- package/dist/src/appliance/ruvllm-bridge.js.map +1 -1
- package/dist/src/appliance/rvfa-builder.d.ts +44 -0
- package/dist/src/appliance/rvfa-builder.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-builder.js +154 -208
- package/dist/src/appliance/rvfa-builder.js.map +1 -1
- package/dist/src/appliance/rvfa-distribution.d.ts +97 -0
- package/dist/src/appliance/rvfa-distribution.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-distribution.js +260 -423
- package/dist/src/appliance/rvfa-distribution.js.map +1 -1
- package/dist/src/appliance/rvfa-format.d.ts +111 -0
- package/dist/src/appliance/rvfa-format.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-format.js +128 -200
- package/dist/src/appliance/rvfa-format.js.map +1 -1
- package/dist/src/appliance/rvfa-runner.d.ts +69 -0
- package/dist/src/appliance/rvfa-runner.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-runner.js +168 -304
- package/dist/src/appliance/rvfa-runner.js.map +1 -1
- package/dist/src/appliance/rvfa-signing.d.ts +123 -0
- package/dist/src/appliance/rvfa-signing.d.ts.map +1 -0
- package/dist/src/appliance/rvfa-signing.js +173 -295
- package/dist/src/appliance/rvfa-signing.js.map +1 -1
- package/dist/src/benchmarks/pretrain/index.d.ts +58 -0
- package/dist/src/benchmarks/pretrain/index.d.ts.map +1 -0
- package/dist/src/benchmarks/pretrain/index.js +331 -542
- package/dist/src/benchmarks/pretrain/index.js.map +1 -1
- package/dist/src/commands/agent.js +574 -697
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.js +1218 -1548
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/appliance-advanced.js +158 -267
- package/dist/src/commands/appliance-advanced.js.map +1 -1
- package/dist/src/commands/appliance.js +318 -493
- package/dist/src/commands/appliance.js.map +1 -1
- package/dist/src/commands/benchmark.js +372 -523
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/claims.js +274 -364
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.js +113 -157
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/completions.js +477 -118
- package/dist/src/commands/completions.js.map +1 -1
- package/dist/src/commands/config.js +237 -303
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.js +487 -596
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.js +194 -275
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.js +504 -686
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/embeddings.js +1293 -1543
- package/dist/src/commands/embeddings.js.map +1 -1
- package/dist/src/commands/guidance.js +449 -596
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.js +854 -938
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.js +3112 -3519
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/index.d.ts +115 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +126 -308
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.js +788 -940
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.js +383 -558
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.js +493 -605
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.js +833 -1026
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +282 -347
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/neural.js +1289 -1563
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.js +497 -643
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/plugins.js +668 -841
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.js +392 -447
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.js +162 -256
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +150 -220
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/route.js +520 -665
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/ruvector/backup.js +505 -651
- package/dist/src/commands/ruvector/backup.js.map +1 -1
- package/dist/src/commands/ruvector/benchmark.js +349 -401
- package/dist/src/commands/ruvector/benchmark.js.map +1 -1
- package/dist/src/commands/ruvector/import.js +224 -266
- package/dist/src/commands/ruvector/import.js.map +1 -1
- package/dist/src/commands/ruvector/index.js +37 -75
- package/dist/src/commands/ruvector/index.js.map +1 -1
- package/dist/src/commands/ruvector/init.js +336 -359
- package/dist/src/commands/ruvector/init.js.map +1 -1
- package/dist/src/commands/ruvector/migrate.js +335 -322
- package/dist/src/commands/ruvector/migrate.js.map +1 -1
- package/dist/src/commands/ruvector/optimize.js +375 -431
- package/dist/src/commands/ruvector/optimize.js.map +1 -1
- package/dist/src/commands/ruvector/setup.js +703 -117
- package/dist/src/commands/ruvector/setup.js.map +1 -1
- package/dist/src/commands/ruvector/status.js +364 -419
- package/dist/src/commands/ruvector/status.js.map +1 -1
- package/dist/src/commands/security.js +485 -608
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.js +504 -626
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.js +267 -364
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.js +380 -486
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.js +408 -488
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.js +423 -538
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/transfer-store.js +322 -412
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.js +196 -291
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.js +386 -486
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/config-adapter.d.ts +15 -0
- package/dist/src/config-adapter.d.ts.map +1 -0
- package/dist/src/config-adapter.js +38 -39
- package/dist/src/config-adapter.js.map +1 -1
- package/dist/src/index.d.ts +77 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +309 -411
- package/dist/src/index.js.map +1 -1
- package/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
- package/dist/src/infrastructure/in-memory-repositories.d.ts.map +1 -0
- package/dist/src/infrastructure/in-memory-repositories.js +246 -507
- package/dist/src/infrastructure/in-memory-repositories.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts +25 -0
- package/dist/src/init/claudemd-generator.d.ts.map +1 -0
- package/dist/src/init/claudemd-generator.js +368 -78
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts +41 -0
- package/dist/src/init/executor.d.ts.map +1 -0
- package/dist/src/init/executor.js +1307 -996
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/helpers-generator.d.ts +60 -0
- package/dist/src/init/helpers-generator.d.ts.map +1 -0
- package/dist/src/init/helpers-generator.js +657 -12
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/index.d.ts +1 -1
- package/dist/src/init/index.d.ts.map +1 -1
- package/dist/src/init/index.js +1 -1
- package/dist/src/init/index.js.map +1 -1
- package/dist/src/init/mcp-generator.js +33 -37
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/settings-generator.js +76 -77
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.js +801 -3
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/init/types.d.ts +1 -1
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +76 -59
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/mcp-client.d.ts +92 -0
- package/dist/src/mcp-client.d.ts.map +1 -0
- package/dist/src/mcp-client.js +81 -125
- package/dist/src/mcp-client.js.map +1 -1
- package/dist/src/mcp-server.d.ts +161 -0
- package/dist/src/mcp-server.d.ts.map +1 -0
- package/dist/src/mcp-server.js +470 -757
- package/dist/src/mcp-server.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +391 -492
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/agentdb-tools.js +332 -533
- package/dist/src/mcp-tools/agentdb-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +172 -236
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/auto-install.d.ts +83 -0
- package/dist/src/mcp-tools/auto-install.d.ts.map +1 -0
- package/dist/src/mcp-tools/auto-install.js +80 -142
- package/dist/src/mcp-tools/auto-install.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +252 -375
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +473 -565
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +197 -272
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +500 -572
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +286 -364
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +582 -693
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +260 -311
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +573 -640
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +2215 -2648
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +350 -505
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +315 -412
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +420 -480
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +204 -278
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/ruvllm-tools.js +163 -279
- package/dist/src/mcp-tools/ruvllm-tools.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +297 -429
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +185 -234
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +207 -260
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +276 -325
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +270 -336
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +148 -196
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +186 -333
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/types.d.ts +31 -0
- package/dist/src/mcp-tools/types.d.ts.map +1 -0
- package/dist/src/mcp-tools/wasm-agent-tools.js +133 -280
- package/dist/src/mcp-tools/wasm-agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +405 -450
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts +295 -0
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
- package/dist/src/memory/ewc-consolidation.js +190 -303
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts +338 -0
- package/dist/src/memory/intelligence.d.ts.map +1 -0
- package/dist/src/memory/intelligence.js +569 -794
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +407 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -0
- package/dist/src/memory/memory-bridge.js +1170 -1640
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts +412 -0
- package/dist/src/memory/memory-initializer.d.ts.map +1 -0
- package/dist/src/memory/memory-initializer.js +1836 -1851
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts +227 -0
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
- package/dist/src/memory/sona-optimizer.js +199 -329
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/output.d.ts +2 -2
- package/dist/src/output.d.ts.map +1 -1
- package/dist/src/output.js +242 -272
- package/dist/src/output.js.map +1 -1
- package/dist/src/parser.d.ts +51 -0
- package/dist/src/parser.d.ts.map +1 -0
- package/dist/src/parser.js +140 -187
- package/dist/src/parser.js.map +1 -1
- package/dist/src/plugins/manager.d.ts +133 -0
- package/dist/src/plugins/manager.d.ts.map +1 -0
- package/dist/src/plugins/manager.js +285 -521
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts +88 -0
- package/dist/src/plugins/store/discovery.d.ts.map +1 -0
- package/dist/src/plugins/store/discovery.js +271 -358
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/index.d.ts +76 -0
- package/dist/src/plugins/store/index.d.ts.map +1 -0
- package/dist/src/plugins/store/index.js +48 -105
- package/dist/src/plugins/store/index.js.map +1 -1
- package/dist/src/plugins/store/search.d.ts +46 -0
- package/dist/src/plugins/store/search.d.ts.map +1 -0
- package/dist/src/plugins/store/search.js +69 -107
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/plugins/store/types.d.ts +274 -0
- package/dist/src/plugins/store/types.d.ts.map +1 -0
- package/dist/src/plugins/tests/demo-plugin-store.js +113 -160
- package/dist/src/plugins/tests/demo-plugin-store.js.map +1 -1
- package/dist/src/plugins/tests/standalone-test.js +172 -223
- package/dist/src/plugins/tests/standalone-test.js.map +1 -1
- package/dist/src/plugins/tests/test-plugin-store.js +190 -228
- package/dist/src/plugins/tests/test-plugin-store.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts +101 -0
- package/dist/src/production/circuit-breaker.d.ts.map +1 -0
- package/dist/src/production/circuit-breaker.js +62 -126
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts +92 -0
- package/dist/src/production/error-handler.d.ts.map +1 -0
- package/dist/src/production/error-handler.js +86 -156
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.d.ts +161 -0
- package/dist/src/production/monitoring.d.ts.map +1 -0
- package/dist/src/production/monitoring.js +139 -220
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts +80 -0
- package/dist/src/production/rate-limiter.d.ts.map +1 -0
- package/dist/src/production/rate-limiter.js +74 -93
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts +48 -0
- package/dist/src/production/retry.d.ts.map +1 -0
- package/dist/src/production/retry.js +75 -167
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/prompt.d.ts +44 -0
- package/dist/src/prompt.d.ts.map +1 -0
- package/dist/src/prompt.js +436 -560
- package/dist/src/prompt.js.map +1 -1
- package/dist/src/runtime/headless.d.ts +60 -0
- package/dist/src/runtime/headless.d.ts.map +1 -0
- package/dist/src/runtime/headless.js +197 -286
- package/dist/src/runtime/headless.js.map +1 -1
- package/dist/src/ruvector/agent-wasm.d.ts +182 -0
- package/dist/src/ruvector/agent-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/agent-wasm.js +156 -351
- package/dist/src/ruvector/agent-wasm.js.map +1 -1
- package/dist/src/ruvector/ast-analyzer.d.ts +67 -0
- package/dist/src/ruvector/ast-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/ast-analyzer.js +145 -232
- package/dist/src/ruvector/ast-analyzer.js.map +1 -1
- package/dist/src/ruvector/coverage-router.d.ts +160 -0
- package/dist/src/ruvector/coverage-router.d.ts.map +1 -0
- package/dist/src/ruvector/coverage-router.js +287 -419
- package/dist/src/ruvector/coverage-router.js.map +1 -1
- package/dist/src/ruvector/coverage-tools.js +56 -101
- package/dist/src/ruvector/coverage-tools.js.map +1 -1
- package/dist/src/ruvector/diff-classifier.d.ts +175 -0
- package/dist/src/ruvector/diff-classifier.d.ts.map +1 -0
- package/dist/src/ruvector/diff-classifier.js +324 -451
- package/dist/src/ruvector/diff-classifier.js.map +1 -1
- package/dist/src/ruvector/enhanced-model-router.d.ts +146 -0
- package/dist/src/ruvector/enhanced-model-router.d.ts.map +1 -0
- package/dist/src/ruvector/enhanced-model-router.js +260 -336
- package/dist/src/ruvector/enhanced-model-router.js.map +1 -1
- package/dist/src/ruvector/flash-attention.d.ts +195 -0
- package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
- package/dist/src/ruvector/flash-attention.js +223 -254
- package/dist/src/ruvector/flash-attention.js.map +1 -1
- package/dist/src/ruvector/graph-analyzer.d.ts +187 -0
- package/dist/src/ruvector/graph-analyzer.d.ts.map +1 -0
- package/dist/src/ruvector/graph-analyzer.js +486 -680
- package/dist/src/ruvector/graph-analyzer.js.map +1 -1
- package/dist/src/ruvector/index.d.ts +40 -0
- package/dist/src/ruvector/index.d.ts.map +1 -0
- package/dist/src/ruvector/index.js +36 -106
- package/dist/src/ruvector/index.js.map +1 -1
- package/dist/src/ruvector/lora-adapter.d.ts +218 -0
- package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
- package/dist/src/ruvector/lora-adapter.js +155 -248
- package/dist/src/ruvector/lora-adapter.js.map +1 -1
- package/dist/src/ruvector/model-router.d.ts +220 -0
- package/dist/src/ruvector/model-router.d.ts.map +1 -0
- package/dist/src/ruvector/model-router.js +175 -248
- package/dist/src/ruvector/model-router.js.map +1 -1
- package/dist/src/ruvector/moe-router.d.ts +206 -0
- package/dist/src/ruvector/moe-router.d.ts.map +1 -0
- package/dist/src/ruvector/moe-router.js +228 -286
- package/dist/src/ruvector/moe-router.js.map +1 -1
- package/dist/src/ruvector/q-learning-router.d.ts +211 -0
- package/dist/src/ruvector/q-learning-router.d.ts.map +1 -0
- package/dist/src/ruvector/q-learning-router.js +257 -338
- package/dist/src/ruvector/q-learning-router.js.map +1 -1
- package/dist/src/ruvector/ruvllm-wasm.d.ts +179 -0
- package/dist/src/ruvector/ruvllm-wasm.d.ts.map +1 -0
- package/dist/src/ruvector/ruvllm-wasm.js +270 -434
- package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
- package/dist/src/ruvector/semantic-router.d.ts +77 -0
- package/dist/src/ruvector/semantic-router.d.ts.map +1 -0
- package/dist/src/ruvector/semantic-router.js +60 -67
- package/dist/src/ruvector/semantic-router.js.map +1 -1
- package/dist/src/ruvector/vector-db.d.ts +69 -0
- package/dist/src/ruvector/vector-db.d.ts.map +1 -0
- package/dist/src/ruvector/vector-db.js +119 -205
- package/dist/src/ruvector/vector-db.js.map +1 -1
- package/dist/src/services/agentic-flow-bridge.d.ts +50 -0
- package/dist/src/services/agentic-flow-bridge.d.ts.map +1 -0
- package/dist/src/services/agentic-flow-bridge.js +32 -105
- package/dist/src/services/agentic-flow-bridge.js.map +1 -1
- package/dist/src/services/claim-service.d.ts +204 -0
- package/dist/src/services/claim-service.d.ts.map +1 -0
- package/dist/src/services/claim-service.js +615 -940
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/container-worker-pool.d.ts +197 -0
- package/dist/src/services/container-worker-pool.d.ts.map +1 -0
- package/dist/src/services/container-worker-pool.js +398 -666
- package/dist/src/services/container-worker-pool.js.map +1 -1
- package/dist/src/services/headless-worker-executor.d.ts +304 -0
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -0
- package/dist/src/services/headless-worker-executor.js +441 -467
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/index.d.ts +4 -4
- package/dist/src/services/index.d.ts.map +1 -1
- package/dist/src/services/index.js +4 -4
- package/dist/src/services/index.js.map +1 -1
- package/dist/src/services/registry-api.d.ts +58 -0
- package/dist/src/services/registry-api.d.ts.map +1 -0
- package/dist/src/services/registry-api.js +92 -200
- package/dist/src/services/registry-api.js.map +1 -1
- package/dist/src/services/ruvector-training.d.ts +222 -0
- package/dist/src/services/ruvector-training.d.ts.map +1 -0
- package/dist/src/services/ruvector-training.js +257 -337
- package/dist/src/services/ruvector-training.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts +228 -0
- package/dist/src/services/worker-daemon.d.ts.map +1 -0
- package/dist/src/services/worker-daemon.js +591 -849
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/services/worker-queue.d.ts +194 -0
- package/dist/src/services/worker-queue.d.ts.map +1 -0
- package/dist/src/services/worker-queue.js +331 -548
- package/dist/src/services/worker-queue.js.map +1 -1
- package/dist/src/suggest.d.ts +53 -0
- package/dist/src/suggest.d.ts.map +1 -0
- package/dist/src/suggest.js +45 -55
- package/dist/src/suggest.js.map +1 -1
- package/dist/src/transfer/anonymization/index.js +29 -37
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/deploy-seraphine.js +128 -155
- package/dist/src/transfer/deploy-seraphine.js.map +1 -1
- package/dist/src/transfer/export.d.ts +25 -0
- package/dist/src/transfer/export.d.ts.map +1 -0
- package/dist/src/transfer/export.js +84 -142
- package/dist/src/transfer/export.js.map +1 -1
- package/dist/src/transfer/index.d.ts +1 -1
- package/dist/src/transfer/index.d.ts.map +1 -1
- package/dist/src/transfer/index.js +0 -2
- package/dist/src/transfer/index.js.map +1 -1
- package/dist/src/transfer/ipfs/client.d.ts +109 -0
- package/dist/src/transfer/ipfs/client.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/client.js +187 -337
- package/dist/src/transfer/ipfs/client.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts +95 -0
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -0
- package/dist/src/transfer/ipfs/upload.js +288 -434
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/models/seraphine.d.ts +72 -0
- package/dist/src/transfer/models/seraphine.d.ts.map +1 -0
- package/dist/src/transfer/models/seraphine.js +55 -55
- package/dist/src/transfer/models/seraphine.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.d.ts +49 -0
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -0
- package/dist/src/transfer/serialization/cfp.js +30 -31
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.d.ts +82 -0
- package/dist/src/transfer/storage/gcs.d.ts.map +1 -0
- package/dist/src/transfer/storage/gcs.js +165 -232
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts +84 -0
- package/dist/src/transfer/store/discovery.d.ts.map +1 -0
- package/dist/src/transfer/store/discovery.js +239 -349
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.d.ts +70 -0
- package/dist/src/transfer/store/download.d.ts.map +1 -0
- package/dist/src/transfer/store/download.js +243 -365
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/index.d.ts +84 -0
- package/dist/src/transfer/store/index.d.ts.map +1 -0
- package/dist/src/transfer/store/index.js +63 -130
- package/dist/src/transfer/store/index.js.map +1 -1
- package/dist/src/transfer/store/publish.d.ts +76 -0
- package/dist/src/transfer/store/publish.d.ts.map +1 -0
- package/dist/src/transfer/store/publish.js +184 -258
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.js +50 -72
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.d.ts +54 -0
- package/dist/src/transfer/store/search.d.ts.map +1 -0
- package/dist/src/transfer/store/search.js +64 -96
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/transfer/store/tests/standalone-test.js +174 -231
- package/dist/src/transfer/store/tests/standalone-test.js.map +1 -1
- package/dist/src/transfer/test-seraphine.js +95 -130
- package/dist/src/transfer/test-seraphine.js.map +1 -1
- package/dist/src/transfer/tests/test-store.js +194 -239
- package/dist/src/transfer/tests/test-store.js.map +1 -1
- package/dist/src/transfer/types.d.ts +245 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/types.d.ts +198 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +26 -55
- package/dist/src/types.js.map +1 -1
- package/dist/src/update/checker.d.ts +34 -0
- package/dist/src/update/checker.d.ts.map +1 -0
- package/dist/src/update/checker.js +106 -183
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts +32 -0
- package/dist/src/update/executor.d.ts.map +1 -0
- package/dist/src/update/executor.js +135 -198
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts +33 -0
- package/dist/src/update/index.d.ts.map +1 -0
- package/dist/src/update/index.js +38 -85
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts +20 -0
- package/dist/src/update/rate-limiter.d.ts.map +1 -0
- package/dist/src/update/rate-limiter.js +19 -31
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts +17 -0
- package/dist/src/update/validator.d.ts.map +1 -0
- package/dist/src/update/validator.js +38 -64
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -14,45 +14,24 @@
|
|
|
14
14
|
*
|
|
15
15
|
* Created with love by ruv.io
|
|
16
16
|
*/
|
|
17
|
-
var __assign = (this && this.__assign) || function () {
|
|
18
|
-
__assign = Object.assign || function(t) {
|
|
19
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
-
s = arguments[i];
|
|
21
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
-
t[p] = s[p];
|
|
23
|
-
}
|
|
24
|
-
return t;
|
|
25
|
-
};
|
|
26
|
-
return __assign.apply(this, arguments);
|
|
27
|
-
};
|
|
28
|
-
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
29
|
-
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
30
|
-
if (ar || !(i in from)) {
|
|
31
|
-
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
32
|
-
ar[i] = from[i];
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return to.concat(ar || Array.prototype.slice.call(from));
|
|
36
|
-
};
|
|
37
17
|
// ============================================================================
|
|
38
18
|
// Flash Attention Implementation
|
|
39
19
|
// ============================================================================
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.accumBuffer = null;
|
|
20
|
+
export class FlashAttention {
|
|
21
|
+
config;
|
|
22
|
+
lastSpeedup = 0;
|
|
23
|
+
benchmarkHistory = [];
|
|
24
|
+
// Pre-allocated buffers for CPU optimization
|
|
25
|
+
scoreBuffer = null;
|
|
26
|
+
expBuffer = null;
|
|
27
|
+
accumBuffer = null;
|
|
28
|
+
constructor(config = {}) {
|
|
50
29
|
this.config = {
|
|
51
|
-
blockSize:
|
|
52
|
-
dimensions:
|
|
53
|
-
temperature:
|
|
54
|
-
useStableMode:
|
|
55
|
-
useCPUOptimizations:
|
|
30
|
+
blockSize: config.blockSize ?? 32, // Smaller blocks for CPU L1 cache
|
|
31
|
+
dimensions: config.dimensions ?? 384,
|
|
32
|
+
temperature: config.temperature ?? 1.0,
|
|
33
|
+
useStableMode: config.useStableMode ?? true,
|
|
34
|
+
useCPUOptimizations: config.useCPUOptimizations ?? true,
|
|
56
35
|
};
|
|
57
36
|
}
|
|
58
37
|
// ==========================================================================
|
|
@@ -66,14 +45,14 @@ var FlashAttention = /** @class */ (function () {
|
|
|
66
45
|
* @param values - Value vectors [M x D]
|
|
67
46
|
* @returns Attention output [N x D]
|
|
68
47
|
*/
|
|
69
|
-
|
|
70
|
-
|
|
48
|
+
attention(queries, keys, values) {
|
|
49
|
+
const startTime = performance.now();
|
|
71
50
|
// Validate inputs
|
|
72
51
|
this.validateInputs(queries, keys, values);
|
|
73
|
-
|
|
74
|
-
|
|
52
|
+
const numQueries = queries.length;
|
|
53
|
+
const numKeys = keys.length;
|
|
75
54
|
// Use CPU-optimized path for all sizes when enabled
|
|
76
|
-
|
|
55
|
+
let output;
|
|
77
56
|
if (this.config.useCPUOptimizations) {
|
|
78
57
|
output = this.cpuOptimizedAttention(queries, keys, values);
|
|
79
58
|
}
|
|
@@ -83,12 +62,12 @@ var FlashAttention = /** @class */ (function () {
|
|
|
83
62
|
else {
|
|
84
63
|
output = this.naiveAttention(queries, keys, values);
|
|
85
64
|
}
|
|
86
|
-
|
|
65
|
+
const computeTimeMs = performance.now() - startTime;
|
|
87
66
|
return {
|
|
88
|
-
output
|
|
89
|
-
computeTimeMs
|
|
67
|
+
output,
|
|
68
|
+
computeTimeMs,
|
|
90
69
|
};
|
|
91
|
-
}
|
|
70
|
+
}
|
|
92
71
|
/**
|
|
93
72
|
* CPU-optimized attention with aggressive optimizations
|
|
94
73
|
*
|
|
@@ -99,15 +78,14 @@ var FlashAttention = /** @class */ (function () {
|
|
|
99
78
|
* - 8x loop unrolling for dot products
|
|
100
79
|
* - Fused max-finding during score computation
|
|
101
80
|
*/
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
var scale = 1.0 / (Math.sqrt(dim) * this.config.temperature);
|
|
81
|
+
cpuOptimizedAttention(Q, K, V) {
|
|
82
|
+
const numQ = Q.length;
|
|
83
|
+
const numK = K.length;
|
|
84
|
+
const dim = Q[0]?.length ?? this.config.dimensions;
|
|
85
|
+
const scale = 1.0 / (Math.sqrt(dim) * this.config.temperature);
|
|
108
86
|
// Sparse attention: Use only top 12% of keys (min 16, max 96)
|
|
109
|
-
|
|
110
|
-
|
|
87
|
+
const topK = Math.max(16, Math.min(96, Math.ceil(numK * 0.12)));
|
|
88
|
+
const useTopK = numK > 32;
|
|
111
89
|
// Ensure buffers are allocated
|
|
112
90
|
if (!this.scoreBuffer || this.scoreBuffer.length < numK) {
|
|
113
91
|
this.scoreBuffer = new Float32Array(numK);
|
|
@@ -118,42 +96,42 @@ var FlashAttention = /** @class */ (function () {
|
|
|
118
96
|
if (!this.accumBuffer || this.accumBuffer.length < dim) {
|
|
119
97
|
this.accumBuffer = new Float64Array(dim);
|
|
120
98
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
99
|
+
const scores = this.scoreBuffer;
|
|
100
|
+
const exps = this.expBuffer;
|
|
101
|
+
const accum = this.accumBuffer;
|
|
124
102
|
// Pre-allocate output once
|
|
125
|
-
|
|
126
|
-
for (
|
|
103
|
+
const output = new Array(numQ);
|
|
104
|
+
for (let i = 0; i < numQ; i++) {
|
|
127
105
|
output[i] = new Float32Array(dim);
|
|
128
106
|
}
|
|
129
107
|
// Reusable index array
|
|
130
|
-
|
|
108
|
+
const indices = useTopK ? new Uint32Array(numK) : null;
|
|
131
109
|
if (indices) {
|
|
132
|
-
for (
|
|
110
|
+
for (let i = 0; i < numK; i++)
|
|
133
111
|
indices[i] = i;
|
|
134
112
|
}
|
|
135
113
|
// Two-stage screening: use 1/4 of dimensions for quick filtering
|
|
136
|
-
|
|
137
|
-
|
|
114
|
+
const screenDim = Math.min(96, dim >> 2);
|
|
115
|
+
const screenScale = scale * Math.sqrt(dim / screenDim);
|
|
138
116
|
// Candidate buffer for two-stage filtering
|
|
139
|
-
|
|
117
|
+
const candidateCount = Math.max(topK * 2, Math.ceil(numK * 0.25));
|
|
140
118
|
// Process queries
|
|
141
|
-
for (
|
|
142
|
-
|
|
119
|
+
for (let qi = 0; qi < numQ; qi++) {
|
|
120
|
+
const query = Q[qi];
|
|
143
121
|
if (useTopK && numK > 128) {
|
|
144
122
|
// Two-stage approach for large key sets
|
|
145
123
|
// Stage 1: Quick screening with partial dimensions
|
|
146
|
-
for (
|
|
124
|
+
for (let ki = 0; ki < numK; ki++) {
|
|
147
125
|
scores[ki] = this.partialDotProduct(query, K[ki], screenDim) * screenScale;
|
|
148
126
|
indices[ki] = ki;
|
|
149
127
|
}
|
|
150
128
|
// Get top candidates (2x topK)
|
|
151
129
|
this.partialSort(scores, indices, candidateCount);
|
|
152
130
|
// Stage 2: Full score computation only for candidates
|
|
153
|
-
|
|
154
|
-
for (
|
|
155
|
-
|
|
156
|
-
|
|
131
|
+
let maxScore = -Infinity;
|
|
132
|
+
for (let i = 0; i < candidateCount; i++) {
|
|
133
|
+
const ki = indices[i];
|
|
134
|
+
const s = this.fastDotProduct(query, K[ki], dim) * scale;
|
|
157
135
|
scores[ki] = s;
|
|
158
136
|
if (s > maxScore)
|
|
159
137
|
maxScore = s;
|
|
@@ -162,68 +140,68 @@ var FlashAttention = /** @class */ (function () {
|
|
|
162
140
|
this.partialSort(scores, indices.subarray(0, candidateCount), topK);
|
|
163
141
|
// Compute softmax over top-K
|
|
164
142
|
maxScore = -Infinity;
|
|
165
|
-
for (
|
|
143
|
+
for (let i = 0; i < topK; i++) {
|
|
166
144
|
if (scores[indices[i]] > maxScore)
|
|
167
145
|
maxScore = scores[indices[i]];
|
|
168
146
|
}
|
|
169
|
-
|
|
170
|
-
for (
|
|
171
|
-
|
|
147
|
+
let sumExp = 0;
|
|
148
|
+
for (let i = 0; i < topK; i++) {
|
|
149
|
+
const e = Math.exp(scores[indices[i]] - maxScore);
|
|
172
150
|
exps[i] = e;
|
|
173
151
|
sumExp += e;
|
|
174
152
|
}
|
|
175
153
|
// Weighted sum
|
|
176
|
-
for (
|
|
154
|
+
for (let d = 0; d < dim; d++)
|
|
177
155
|
accum[d] = 0;
|
|
178
|
-
|
|
179
|
-
for (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
for (
|
|
156
|
+
const invSum = 1.0 / sumExp;
|
|
157
|
+
for (let i = 0; i < topK; i++) {
|
|
158
|
+
const weight = exps[i] * invSum;
|
|
159
|
+
const value = V[indices[i]];
|
|
160
|
+
for (let d = 0; d < dim; d++) {
|
|
183
161
|
accum[d] += weight * value[d];
|
|
184
162
|
}
|
|
185
163
|
}
|
|
186
164
|
}
|
|
187
165
|
else {
|
|
188
166
|
// Simple path for small key sets
|
|
189
|
-
|
|
190
|
-
for (
|
|
191
|
-
|
|
167
|
+
let maxScore = -Infinity;
|
|
168
|
+
for (let ki = 0; ki < numK; ki++) {
|
|
169
|
+
const s = this.fastDotProduct(query, K[ki], dim) * scale;
|
|
192
170
|
scores[ki] = s;
|
|
193
171
|
if (s > maxScore)
|
|
194
172
|
maxScore = s;
|
|
195
173
|
}
|
|
196
|
-
|
|
197
|
-
for (
|
|
198
|
-
|
|
174
|
+
let sumExp = 0;
|
|
175
|
+
for (let ki = 0; ki < numK; ki++) {
|
|
176
|
+
const e = Math.exp(scores[ki] - maxScore);
|
|
199
177
|
exps[ki] = e;
|
|
200
178
|
sumExp += e;
|
|
201
179
|
}
|
|
202
|
-
for (
|
|
180
|
+
for (let d = 0; d < dim; d++)
|
|
203
181
|
accum[d] = 0;
|
|
204
|
-
|
|
205
|
-
for (
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
for (
|
|
182
|
+
const invSum = 1.0 / sumExp;
|
|
183
|
+
for (let ki = 0; ki < numK; ki++) {
|
|
184
|
+
const weight = exps[ki] * invSum;
|
|
185
|
+
const value = V[ki];
|
|
186
|
+
for (let d = 0; d < dim; d++) {
|
|
209
187
|
accum[d] += weight * value[d];
|
|
210
188
|
}
|
|
211
189
|
}
|
|
212
190
|
}
|
|
213
191
|
// Copy to output
|
|
214
|
-
|
|
215
|
-
for (
|
|
192
|
+
const out = output[qi];
|
|
193
|
+
for (let d = 0; d < dim; d++) {
|
|
216
194
|
out[d] = accum[d];
|
|
217
195
|
}
|
|
218
196
|
}
|
|
219
197
|
return output;
|
|
220
|
-
}
|
|
198
|
+
}
|
|
221
199
|
/**
|
|
222
200
|
* Partial dot product using only first N dimensions (for screening)
|
|
223
201
|
*/
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
202
|
+
partialDotProduct(a, b, len) {
|
|
203
|
+
let sum = 0;
|
|
204
|
+
let i = 0;
|
|
227
205
|
for (; i <= len - 4; i += 4) {
|
|
228
206
|
sum += a[i] * b[i] + a[i + 1] * b[i + 1] + a[i + 2] * b[i + 2] + a[i + 3] * b[i + 3];
|
|
229
207
|
}
|
|
@@ -231,26 +209,26 @@ var FlashAttention = /** @class */ (function () {
|
|
|
231
209
|
sum += a[i] * b[i];
|
|
232
210
|
}
|
|
233
211
|
return sum;
|
|
234
|
-
}
|
|
212
|
+
}
|
|
235
213
|
/**
|
|
236
214
|
* Partial sort to get top-K elements (QuickSelect-like)
|
|
237
215
|
* Only ensures first K elements are the largest, not sorted
|
|
238
216
|
*/
|
|
239
|
-
|
|
240
|
-
|
|
217
|
+
partialSort(scores, indices, k) {
|
|
218
|
+
const n = indices.length;
|
|
241
219
|
if (k >= n)
|
|
242
220
|
return;
|
|
243
221
|
// Use partition-based selection (O(n) average)
|
|
244
|
-
|
|
245
|
-
|
|
222
|
+
let left = 0;
|
|
223
|
+
let right = n - 1;
|
|
246
224
|
while (left < right) {
|
|
247
225
|
// Partition around pivot
|
|
248
|
-
|
|
249
|
-
|
|
226
|
+
const pivotIdx = left + Math.floor(Math.random() * (right - left + 1));
|
|
227
|
+
const pivotScore = scores[indices[pivotIdx]];
|
|
250
228
|
// Move pivot to end
|
|
251
229
|
this.swapIndices(indices, pivotIdx, right);
|
|
252
|
-
|
|
253
|
-
for (
|
|
230
|
+
let storeIdx = left;
|
|
231
|
+
for (let i = left; i < right; i++) {
|
|
254
232
|
if (scores[indices[i]] > pivotScore) {
|
|
255
233
|
this.swapIndices(indices, i, storeIdx);
|
|
256
234
|
storeIdx++;
|
|
@@ -268,21 +246,21 @@ var FlashAttention = /** @class */ (function () {
|
|
|
268
246
|
right = storeIdx - 1;
|
|
269
247
|
}
|
|
270
248
|
}
|
|
271
|
-
}
|
|
249
|
+
}
|
|
272
250
|
/**
|
|
273
251
|
* Swap two indices in array
|
|
274
252
|
*/
|
|
275
|
-
|
|
276
|
-
|
|
253
|
+
swapIndices(arr, i, j) {
|
|
254
|
+
const temp = arr[i];
|
|
277
255
|
arr[i] = arr[j];
|
|
278
256
|
arr[j] = temp;
|
|
279
|
-
}
|
|
257
|
+
}
|
|
280
258
|
/**
|
|
281
259
|
* Fast dot product with 8x unrolling
|
|
282
260
|
*/
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
261
|
+
fastDotProduct(a, b, len) {
|
|
262
|
+
let sum = 0;
|
|
263
|
+
let i = 0;
|
|
286
264
|
// 8x unroll
|
|
287
265
|
for (; i <= len - 8; i += 8) {
|
|
288
266
|
sum += a[i] * b[i] +
|
|
@@ -299,7 +277,7 @@ var FlashAttention = /** @class */ (function () {
|
|
|
299
277
|
sum += a[i] * b[i];
|
|
300
278
|
}
|
|
301
279
|
return sum;
|
|
302
|
-
}
|
|
280
|
+
}
|
|
303
281
|
/**
|
|
304
282
|
* Block-wise attention computation (Flash Attention core algorithm)
|
|
305
283
|
*
|
|
@@ -315,50 +293,49 @@ var FlashAttention = /** @class */ (function () {
|
|
|
315
293
|
* @param V - Value vectors
|
|
316
294
|
* @param blockSize - Block size for tiling
|
|
317
295
|
*/
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
var scale = 1.0 / (Math.sqrt(dimensions) * this.config.temperature);
|
|
296
|
+
blockAttention(Q, K, V, blockSize) {
|
|
297
|
+
const numQueries = Q.length;
|
|
298
|
+
const numKeys = K.length;
|
|
299
|
+
const dimensions = Q[0]?.length ?? this.config.dimensions;
|
|
300
|
+
const scale = 1.0 / (Math.sqrt(dimensions) * this.config.temperature);
|
|
324
301
|
// Initialize output arrays
|
|
325
|
-
|
|
326
|
-
for (
|
|
302
|
+
const output = new Array(numQueries);
|
|
303
|
+
for (let i = 0; i < numQueries; i++) {
|
|
327
304
|
output[i] = new Float32Array(dimensions);
|
|
328
305
|
}
|
|
329
306
|
// Online softmax state: max values and sum of exp for each query
|
|
330
|
-
|
|
331
|
-
|
|
307
|
+
const maxScores = new Float32Array(numQueries).fill(-Infinity);
|
|
308
|
+
const sumExp = new Float32Array(numQueries).fill(0);
|
|
332
309
|
// Process in blocks
|
|
333
|
-
for (
|
|
334
|
-
|
|
335
|
-
|
|
310
|
+
for (let kStart = 0; kStart < numKeys; kStart += blockSize) {
|
|
311
|
+
const kEnd = Math.min(kStart + blockSize, numKeys);
|
|
312
|
+
const kBlockSize = kEnd - kStart;
|
|
336
313
|
// Process each query against this key block
|
|
337
|
-
for (
|
|
338
|
-
|
|
314
|
+
for (let qStart = 0; qStart < numQueries; qStart += blockSize) {
|
|
315
|
+
const qEnd = Math.min(qStart + blockSize, numQueries);
|
|
339
316
|
// Compute attention scores for this block
|
|
340
|
-
|
|
317
|
+
const blockScores = this.computeBlockScores(Q, K, qStart, qEnd, kStart, kEnd, scale);
|
|
341
318
|
// Apply online softmax and accumulate output
|
|
342
319
|
this.onlineSoftmaxAccumulate(blockScores, V, output, maxScores, sumExp, qStart, qEnd, kStart, kEnd);
|
|
343
320
|
}
|
|
344
321
|
}
|
|
345
322
|
// Normalize outputs by final sum of exponentials
|
|
346
|
-
for (
|
|
347
|
-
|
|
323
|
+
for (let i = 0; i < numQueries; i++) {
|
|
324
|
+
const normalizer = sumExp[i];
|
|
348
325
|
if (normalizer > 0) {
|
|
349
|
-
for (
|
|
326
|
+
for (let d = 0; d < dimensions; d++) {
|
|
350
327
|
output[i][d] /= normalizer;
|
|
351
328
|
}
|
|
352
329
|
}
|
|
353
330
|
}
|
|
354
331
|
return output;
|
|
355
|
-
}
|
|
332
|
+
}
|
|
356
333
|
/**
|
|
357
334
|
* Get the speedup factor from the last benchmark
|
|
358
335
|
*/
|
|
359
|
-
|
|
336
|
+
getSpeedup() {
|
|
360
337
|
return this.lastSpeedup;
|
|
361
|
-
}
|
|
338
|
+
}
|
|
362
339
|
/**
|
|
363
340
|
* Run benchmark comparing naive vs CPU-optimized attention
|
|
364
341
|
*
|
|
@@ -366,165 +343,160 @@ var FlashAttention = /** @class */ (function () {
|
|
|
366
343
|
* @param dimensions - Dimensions per vector
|
|
367
344
|
* @param iterations - Number of iterations for averaging
|
|
368
345
|
*/
|
|
369
|
-
|
|
370
|
-
if (numVectors === void 0) { numVectors = 512; }
|
|
371
|
-
if (dimensions === void 0) { dimensions = 384; }
|
|
372
|
-
if (iterations === void 0) { iterations = 5; }
|
|
346
|
+
benchmark(numVectors = 512, dimensions = 384, iterations = 5) {
|
|
373
347
|
// Generate random test data
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
348
|
+
const queries = this.generateRandomVectors(numVectors, dimensions);
|
|
349
|
+
const keys = this.generateRandomVectors(numVectors, dimensions);
|
|
350
|
+
const values = this.generateRandomVectors(numVectors, dimensions);
|
|
377
351
|
// Warm up both paths
|
|
378
352
|
this.naiveAttention(queries.slice(0, 10), keys.slice(0, 10), values.slice(0, 10));
|
|
379
353
|
this.cpuOptimizedAttention(queries.slice(0, 10), keys.slice(0, 10), values.slice(0, 10));
|
|
380
354
|
// Benchmark naive attention
|
|
381
|
-
|
|
382
|
-
for (
|
|
383
|
-
|
|
355
|
+
let naiveTotalMs = 0;
|
|
356
|
+
for (let i = 0; i < iterations; i++) {
|
|
357
|
+
const start = performance.now();
|
|
384
358
|
this.naiveAttention(queries, keys, values);
|
|
385
359
|
naiveTotalMs += performance.now() - start;
|
|
386
360
|
}
|
|
387
|
-
|
|
361
|
+
const naiveTimeMs = naiveTotalMs / iterations;
|
|
388
362
|
// Benchmark CPU-optimized attention
|
|
389
|
-
|
|
390
|
-
for (
|
|
391
|
-
|
|
363
|
+
let flashTotalMs = 0;
|
|
364
|
+
for (let i = 0; i < iterations; i++) {
|
|
365
|
+
const start = performance.now();
|
|
392
366
|
this.cpuOptimizedAttention(queries, keys, values);
|
|
393
367
|
flashTotalMs += performance.now() - start;
|
|
394
368
|
}
|
|
395
|
-
|
|
369
|
+
const flashTimeMs = flashTotalMs / iterations;
|
|
396
370
|
// Calculate metrics
|
|
397
|
-
|
|
371
|
+
const speedup = naiveTimeMs / flashTimeMs;
|
|
398
372
|
this.lastSpeedup = speedup;
|
|
399
373
|
// Memory estimates
|
|
400
374
|
// Naive: needs full N x N attention matrix
|
|
401
|
-
|
|
375
|
+
const naiveMemoryBytes = numVectors * numVectors * 4; // Float32
|
|
402
376
|
// Flash: only needs block_size x block_size at a time
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
naiveTimeMs
|
|
407
|
-
flashTimeMs
|
|
408
|
-
speedup
|
|
409
|
-
numVectors
|
|
410
|
-
dimensions
|
|
411
|
-
naiveMemoryBytes
|
|
412
|
-
flashMemoryBytes
|
|
413
|
-
memoryReduction
|
|
377
|
+
const flashMemoryBytes = this.config.blockSize * this.config.blockSize * 4;
|
|
378
|
+
const memoryReduction = naiveMemoryBytes / flashMemoryBytes;
|
|
379
|
+
const result = {
|
|
380
|
+
naiveTimeMs,
|
|
381
|
+
flashTimeMs,
|
|
382
|
+
speedup,
|
|
383
|
+
numVectors,
|
|
384
|
+
dimensions,
|
|
385
|
+
naiveMemoryBytes,
|
|
386
|
+
flashMemoryBytes,
|
|
387
|
+
memoryReduction,
|
|
414
388
|
};
|
|
415
389
|
this.benchmarkHistory.push(result);
|
|
416
390
|
return result;
|
|
417
|
-
}
|
|
391
|
+
}
|
|
418
392
|
/**
|
|
419
393
|
* Get benchmark history
|
|
420
394
|
*/
|
|
421
|
-
|
|
422
|
-
return
|
|
423
|
-
}
|
|
395
|
+
getBenchmarkHistory() {
|
|
396
|
+
return [...this.benchmarkHistory];
|
|
397
|
+
}
|
|
424
398
|
/**
|
|
425
399
|
* Get configuration
|
|
426
400
|
*/
|
|
427
|
-
|
|
428
|
-
return
|
|
429
|
-
}
|
|
401
|
+
getConfig() {
|
|
402
|
+
return { ...this.config };
|
|
403
|
+
}
|
|
430
404
|
/**
|
|
431
405
|
* Update configuration
|
|
432
406
|
*/
|
|
433
|
-
|
|
434
|
-
this.config =
|
|
435
|
-
}
|
|
407
|
+
setConfig(config) {
|
|
408
|
+
this.config = { ...this.config, ...config };
|
|
409
|
+
}
|
|
436
410
|
// ==========================================================================
|
|
437
411
|
// Private Methods
|
|
438
412
|
// ==========================================================================
|
|
439
413
|
/**
|
|
440
414
|
* Naive O(N^2) attention implementation for comparison
|
|
441
415
|
*/
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
var scale = 1.0 / (Math.sqrt(dimensions) * this.config.temperature);
|
|
416
|
+
naiveAttention(queries, keys, values) {
|
|
417
|
+
const numQueries = queries.length;
|
|
418
|
+
const numKeys = keys.length;
|
|
419
|
+
const dimensions = queries[0]?.length ?? this.config.dimensions;
|
|
420
|
+
const scale = 1.0 / (Math.sqrt(dimensions) * this.config.temperature);
|
|
448
421
|
// Compute full attention matrix Q @ K.T
|
|
449
|
-
|
|
450
|
-
for (
|
|
422
|
+
const scores = new Array(numQueries);
|
|
423
|
+
for (let i = 0; i < numQueries; i++) {
|
|
451
424
|
scores[i] = new Float32Array(numKeys);
|
|
452
|
-
for (
|
|
425
|
+
for (let j = 0; j < numKeys; j++) {
|
|
453
426
|
scores[i][j] = this.dotProduct(queries[i], keys[j]) * scale;
|
|
454
427
|
}
|
|
455
428
|
}
|
|
456
429
|
// Softmax over each row
|
|
457
|
-
|
|
458
|
-
for (
|
|
430
|
+
const attentionWeights = new Array(numQueries);
|
|
431
|
+
for (let i = 0; i < numQueries; i++) {
|
|
459
432
|
attentionWeights[i] = this.softmax(scores[i]);
|
|
460
433
|
}
|
|
461
434
|
// Compute output: attention @ V
|
|
462
|
-
|
|
463
|
-
for (
|
|
435
|
+
const output = new Array(numQueries);
|
|
436
|
+
for (let i = 0; i < numQueries; i++) {
|
|
464
437
|
output[i] = new Float32Array(dimensions);
|
|
465
|
-
for (
|
|
466
|
-
|
|
467
|
-
for (
|
|
438
|
+
for (let j = 0; j < numKeys; j++) {
|
|
439
|
+
const weight = attentionWeights[i][j];
|
|
440
|
+
for (let d = 0; d < dimensions; d++) {
|
|
468
441
|
output[i][d] += weight * values[j][d];
|
|
469
442
|
}
|
|
470
443
|
}
|
|
471
444
|
}
|
|
472
445
|
return output;
|
|
473
|
-
}
|
|
446
|
+
}
|
|
474
447
|
/**
|
|
475
448
|
* Compute block of attention scores
|
|
476
449
|
*/
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
for (
|
|
450
|
+
computeBlockScores(Q, K, qStart, qEnd, kStart, kEnd, scale) {
|
|
451
|
+
const qBlockSize = qEnd - qStart;
|
|
452
|
+
const kBlockSize = kEnd - kStart;
|
|
453
|
+
const scores = new Array(qBlockSize);
|
|
454
|
+
for (let qi = 0; qi < qBlockSize; qi++) {
|
|
482
455
|
scores[qi] = new Float32Array(kBlockSize);
|
|
483
|
-
|
|
484
|
-
for (
|
|
456
|
+
const query = Q[qStart + qi];
|
|
457
|
+
for (let ki = 0; ki < kBlockSize; ki++) {
|
|
485
458
|
scores[qi][ki] = this.dotProduct(query, K[kStart + ki]) * scale;
|
|
486
459
|
}
|
|
487
460
|
}
|
|
488
461
|
return scores;
|
|
489
|
-
}
|
|
462
|
+
}
|
|
490
463
|
/**
|
|
491
464
|
* Online softmax with output accumulation (key to Flash Attention)
|
|
492
465
|
*
|
|
493
466
|
* Uses the online softmax trick to maintain numerical stability
|
|
494
467
|
* while processing blocks incrementally.
|
|
495
468
|
*/
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
var rowScores = blockScores[qi];
|
|
469
|
+
onlineSoftmaxAccumulate(blockScores, V, output, maxScores, sumExp, qStart, qEnd, kStart, kEnd) {
|
|
470
|
+
const qBlockSize = qEnd - qStart;
|
|
471
|
+
const kBlockSize = kEnd - kStart;
|
|
472
|
+
const dimensions = output[0]?.length ?? this.config.dimensions;
|
|
473
|
+
for (let qi = 0; qi < qBlockSize; qi++) {
|
|
474
|
+
const globalQi = qStart + qi;
|
|
475
|
+
const rowScores = blockScores[qi];
|
|
504
476
|
// Find max in this block
|
|
505
|
-
|
|
506
|
-
for (
|
|
477
|
+
let blockMax = -Infinity;
|
|
478
|
+
for (let ki = 0; ki < kBlockSize; ki++) {
|
|
507
479
|
if (rowScores[ki] > blockMax) {
|
|
508
480
|
blockMax = rowScores[ki];
|
|
509
481
|
}
|
|
510
482
|
}
|
|
511
|
-
|
|
512
|
-
|
|
483
|
+
const oldMax = maxScores[globalQi];
|
|
484
|
+
const newMax = Math.max(oldMax, blockMax);
|
|
513
485
|
// Correction factor for previous outputs
|
|
514
|
-
|
|
486
|
+
const correction = oldMax === -Infinity ? 0 : Math.exp(oldMax - newMax);
|
|
515
487
|
// Update sum of exponentials with correction
|
|
516
|
-
|
|
488
|
+
let newSumExp = sumExp[globalQi] * correction;
|
|
517
489
|
// Scale existing output by correction factor
|
|
518
|
-
for (
|
|
490
|
+
for (let d = 0; d < dimensions; d++) {
|
|
519
491
|
output[globalQi][d] *= correction;
|
|
520
492
|
}
|
|
521
493
|
// Process this block
|
|
522
|
-
for (
|
|
523
|
-
|
|
494
|
+
for (let ki = 0; ki < kBlockSize; ki++) {
|
|
495
|
+
const expScore = Math.exp(rowScores[ki] - newMax);
|
|
524
496
|
newSumExp += expScore;
|
|
525
497
|
// Accumulate weighted values
|
|
526
|
-
|
|
527
|
-
for (
|
|
498
|
+
const value = V[kStart + ki];
|
|
499
|
+
for (let d = 0; d < dimensions; d++) {
|
|
528
500
|
output[globalQi][d] += expScore * value[d];
|
|
529
501
|
}
|
|
530
502
|
}
|
|
@@ -532,15 +504,15 @@ var FlashAttention = /** @class */ (function () {
|
|
|
532
504
|
maxScores[globalQi] = newMax;
|
|
533
505
|
sumExp[globalQi] = newSumExp;
|
|
534
506
|
}
|
|
535
|
-
}
|
|
507
|
+
}
|
|
536
508
|
/**
|
|
537
509
|
* Compute dot product of two vectors
|
|
538
510
|
*/
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
511
|
+
dotProduct(a, b) {
|
|
512
|
+
let sum = 0;
|
|
513
|
+
const len = Math.min(a.length, b.length);
|
|
542
514
|
// Unroll loop for performance (4x unroll)
|
|
543
|
-
|
|
515
|
+
let i = 0;
|
|
544
516
|
for (; i <= len - 4; i += 4) {
|
|
545
517
|
sum += a[i] * b[i] +
|
|
546
518
|
a[i + 1] * b[i + 1] +
|
|
@@ -552,85 +524,82 @@ var FlashAttention = /** @class */ (function () {
|
|
|
552
524
|
sum += a[i] * b[i];
|
|
553
525
|
}
|
|
554
526
|
return sum;
|
|
555
|
-
}
|
|
527
|
+
}
|
|
556
528
|
/**
|
|
557
529
|
* Stable softmax implementation
|
|
558
530
|
*/
|
|
559
|
-
|
|
560
|
-
|
|
531
|
+
softmax(scores) {
|
|
532
|
+
const result = new Float32Array(scores.length);
|
|
561
533
|
// Find max for numerical stability
|
|
562
|
-
|
|
563
|
-
for (
|
|
534
|
+
let max = -Infinity;
|
|
535
|
+
for (let i = 0; i < scores.length; i++) {
|
|
564
536
|
if (scores[i] > max) {
|
|
565
537
|
max = scores[i];
|
|
566
538
|
}
|
|
567
539
|
}
|
|
568
540
|
// Compute exp and sum
|
|
569
|
-
|
|
570
|
-
for (
|
|
541
|
+
let sum = 0;
|
|
542
|
+
for (let i = 0; i < scores.length; i++) {
|
|
571
543
|
result[i] = Math.exp(scores[i] - max);
|
|
572
544
|
sum += result[i];
|
|
573
545
|
}
|
|
574
546
|
// Normalize
|
|
575
547
|
if (sum > 0) {
|
|
576
|
-
for (
|
|
548
|
+
for (let i = 0; i < scores.length; i++) {
|
|
577
549
|
result[i] /= sum;
|
|
578
550
|
}
|
|
579
551
|
}
|
|
580
552
|
return result;
|
|
581
|
-
}
|
|
553
|
+
}
|
|
582
554
|
/**
|
|
583
555
|
* Generate random vectors for benchmarking
|
|
584
556
|
*/
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
for (
|
|
557
|
+
generateRandomVectors(count, dimensions) {
|
|
558
|
+
const vectors = new Array(count);
|
|
559
|
+
for (let i = 0; i < count; i++) {
|
|
588
560
|
vectors[i] = new Float32Array(dimensions);
|
|
589
|
-
for (
|
|
561
|
+
for (let d = 0; d < dimensions; d++) {
|
|
590
562
|
vectors[i][d] = (Math.random() - 0.5) * 2;
|
|
591
563
|
}
|
|
592
564
|
// Normalize
|
|
593
|
-
|
|
594
|
-
for (
|
|
565
|
+
let norm = 0;
|
|
566
|
+
for (let d = 0; d < dimensions; d++) {
|
|
595
567
|
norm += vectors[i][d] * vectors[i][d];
|
|
596
568
|
}
|
|
597
569
|
norm = Math.sqrt(norm);
|
|
598
570
|
if (norm > 0) {
|
|
599
|
-
for (
|
|
571
|
+
for (let d = 0; d < dimensions; d++) {
|
|
600
572
|
vectors[i][d] /= norm;
|
|
601
573
|
}
|
|
602
574
|
}
|
|
603
575
|
}
|
|
604
576
|
return vectors;
|
|
605
|
-
}
|
|
577
|
+
}
|
|
606
578
|
/**
|
|
607
579
|
* Validate input arrays
|
|
608
580
|
*/
|
|
609
|
-
|
|
610
|
-
var _a, _b, _c, _d, _e, _f;
|
|
581
|
+
validateInputs(queries, keys, values) {
|
|
611
582
|
if (!queries.length || !keys.length || !values.length) {
|
|
612
583
|
throw new Error('FlashAttention: Empty input arrays');
|
|
613
584
|
}
|
|
614
585
|
if (keys.length !== values.length) {
|
|
615
|
-
throw new Error(
|
|
586
|
+
throw new Error(`FlashAttention: Keys and values must have same count. Got ${keys.length} keys, ${values.length} values`);
|
|
616
587
|
}
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
588
|
+
const qDim = queries[0]?.length ?? 0;
|
|
589
|
+
const kDim = keys[0]?.length ?? 0;
|
|
590
|
+
const vDim = values[0]?.length ?? 0;
|
|
620
591
|
if (qDim !== kDim) {
|
|
621
|
-
throw new Error(
|
|
592
|
+
throw new Error(`FlashAttention: Query and key dimensions must match. Got Q=${qDim}, K=${kDim}`);
|
|
622
593
|
}
|
|
623
594
|
if (kDim !== vDim) {
|
|
624
|
-
throw new Error(
|
|
595
|
+
throw new Error(`FlashAttention: Key and value dimensions must match. Got K=${kDim}, V=${vDim}`);
|
|
625
596
|
}
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
}());
|
|
629
|
-
export { FlashAttention };
|
|
597
|
+
}
|
|
598
|
+
}
|
|
630
599
|
// ============================================================================
|
|
631
600
|
// Singleton Instance
|
|
632
601
|
// ============================================================================
|
|
633
|
-
|
|
602
|
+
let flashAttentionInstance = null;
|
|
634
603
|
/**
|
|
635
604
|
* Get singleton FlashAttention instance
|
|
636
605
|
*
|
|
@@ -656,7 +625,7 @@ export function resetFlashAttention() {
|
|
|
656
625
|
* Compute attention using Flash Attention
|
|
657
626
|
*/
|
|
658
627
|
export function computeAttention(queries, keys, values, config) {
|
|
659
|
-
|
|
628
|
+
const fa = config ? new FlashAttention(config) : getFlashAttention();
|
|
660
629
|
return fa.attention(queries, keys, values);
|
|
661
630
|
}
|
|
662
631
|
/**
|