adaptive-memory-multi-model-router 2.14.46 ā 2.14.48
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/{docs/llms.txt ā llms.txt.bak} +6 -6
- package/package.json +270 -72
- package/src/routing/advancedRouter.ts.bak +650 -0
- package/test.js.bak +376 -0
- package/.dockerignore +0 -82
- package/.env.example +0 -303
- package/.github/DISCUSSIONS_WELCOME.md +0 -27
- package/.github/DISCUSSION_TEMPLATE.yml +0 -5
- package/.github/FUNDING.yml +0 -2
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -94
- package/.github/ISSUE_TEMPLATE/config.yml +0 -17
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -71
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -71
- package/.github/dependabot.yml +0 -9
- package/.github/workflows/auto-publish.yml +0 -51
- package/.github/workflows/ci.yml +0 -263
- package/.github/workflows/codeql.yml +0 -38
- package/.github/workflows/npm-publish.yml +0 -20
- package/.github/workflows/pages.yml +0 -37
- package/.github/workflows/stale.yml +0 -54
- package/.publish-tick +0 -1
- package/.well-known/ai-plugin.json +0 -16
- package/AGENT_COUNCIL_FINDINGS.md +0 -142
- package/ARCHITECTURE.md +0 -346
- package/AUDIT_REPORT.md +0 -28
- package/CODE_OF_CONDUCT.md +0 -128
- package/CONTRIBUTING.md +0 -50
- package/CONTRIBUTORS.md +0 -20
- package/Dockerfile +0 -53
- package/Dockerfile.proxy +0 -33
- package/HEALTH_REPORT.md +0 -118
- package/IMPROVEMENT_PLAN.md +0 -107
- package/LANDING.md +0 -43
- package/LAUNCH-PAIN-DRIVEN.md +0 -339
- package/LAUNCH.md +0 -337
- package/LAUNCH_CHECKLIST.md +0 -141
- package/LAUNCH_SNAPSHOT.md +0 -260
- package/MANIFESTO.md +0 -41
- package/POPULARITY_BOOSTERS.md +0 -285
- package/PR_STATUS_REPORT.md +0 -148
- package/REDESIGN.md +0 -95
- package/RUNKIT.md +0 -83
- package/SECURITY.md +0 -29
- package/SUBMISSIONS.md +0 -43
- package/_schema.html +0 -53
- package/ai-plugin.json +0 -16
- package/articles/AI_AGENT_LLM_ROUTING.md +0 -150
- package/articles/CHINESE_DIRECTORIES.md +0 -100
- package/articles/CHINESE_SUBMISSIONS_READY.md +0 -322
- package/articles/COMPETITOR_ALERTS.md +0 -31
- package/articles/COMPLETE_POSTING_DIRECTORY.md +0 -147
- package/articles/CONTENT_STRUCTURE.md +0 -292
- package/articles/DEVTO_COST_GUIDE.md +0 -473
- package/articles/DEVTO_FINAL.md +0 -416
- package/articles/DEVTO_MULTI_PROVIDER.md +0 -542
- package/articles/DEVTO_READY.md +0 -255
- package/articles/DEVTO_V2_ANNOUNCEMENT.md +0 -160
- package/articles/DEVTO_VIRAL_GROWTH.md +0 -280
- package/articles/FRESH_devto.md +0 -460
- package/articles/FRESH_devto_2026_05.md +0 -73
- package/articles/FRESH_hackernews.md +0 -14
- package/articles/FRESH_reddit_ml.md +0 -90
- package/articles/FRESH_reddit_node.md +0 -198
- package/articles/FRESH_reddit_sideproject.md +0 -72
- package/articles/FRESH_reddit_webdev.md +0 -130
- package/articles/FROM_ZERO_TO_10K.md +0 -107
- package/articles/HN_10X_BETTER.md +0 -430
- package/articles/HN_ACCOUNT_GUIDE.md +0 -21
- package/articles/HN_CHINESE_STYLE.md +0 -308
- package/articles/HN_FINAL.md +0 -148
- package/articles/HN_POSTED_VERSION.md +0 -56
- package/articles/HN_POST_READY.md +0 -137
- package/articles/HN_RESEARCH.md +0 -364
- package/articles/HN_SHOW_routerarena.md +0 -17
- package/articles/HN_TIMING_GUIDE.md +0 -52
- package/articles/INDIEHACKERS_POST.md +0 -52
- package/articles/INDIEHACKERS_READY.md +0 -120
- package/articles/LLM_BENCHMARK_DEEP_DIVE.md +0 -153
- package/articles/MASTER_POSTING_DIRECTORY.md +0 -189
- package/articles/NEWSLETTER_SEND_NOW.md +0 -259
- package/articles/NEWSLETTER_SUBMISSIONS.md +0 -112
- package/articles/PAIN-DRIVEN-devto-v2.md +0 -308
- package/articles/PAIN-DRIVEN-devto-v3.md +0 -268
- package/articles/PAIN-DRIVEN-devto.md +0 -242
- package/articles/PAIN-DRIVEN-hackernews-v2.md +0 -138
- package/articles/PAIN-DRIVEN-hackernews-v3.md +0 -151
- package/articles/PAIN-DRIVEN-hackernews.md +0 -131
- package/articles/PAIN-DRIVEN-reddit-v2.md +0 -301
- package/articles/PAIN-DRIVEN-reddit-v3.md +0 -236
- package/articles/PAIN-DRIVEN-reddit.md +0 -218
- package/articles/PAIN-DRIVEN-twitter-v2.md +0 -110
- package/articles/PAIN-DRIVEN-twitter-v3.md +0 -121
- package/articles/PAIN-DRIVEN-twitter.md +0 -120
- package/articles/PORTKEY_VS_A3M.md +0 -147
- package/articles/POSTING_KIT_2026_05.md +0 -67
- package/articles/PRESS_KIT_routerarena.md +0 -77
- package/articles/PRODUCTHUNT_LISTING.md +0 -48
- package/articles/PRODUCTHUNT_READY.md +0 -106
- package/articles/PR_PLAN_vault.md +0 -125
- package/articles/REDDIT_FINAL.md +0 -232
- package/articles/REDDIT_POST.md +0 -67
- package/articles/REDDIT_SUBMISSION_READY.md +0 -348
- package/articles/ROUTERARENA_LEADER.md +0 -45
- package/articles/SHOW_HN_FINAL.md +0 -29
- package/articles/TWEETS_10K_DOWNLOADS.md +0 -47
- package/articles/TWEETS_BENCHMARK_FIRST.md +0 -46
- package/articles/TWEETS_MCP_PLAY.md +0 -51
- package/articles/TWEETS_SEQUENTIAL_BROKEN.md +0 -49
- package/articles/TWEETS_WHY_BUILD.md +0 -54
- package/articles/TWEETS_routerarena_leader.md +0 -53
- package/articles/TWEET_STORM_READY.md +0 -165
- package/articles/TWITTER_FINAL.md +0 -167
- package/articles/WHY_10X_BETTER.md +0 -261
- package/articles/WHY_CHINESE_STYLE_BETTER.md +0 -323
- package/articles/ai-discoverability-llm-routing.md +0 -210
- package/articles/devto-llm-routing.md +0 -138
- package/articles/hackernews-show-hn.md +0 -54
- package/articles/hashnode-llm-cost-optimization.md +0 -125
- package/articles/hn_show_2026_05.md +0 -11
- package/articles/medium-building-llm-router.md +0 -205
- package/articles/reddit-ml.md +0 -76
- package/articles/twitter-thread-cost-savings.md +0 -50
- package/articles/youtube-tutorial-script.md +0 -262
- package/assets/a3m_3blue1brown.mp4 +0 -0
- package/assets/banner.svg +0 -109
- package/assets/chart-cost-v2.svg +0 -91
- package/assets/chart-cost-v3.svg +0 -143
- package/assets/chart-features-v2.svg +0 -132
- package/assets/chart-features-v3.svg +0 -211
- package/assets/chart-growth-v2.svg +0 -122
- package/assets/chart-growth-v3.svg +0 -189
- package/assets/cost-comparison.svg +0 -134
- package/assets/cost-simple.svg +0 -64
- package/assets/demo-hn.gif +0 -0
- package/assets/feature-matrix.svg +0 -136
- package/assets/growth-chart-animated.svg +0 -76
- package/assets/growth-chart.svg +0 -82
- package/assets/growth-simple.svg +0 -69
- package/assets/hero-diagram.svg +0 -81
- package/assets/logo-new.svg +0 -21
- package/assets/logo.svg +0 -68
- package/assets/provider-comparison.svg +0 -121
- package/assets/social-preview-new.svg +0 -100
- package/assets/social-preview.svg +0 -194
- package/assets/social-v2.svg +0 -130
- package/assets/social-v3.svg +0 -212
- package/benchmark-provider-results.json +0 -245
- package/benchmark-results.json +0 -54
- package/council-votes/architecture-vote.md +0 -121
- package/council-votes/coverage-vote.md +0 -93
- package/data/adaptive-benchmark.json +0 -92
- package/data/benchmark-results.json +0 -47
- package/data/labeled-benchmark.json +0 -88
- package/demo/3blue1brown_video.py +0 -285
- package/demo/3blue1brown_video_v2.py +0 -310
- package/demo/IMPROVED_PROMPTS.md +0 -229
- package/demo/VEO3_PROMPTS.md +0 -269
- package/demo/VIDEO_PRODUCTION_GUIDE.md +0 -333
- package/demo/a3m_3blue1brown.mp4 +0 -0
- package/demo/asciinema-demo.sh +0 -195
- package/demo/demo-hn.tape +0 -74
- package/demo/demo-script.md +0 -53
- package/demo/demo-script.sh +0 -62
- package/demo/demo.svg +0 -75
- package/demo/frame1_ai_data_center.png +0 -0
- package/demo/frame1_sunset_video.mp4 +0 -0
- package/demo/frame2_cost_comparison.png +0 -0
- package/demo/frame2_cost_comparison_fallback.png +0 -0
- package/demo/frame3_parallel_execution.png +0 -0
- package/demo/frame3_parallel_execution_fallback.png +0 -0
- package/demo/frame4_providers.png +0 -0
- package/demo/frame4_providers_fallback.png +0 -0
- package/demo/frame5_endcard.png +0 -0
- package/demo/frame5_endcard_fallback.png +0 -0
- package/demo/new_frame1_hook.png +0 -0
- package/demo/new_frame2_proof.png +0 -0
- package/demo/new_frame3_wow.png +0 -0
- package/demo/new_frame4_social.png +0 -0
- package/demo/new_frame5_cta.png +0 -0
- package/demo/package.json +0 -13
- package/demo/product-video-final.mp4 +0 -0
- package/demo/product-video-hype-v1.mp4 +0 -0
- package/demo/product-video-v1.mp4 +0 -0
- package/demo/public/index.html +0 -762
- package/demo/recording.cast +0 -55
- package/demo/server.js +0 -405
- package/demo-new.tape +0 -71
- package/demo-real.sh +0 -198
- package/demo-simple.tape +0 -205
- package/demo.html +0 -520
- package/demo.sh +0 -85
- package/demo.tape +0 -259
- package/dist/analytics/costAnalytics.d.ts.map +0 -1
- package/dist/analytics/costAnalytics.js.map +0 -1
- package/dist/benchmark/comprehensive.js.map +0 -1
- package/dist/benchmark/reproducible.d.ts.map +0 -1
- package/dist/benchmark/reproducible.js.map +0 -1
- package/dist/cache/prefixCache.d.ts.map +0 -1
- package/dist/cache/prefixCache.js.map +0 -1
- package/dist/cache/responseCache.d.ts.map +0 -1
- package/dist/cache/responseCache.js.map +0 -1
- package/dist/cache/semanticCache.d.ts.map +0 -1
- package/dist/cache/semanticCache.js.map +0 -1
- package/dist/cli/setupWizard.d.ts.map +0 -1
- package/dist/cli/setupWizard.js.map +0 -1
- package/dist/cost/budgetEnforcer.d.ts.map +0 -1
- package/dist/cost/budgetEnforcer.js.map +0 -1
- package/dist/cost/costTracker.d.ts.map +0 -1
- package/dist/cost/costTracker.js.map +0 -1
- package/dist/ensemble/multiRoundDialog.js.map +0 -1
- package/dist/ensemble/shapleyValue.js.map +0 -1
- package/dist/integrations/langchainAdapter.d.ts.map +0 -1
- package/dist/integrations/langchainAdapter.js.map +0 -1
- package/dist/integrations/oauth.d.ts.map +0 -1
- package/dist/integrations/oauth.js.map +0 -1
- package/dist/integrations/scienceAdapter.js.map +0 -1
- package/dist/memory/autoFetch.d.ts.map +0 -1
- package/dist/memory/autoFetch.js.map +0 -1
- package/dist/memory/episodicMemory.d.ts.map +0 -1
- package/dist/memory/episodicMemory.js.map +0 -1
- package/dist/memory/hybridMemory.js.map +0 -1
- package/dist/memory/memoryTree.d.ts.map +0 -1
- package/dist/memory/memoryTree.js.map +0 -1
- package/dist/memory/obsidianVault.d.ts.map +0 -1
- package/dist/memory/obsidianVault.js.map +0 -1
- package/dist/memory/reasoningBank.js.map +0 -1
- package/dist/observability/changeWatch.d.ts.map +0 -1
- package/dist/observability/changeWatch.js.map +0 -1
- package/dist/observability/fatigueDetector.d.ts.map +0 -1
- package/dist/observability/fatigueDetector.js.map +0 -1
- package/dist/observability/index.d.ts.map +0 -1
- package/dist/observability/index.js.map +0 -1
- package/dist/observability/metrics.d.ts.map +0 -1
- package/dist/observability/metrics.js.map +0 -1
- package/dist/observability/middleware.d.ts.map +0 -1
- package/dist/observability/middleware.js.map +0 -1
- package/dist/observability/tracer.d.ts.map +0 -1
- package/dist/observability/tracer.js.map +0 -1
- package/dist/observability/types.d.ts.map +0 -1
- package/dist/observability/types.js.map +0 -1
- package/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
- package/dist/orchestration/haloOrchestrator.js.map +0 -1
- package/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
- package/dist/orchestration/mctsWorkflow.js.map +0 -1
- package/dist/providers/localProvider.d.ts.map +0 -1
- package/dist/providers/localProvider.js.map +0 -1
- package/dist/providers/providerConfig.d.ts.map +0 -1
- package/dist/providers/providerConfig.js.map +0 -1
- package/dist/providers/registry.d.ts.map +0 -1
- package/dist/providers/registry.js.map +0 -1
- package/dist/routing/advancedRouter.d.ts.map +0 -1
- package/dist/routing/advancedRouter.js.map +0 -1
- package/dist/routing/crossModelValidation.d.ts.map +0 -1
- package/dist/routing/crossModelValidation.js.map +0 -1
- package/dist/routing/providerHealth.d.ts.map +0 -1
- package/dist/routing/providerHealth.js.map +0 -1
- package/dist/routing/providerRetry.d.ts.map +0 -1
- package/dist/routing/providerRetry.js.map +0 -1
- package/dist/scripts/banner.js +0 -29
- package/dist/security/guardrails.d.ts.map +0 -1
- package/dist/security/guardrails.js.map +0 -1
- package/dist/server/dashboard.d.ts.map +0 -1
- package/dist/server/dashboard.js.map +0 -1
- package/dist/server/modelMapper.d.ts.map +0 -1
- package/dist/server/modelMapper.js.map +0 -1
- package/dist/server/proxyServer.d.ts.map +0 -1
- package/dist/server/proxyServer.js.map +0 -1
- package/dist/skills/__tests__/skill_manager.test.d.ts +0 -2
- package/dist/skills/__tests__/skill_manager.test.d.ts.map +0 -1
- package/dist/skills/__tests__/skill_manager.test.js +0 -268
- package/dist/skills/__tests__/skill_manager.test.js.map +0 -1
- package/dist/tools/tmlpdTools.d.ts.map +0 -1
- package/dist/tools/tmlpdTools.js.map +0 -1
- package/dist/tui/dashboard.d.ts.map +0 -1
- package/dist/tui/dashboard.js.map +0 -1
- package/dist/tui/index.d.ts.map +0 -1
- package/dist/tui/index.js.map +0 -1
- package/dist/utils/batchProcessor.d.ts.map +0 -1
- package/dist/utils/batchProcessor.js.map +0 -1
- package/dist/utils/compression.d.ts.map +0 -1
- package/dist/utils/compression.js.map +0 -1
- package/dist/utils/costUtils.d.ts.map +0 -1
- package/dist/utils/costUtils.js.map +0 -1
- package/dist/utils/reliability.d.ts.map +0 -1
- package/dist/utils/reliability.js.map +0 -1
- package/dist/utils/sorting.d.ts.map +0 -1
- package/dist/utils/sorting.js.map +0 -1
- package/dist/utils/speculativeDecoding.d.ts.map +0 -1
- package/dist/utils/speculativeDecoding.js.map +0 -1
- package/dist/utils/tokenUtils.d.ts.map +0 -1
- package/dist/utils/tokenUtils.js.map +0 -1
- package/docs/.nojekyll +0 -0
- package/docs/ANALYSIS_PRINCIPLES.md +0 -162
- package/docs/API.md +0 -855
- package/docs/ARCHITECTURAL-IMPROVEMENTS-2025.md +0 -1391
- package/docs/ARCHITECTURAL-IMPROVEMENTS-REVISED-2025.md +0 -1051
- package/docs/BENCHMARK.md +0 -170
- package/docs/CHINESE_PROVIDER_RELIABILITY.md +0 -37
- package/docs/CITATIONS.md +0 -74
- package/docs/CLAIMS_AND_EVIDENCE.md +0 -58
- package/docs/CONFIGURATION.md +0 -476
- package/docs/COUNCIL_DECISION.json +0 -816
- package/docs/COUNCIL_SUMMARY.md +0 -319
- package/docs/COUNCIL_V2.2_DECISION.md +0 -416
- package/docs/ENGINEERING_SPEC.md +0 -55
- package/docs/FACTORY_RESET.md +0 -34
- package/docs/GEO.md +0 -66
- package/docs/GEO_OPTIMIZATION.md +0 -30
- package/docs/GEO_ROOT_CAUSE.md +0 -136
- package/docs/GEO_STATUS.md +0 -85
- package/docs/GEO_TEST_RESULTS.md +0 -176
- package/docs/HN_CHECKLIST.md +0 -38
- package/docs/HN_FOUNDER_COMMENT.md +0 -17
- package/docs/HN_SUBMISSION_FINAL.md +0 -180
- package/docs/HN_SUBMISSION_V3.md +0 -56
- package/docs/IMPROVEMENT_ROADMAP.md +0 -515
- package/docs/INTEGRATIONS.md +0 -420
- package/docs/LANGCHAIN_INTEGRATION.md +0 -147
- package/docs/LLM_COUNCIL_DECISION.md +0 -508
- package/docs/MIDDLEWARE_CHAIN.md +0 -35
- package/docs/PROMO_CHECKLIST.md +0 -200
- package/docs/QUICKSTART.md +0 -271
- package/docs/QUICK_START.md +0 -43
- package/docs/QUICK_START_VISIBILITY.md +0 -782
- package/docs/REDDIT_GAP_ANALYSIS.md +0 -299
- package/docs/RELEASE_CHECKLIST.md +0 -32
- package/docs/REPRODUCIBILITY.md +0 -63
- package/docs/RESEARCH_BACKED_IMPROVEMENTS.md +0 -1180
- package/docs/ROUTING_RUBRIC.md +0 -197
- package/docs/SEO_AUDIT.md +0 -186
- package/docs/SOCIAL_LISTENING.md +0 -219
- package/docs/TMLPD_QNA.md +0 -751
- package/docs/TMLPD_V2.1_COMPLETE.md +0 -763
- package/docs/TMLPD_V2.2_RESEARCH_ROADMAP.md +0 -754
- package/docs/UPDATE_TOPICS.md +0 -15
- package/docs/USE_CASES.md +0 -59
- package/docs/V2.2_IMPLEMENTATION_COMPLETE.md +0 -446
- package/docs/V2_IMPLEMENTATION_GUIDE.md +0 -388
- package/docs/VERCEL_AI_SDK.md +0 -209
- package/docs/VISIBILITY_ADOPTION_PLAN.md +0 -1005
- package/docs/_config.yml +0 -49
- package/docs/ai-plugin.json +0 -16
- package/docs/api.html +0 -513
- package/docs/architecture-diagram.md +0 -40
- package/docs/benchmark-chart.png +0 -0
- package/docs/benchmark.html +0 -387
- package/docs/blog/routerarena-number-one.html +0 -73
- package/docs/cli-cheatsheet.md +0 -339
- package/docs/compare.md +0 -109
- package/docs/comparison-litellm.md +0 -88
- package/docs/comparison.md +0 -108
- package/docs/cost-chart-ascii.md +0 -42
- package/docs/cost-comparison-chart.svg +0 -88
- package/docs/curl-examples.md +0 -247
- package/docs/demo-auto.html +0 -264
- package/docs/demo.html +0 -416
- package/docs/geo/GENERATIVE_ENGINE_OPTIMIZATION.md +0 -232
- package/docs/index.html +0 -507
- package/docs/launch-content/LAUNCH_EXECUTION_CHECKLIST.md +0 -421
- package/docs/launch-content/README.md +0 -457
- package/docs/launch-content/assets/cost_comparison_100_tasks.png +0 -0
- package/docs/launch-content/assets/cumulative_savings.png +0 -0
- package/docs/launch-content/assets/parallel_speedup.png +0 -0
- package/docs/launch-content/assets/provider_pricing_comparison.png +0 -0
- package/docs/launch-content/assets/task_breakdown_comparison.png +0 -0
- package/docs/launch-content/generate_charts.py +0 -313
- package/docs/launch-content/hn_show_post.md +0 -139
- package/docs/launch-content/partner_outreach_templates.md +0 -745
- package/docs/launch-content/reddit_posts.md +0 -467
- package/docs/launch-content/twitter_thread.txt +0 -460
- package/docs/npm-downloads-chart.svg +0 -43
- package/docs/openapi.json +0 -139
- package/docs/openapi.yaml +0 -1318
- package/docs/quick-start.html +0 -366
- package/docs/robots.txt +0 -52
- package/docs/sitemap.xml +0 -57
- package/docs/styles.css +0 -682
- package/docs/well-known/ai-plugin.json +0 -16
- package/docs/wellknown/ai-plugin.json +0 -16
- package/docs-site/assets/og-banner.svg +0 -194
- package/docs-site/index.html +0 -632
- package/eval/README.md +0 -46
- package/eval/baselines/main.json +0 -12
- package/eval/benchmark_dataset.jsonl +0 -16
- package/eval/check_golden_routes.js +0 -64
- package/eval/datasets/catalog.json +0 -33
- package/eval/datasets/slices/cn_provider_reliability_v1.jsonl +0 -3
- package/eval/datasets/slices/cost_pressure_v1.jsonl +0 -3
- package/eval/datasets/slices/safety_guardrails_v1.jsonl +0 -3
- package/eval/evals.json +0 -199
- package/eval/fault_injection_thresholds.json +0 -3
- package/eval/generate_report.js +0 -128
- package/eval/golden_routes.json +0 -114
- package/eval/lib/experiment_registry.js +0 -24
- package/eval/run_eval.js +0 -197
- package/eval/run_fault_injection.js +0 -201
- package/eval/run_shadow_eval.js +0 -85
- package/eval/thresholds.json +0 -9
- package/examples/QUICKSTART.md +0 -183
- package/examples/README.md +0 -61
- package/examples/a3m-sdk.js +0 -124
- package/examples/basic-route.js +0 -54
- package/examples/chat-loop.js +0 -202
- package/examples/classify-then-route.js +0 -102
- package/examples/cost-compare.js +0 -120
- package/examples/ensemble.js +0 -160
- package/examples/whatsapp-telegram-bridge-demo.js +0 -302
- package/examples/whatsapp-telegram-bridge.js +0 -269
- package/hf-space/README.md +0 -23
- package/hf-space/app.py +0 -240
- package/hf-space/requirements.txt +0 -1
- package/huggingface_space/README.md +0 -35
- package/huggingface_space/app.py +0 -126
- package/huggingface_space/create_space.py +0 -208
- package/huggingface_space/requirements.txt +0 -1
- package/mcp-server/README.md +0 -188
- package/mcp-server/package.json +0 -29
- package/mcp-server/src/index.ts +0 -744
- package/mcp-server/tsconfig.json +0 -19
- package/openclaw-alexa-bridge/ALL_REMAINING_FIXES_PLAN.md +0 -313
- package/openclaw-alexa-bridge/REMAINING_FIXES_SUMMARY.md +0 -277
- package/openclaw-alexa-bridge/src/alexa_handler_no_tmlpd.js +0 -1234
- package/openclaw-alexa-bridge/test_fixes.js +0 -77
- package/playground/README.md +0 -51
- package/playground/codesandbox.json +0 -12
- package/playground/index.js +0 -39
- package/proxy/README.md +0 -227
- package/proxy/package-lock.json +0 -831
- package/proxy/package.json +0 -17
- package/proxy/rate-limit.js +0 -145
- package/proxy/rate-limit.test.js +0 -311
- package/proxy/server.js +0 -970
- package/python/README.md +0 -102
- package/python/a3m/__init__.py +0 -6
- package/python/a3m/client.py +0 -190
- package/python/a3m/models.py +0 -40
- package/python/a3m/sync_client.py +0 -61
- package/python/examples.py +0 -53
- package/python/integrations.py +0 -330
- package/python/pyproject.toml +0 -23
- package/python/setup.py +0 -28
- package/python/tmlpd.py +0 -369
- package/qna/REDDIT_GAP_ANALYSIS.md +0 -299
- package/qna/TMLPD_QNA.md +0 -751
- package/research/FINDING_001_safety.md +0 -28
- package/research/FINDING_002_error_diversity.md +0 -32
- package/research/FINDING_003_confidence_weighted_voting.md +0 -32
- package/research/FINDING_004_cross_model_semantic_detection.md +0 -37
- package/research/FINDING_005_knowledge_gap_orthogonality.md +0 -34
- package/research/HALLUCINATION_RESEARCH.md +0 -27
- package/research/ensemble-voting.md +0 -324
- package/research/loss-functions.md +0 -545
- package/research-log.md +0 -49
- package/scripts/banner.js +0 -29
- package/scripts/benchmark-local-routerarena.ts +0 -176
- package/scripts/benchmark.js +0 -145
- package/scripts/benchmark.sh +0 -61
- package/scripts/compare-providers.sh +0 -230
- package/scripts/content-planner.js +0 -25
- package/scripts/create-labeled-benchmark.ts +0 -105
- package/scripts/cross_post.py +0 -443
- package/scripts/local-router-benchmark.ts +0 -154
- package/scripts/post-all.sh +0 -41
- package/scripts/publish_fcc.py +0 -106
- package/scripts/push-to-gitee.sh +0 -25
- package/scripts/routerarena_ensemble.js +0 -144
- package/scripts/routing-benchmark-v2.js +0 -373
- package/scripts/routing-benchmark-v3.js +0 -118
- package/scripts/routing-benchmark.js +0 -462
- package/scripts/run-labeled-benchmark.mjs +0 -104
- package/scripts/run-mmlu-benchmark.js +0 -176
- package/scripts/run-provider-benchmark.js +0 -244
- package/scripts/update-npm-badges.js +0 -158
- package/skill/SKILL.md +0 -238
- package/src/__tests__/integration/tmpld_integration.test.py +0 -540
- package/src/skills/__tests__/skill_manager.test.ts +0 -328
- package/submissions/benchmarks/ALL_PLATFORMS_SUBMISSION.md +0 -94
- package/submissions/benchmarks/LLMROUTERBENCH_SUBMISSION.md +0 -121
- package/submissions/benchmarks/MMRBENCH_SUBMISSION.md +0 -94
- package/submissions/benchmarks/ROUTERARENA_UPDATE.md +0 -83
- package/submissions/benchmarks/ROUTERBENCH_SUBMISSION.md +0 -225
- package/test-council/1-structure-tests.test.js +0 -353
- package/test-council/1-structure-tests.test.ts +0 -353
- package/test-council/2-edge-case-tests.test.ts +0 -361
- package/test-council/3-performance-tests.test.ts +0 -669
- package/test-council/4-integration-tests.test.ts +0 -391
- package/test-council/5-agent-council-eval.test.ts +0 -413
- package/test-council/AGENT_COUNCIL_ARCHITECTURE.md +0 -349
- package/test-council/TEST_COUNCIL_REPORT.md +0 -201
- package/test-council/agents/edge-case-agent.ts +0 -363
- package/test-council/agents/performance-agent.ts +0 -426
- package/test-council/agents/structure-agent.ts +0 -227
- package/test-council/council.md +0 -183
- package/tests/__mocks__/tokenUtils.ts +0 -8
- package/tests/memory/episodicMemory.test.ts +0 -227
- package/tests/package-lock.json +0 -1628
- package/tests/package.json +0 -18
- package/tests/routing/ensembleVoting.test.ts +0 -236
- package/tests/routing/providerRetry.test.ts +0 -360
- package/tests/routing/queryTypePresets.test.ts +0 -208
- package/tests/security/guardrailEngine.test.ts +0 -700
- package/tests/tsconfig.json +0 -21
- package/tests/vitest.config.ts +0 -18
- package/tmlpd-pi-extension/README.md +0 -66
- package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +0 -114
- package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cache/prefixCache.js +0 -285
- package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +0 -1
- package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +0 -58
- package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cache/responseCache.js +0 -153
- package/tmlpd-pi-extension/dist/cache/responseCache.js.map +0 -1
- package/tmlpd-pi-extension/dist/cli.js +0 -59
- package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +0 -95
- package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/cost/costTracker.js +0 -240
- package/tmlpd-pi-extension/dist/cost/costTracker.js.map +0 -1
- package/tmlpd-pi-extension/dist/index.d.ts +0 -723
- package/tmlpd-pi-extension/dist/index.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/index.js +0 -239
- package/tmlpd-pi-extension/dist/index.js.map +0 -1
- package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +0 -82
- package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/memory/episodicMemory.js +0 -145
- package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +0 -102
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +0 -207
- package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +0 -85
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +0 -210
- package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +0 -1
- package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +0 -102
- package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/providers/localProvider.js +0 -338
- package/tmlpd-pi-extension/dist/providers/localProvider.js.map +0 -1
- package/tmlpd-pi-extension/dist/providers/registry.d.ts +0 -55
- package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/providers/registry.js +0 -138
- package/tmlpd-pi-extension/dist/providers/registry.js.map +0 -1
- package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +0 -68
- package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/routing/advancedRouter.js +0 -332
- package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +0 -1
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +0 -101
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +0 -368
- package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +0 -96
- package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/batchProcessor.js +0 -170
- package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/compression.d.ts +0 -61
- package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/compression.js +0 -281
- package/tmlpd-pi-extension/dist/utils/compression.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/reliability.d.ts +0 -74
- package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/reliability.js +0 -177
- package/tmlpd-pi-extension/dist/utils/reliability.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +0 -117
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +0 -246
- package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +0 -1
- package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +0 -50
- package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +0 -1
- package/tmlpd-pi-extension/dist/utils/tokenUtils.js +0 -124
- package/tmlpd-pi-extension/dist/utils/tokenUtils.js.map +0 -1
- package/tmlpd-pi-extension/examples/QUICKSTART.md +0 -183
- package/tmlpd-pi-extension/package-lock.json +0 -79
- package/tmlpd-pi-extension/package.json +0 -172
- package/tmlpd-pi-extension/python/examples.py +0 -53
- package/tmlpd-pi-extension/python/integrations.py +0 -330
- package/tmlpd-pi-extension/python/setup.py +0 -28
- package/tmlpd-pi-extension/python/tmlpd.py +0 -369
- package/tmlpd-pi-extension/qna/REDDIT_GAP_ANALYSIS.md +0 -299
- package/tmlpd-pi-extension/qna/TMLPD_QNA.md +0 -751
- package/tmlpd-pi-extension/skill/SKILL.md +0 -238
- package/tmlpd-pi-extension/src/cache/responseCache.ts +0 -147
- package/tmlpd-pi-extension/src/cost/costTracker.ts +0 -302
- package/tmlpd-pi-extension/src/index.ts +0 -232
- package/tmlpd-pi-extension/src/memory/episodicMemory.ts +0 -257
- package/tmlpd-pi-extension/src/orchestration/haloOrchestrator.ts +0 -266
- package/tmlpd-pi-extension/src/orchestration/mctsWorkflow.ts +0 -262
- package/tmlpd-pi-extension/src/providers/localProvider.ts +0 -406
- package/tmlpd-pi-extension/src/providers/registry.ts +0 -164
- package/tmlpd-pi-extension/src/routing/ensembleVoting.ts +0 -159
- package/tmlpd-pi-extension/src/routing/queryTypePresets.ts +0 -136
- package/tmlpd-pi-extension/src/tools/tmlpdTools.ts +0 -433
- package/tmlpd-pi-extension/src/utils/batchProcessor.ts +0 -232
- package/tmlpd-pi-extension/src/utils/compression.ts +0 -325
- package/tmlpd-pi-extension/src/utils/reliability.ts +0 -221
- package/tmlpd-pi-extension/src/utils/tokenUtils.ts +0 -145
- package/tmlpd-pi-extension/tsconfig.json +0 -18
- package/tsconfig.build.json +0 -29
- package/tsconfig.json +0 -18
- /package/{docs/llms-full.txt ā llms-full.txt.bak} +0 -0
package/test.js.bak
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* A3M Router Test Suite v1.9.0
|
|
4
|
+
* Comprehensive tests for generic provider system
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const assert = require('assert');
|
|
8
|
+
const {
|
|
9
|
+
createA3MRouter,
|
|
10
|
+
getAvailableProviders,
|
|
11
|
+
registerProvider,
|
|
12
|
+
deregisterProvider,
|
|
13
|
+
DEFAULT_PROVIDERS,
|
|
14
|
+
providerConfig,
|
|
15
|
+
routeQuery,
|
|
16
|
+
routeBatch,
|
|
17
|
+
recommendForTask,
|
|
18
|
+
extractQueryFeatures,
|
|
19
|
+
MODEL_PROFILES,
|
|
20
|
+
countTokens,
|
|
21
|
+
estimateCost,
|
|
22
|
+
MemoryTree,
|
|
23
|
+
CostTracker,
|
|
24
|
+
ResponseCache,
|
|
25
|
+
ProviderRegistry,
|
|
26
|
+
} = require('./dist/index.js');
|
|
27
|
+
|
|
28
|
+
let passed = 0;
|
|
29
|
+
let failed = 0;
|
|
30
|
+
|
|
31
|
+
function test(name, fn) {
|
|
32
|
+
try {
|
|
33
|
+
fn();
|
|
34
|
+
console.log(' ā
' + name);
|
|
35
|
+
passed++;
|
|
36
|
+
} catch (e) {
|
|
37
|
+
console.log(' ā ' + name + ': ' + e.message);
|
|
38
|
+
failed++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function asyncTest(name, fn) {
|
|
43
|
+
return fn()
|
|
44
|
+
.then(() => {
|
|
45
|
+
console.log(' ā
' + name);
|
|
46
|
+
passed++;
|
|
47
|
+
})
|
|
48
|
+
.catch(e => {
|
|
49
|
+
console.log(' ā ' + name + ': ' + e.message);
|
|
50
|
+
failed++;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
console.log('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
55
|
+
console.log('š§Ŗ A3M Router Test Suite v1.9.0');
|
|
56
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n');
|
|
57
|
+
|
|
58
|
+
// ============================================================
|
|
59
|
+
// TEST 1: Provider Configuration
|
|
60
|
+
// ============================================================
|
|
61
|
+
console.log('š¦ Provider Configuration Tests');
|
|
62
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
63
|
+
|
|
64
|
+
test('providerConfig module loads', () => {
|
|
65
|
+
assert(providerConfig, 'providerConfig should be defined');
|
|
66
|
+
assert(typeof providerConfig.loadConfig === 'function', 'loadConfig should be a function');
|
|
67
|
+
assert(typeof providerConfig.getAvailableProviders === 'function', 'getAvailableProviders should be a function');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
test('DEFAULT_PROVIDERS has expected providers', () => {
|
|
71
|
+
assert(DEFAULT_PROVIDERS, 'DEFAULT_PROVIDERS should be defined');
|
|
72
|
+
assert(DEFAULT_PROVIDERS.groq, 'should have groq');
|
|
73
|
+
assert(DEFAULT_PROVIDERS.mistral, 'should have mistral');
|
|
74
|
+
assert(DEFAULT_PROVIDERS.cerebras, 'should have cerebras');
|
|
75
|
+
assert(DEFAULT_PROVIDERS.commandcode, 'should have commandcode');
|
|
76
|
+
assert(DEFAULT_PROVIDERS.opencode, 'should have opencode');
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
test('getAvailableProviders returns configured providers', () => {
|
|
80
|
+
const available = getAvailableProviders();
|
|
81
|
+
assert(available, 'should return available providers');
|
|
82
|
+
assert(Object.keys(available).length > 0, 'should have at least one provider');
|
|
83
|
+
|
|
84
|
+
// Check that available providers have required fields
|
|
85
|
+
for (const [id, p] of Object.entries(available)) {
|
|
86
|
+
assert(p.id, 'provider should have id');
|
|
87
|
+
assert(p.name, 'provider should have name');
|
|
88
|
+
assert(p.type, 'provider should have type');
|
|
89
|
+
assert(p.models, 'provider should have models');
|
|
90
|
+
assert(Array.isArray(p.models), 'models should be an array');
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test('Provider types are correct', () => {
|
|
95
|
+
const available = getAvailableProviders();
|
|
96
|
+
|
|
97
|
+
if (available.groq) {
|
|
98
|
+
assert.strictEqual(available.groq.type, 'api', 'groq should be api type');
|
|
99
|
+
}
|
|
100
|
+
if (available.commandcode) {
|
|
101
|
+
assert.strictEqual(available.commandcode.type, 'cli', 'commandcode should be cli type');
|
|
102
|
+
}
|
|
103
|
+
if (available.opencode) {
|
|
104
|
+
assert.strictEqual(available.opencode.type, 'cli', 'opencode should be cli type');
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
// ============================================================
|
|
109
|
+
// TEST 2: Routing
|
|
110
|
+
// ============================================================
|
|
111
|
+
console.log('\nš Routing Tests');
|
|
112
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
113
|
+
|
|
114
|
+
test('routeQuery returns valid result', () => {
|
|
115
|
+
const result = routeQuery('What is 2+2?');
|
|
116
|
+
assert(result, 'should return a result');
|
|
117
|
+
assert(result.primary_model, 'should have primary_model');
|
|
118
|
+
assert(Array.isArray(result.fallback_models), 'should have fallback_models array');
|
|
119
|
+
assert(typeof result.estimated_cost === 'number', 'should have estimated_cost');
|
|
120
|
+
assert(typeof result.confidence === 'number', 'should have confidence');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
test('routeQuery selects free providers for simple queries', () => {
|
|
124
|
+
const result = routeQuery('Hello');
|
|
125
|
+
assert(result.primary_model, 'should have primary_model');
|
|
126
|
+
// Should prefer free/cheap providers for simple queries
|
|
127
|
+
assert(result.estimated_cost < 0.5, 'should have low cost for simple query');
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
test('routeQuery selects appropriate provider for code', () => {
|
|
131
|
+
const result = routeQuery('Write a Python function to sort an array');
|
|
132
|
+
assert(result.primary_model, 'should have primary_model');
|
|
133
|
+
assert(result.reasoning, 'should have reasoning');
|
|
134
|
+
// Should mention code in reasoning
|
|
135
|
+
assert(result.reasoning.toLowerCase().includes('code') ||
|
|
136
|
+
result.features.has_code, 'should detect code');
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
test('routeBatch returns array of results', () => {
|
|
140
|
+
const queries = ['Hello', 'What is 2+2?', 'Write Python code'];
|
|
141
|
+
const results = routeBatch(queries);
|
|
142
|
+
assert(Array.isArray(results), 'should return array');
|
|
143
|
+
assert.strictEqual(results.length, queries.length, 'should have same length as queries');
|
|
144
|
+
|
|
145
|
+
results.forEach((r, i) => {
|
|
146
|
+
assert(r.primary_model, 'result ' + i + ' should have primary_model');
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
test('recommendForTask returns recommendation', () => {
|
|
151
|
+
const rec = recommendForTask('coding');
|
|
152
|
+
assert(rec, 'should return recommendation');
|
|
153
|
+
assert(rec.primary, 'should have primary');
|
|
154
|
+
assert(Array.isArray(rec.fallbacks), 'should have fallbacks array');
|
|
155
|
+
assert(rec.reason, 'should have reason');
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
test('extractQueryFeatures detects code', () => {
|
|
159
|
+
const features = extractQueryFeatures('function test() { return 1; }');
|
|
160
|
+
assert(features.has_code, 'should detect code');
|
|
161
|
+
assert(features.complexity > 0.3, 'should have elevated complexity');
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
test('extractQueryFeatures detects math', () => {
|
|
165
|
+
const features = extractQueryFeatures('Calculate the integral of x^2');
|
|
166
|
+
assert(features.has_math, 'should detect math');
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test('extractQueryFeatures detects translation', () => {
|
|
170
|
+
const features = extractQueryFeatures('Translate hello to French');
|
|
171
|
+
assert(features.is_translation, 'should detect translation');
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// ============================================================
|
|
175
|
+
// TEST 3: Model Profiles
|
|
176
|
+
// ============================================================
|
|
177
|
+
console.log('\nš Model Profile Tests');
|
|
178
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
179
|
+
|
|
180
|
+
test('MODEL_PROFILES is populated', () => {
|
|
181
|
+
assert(MODEL_PROFILES, 'MODEL_PROFILES should be defined');
|
|
182
|
+
assert(Object.keys(MODEL_PROFILES).length > 0, 'should have model profiles');
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
test('Model profiles have required fields', () => {
|
|
186
|
+
for (const [name, profile] of Object.entries(MODEL_PROFILES)) {
|
|
187
|
+
assert(profile.name, name + ' should have name');
|
|
188
|
+
assert(profile.provider, name + ' should have provider');
|
|
189
|
+
assert(typeof profile.cost_per_1k_input === 'number', name + ' should have cost_per_1k_input');
|
|
190
|
+
assert(typeof profile.cost_per_1k_output === 'number', name + ' should have cost_per_1k_output');
|
|
191
|
+
assert(typeof profile.quality_score === 'number', name + ' should have quality_score');
|
|
192
|
+
assert(Array.isArray(profile.strengths), name + ' should have strengths array');
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// ============================================================
|
|
197
|
+
// TEST 4: Token Utilities
|
|
198
|
+
// ============================================================
|
|
199
|
+
console.log('\nš¢ Token Utility Tests');
|
|
200
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
201
|
+
|
|
202
|
+
test('countTokens returns number', () => {
|
|
203
|
+
const tokens = countTokens('Hello world');
|
|
204
|
+
assert(typeof tokens === 'number', 'should return number');
|
|
205
|
+
assert(tokens > 0, 'should return positive number');
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
test('countTokens counts correctly', () => {
|
|
209
|
+
const tokens = countTokens('Hello world');
|
|
210
|
+
assert(tokens >= 2, 'should count at least 2 tokens for 2 words');
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
test('estimateCost returns number', () => {
|
|
214
|
+
const cost = estimateCost(100, 50, 'gpt-4o');
|
|
215
|
+
assert(typeof cost === 'number', 'should return number');
|
|
216
|
+
assert(cost >= 0, 'should return non-negative');
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
// ============================================================
|
|
220
|
+
// TEST 5: A3M Router Factory
|
|
221
|
+
// ============================================================
|
|
222
|
+
console.log('\nš A3M Router Factory Tests');
|
|
223
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
224
|
+
|
|
225
|
+
test('createA3MRouter returns router object', () => {
|
|
226
|
+
const router = createA3MRouter({});
|
|
227
|
+
assert(router, 'should return router');
|
|
228
|
+
assert(typeof router.route === 'function', 'should have route function');
|
|
229
|
+
assert(typeof router.routeBatch === 'function', 'should have routeBatch function');
|
|
230
|
+
assert(typeof router.recommend === 'function', 'should have recommend function');
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
test('createA3MRouter has memory', () => {
|
|
234
|
+
const router = createA3MRouter({});
|
|
235
|
+
assert(router.memory, 'should have memory');
|
|
236
|
+
assert(typeof router.memory.add === 'function', 'memory should have add');
|
|
237
|
+
assert(typeof router.memory.search === 'function', 'memory should have search');
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
test('createA3MRouter has cache', () => {
|
|
241
|
+
const router = createA3MRouter({});
|
|
242
|
+
assert(router.cache, 'should have cache');
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
test('createA3MRouter has costTracker', () => {
|
|
246
|
+
const router = createA3MRouter({});
|
|
247
|
+
assert(router.costTracker, 'should have costTracker');
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
test('createA3MRouter has providers registry', () => {
|
|
251
|
+
const router = createA3MRouter({});
|
|
252
|
+
assert(router.providers, 'should have providers');
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test('createA3MRouter has compression', () => {
|
|
256
|
+
const router = createA3MRouter({});
|
|
257
|
+
assert(router.compression, 'should have compression');
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
test('createA3MRouter has vault', () => {
|
|
261
|
+
const router = createA3MRouter({});
|
|
262
|
+
assert(router.vault, 'should have vault');
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test('createA3MRouter has autoFetch', () => {
|
|
266
|
+
const router = createA3MRouter({});
|
|
267
|
+
assert(router.autoFetch, 'should have autoFetch');
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test('createA3MRouter has oauth', () => {
|
|
271
|
+
const router = createA3MRouter({});
|
|
272
|
+
assert(router.oauth, 'should have oauth');
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
// ============================================================
|
|
276
|
+
// TEST 6: Memory Tree
|
|
277
|
+
// ============================================================
|
|
278
|
+
console.log('\nš§ Memory Tree Tests');
|
|
279
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
280
|
+
|
|
281
|
+
test('MemoryTree can add and search', () => {
|
|
282
|
+
const memory = new MemoryTree({ maxSize: 100 });
|
|
283
|
+
memory.add('Python is great for data science', { tags: ['python', 'data'] });
|
|
284
|
+
memory.add('JavaScript is great for web', { tags: ['js', 'web'] });
|
|
285
|
+
|
|
286
|
+
const results = memory.search('python data');
|
|
287
|
+
assert(Array.isArray(results), 'should return array');
|
|
288
|
+
assert(results.length > 0, 'should find results');
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
test('MemoryTree getStats returns stats', () => {
|
|
292
|
+
const memory = new MemoryTree({ maxSize: 100 });
|
|
293
|
+
memory.add('Test entry', { tags: ['test'] });
|
|
294
|
+
|
|
295
|
+
const stats = memory.getStats();
|
|
296
|
+
assert(stats, 'should return stats');
|
|
297
|
+
assert(typeof stats.totalChunks === 'number', 'should have totalChunks');
|
|
298
|
+
assert(typeof stats.indexSize === 'number', 'should have indexSize');
|
|
299
|
+
});
|
|
300
|
+
|
|
301
|
+
// ============================================================
|
|
302
|
+
// TEST 7: Provider Registry
|
|
303
|
+
// ============================================================
|
|
304
|
+
console.log('\nš Provider Registry Tests');
|
|
305
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
306
|
+
|
|
307
|
+
test('ProviderRegistry can be instantiated', () => {
|
|
308
|
+
const registry = new ProviderRegistry();
|
|
309
|
+
assert(registry, 'should create registry');
|
|
310
|
+
assert(typeof registry.getReadyProviders === 'function', 'should have getReadyProviders');
|
|
311
|
+
assert(typeof registry.selectModel === 'function', 'should have selectModel');
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
test('ProviderRegistry getStatus returns status', () => {
|
|
315
|
+
const registry = new ProviderRegistry();
|
|
316
|
+
const status = registry.getStatus();
|
|
317
|
+
assert(status, 'should return status');
|
|
318
|
+
assert(Array.isArray(status.providers), 'should have providers array');
|
|
319
|
+
assert(Array.isArray(status.available), 'should have available array');
|
|
320
|
+
});
|
|
321
|
+
|
|
322
|
+
// ============================================================
|
|
323
|
+
// TEST 8: Dynamic Provider Registration
|
|
324
|
+
// ============================================================
|
|
325
|
+
console.log('\nš§ Dynamic Provider Registration Tests');
|
|
326
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
327
|
+
|
|
328
|
+
test('registerProvider adds new provider', () => {
|
|
329
|
+
const testProvider = {
|
|
330
|
+
name: 'TestProvider',
|
|
331
|
+
type: 'api',
|
|
332
|
+
baseUrl: 'https://test.example.com',
|
|
333
|
+
models: ['test-model'],
|
|
334
|
+
priority: 99,
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
registerProvider('test-provider', testProvider);
|
|
338
|
+
|
|
339
|
+
// Check it was added to runtime providers
|
|
340
|
+
const available = getAvailableProviders();
|
|
341
|
+
// Note: won't show up without API key, but should be in _providers
|
|
342
|
+
assert(providerConfig._providers['test-provider'], 'should be in _providers');
|
|
343
|
+
assert.strictEqual(providerConfig._providers['test-provider'].name, 'TestProvider');
|
|
344
|
+
|
|
345
|
+
// Clean up
|
|
346
|
+
deregisterProvider('test-provider');
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
test('deregisterProvider removes provider', () => {
|
|
350
|
+
// First add
|
|
351
|
+
registerProvider('temp-provider', { name: 'Temp', type: 'api', models: [] });
|
|
352
|
+
assert(providerConfig._providers['temp-provider'], 'should exist in _providers');
|
|
353
|
+
|
|
354
|
+
// Then remove
|
|
355
|
+
deregisterProvider('temp-provider');
|
|
356
|
+
assert(!providerConfig._providers['temp-provider'], 'should be removed from _providers');
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
// ============================================================
|
|
360
|
+
// SUMMARY
|
|
361
|
+
// ============================================================
|
|
362
|
+
console.log('\nāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
363
|
+
console.log('š Test Summary');
|
|
364
|
+
console.log('āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā');
|
|
365
|
+
console.log(' Total: ' + (passed + failed));
|
|
366
|
+
console.log(' Passed: ' + passed + ' ā
');
|
|
367
|
+
console.log(' Failed: ' + failed + (failed > 0 ? ' ā' : ''));
|
|
368
|
+
console.log('');
|
|
369
|
+
|
|
370
|
+
if (failed > 0) {
|
|
371
|
+
console.log('ā Some tests failed');
|
|
372
|
+
process.exit(1);
|
|
373
|
+
} else {
|
|
374
|
+
console.log('ā
All tests passed!');
|
|
375
|
+
process.exit(0);
|
|
376
|
+
}
|
package/.dockerignore
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# =============================================================================
|
|
2
|
-
# A3M Router ā .dockerignore
|
|
3
|
-
# Excludes unnecessary files from Docker build context for smaller images
|
|
4
|
-
# =============================================================================
|
|
5
|
-
|
|
6
|
-
# Dependencies (installed inside container)
|
|
7
|
-
node_modules/
|
|
8
|
-
|
|
9
|
-
# Git
|
|
10
|
-
.git/
|
|
11
|
-
.gitattributes
|
|
12
|
-
.gitignore
|
|
13
|
-
.github/
|
|
14
|
-
|
|
15
|
-
# Build output (built inside container)
|
|
16
|
-
dist/
|
|
17
|
-
|
|
18
|
-
# Documentation (not needed at runtime)
|
|
19
|
-
docs/
|
|
20
|
-
docs-site/
|
|
21
|
-
_*.md
|
|
22
|
-
CONTRIBUTING.md
|
|
23
|
-
CHANGELOG.md
|
|
24
|
-
CODE_OF_CONDUCT.md
|
|
25
|
-
SECURITY.md
|
|
26
|
-
LAUNCH*.md
|
|
27
|
-
MANIFESTO.md
|
|
28
|
-
LANDING.md
|
|
29
|
-
POPULARITY_BOOSTERS.md
|
|
30
|
-
SUBMISSIONS.md
|
|
31
|
-
|
|
32
|
-
# Research / articles
|
|
33
|
-
articles/
|
|
34
|
-
awesome-ai-gateways/
|
|
35
|
-
Awesome-LLM/
|
|
36
|
-
awesome-selfhosted/
|
|
37
|
-
qna/
|
|
38
|
-
llms-full.txt
|
|
39
|
-
llms.txt
|
|
40
|
-
|
|
41
|
-
# Demos / playground
|
|
42
|
-
demo/
|
|
43
|
-
playground/
|
|
44
|
-
demo*.tape
|
|
45
|
-
demo*.sh
|
|
46
|
-
demo.html
|
|
47
|
-
index.html
|
|
48
|
-
|
|
49
|
-
# Tests
|
|
50
|
-
test/
|
|
51
|
-
test*
|
|
52
|
-
pytest.ini
|
|
53
|
-
__pycache__/
|
|
54
|
-
*.py[cod]
|
|
55
|
-
.pytest_cache/
|
|
56
|
-
|
|
57
|
-
# Scripts / tooling
|
|
58
|
-
scripts/
|
|
59
|
-
eval/
|
|
60
|
-
integrations/
|
|
61
|
-
mcp-server/
|
|
62
|
-
tmlpd-pi-extension/
|
|
63
|
-
openclaw-alexa-bridge/
|
|
64
|
-
python/
|
|
65
|
-
skill/
|
|
66
|
-
hf-space/
|
|
67
|
-
|
|
68
|
-
# Config & secrets (use container env vars)
|
|
69
|
-
.env
|
|
70
|
-
.env.example
|
|
71
|
-
tsconfig.json
|
|
72
|
-
tsconfig.build.json
|
|
73
|
-
|
|
74
|
-
# OS files
|
|
75
|
-
.DS_Store
|
|
76
|
-
Thumbs.db
|
|
77
|
-
|
|
78
|
-
# Logs / temp
|
|
79
|
-
*.log
|
|
80
|
-
*.tsbuildinfo
|
|
81
|
-
*.bak
|
|
82
|
-
coverage/
|