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