agentic-flow 1.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/MIGRATION_SUMMARY.md +222 -0
- package/.claude/agents/README.md +89 -0
- package/.claude/agents/analysis/code-analyzer.md +209 -0
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +180 -0
- package/.claude/agents/architecture/system-design/arch-system-design.md +156 -0
- package/.claude/agents/base-template-generator.md +42 -0
- package/.claude/agents/consensus/README.md +253 -0
- package/.claude/agents/consensus/byzantine-coordinator.md +63 -0
- package/.claude/agents/consensus/crdt-synchronizer.md +997 -0
- package/.claude/agents/consensus/gossip-coordinator.md +63 -0
- package/.claude/agents/consensus/performance-benchmarker.md +851 -0
- package/.claude/agents/consensus/quorum-manager.md +823 -0
- package/.claude/agents/consensus/raft-manager.md +63 -0
- package/.claude/agents/consensus/security-manager.md +622 -0
- package/.claude/agents/core/coder.md +211 -0
- package/.claude/agents/core/planner.md +116 -0
- package/.claude/agents/core/researcher.md +136 -0
- package/.claude/agents/core/reviewer.md +272 -0
- package/.claude/agents/core/tester.md +266 -0
- package/.claude/agents/data/ml/data-ml-model.md +193 -0
- package/.claude/agents/development/backend/dev-backend-api.md +142 -0
- package/.claude/agents/devops/ci-cd/ops-cicd-github.md +164 -0
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +174 -0
- package/.claude/agents/flow-nexus/app-store.md +88 -0
- package/.claude/agents/flow-nexus/authentication.md +69 -0
- package/.claude/agents/flow-nexus/challenges.md +81 -0
- package/.claude/agents/flow-nexus/neural-network.md +88 -0
- package/.claude/agents/flow-nexus/payments.md +83 -0
- package/.claude/agents/flow-nexus/sandbox.md +76 -0
- package/.claude/agents/flow-nexus/swarm.md +76 -0
- package/.claude/agents/flow-nexus/user-tools.md +96 -0
- package/.claude/agents/flow-nexus/workflow.md +84 -0
- package/.claude/agents/github/code-review-swarm.md +538 -0
- package/.claude/agents/github/github-modes.md +173 -0
- package/.claude/agents/github/issue-tracker.md +319 -0
- package/.claude/agents/github/multi-repo-swarm.md +553 -0
- package/.claude/agents/github/pr-manager.md +191 -0
- package/.claude/agents/github/project-board-sync.md +509 -0
- package/.claude/agents/github/release-manager.md +367 -0
- package/.claude/agents/github/release-swarm.md +583 -0
- package/.claude/agents/github/repo-architect.md +398 -0
- package/.claude/agents/github/swarm-issue.md +573 -0
- package/.claude/agents/github/swarm-pr.md +428 -0
- package/.claude/agents/github/sync-coordinator.md +452 -0
- package/.claude/agents/github/workflow-automation.md +635 -0
- package/.claude/agents/goal/agent.md +816 -0
- package/.claude/agents/goal/goal-planner.md +73 -0
- package/.claude/agents/optimization/README.md +250 -0
- package/.claude/agents/optimization/benchmark-suite.md +665 -0
- package/.claude/agents/optimization/load-balancer.md +431 -0
- package/.claude/agents/optimization/performance-monitor.md +672 -0
- package/.claude/agents/optimization/resource-allocator.md +674 -0
- package/.claude/agents/optimization/topology-optimizer.md +808 -0
- package/.claude/agents/payments/agentic-payments.md +126 -0
- package/.claude/agents/sparc/architecture.md +472 -0
- package/.claude/agents/sparc/pseudocode.md +318 -0
- package/.claude/agents/sparc/refinement.md +525 -0
- package/.claude/agents/sparc/specification.md +276 -0
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +226 -0
- package/.claude/agents/sublinear/consensus-coordinator.md +338 -0
- package/.claude/agents/sublinear/matrix-optimizer.md +185 -0
- package/.claude/agents/sublinear/pagerank-analyzer.md +299 -0
- package/.claude/agents/sublinear/performance-optimizer.md +368 -0
- package/.claude/agents/sublinear/trading-predictor.md +246 -0
- package/.claude/agents/swarm/README.md +190 -0
- package/.claude/agents/swarm/adaptive-coordinator.md +396 -0
- package/.claude/agents/swarm/hierarchical-coordinator.md +256 -0
- package/.claude/agents/swarm/mesh-coordinator.md +392 -0
- package/.claude/agents/templates/automation-smart-agent.md +205 -0
- package/.claude/agents/templates/coordinator-swarm-init.md +90 -0
- package/.claude/agents/templates/github-pr-manager.md +177 -0
- package/.claude/agents/templates/implementer-sparc-coder.md +259 -0
- package/.claude/agents/templates/memory-coordinator.md +187 -0
- package/.claude/agents/templates/migration-plan.md +746 -0
- package/.claude/agents/templates/orchestrator-task.md +139 -0
- package/.claude/agents/templates/performance-analyzer.md +199 -0
- package/.claude/agents/templates/sparc-coordinator.md +183 -0
- package/.claude/agents/test-neural.md +14 -0
- package/.claude/agents/testing/unit/tdd-london-swarm.md +244 -0
- package/.claude/agents/testing/validation/production-validator.md +395 -0
- package/.claude/commands/agents/README.md +10 -0
- package/.claude/commands/agents/agent-capabilities.md +21 -0
- package/.claude/commands/agents/agent-coordination.md +28 -0
- package/.claude/commands/agents/agent-spawning.md +28 -0
- package/.claude/commands/agents/agent-types.md +26 -0
- package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +54 -0
- package/.claude/commands/analysis/README.md +9 -0
- package/.claude/commands/analysis/bottleneck-detect.md +162 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +59 -0
- package/.claude/commands/analysis/performance-report.md +25 -0
- package/.claude/commands/analysis/token-efficiency.md +45 -0
- package/.claude/commands/analysis/token-usage.md +25 -0
- package/.claude/commands/automation/README.md +9 -0
- package/.claude/commands/automation/auto-agent.md +122 -0
- package/.claude/commands/automation/self-healing.md +106 -0
- package/.claude/commands/automation/session-memory.md +90 -0
- package/.claude/commands/automation/smart-agents.md +73 -0
- package/.claude/commands/automation/smart-spawn.md +25 -0
- package/.claude/commands/automation/workflow-select.md +25 -0
- package/.claude/commands/claude-flow-help.md +103 -0
- package/.claude/commands/claude-flow-memory.md +107 -0
- package/.claude/commands/claude-flow-swarm.md +205 -0
- package/.claude/commands/coordination/README.md +9 -0
- package/.claude/commands/coordination/agent-spawn.md +25 -0
- package/.claude/commands/coordination/init.md +44 -0
- package/.claude/commands/coordination/orchestrate.md +43 -0
- package/.claude/commands/coordination/spawn.md +45 -0
- package/.claude/commands/coordination/swarm-init.md +85 -0
- package/.claude/commands/coordination/task-orchestrate.md +25 -0
- package/.claude/commands/flow-nexus/app-store.md +124 -0
- package/.claude/commands/flow-nexus/challenges.md +120 -0
- package/.claude/commands/flow-nexus/login-registration.md +65 -0
- package/.claude/commands/flow-nexus/neural-network.md +134 -0
- package/.claude/commands/flow-nexus/payments.md +116 -0
- package/.claude/commands/flow-nexus/sandbox.md +83 -0
- package/.claude/commands/flow-nexus/swarm.md +87 -0
- package/.claude/commands/flow-nexus/user-tools.md +152 -0
- package/.claude/commands/flow-nexus/workflow.md +115 -0
- package/.claude/commands/github/README.md +11 -0
- package/.claude/commands/github/code-review-swarm.md +514 -0
- package/.claude/commands/github/code-review.md +25 -0
- package/.claude/commands/github/github-modes.md +147 -0
- package/.claude/commands/github/github-swarm.md +121 -0
- package/.claude/commands/github/issue-tracker.md +292 -0
- package/.claude/commands/github/issue-triage.md +25 -0
- package/.claude/commands/github/multi-repo-swarm.md +519 -0
- package/.claude/commands/github/pr-enhance.md +26 -0
- package/.claude/commands/github/pr-manager.md +170 -0
- package/.claude/commands/github/project-board-sync.md +471 -0
- package/.claude/commands/github/release-manager.md +338 -0
- package/.claude/commands/github/release-swarm.md +544 -0
- package/.claude/commands/github/repo-analyze.md +25 -0
- package/.claude/commands/github/repo-architect.md +367 -0
- package/.claude/commands/github/swarm-issue.md +482 -0
- package/.claude/commands/github/swarm-pr.md +285 -0
- package/.claude/commands/github/sync-coordinator.md +301 -0
- package/.claude/commands/github/workflow-automation.md +442 -0
- package/.claude/commands/hive-mind/README.md +17 -0
- package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-init.md +18 -0
- package/.claude/commands/hive-mind/hive-mind-memory.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-resume.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -0
- package/.claude/commands/hive-mind/hive-mind-status.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-stop.md +8 -0
- package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -0
- package/.claude/commands/hive-mind/hive-mind.md +27 -0
- package/.claude/commands/hooks/README.md +11 -0
- package/.claude/commands/hooks/overview.md +58 -0
- package/.claude/commands/hooks/post-edit.md +117 -0
- package/.claude/commands/hooks/post-task.md +112 -0
- package/.claude/commands/hooks/pre-edit.md +113 -0
- package/.claude/commands/hooks/pre-task.md +111 -0
- package/.claude/commands/hooks/session-end.md +118 -0
- package/.claude/commands/hooks/setup.md +103 -0
- package/.claude/commands/memory/README.md +9 -0
- package/.claude/commands/memory/memory-persist.md +25 -0
- package/.claude/commands/memory/memory-search.md +25 -0
- package/.claude/commands/memory/memory-usage.md +25 -0
- package/.claude/commands/memory/neural.md +47 -0
- package/.claude/commands/memory/usage.md +46 -0
- package/.claude/commands/monitoring/README.md +9 -0
- package/.claude/commands/monitoring/agent-metrics.md +25 -0
- package/.claude/commands/monitoring/agents.md +44 -0
- package/.claude/commands/monitoring/real-time-view.md +25 -0
- package/.claude/commands/monitoring/status.md +46 -0
- package/.claude/commands/monitoring/swarm-monitor.md +25 -0
- package/.claude/commands/optimization/README.md +9 -0
- package/.claude/commands/optimization/auto-topology.md +62 -0
- package/.claude/commands/optimization/cache-manage.md +25 -0
- package/.claude/commands/optimization/parallel-execute.md +25 -0
- package/.claude/commands/optimization/parallel-execution.md +50 -0
- package/.claude/commands/optimization/topology-optimize.md +25 -0
- package/.claude/commands/pair/README.md +261 -0
- package/.claude/commands/pair/commands.md +546 -0
- package/.claude/commands/pair/config.md +510 -0
- package/.claude/commands/pair/examples.md +512 -0
- package/.claude/commands/pair/modes.md +348 -0
- package/.claude/commands/pair/session.md +407 -0
- package/.claude/commands/pair/start.md +209 -0
- package/.claude/commands/sparc/analyzer.md +52 -0
- package/.claude/commands/sparc/architect.md +53 -0
- package/.claude/commands/sparc/ask.md +97 -0
- package/.claude/commands/sparc/batch-executor.md +54 -0
- package/.claude/commands/sparc/code.md +89 -0
- package/.claude/commands/sparc/coder.md +54 -0
- package/.claude/commands/sparc/debug.md +83 -0
- package/.claude/commands/sparc/debugger.md +54 -0
- package/.claude/commands/sparc/designer.md +53 -0
- package/.claude/commands/sparc/devops.md +109 -0
- package/.claude/commands/sparc/docs-writer.md +80 -0
- package/.claude/commands/sparc/documenter.md +54 -0
- package/.claude/commands/sparc/innovator.md +54 -0
- package/.claude/commands/sparc/integration.md +83 -0
- package/.claude/commands/sparc/mcp.md +117 -0
- package/.claude/commands/sparc/memory-manager.md +54 -0
- package/.claude/commands/sparc/optimizer.md +54 -0
- package/.claude/commands/sparc/orchestrator.md +132 -0
- package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -0
- package/.claude/commands/sparc/refinement-optimization-mode.md +83 -0
- package/.claude/commands/sparc/researcher.md +54 -0
- package/.claude/commands/sparc/reviewer.md +54 -0
- package/.claude/commands/sparc/security-review.md +80 -0
- package/.claude/commands/sparc/sparc-modes.md +174 -0
- package/.claude/commands/sparc/sparc.md +111 -0
- package/.claude/commands/sparc/spec-pseudocode.md +80 -0
- package/.claude/commands/sparc/supabase-admin.md +348 -0
- package/.claude/commands/sparc/swarm-coordinator.md +54 -0
- package/.claude/commands/sparc/tdd.md +54 -0
- package/.claude/commands/sparc/tester.md +54 -0
- package/.claude/commands/sparc/tutorial.md +79 -0
- package/.claude/commands/sparc/workflow-manager.md +54 -0
- package/.claude/commands/sparc.md +166 -0
- package/.claude/commands/stream-chain/pipeline.md +121 -0
- package/.claude/commands/stream-chain/run.md +70 -0
- package/.claude/commands/swarm/README.md +15 -0
- package/.claude/commands/swarm/analysis.md +95 -0
- package/.claude/commands/swarm/development.md +96 -0
- package/.claude/commands/swarm/examples.md +168 -0
- package/.claude/commands/swarm/maintenance.md +102 -0
- package/.claude/commands/swarm/optimization.md +117 -0
- package/.claude/commands/swarm/research.md +136 -0
- package/.claude/commands/swarm/swarm-analysis.md +8 -0
- package/.claude/commands/swarm/swarm-background.md +8 -0
- package/.claude/commands/swarm/swarm-init.md +19 -0
- package/.claude/commands/swarm/swarm-modes.md +8 -0
- package/.claude/commands/swarm/swarm-monitor.md +8 -0
- package/.claude/commands/swarm/swarm-spawn.md +19 -0
- package/.claude/commands/swarm/swarm-status.md +8 -0
- package/.claude/commands/swarm/swarm-strategies.md +8 -0
- package/.claude/commands/swarm/swarm.md +27 -0
- package/.claude/commands/swarm/testing.md +131 -0
- package/.claude/commands/training/README.md +9 -0
- package/.claude/commands/training/model-update.md +25 -0
- package/.claude/commands/training/neural-patterns.md +74 -0
- package/.claude/commands/training/neural-train.md +25 -0
- package/.claude/commands/training/pattern-learn.md +25 -0
- package/.claude/commands/training/specialization.md +63 -0
- package/.claude/commands/truth/start.md +143 -0
- package/.claude/commands/verify/check.md +50 -0
- package/.claude/commands/verify/start.md +128 -0
- package/.claude/commands/workflows/README.md +9 -0
- package/.claude/commands/workflows/development.md +78 -0
- package/.claude/commands/workflows/research.md +63 -0
- package/.claude/commands/workflows/workflow-create.md +25 -0
- package/.claude/commands/workflows/workflow-execute.md +25 -0
- package/.claude/commands/workflows/workflow-export.md +25 -0
- package/.claude/helpers/checkpoint-manager.sh +251 -0
- package/.claude/helpers/github-safe.js +106 -0
- package/.claude/helpers/github-setup.sh +28 -0
- package/.claude/helpers/quick-start.sh +19 -0
- package/.claude/helpers/setup-mcp.sh +18 -0
- package/.claude/helpers/standard-checkpoint-hooks.sh +179 -0
- package/.claude/mcp.json +13 -0
- package/.claude/settings-backup.json +130 -0
- package/.claude/settings-optimized.json +116 -0
- package/.claude/settings-simple.json +78 -0
- package/.claude/settings.json +114 -0
- package/.claude/settings.local.json +14 -0
- package/README.md +1280 -0
- package/dist/agents/claudeAgent.js +73 -0
- package/dist/agents/claudeFlowAgent.js +115 -0
- package/dist/agents/codeReviewAgent.js +34 -0
- package/dist/agents/dataAgent.js +34 -0
- package/dist/agents/directApiAgent.js +260 -0
- package/dist/agents/webResearchAgent.js +35 -0
- package/dist/cli/mcp.js +135 -0
- package/dist/cli-proxy.js +246 -0
- package/dist/cli.js +158 -0
- package/dist/config/claudeFlow.js +67 -0
- package/dist/config/tools.js +33 -0
- package/dist/coordination/parallelSwarm.js +226 -0
- package/dist/examples/multi-agent-orchestration.js +45 -0
- package/dist/examples/parallel-swarm-deployment.js +171 -0
- package/dist/examples/use-goal-planner.js +52 -0
- package/dist/health.js +46 -0
- package/dist/index-with-proxy.js +101 -0
- package/dist/index.js +167 -0
- package/dist/mcp/claudeFlowSdkServer.js +202 -0
- package/dist/mcp/fastmcp/servers/claude-flow-sdk.js +198 -0
- package/dist/mcp/fastmcp/servers/http-streaming-updated.js +421 -0
- package/dist/mcp/fastmcp/servers/poc-stdio.js +82 -0
- package/dist/mcp/fastmcp/servers/stdio-full.js +421 -0
- package/dist/mcp/fastmcp/tools/agent/add-agent.js +107 -0
- package/dist/mcp/fastmcp/tools/agent/add-command.js +117 -0
- package/dist/mcp/fastmcp/tools/agent/execute.js +56 -0
- package/dist/mcp/fastmcp/tools/agent/list.js +82 -0
- package/dist/mcp/fastmcp/tools/agent/parallel.js +63 -0
- package/dist/mcp/fastmcp/tools/memory/retrieve.js +38 -0
- package/dist/mcp/fastmcp/tools/memory/search.js +41 -0
- package/dist/mcp/fastmcp/tools/memory/store.js +56 -0
- package/dist/mcp/fastmcp/tools/swarm/init.js +41 -0
- package/dist/mcp/fastmcp/tools/swarm/orchestrate.js +47 -0
- package/dist/mcp/fastmcp/tools/swarm/spawn.js +40 -0
- package/dist/mcp/fastmcp/types/index.js +2 -0
- package/dist/proxy/anthropic-to-openrouter.js +246 -0
- package/dist/router/providers/anthropic.js +89 -0
- package/dist/router/providers/onnx-local-optimized.js +167 -0
- package/dist/router/providers/onnx-local.js +294 -0
- package/dist/router/providers/onnx-phi4.js +190 -0
- package/dist/router/providers/onnx.js +242 -0
- package/dist/router/providers/openrouter.js +242 -0
- package/dist/router/router.js +283 -0
- package/dist/router/test-integration.js +140 -0
- package/dist/router/test-onnx-benchmark.js +145 -0
- package/dist/router/test-onnx-integration.js +128 -0
- package/dist/router/test-onnx-local.js +37 -0
- package/dist/router/test-onnx.js +148 -0
- package/dist/router/test-openrouter.js +121 -0
- package/dist/router/test-phi4.js +137 -0
- package/dist/router/types.js +2 -0
- package/dist/utils/agentLoader.js +106 -0
- package/dist/utils/cli.js +128 -0
- package/dist/utils/logger.js +41 -0
- package/dist/utils/mcpCommands.js +214 -0
- package/dist/utils/model-downloader.js +182 -0
- package/dist/utils/retry.js +54 -0
- package/docs/.claude-flow/metrics/agent-metrics.json +1 -0
- package/docs/.claude-flow/metrics/performance.json +9 -0
- package/docs/.claude-flow/metrics/task-metrics.json +10 -0
- package/docs/CHANGELOG.md +155 -0
- package/docs/CLAUDE.md +352 -0
- package/docs/COMPLETE_VALIDATION_SUMMARY.md +405 -0
- package/docs/INDEX.md +183 -0
- package/docs/LICENSE +21 -0
- package/docs/ONNX_CLI_USAGE.md +344 -0
- package/docs/ONNX_ENV_VARS.md +564 -0
- package/docs/ONNX_INTEGRATION.md +422 -0
- package/docs/ONNX_OPTIMIZATION_GUIDE.md +665 -0
- package/docs/ONNX_OPTIMIZATION_SUMMARY.md +374 -0
- package/docs/ONNX_VS_CLAUDE_QUALITY.md +442 -0
- package/docs/OPENROUTER_DEPLOYMENT.md +495 -0
- package/docs/architecture/EXECUTIVE_SUMMARY.md +310 -0
- package/docs/architecture/IMPROVEMENT_PLAN.md +11 -0
- package/docs/architecture/INTEGRATION-STATUS.md +290 -0
- package/docs/architecture/MULTI_MODEL_ROUTER_PLAN.md +620 -0
- package/docs/architecture/QUICK_WINS.md +333 -0
- package/docs/architecture/README.md +15 -0
- package/docs/architecture/RESEARCH_SUMMARY.md +652 -0
- package/docs/archived/FASTMCP_COMPLETE.md +428 -0
- package/docs/archived/FASTMCP_INTEGRATION_STATUS.md +288 -0
- package/docs/archived/FLOW-NEXUS-COMPLETE.md +269 -0
- package/docs/archived/INTEGRATION_CONFIRMED.md +351 -0
- package/docs/archived/ONNX_FINAL_REPORT.md +312 -0
- package/docs/archived/ONNX_IMPLEMENTATION_COMPLETE.md +215 -0
- package/docs/archived/ONNX_IMPLEMENTATION_SUMMARY.md +197 -0
- package/docs/archived/ONNX_SUCCESS_REPORT.md +271 -0
- package/docs/archived/OPENROUTER_PROXY_COMPLETE.md +494 -0
- package/docs/archived/PACKAGE-COMPLETE.md +138 -0
- package/docs/archived/README.md +27 -0
- package/docs/archived/RESEARCH_COMPLETE.txt +335 -0
- package/docs/archived/SDK-SETUP-COMPLETE.md +252 -0
- package/docs/guides/ALTERNATIVE_LLM_MODELS.md +524 -0
- package/docs/guides/DOCKER_AGENT_USAGE.md +352 -0
- package/docs/guides/IMPLEMENTATION_EXAMPLES.md +960 -0
- package/docs/guides/NPM-PUBLISH.md +218 -0
- package/docs/guides/README.md +17 -0
- package/docs/guides/agent-sdk.md +234 -0
- package/docs/integrations/CLAUDE_AGENTS_INTEGRATION.md +356 -0
- package/docs/integrations/CLAUDE_FLOW_INTEGRATION.md +535 -0
- package/docs/integrations/FASTMCP_CLI_INTEGRATION.md +503 -0
- package/docs/integrations/FLOW-NEXUS-INTEGRATION.md +319 -0
- package/docs/integrations/README.md +18 -0
- package/docs/integrations/fastmcp-implementation-plan.md +2516 -0
- package/docs/integrations/fastmcp-poc-integration.md +198 -0
- package/docs/router/ONNX_PHI4_RESEARCH.md +220 -0
- package/docs/router/ONNX_RUNTIME_INTEGRATION_PLAN.md +866 -0
- package/docs/router/PHI4_HYPEROPTIMIZATION_PLAN.md +2488 -0
- package/docs/router/README.md +552 -0
- package/docs/router/ROUTER_CONFIG_REFERENCE.md +577 -0
- package/docs/router/ROUTER_USER_GUIDE.md +865 -0
- package/docs/validation/DOCKER_MCP_VALIDATION.md +358 -0
- package/docs/validation/DOCKER_OPENROUTER_VALIDATION.md +443 -0
- package/docs/validation/FINAL_SYSTEM_VALIDATION.md +458 -0
- package/docs/validation/FINAL_VALIDATION_SUMMARY.md +409 -0
- package/docs/validation/MCP_CLI_TOOLS_VALIDATION.md +266 -0
- package/docs/validation/MODEL_VALIDATION_REPORT.md +386 -0
- package/docs/validation/OPENROUTER_VALIDATION_COMPLETE.md +382 -0
- package/docs/validation/README.md +20 -0
- package/docs/validation/ROUTER_VALIDATION.md +311 -0
- package/package.json +140 -0
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ONNX Integration Test - Validates agentic-flow works with ONNX
|
|
4
|
+
*
|
|
5
|
+
* Tests ONNX provider integration with the multi-model router
|
|
6
|
+
*/
|
|
7
|
+
import { ModelRouter } from './router.js';
|
|
8
|
+
async function testONNXIntegration() {
|
|
9
|
+
console.log('š§Ŗ agentic-flow + ONNX Runtime Integration Test\n');
|
|
10
|
+
console.log('='.repeat(60));
|
|
11
|
+
console.log('Testing: Multi-Model Router with ONNX Local Inference');
|
|
12
|
+
console.log('='.repeat(60) + '\n');
|
|
13
|
+
try {
|
|
14
|
+
// Initialize router (ONNX-only mode)
|
|
15
|
+
console.log('Step 1: Router Initialization');
|
|
16
|
+
console.log('==============================');
|
|
17
|
+
const router = new ModelRouter();
|
|
18
|
+
const config = router.getConfig();
|
|
19
|
+
console.log(`ā
Router initialized successfully`);
|
|
20
|
+
console.log(` Version: ${config.version}`);
|
|
21
|
+
console.log(` Default Provider: ${config.defaultProvider}`);
|
|
22
|
+
console.log(` Fallback Chain: ${config.fallbackChain?.join(' ā ')}`);
|
|
23
|
+
console.log(` Routing Mode: ${config.routing?.mode}`);
|
|
24
|
+
console.log(` Providers Configured: ${Object.keys(config.providers).length}`);
|
|
25
|
+
console.log('');
|
|
26
|
+
// Test ONNX provider
|
|
27
|
+
console.log('Step 2: ONNX Provider Direct Test');
|
|
28
|
+
console.log('===================================');
|
|
29
|
+
// Get ONNX provider directly
|
|
30
|
+
const onnxProvider = router.providers.get('onnx');
|
|
31
|
+
if (!onnxProvider) {
|
|
32
|
+
throw new Error('ONNX provider not initialized');
|
|
33
|
+
}
|
|
34
|
+
console.log(`ā
ONNX provider found: ${onnxProvider.name}`);
|
|
35
|
+
console.log(` Type: ${onnxProvider.type}`);
|
|
36
|
+
console.log(` Supports Streaming: ${onnxProvider.supportsStreaming}`);
|
|
37
|
+
console.log(` Supports Tools: ${onnxProvider.supportsTools}`);
|
|
38
|
+
console.log('');
|
|
39
|
+
// Test inference
|
|
40
|
+
console.log('Step 3: ONNX Inference Test');
|
|
41
|
+
console.log('=============================');
|
|
42
|
+
const response = await onnxProvider.chat({
|
|
43
|
+
model: 'phi-4',
|
|
44
|
+
messages: [
|
|
45
|
+
{ role: 'user', content: 'What is 2+2?' }
|
|
46
|
+
],
|
|
47
|
+
maxTokens: 20
|
|
48
|
+
});
|
|
49
|
+
console.log(`ā
Inference successful`);
|
|
50
|
+
console.log(` Response: ${response.content[0].type === 'text' ? response.content[0].text : 'N/A'}`);
|
|
51
|
+
console.log(` Model: ${response.model}`);
|
|
52
|
+
console.log(` Latency: ${response.metadata?.latency}ms`);
|
|
53
|
+
console.log(` Tokens/Sec: ${response.metadata?.tokensPerSecond}`);
|
|
54
|
+
console.log(` Cost: $${response.metadata?.cost || 0}`);
|
|
55
|
+
console.log(` Input Tokens: ${response.usage?.inputTokens}`);
|
|
56
|
+
console.log(` Output Tokens: ${response.usage?.outputTokens}`);
|
|
57
|
+
console.log('');
|
|
58
|
+
// Test router configuration
|
|
59
|
+
console.log('Step 4: Router Configuration Validation');
|
|
60
|
+
console.log('=========================================');
|
|
61
|
+
const onnxConfig = config.providers.onnx;
|
|
62
|
+
console.log(`ā
ONNX Configuration:`);
|
|
63
|
+
console.log(` Model Path: ${onnxConfig?.modelPath || 'default'}`);
|
|
64
|
+
console.log(` Execution Providers: ${onnxConfig?.executionProviders?.join(', ')}`);
|
|
65
|
+
console.log(` Max Tokens: ${onnxConfig?.maxTokens}`);
|
|
66
|
+
console.log(` Temperature: ${onnxConfig?.temperature}`);
|
|
67
|
+
console.log(` Local Inference: ${onnxConfig?.localInference}`);
|
|
68
|
+
console.log(` GPU Acceleration: ${onnxConfig?.gpuAcceleration}`);
|
|
69
|
+
console.log('');
|
|
70
|
+
// Test routing rules
|
|
71
|
+
console.log('Step 5: Privacy Routing Rule Validation');
|
|
72
|
+
console.log('=========================================');
|
|
73
|
+
const privacyRule = config.routing?.rules?.find(r => r.condition.privacy === 'high' && r.action.provider === 'onnx');
|
|
74
|
+
if (privacyRule) {
|
|
75
|
+
console.log(`ā
Privacy routing rule configured:`);
|
|
76
|
+
console.log(` Condition: privacy = high, localOnly = ${privacyRule.condition.localOnly}`);
|
|
77
|
+
console.log(` Action: Route to ${privacyRule.action.provider}`);
|
|
78
|
+
console.log(` Reason: ${privacyRule.reason}`);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(`ā ļø Privacy routing rule not found (optional)`);
|
|
82
|
+
}
|
|
83
|
+
console.log('');
|
|
84
|
+
// Architecture summary
|
|
85
|
+
console.log('\n' + '='.repeat(60));
|
|
86
|
+
console.log('ā
Integration Test Complete!');
|
|
87
|
+
console.log('='.repeat(60) + '\n');
|
|
88
|
+
console.log('Integration Confirmed:');
|
|
89
|
+
console.log(' ā agentic-flow multi-model router working');
|
|
90
|
+
console.log(' ā ONNX Runtime provider integrated');
|
|
91
|
+
console.log(' ā Local CPU inference operational');
|
|
92
|
+
console.log(' ā Configuration loaded successfully');
|
|
93
|
+
console.log(' ā Privacy routing rules configured');
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log('Architecture Details:');
|
|
96
|
+
console.log(' ⢠Router: ModelRouter class');
|
|
97
|
+
console.log(' ⢠ONNX Provider: ONNXLocalProvider');
|
|
98
|
+
console.log(' ⢠Model: Microsoft Phi-4-mini-instruct-onnx (INT4)');
|
|
99
|
+
console.log(' ⢠Execution: CPU-only local inference');
|
|
100
|
+
console.log(' ⢠KV Cache: 32-layer autoregressive generation');
|
|
101
|
+
console.log(' ⢠Cost: $0.00 per request (100% free)');
|
|
102
|
+
console.log('');
|
|
103
|
+
console.log('Performance:');
|
|
104
|
+
console.log(` ⢠Latency: ${response.metadata?.latency}ms`);
|
|
105
|
+
console.log(` ⢠Throughput: ${response.metadata?.tokensPerSecond} tokens/sec`);
|
|
106
|
+
console.log(` ⢠Privacy: 100% local processing`);
|
|
107
|
+
console.log(` ⢠Cost: $0.00 (free inference)`);
|
|
108
|
+
console.log('');
|
|
109
|
+
console.log('Use Cases:');
|
|
110
|
+
console.log(' ⢠Privacy-sensitive data processing');
|
|
111
|
+
console.log(' ⢠GDPR/HIPAA compliant inference');
|
|
112
|
+
console.log(' ⢠Offline operation (no internet)');
|
|
113
|
+
console.log(' ⢠Zero-cost development/testing');
|
|
114
|
+
console.log(' ⢠Medical/legal document analysis');
|
|
115
|
+
console.log('');
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error('\nā Integration Test Failed!');
|
|
119
|
+
console.error('==============================');
|
|
120
|
+
console.error(error);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// Run test
|
|
125
|
+
testONNXIntegration().catch(error => {
|
|
126
|
+
console.error('Fatal error:', error);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
});
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Test ONNX local inference with Phi-4 model
|
|
4
|
+
*/
|
|
5
|
+
import { ONNXLocalProvider } from './providers/onnx-local.js';
|
|
6
|
+
async function testONNXLocal() {
|
|
7
|
+
console.log('š§Ŗ Testing ONNX Local Inference (Phi-4 CPU)\n');
|
|
8
|
+
try {
|
|
9
|
+
const provider = new ONNXLocalProvider({
|
|
10
|
+
modelPath: './models/phi-4/cpu_and_mobile/cpu-int4-rtn-block-32-acc-level-4/model.onnx',
|
|
11
|
+
executionProviders: ['cpu'],
|
|
12
|
+
maxTokens: 50
|
|
13
|
+
});
|
|
14
|
+
console.log('Test: Simple Inference');
|
|
15
|
+
console.log('======================');
|
|
16
|
+
const response = await provider.chat({
|
|
17
|
+
model: 'phi-4',
|
|
18
|
+
messages: [
|
|
19
|
+
{ role: 'user', content: 'What is 2+2?' }
|
|
20
|
+
],
|
|
21
|
+
maxTokens: 20
|
|
22
|
+
});
|
|
23
|
+
console.log('\nš„ Response:');
|
|
24
|
+
console.log(` Text: ${response.content[0].type === 'text' ? response.content[0].text : ''}`);
|
|
25
|
+
console.log(` Latency: ${response.metadata?.latency}ms`);
|
|
26
|
+
console.log(` Tokens: ${response.usage?.inputTokens} in / ${response.usage?.outputTokens} out`);
|
|
27
|
+
console.log(` Cost: $${response.metadata?.cost}`);
|
|
28
|
+
console.log(` Providers: ${response.metadata?.executionProviders?.join(', ')}`);
|
|
29
|
+
console.log('\nā
Test passed!');
|
|
30
|
+
await provider.dispose();
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error('\nā Test failed:', error);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
testONNXLocal();
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Test script for ONNX Runtime integration
|
|
4
|
+
* Tests CPU inference with Phi-3 model
|
|
5
|
+
*/
|
|
6
|
+
import { ONNXProvider } from './providers/onnx.js';
|
|
7
|
+
async function testONNXProvider() {
|
|
8
|
+
console.log('š§Ŗ Testing ONNX Runtime Provider\n');
|
|
9
|
+
try {
|
|
10
|
+
// Test 1: Initialize ONNX provider
|
|
11
|
+
console.log('Test 1: Provider Initialization');
|
|
12
|
+
console.log('================================');
|
|
13
|
+
const provider = new ONNXProvider({
|
|
14
|
+
modelId: 'Xenova/Phi-3-mini-4k-instruct',
|
|
15
|
+
maxTokens: 100,
|
|
16
|
+
temperature: 0.7
|
|
17
|
+
});
|
|
18
|
+
console.log(`ā
Provider initialized: ${provider.name}`);
|
|
19
|
+
console.log(`š Supports streaming: ${provider.supportsStreaming}`);
|
|
20
|
+
console.log(`š§ Supports tools: ${provider.supportsTools}\n`);
|
|
21
|
+
// Test 2: Simple chat completion
|
|
22
|
+
console.log('Test 2: Chat Completion (CPU)');
|
|
23
|
+
console.log('==============================');
|
|
24
|
+
const chatParams = {
|
|
25
|
+
model: 'Xenova/Phi-3-mini-4k-instruct',
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
role: 'user',
|
|
29
|
+
content: 'Say "Hello from ONNX Runtime!" and nothing else.'
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
maxTokens: 50,
|
|
33
|
+
temperature: 0.5
|
|
34
|
+
};
|
|
35
|
+
console.log(`š¤ Sending request...`);
|
|
36
|
+
console.log(`š Prompt: ${chatParams.messages[0].content}\n`);
|
|
37
|
+
const startTime = Date.now();
|
|
38
|
+
const response = await provider.chat(chatParams);
|
|
39
|
+
const latency = Date.now() - startTime;
|
|
40
|
+
console.log('š„ Response received:');
|
|
41
|
+
console.log(` Provider: ${response.metadata?.provider}`);
|
|
42
|
+
console.log(` Model: ${response.model}`);
|
|
43
|
+
console.log(` Latency: ${latency}ms`);
|
|
44
|
+
console.log(` Stop Reason: ${response.stopReason}`);
|
|
45
|
+
console.log(` Usage: ${response.usage?.inputTokens} in / ${response.usage?.outputTokens} out`);
|
|
46
|
+
console.log(` Cost: $${response.metadata?.cost?.toFixed(6) || 0} (FREE - Local inference)`);
|
|
47
|
+
console.log(` Execution Providers: ${response.metadata?.executionProviders?.join(', ')}`);
|
|
48
|
+
console.log(`\n Content:`);
|
|
49
|
+
for (const block of response.content) {
|
|
50
|
+
if (block.type === 'text') {
|
|
51
|
+
console.log(` ${block.text}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
console.log('\nā
Test 2 passed!\n');
|
|
55
|
+
// Test 3: Multi-turn conversation
|
|
56
|
+
console.log('Test 3: Multi-Turn Conversation');
|
|
57
|
+
console.log('================================');
|
|
58
|
+
const conversationParams = {
|
|
59
|
+
model: 'Xenova/Phi-3-mini-4k-instruct',
|
|
60
|
+
messages: [
|
|
61
|
+
{
|
|
62
|
+
role: 'user',
|
|
63
|
+
content: 'What is 2+2?'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
role: 'assistant',
|
|
67
|
+
content: '4'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
role: 'user',
|
|
71
|
+
content: 'What about 2+3?'
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
maxTokens: 50,
|
|
75
|
+
temperature: 0.3
|
|
76
|
+
};
|
|
77
|
+
console.log(`š¤ Multi-turn conversation...`);
|
|
78
|
+
const convResponse = await provider.chat(conversationParams);
|
|
79
|
+
console.log('š„ Response:');
|
|
80
|
+
console.log(` Content: ${convResponse.content[0].type === 'text' ? convResponse.content[0].text : 'N/A'}`);
|
|
81
|
+
console.log('\nā
Test 3 passed!\n');
|
|
82
|
+
// Test 4: Model info
|
|
83
|
+
console.log('Test 4: Model Information');
|
|
84
|
+
console.log('=========================');
|
|
85
|
+
const modelInfo = provider.getModelInfo();
|
|
86
|
+
console.log(`š Model ID: ${modelInfo.modelId}`);
|
|
87
|
+
console.log(`š§ Execution Providers: ${modelInfo.executionProviders.join(', ')}`);
|
|
88
|
+
console.log(`ā” GPU Support: ${modelInfo.supportsGPU ? 'Yes' : 'No (CPU only)'}`);
|
|
89
|
+
console.log(`ā Initialized: ${modelInfo.initialized}`);
|
|
90
|
+
console.log('\nā
Test 4 passed!\n');
|
|
91
|
+
// Test 5: Performance benchmark
|
|
92
|
+
console.log('Test 5: Performance Benchmark');
|
|
93
|
+
console.log('=============================');
|
|
94
|
+
const benchmarkParams = {
|
|
95
|
+
model: 'Xenova/Phi-3-mini-4k-instruct',
|
|
96
|
+
messages: [
|
|
97
|
+
{
|
|
98
|
+
role: 'user',
|
|
99
|
+
content: 'Count from 1 to 5.'
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
maxTokens: 50,
|
|
103
|
+
temperature: 0.5
|
|
104
|
+
};
|
|
105
|
+
const benchmarkRuns = 3;
|
|
106
|
+
const latencies = [];
|
|
107
|
+
for (let i = 0; i < benchmarkRuns; i++) {
|
|
108
|
+
const start = Date.now();
|
|
109
|
+
await provider.chat(benchmarkParams);
|
|
110
|
+
const duration = Date.now() - start;
|
|
111
|
+
latencies.push(duration);
|
|
112
|
+
console.log(` Run ${i + 1}: ${duration}ms`);
|
|
113
|
+
}
|
|
114
|
+
const avgLatency = latencies.reduce((a, b) => a + b, 0) / latencies.length;
|
|
115
|
+
const tokensPerSec = (50 / avgLatency) * 1000;
|
|
116
|
+
console.log(`\nš Benchmark Results:`);
|
|
117
|
+
console.log(` Average Latency: ${avgLatency.toFixed(0)}ms`);
|
|
118
|
+
console.log(` Tokens/Second: ${tokensPerSec.toFixed(1)}`);
|
|
119
|
+
console.log('\nā
Test 5 passed!\n');
|
|
120
|
+
// Cleanup
|
|
121
|
+
await provider.dispose();
|
|
122
|
+
// Final summary
|
|
123
|
+
console.log('š All ONNX Tests Passed!');
|
|
124
|
+
console.log('=========================');
|
|
125
|
+
console.log(`ā
Provider initialization working`);
|
|
126
|
+
console.log(`ā
CPU inference functional`);
|
|
127
|
+
console.log(`ā
Chat completion successful`);
|
|
128
|
+
console.log(`ā
Multi-turn conversations working`);
|
|
129
|
+
console.log(`ā
Performance: ${tokensPerSec.toFixed(1)} tokens/sec`);
|
|
130
|
+
console.log(`ā
Cost: $0.00 (100% free local inference)`);
|
|
131
|
+
console.log(`\nš” Next Steps:`);
|
|
132
|
+
console.log(` 1. Integrate ONNX provider into router`);
|
|
133
|
+
console.log(` 2. Add GPU support (CUDA/DirectML)`);
|
|
134
|
+
console.log(` 3. Implement model caching`);
|
|
135
|
+
console.log(` 4. Add streaming support`);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error('\nā Test Failed!');
|
|
139
|
+
console.error('===============');
|
|
140
|
+
console.error(error);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Run tests
|
|
145
|
+
testONNXProvider().catch(error => {
|
|
146
|
+
console.error('Fatal error:', error);
|
|
147
|
+
process.exit(1);
|
|
148
|
+
});
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Test script for OpenRouter integration
|
|
3
|
+
import { ModelRouter } from './router.js';
|
|
4
|
+
async function testOpenRouter() {
|
|
5
|
+
console.log('š§Ŗ Testing OpenRouter Integration\n');
|
|
6
|
+
try {
|
|
7
|
+
// Initialize router
|
|
8
|
+
console.log('š¦ Initializing router...');
|
|
9
|
+
const router = new ModelRouter();
|
|
10
|
+
const config = router.getConfig();
|
|
11
|
+
console.log(`ā
Router initialized with default provider: ${config.defaultProvider}\n`);
|
|
12
|
+
// Test 1: Simple chat completion
|
|
13
|
+
console.log('Test 1: Simple Chat Completion');
|
|
14
|
+
console.log('================================');
|
|
15
|
+
const chatParams = {
|
|
16
|
+
model: config.providers.anthropic?.models?.default || 'claude-3-5-sonnet-20241022',
|
|
17
|
+
messages: [
|
|
18
|
+
{
|
|
19
|
+
role: 'user',
|
|
20
|
+
content: 'Say "Hello from Multi-Model Router!" and nothing else.'
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
temperature: 0.7,
|
|
24
|
+
maxTokens: 100
|
|
25
|
+
};
|
|
26
|
+
console.log(`š¤ Sending request to model: ${chatParams.model}`);
|
|
27
|
+
console.log(`š Prompt: ${chatParams.messages[0].content}\n`);
|
|
28
|
+
const startTime = Date.now();
|
|
29
|
+
const response = await router.chat(chatParams);
|
|
30
|
+
const latency = Date.now() - startTime;
|
|
31
|
+
console.log('š„ Response received:');
|
|
32
|
+
console.log(` Provider: ${response.metadata?.provider}`);
|
|
33
|
+
console.log(` Model: ${response.model}`);
|
|
34
|
+
console.log(` Latency: ${latency}ms`);
|
|
35
|
+
console.log(` Stop Reason: ${response.stopReason}`);
|
|
36
|
+
console.log(` Usage: ${response.usage?.inputTokens} in / ${response.usage?.outputTokens} out`);
|
|
37
|
+
console.log(` Cost: $${response.metadata?.cost?.toFixed(6) || 0}`);
|
|
38
|
+
console.log(`\n Content:`);
|
|
39
|
+
for (const block of response.content) {
|
|
40
|
+
if (block.type === 'text') {
|
|
41
|
+
console.log(` ${block.text}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
console.log('\nā
Test 1 passed!\n');
|
|
45
|
+
// Test 2: Different model via OpenRouter
|
|
46
|
+
console.log('Test 2: Alternative Model');
|
|
47
|
+
console.log('=========================');
|
|
48
|
+
const altParams = {
|
|
49
|
+
model: 'claude-3-5-haiku-20241022',
|
|
50
|
+
messages: [
|
|
51
|
+
{
|
|
52
|
+
role: 'user',
|
|
53
|
+
content: 'Respond with just the word "SUCCESS" if you can read this.'
|
|
54
|
+
}
|
|
55
|
+
],
|
|
56
|
+
temperature: 0.5,
|
|
57
|
+
maxTokens: 50
|
|
58
|
+
};
|
|
59
|
+
console.log(`š¤ Testing model: ${altParams.model}\n`);
|
|
60
|
+
const altResponse = await router.chat(altParams);
|
|
61
|
+
console.log('š„ Response:');
|
|
62
|
+
console.log(` Model: ${altResponse.model}`);
|
|
63
|
+
console.log(` Content: ${altResponse.content[0].type === 'text' ? altResponse.content[0].text : 'N/A'}`);
|
|
64
|
+
console.log('\nā
Test 2 passed!\n');
|
|
65
|
+
// Test 3: Show metrics
|
|
66
|
+
console.log('Test 3: Router Metrics');
|
|
67
|
+
console.log('=====================');
|
|
68
|
+
const metrics = router.getMetrics();
|
|
69
|
+
console.log(`š Total Requests: ${metrics.totalRequests}`);
|
|
70
|
+
console.log(`š° Total Cost: $${metrics.totalCost.toFixed(6)}`);
|
|
71
|
+
console.log(`š Total Tokens: ${metrics.totalTokens.input} in / ${metrics.totalTokens.output} out`);
|
|
72
|
+
console.log('\nProvider Breakdown:');
|
|
73
|
+
for (const [provider, stats] of Object.entries(metrics.providerBreakdown)) {
|
|
74
|
+
console.log(` ${provider}:`);
|
|
75
|
+
console.log(` Requests: ${stats.requests}`);
|
|
76
|
+
console.log(` Cost: $${stats.cost.toFixed(6)}`);
|
|
77
|
+
console.log(` Avg Latency: ${stats.avgLatency.toFixed(0)}ms`);
|
|
78
|
+
}
|
|
79
|
+
console.log('\nā
Test 3 passed!\n');
|
|
80
|
+
// Test 4: Rule-based routing (if configured)
|
|
81
|
+
if (config.routing?.mode === 'rule-based') {
|
|
82
|
+
console.log('Test 4: Rule-Based Routing');
|
|
83
|
+
console.log('==========================');
|
|
84
|
+
const ruleParams = {
|
|
85
|
+
model: config.providers.anthropic?.models?.default || 'claude-3-5-sonnet-20241022',
|
|
86
|
+
messages: [
|
|
87
|
+
{
|
|
88
|
+
role: 'user',
|
|
89
|
+
content: 'This is a test for rule-based routing'
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
};
|
|
93
|
+
const ruleResponse = await router.chat(ruleParams, 'researcher');
|
|
94
|
+
console.log(`š„ Routed to: ${ruleResponse.metadata?.provider}`);
|
|
95
|
+
console.log(`š Response: ${ruleResponse.content[0].type === 'text' ? ruleResponse.content[0].text?.substring(0, 100) : 'N/A'}...`);
|
|
96
|
+
console.log('\nā
Test 4 passed!\n');
|
|
97
|
+
}
|
|
98
|
+
// Final summary
|
|
99
|
+
console.log('š All Tests Passed!');
|
|
100
|
+
console.log('===================');
|
|
101
|
+
console.log(`ā
OpenRouter integration working`);
|
|
102
|
+
console.log(`ā
Router configuration loaded`);
|
|
103
|
+
console.log(`ā
Chat completion successful`);
|
|
104
|
+
console.log(`ā
Metrics tracking functional`);
|
|
105
|
+
console.log(`\nš Final Metrics:`);
|
|
106
|
+
console.log(` Total Requests: ${metrics.totalRequests}`);
|
|
107
|
+
console.log(` Total Cost: $${metrics.totalCost.toFixed(6)}`);
|
|
108
|
+
console.log(` Providers Used: ${Object.keys(metrics.providerBreakdown).join(', ')}`);
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
console.error('\nā Test Failed!');
|
|
112
|
+
console.error('===============');
|
|
113
|
+
console.error(error);
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Run tests
|
|
118
|
+
testOpenRouter().catch(error => {
|
|
119
|
+
console.error('Fatal error:', error);
|
|
120
|
+
process.exit(1);
|
|
121
|
+
});
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Test script for Phi-4 ONNX provider with HuggingFace API fallback
|
|
4
|
+
*/
|
|
5
|
+
import { ONNXPhi4Provider } from './providers/onnx-phi4.js';
|
|
6
|
+
async function testPhi4Provider() {
|
|
7
|
+
console.log('š§Ŗ Testing Phi-4 ONNX Provider (via HuggingFace API)\n');
|
|
8
|
+
try {
|
|
9
|
+
// Test 1: Initialize provider
|
|
10
|
+
console.log('Test 1: Provider Initialization');
|
|
11
|
+
console.log('================================');
|
|
12
|
+
const provider = new ONNXPhi4Provider({
|
|
13
|
+
modelId: 'microsoft/Phi-3-mini-4k-instruct',
|
|
14
|
+
huggingfaceApiKey: process.env.HUGGINGFACE_API_KEY
|
|
15
|
+
});
|
|
16
|
+
const info = provider.getModelInfo();
|
|
17
|
+
console.log(`ā
Provider initialized`);
|
|
18
|
+
console.log(`š Model: ${info.modelId}`);
|
|
19
|
+
console.log(`š§ Mode: ${info.mode}`);
|
|
20
|
+
console.log(`ā” Supports local: ${info.supportsLocalInference}\n`);
|
|
21
|
+
// Test 2: Simple chat completion
|
|
22
|
+
console.log('Test 2: Chat Completion');
|
|
23
|
+
console.log('=======================');
|
|
24
|
+
const chatParams = {
|
|
25
|
+
model: 'microsoft/Phi-3-mini-4k-instruct',
|
|
26
|
+
messages: [
|
|
27
|
+
{
|
|
28
|
+
role: 'user',
|
|
29
|
+
content: 'What is 2+2? Answer in one sentence.'
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
maxTokens: 50,
|
|
33
|
+
temperature: 0.3
|
|
34
|
+
};
|
|
35
|
+
console.log(`š¤ Sending request...`);
|
|
36
|
+
console.log(`š Question: ${chatParams.messages[0].content}\n`);
|
|
37
|
+
const startTime = Date.now();
|
|
38
|
+
const response = await provider.chat(chatParams);
|
|
39
|
+
const latency = Date.now() - startTime;
|
|
40
|
+
console.log('š„ Response received:');
|
|
41
|
+
console.log(` Provider: ${response.metadata?.provider}`);
|
|
42
|
+
console.log(` Model: ${response.model}`);
|
|
43
|
+
console.log(` Mode: ${response.metadata?.mode}`);
|
|
44
|
+
console.log(` Latency: ${latency}ms`);
|
|
45
|
+
console.log(` Usage: ${response.usage?.inputTokens} in / ${response.usage?.outputTokens} out`);
|
|
46
|
+
console.log(` Cost: $${response.metadata?.cost?.toFixed(6) || 0}`);
|
|
47
|
+
console.log(`\n Content:`);
|
|
48
|
+
for (const block of response.content) {
|
|
49
|
+
if (block.type === 'text') {
|
|
50
|
+
console.log(` ${block.text}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
console.log('\nā
Test 2 passed!\n');
|
|
54
|
+
// Test 3: Reasoning test
|
|
55
|
+
console.log('Test 3: Reasoning Test');
|
|
56
|
+
console.log('======================');
|
|
57
|
+
const reasoningParams = {
|
|
58
|
+
model: 'microsoft/Phi-3-mini-4k-instruct',
|
|
59
|
+
messages: [
|
|
60
|
+
{
|
|
61
|
+
role: 'user',
|
|
62
|
+
content: 'If a train travels at 60mph for 2 hours, how far does it go?'
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
maxTokens: 100,
|
|
66
|
+
temperature: 0.5
|
|
67
|
+
};
|
|
68
|
+
console.log(`š¤ Testing reasoning...`);
|
|
69
|
+
const reasoningResponse = await provider.chat(reasoningParams);
|
|
70
|
+
console.log('š„ Response:');
|
|
71
|
+
console.log(` ${reasoningResponse.content[0].type === 'text' ? reasoningResponse.content[0].text : 'N/A'}`);
|
|
72
|
+
console.log('\nā
Test 3 passed!\n');
|
|
73
|
+
// Test 4: Model info
|
|
74
|
+
console.log('Test 4: Model Information');
|
|
75
|
+
console.log('=========================');
|
|
76
|
+
const modelInfo = provider.getModelInfo();
|
|
77
|
+
console.log(`š Model ID: ${modelInfo.modelId}`);
|
|
78
|
+
console.log(`š§ Inference Mode: ${modelInfo.mode}`);
|
|
79
|
+
console.log(`š Model Path: ${modelInfo.modelPath}`);
|
|
80
|
+
console.log(`š API Key: ${modelInfo.apiKey || 'Not set'}`);
|
|
81
|
+
console.log(`ā” Local ONNX Ready: ${modelInfo.supportsLocalInference}`);
|
|
82
|
+
console.log('\nā
Test 4 passed!\n');
|
|
83
|
+
// Test 5: Performance benchmark
|
|
84
|
+
console.log('Test 5: Performance Benchmark');
|
|
85
|
+
console.log('=============================');
|
|
86
|
+
const benchmarkParams = {
|
|
87
|
+
model: 'microsoft/Phi-3-mini-4k-instruct',
|
|
88
|
+
messages: [
|
|
89
|
+
{
|
|
90
|
+
role: 'user',
|
|
91
|
+
content: 'Count from 1 to 5.'
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
maxTokens: 30,
|
|
95
|
+
temperature: 0.5
|
|
96
|
+
};
|
|
97
|
+
const benchmarkRuns = 3;
|
|
98
|
+
const latencies = [];
|
|
99
|
+
for (let i = 0; i < benchmarkRuns; i++) {
|
|
100
|
+
const start = Date.now();
|
|
101
|
+
await provider.chat(benchmarkParams);
|
|
102
|
+
const duration = Date.now() - start;
|
|
103
|
+
latencies.push(duration);
|
|
104
|
+
console.log(` Run ${i + 1}: ${duration}ms`);
|
|
105
|
+
}
|
|
106
|
+
const avgLatency = latencies.reduce((a, b) => a + b, 0) / latencies.length;
|
|
107
|
+
console.log(`\nš Benchmark Results:`);
|
|
108
|
+
console.log(` Average Latency: ${avgLatency.toFixed(0)}ms`);
|
|
109
|
+
console.log(` Min Latency: ${Math.min(...latencies)}ms`);
|
|
110
|
+
console.log(` Max Latency: ${Math.max(...latencies)}ms`);
|
|
111
|
+
console.log('\nā
Test 5 passed!\n');
|
|
112
|
+
// Final summary
|
|
113
|
+
console.log('š All Phi-4 Tests Passed!');
|
|
114
|
+
console.log('==========================');
|
|
115
|
+
console.log(`ā
Provider initialization working`);
|
|
116
|
+
console.log(`ā
HuggingFace API inference functional`);
|
|
117
|
+
console.log(`ā
Chat completion successful`);
|
|
118
|
+
console.log(`ā
Reasoning capability verified`);
|
|
119
|
+
console.log(`ā
Performance: ${avgLatency.toFixed(0)}ms average`);
|
|
120
|
+
console.log(`\nš” Next Steps:`);
|
|
121
|
+
console.log(` 1. Free up disk space (need 5GB)`);
|
|
122
|
+
console.log(` 2. Download model.onnx.data`);
|
|
123
|
+
console.log(` 3. Switch to local ONNX inference`);
|
|
124
|
+
console.log(` 4. Benchmark local vs API performance`);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
console.error('\nā Test Failed!');
|
|
128
|
+
console.error('===============');
|
|
129
|
+
console.error(error);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Run tests
|
|
134
|
+
testPhi4Provider().catch(error => {
|
|
135
|
+
console.error('Fatal error:', error);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
});
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// Agent loader for .claude/agents integration
|
|
2
|
+
import { readFileSync, readdirSync, statSync } from 'fs';
|
|
3
|
+
import { join, extname } from 'path';
|
|
4
|
+
import { logger } from './logger.js';
|
|
5
|
+
/**
|
|
6
|
+
* Parse agent markdown file with frontmatter
|
|
7
|
+
*/
|
|
8
|
+
function parseAgentFile(filePath) {
|
|
9
|
+
try {
|
|
10
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
11
|
+
// Check for frontmatter
|
|
12
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
|
|
13
|
+
if (!frontmatterMatch) {
|
|
14
|
+
logger.warn('Agent file missing frontmatter', { filePath });
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const [, frontmatter, systemPrompt] = frontmatterMatch;
|
|
18
|
+
// Parse YAML-like frontmatter
|
|
19
|
+
const meta = {};
|
|
20
|
+
frontmatter.split('\n').forEach(line => {
|
|
21
|
+
const match = line.match(/^(\w+):\s*(.+)$/);
|
|
22
|
+
if (match) {
|
|
23
|
+
const [, key, value] = match;
|
|
24
|
+
// Remove quotes if present
|
|
25
|
+
const cleanValue = value.replace(/^["']|["']$/g, '');
|
|
26
|
+
if (key === 'tools') {
|
|
27
|
+
meta[key] = cleanValue.split(',').map(t => t.trim());
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
meta[key] = cleanValue;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
if (!meta.name || !meta.description) {
|
|
35
|
+
logger.warn('Agent file missing required metadata', { filePath });
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
name: meta.name,
|
|
40
|
+
description: meta.description,
|
|
41
|
+
systemPrompt: systemPrompt.trim(),
|
|
42
|
+
color: meta.color,
|
|
43
|
+
tools: meta.tools,
|
|
44
|
+
filePath
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
logger.error('Failed to parse agent file', { filePath, error });
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Recursively find all agent definition files
|
|
54
|
+
*/
|
|
55
|
+
function findAgentFiles(dir) {
|
|
56
|
+
const files = [];
|
|
57
|
+
try {
|
|
58
|
+
const entries = readdirSync(dir);
|
|
59
|
+
for (const entry of entries) {
|
|
60
|
+
const fullPath = join(dir, entry);
|
|
61
|
+
const stat = statSync(fullPath);
|
|
62
|
+
if (stat.isDirectory()) {
|
|
63
|
+
files.push(...findAgentFiles(fullPath));
|
|
64
|
+
}
|
|
65
|
+
else if (extname(entry) === '.md' && entry !== 'README.md') {
|
|
66
|
+
files.push(fullPath);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger.warn('Failed to read directory', { dir, error });
|
|
72
|
+
}
|
|
73
|
+
return files;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Load all agents from .claude/agents directory
|
|
77
|
+
*/
|
|
78
|
+
export function loadAgents(agentsDir = process.env.AGENTS_DIR || '/app/.claude/agents') {
|
|
79
|
+
const agents = new Map();
|
|
80
|
+
logger.info('Loading agents from directory', { agentsDir });
|
|
81
|
+
const agentFiles = findAgentFiles(agentsDir);
|
|
82
|
+
logger.debug('Found agent files', { count: agentFiles.length });
|
|
83
|
+
for (const filePath of agentFiles) {
|
|
84
|
+
const agent = parseAgentFile(filePath);
|
|
85
|
+
if (agent) {
|
|
86
|
+
agents.set(agent.name, agent);
|
|
87
|
+
logger.debug('Loaded agent', { name: agent.name, description: agent.description.substring(0, 100) });
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
logger.info('Agents loaded successfully', { count: agents.size });
|
|
91
|
+
return agents;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get a specific agent by name
|
|
95
|
+
*/
|
|
96
|
+
export function getAgent(name, agentsDir) {
|
|
97
|
+
const agents = loadAgents(agentsDir);
|
|
98
|
+
return agents.get(name);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* List all available agents
|
|
102
|
+
*/
|
|
103
|
+
export function listAgents(agentsDir) {
|
|
104
|
+
const agents = loadAgents(agentsDir);
|
|
105
|
+
return Array.from(agents.values());
|
|
106
|
+
}
|