adaptive-memory-multi-model-router 2.14.45 → 2.14.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.js +8 -2
  3. package/dist/memory/hybridMemory.d.ts +71 -0
  4. package/dist/memory/hybridMemory.js +124 -0
  5. package/dist/memory/reasoningBank.d.ts +88 -0
  6. package/dist/memory/reasoningBank.js +303 -0
  7. package/{docs/llms.txt → llms.txt.bak} +6 -6
  8. package/package.json +13 -84
  9. package/src/index.ts +8 -0
  10. package/src/memory/hybridMemory.ts +155 -0
  11. package/src/memory/reasoningBank.ts +335 -0
  12. package/src/routing/advancedRouter.ts.bak +650 -0
  13. package/test.js.bak +376 -0
  14. package/.dockerignore +0 -82
  15. package/.env.example +0 -303
  16. package/.github/DISCUSSIONS_WELCOME.md +0 -27
  17. package/.github/DISCUSSION_TEMPLATE.yml +0 -5
  18. package/.github/FUNDING.yml +0 -2
  19. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -94
  20. package/.github/ISSUE_TEMPLATE/config.yml +0 -17
  21. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -71
  22. package/.github/PULL_REQUEST_TEMPLATE.md +0 -71
  23. package/.github/dependabot.yml +0 -9
  24. package/.github/workflows/auto-publish.yml +0 -51
  25. package/.github/workflows/ci.yml +0 -263
  26. package/.github/workflows/codeql.yml +0 -38
  27. package/.github/workflows/npm-publish.yml +0 -20
  28. package/.github/workflows/pages.yml +0 -37
  29. package/.github/workflows/stale.yml +0 -54
  30. package/.publish-tick +0 -1
  31. package/.well-known/ai-plugin.json +0 -16
  32. package/AGENT_COUNCIL_FINDINGS.md +0 -142
  33. package/ARCHITECTURE.md +0 -346
  34. package/AUDIT_REPORT.md +0 -28
  35. package/CODE_OF_CONDUCT.md +0 -128
  36. package/CONTRIBUTING.md +0 -50
  37. package/CONTRIBUTORS.md +0 -20
  38. package/Dockerfile +0 -53
  39. package/Dockerfile.proxy +0 -33
  40. package/HEALTH_REPORT.md +0 -118
  41. package/IMPROVEMENT_PLAN.md +0 -107
  42. package/LANDING.md +0 -43
  43. package/LAUNCH-PAIN-DRIVEN.md +0 -339
  44. package/LAUNCH.md +0 -337
  45. package/LAUNCH_CHECKLIST.md +0 -141
  46. package/LAUNCH_SNAPSHOT.md +0 -260
  47. package/MANIFESTO.md +0 -41
  48. package/POPULARITY_BOOSTERS.md +0 -285
  49. package/PR_STATUS_REPORT.md +0 -148
  50. package/REDESIGN.md +0 -95
  51. package/RUNKIT.md +0 -83
  52. package/SECURITY.md +0 -29
  53. package/SUBMISSIONS.md +0 -43
  54. package/_schema.html +0 -53
  55. package/ai-plugin.json +0 -16
  56. package/articles/AI_AGENT_LLM_ROUTING.md +0 -150
  57. package/articles/CHINESE_DIRECTORIES.md +0 -100
  58. package/articles/CHINESE_SUBMISSIONS_READY.md +0 -322
  59. package/articles/COMPETITOR_ALERTS.md +0 -31
  60. package/articles/COMPLETE_POSTING_DIRECTORY.md +0 -147
  61. package/articles/CONTENT_STRUCTURE.md +0 -292
  62. package/articles/DEVTO_COST_GUIDE.md +0 -473
  63. package/articles/DEVTO_FINAL.md +0 -416
  64. package/articles/DEVTO_MULTI_PROVIDER.md +0 -542
  65. package/articles/DEVTO_READY.md +0 -255
  66. package/articles/DEVTO_V2_ANNOUNCEMENT.md +0 -160
  67. package/articles/DEVTO_VIRAL_GROWTH.md +0 -280
  68. package/articles/FRESH_devto.md +0 -460
  69. package/articles/FRESH_devto_2026_05.md +0 -73
  70. package/articles/FRESH_hackernews.md +0 -14
  71. package/articles/FRESH_reddit_ml.md +0 -90
  72. package/articles/FRESH_reddit_node.md +0 -198
  73. package/articles/FRESH_reddit_sideproject.md +0 -72
  74. package/articles/FRESH_reddit_webdev.md +0 -130
  75. package/articles/FROM_ZERO_TO_10K.md +0 -107
  76. package/articles/HN_10X_BETTER.md +0 -430
  77. package/articles/HN_ACCOUNT_GUIDE.md +0 -21
  78. package/articles/HN_CHINESE_STYLE.md +0 -308
  79. package/articles/HN_FINAL.md +0 -148
  80. package/articles/HN_POSTED_VERSION.md +0 -56
  81. package/articles/HN_POST_READY.md +0 -137
  82. package/articles/HN_RESEARCH.md +0 -364
  83. package/articles/HN_SHOW_routerarena.md +0 -17
  84. package/articles/HN_TIMING_GUIDE.md +0 -52
  85. package/articles/INDIEHACKERS_POST.md +0 -52
  86. package/articles/INDIEHACKERS_READY.md +0 -120
  87. package/articles/LLM_BENCHMARK_DEEP_DIVE.md +0 -153
  88. package/articles/MASTER_POSTING_DIRECTORY.md +0 -189
  89. package/articles/NEWSLETTER_SEND_NOW.md +0 -259
  90. package/articles/NEWSLETTER_SUBMISSIONS.md +0 -112
  91. package/articles/PAIN-DRIVEN-devto-v2.md +0 -308
  92. package/articles/PAIN-DRIVEN-devto-v3.md +0 -268
  93. package/articles/PAIN-DRIVEN-devto.md +0 -242
  94. package/articles/PAIN-DRIVEN-hackernews-v2.md +0 -138
  95. package/articles/PAIN-DRIVEN-hackernews-v3.md +0 -151
  96. package/articles/PAIN-DRIVEN-hackernews.md +0 -131
  97. package/articles/PAIN-DRIVEN-reddit-v2.md +0 -301
  98. package/articles/PAIN-DRIVEN-reddit-v3.md +0 -236
  99. package/articles/PAIN-DRIVEN-reddit.md +0 -218
  100. package/articles/PAIN-DRIVEN-twitter-v2.md +0 -110
  101. package/articles/PAIN-DRIVEN-twitter-v3.md +0 -121
  102. package/articles/PAIN-DRIVEN-twitter.md +0 -120
  103. package/articles/PORTKEY_VS_A3M.md +0 -147
  104. package/articles/POSTING_KIT_2026_05.md +0 -67
  105. package/articles/PRESS_KIT_routerarena.md +0 -77
  106. package/articles/PRODUCTHUNT_LISTING.md +0 -48
  107. package/articles/PRODUCTHUNT_READY.md +0 -106
  108. package/articles/PR_PLAN_vault.md +0 -125
  109. package/articles/REDDIT_FINAL.md +0 -232
  110. package/articles/REDDIT_POST.md +0 -67
  111. package/articles/REDDIT_SUBMISSION_READY.md +0 -348
  112. package/articles/ROUTERARENA_LEADER.md +0 -45
  113. package/articles/SHOW_HN_FINAL.md +0 -29
  114. package/articles/TWEETS_10K_DOWNLOADS.md +0 -47
  115. package/articles/TWEETS_BENCHMARK_FIRST.md +0 -46
  116. package/articles/TWEETS_MCP_PLAY.md +0 -51
  117. package/articles/TWEETS_SEQUENTIAL_BROKEN.md +0 -49
  118. package/articles/TWEETS_WHY_BUILD.md +0 -54
  119. package/articles/TWEETS_routerarena_leader.md +0 -53
  120. package/articles/TWEET_STORM_READY.md +0 -165
  121. package/articles/TWITTER_FINAL.md +0 -167
  122. package/articles/WHY_10X_BETTER.md +0 -261
  123. package/articles/WHY_CHINESE_STYLE_BETTER.md +0 -323
  124. package/articles/ai-discoverability-llm-routing.md +0 -210
  125. package/articles/devto-llm-routing.md +0 -138
  126. package/articles/hackernews-show-hn.md +0 -54
  127. package/articles/hashnode-llm-cost-optimization.md +0 -125
  128. package/articles/hn_show_2026_05.md +0 -11
  129. package/articles/medium-building-llm-router.md +0 -205
  130. package/articles/reddit-ml.md +0 -76
  131. package/articles/twitter-thread-cost-savings.md +0 -50
  132. package/articles/youtube-tutorial-script.md +0 -262
  133. package/assets/a3m_3blue1brown.mp4 +0 -0
  134. package/assets/banner.svg +0 -109
  135. package/assets/chart-cost-v2.svg +0 -91
  136. package/assets/chart-cost-v3.svg +0 -143
  137. package/assets/chart-features-v2.svg +0 -132
  138. package/assets/chart-features-v3.svg +0 -211
  139. package/assets/chart-growth-v2.svg +0 -122
  140. package/assets/chart-growth-v3.svg +0 -189
  141. package/assets/cost-comparison.svg +0 -134
  142. package/assets/cost-simple.svg +0 -64
  143. package/assets/demo-hn.gif +0 -0
  144. package/assets/feature-matrix.svg +0 -136
  145. package/assets/growth-chart-animated.svg +0 -76
  146. package/assets/growth-chart.svg +0 -82
  147. package/assets/growth-simple.svg +0 -69
  148. package/assets/hero-diagram.svg +0 -81
  149. package/assets/logo-new.svg +0 -21
  150. package/assets/logo.svg +0 -68
  151. package/assets/provider-comparison.svg +0 -121
  152. package/assets/social-preview-new.svg +0 -100
  153. package/assets/social-preview.svg +0 -194
  154. package/assets/social-v2.svg +0 -130
  155. package/assets/social-v3.svg +0 -212
  156. package/benchmark-provider-results.json +0 -245
  157. package/benchmark-results.json +0 -54
  158. package/council-votes/architecture-vote.md +0 -121
  159. package/council-votes/coverage-vote.md +0 -93
  160. package/data/adaptive-benchmark.json +0 -92
  161. package/data/benchmark-results.json +0 -47
  162. package/data/labeled-benchmark.json +0 -88
  163. package/demo/3blue1brown_video.py +0 -285
  164. package/demo/3blue1brown_video_v2.py +0 -310
  165. package/demo/IMPROVED_PROMPTS.md +0 -229
  166. package/demo/VEO3_PROMPTS.md +0 -269
  167. package/demo/VIDEO_PRODUCTION_GUIDE.md +0 -333
  168. package/demo/a3m_3blue1brown.mp4 +0 -0
  169. package/demo/asciinema-demo.sh +0 -195
  170. package/demo/demo-hn.tape +0 -74
  171. package/demo/demo-script.md +0 -53
  172. package/demo/demo-script.sh +0 -62
  173. package/demo/demo.svg +0 -75
  174. package/demo/frame1_ai_data_center.png +0 -0
  175. package/demo/frame1_sunset_video.mp4 +0 -0
  176. package/demo/frame2_cost_comparison.png +0 -0
  177. package/demo/frame2_cost_comparison_fallback.png +0 -0
  178. package/demo/frame3_parallel_execution.png +0 -0
  179. package/demo/frame3_parallel_execution_fallback.png +0 -0
  180. package/demo/frame4_providers.png +0 -0
  181. package/demo/frame4_providers_fallback.png +0 -0
  182. package/demo/frame5_endcard.png +0 -0
  183. package/demo/frame5_endcard_fallback.png +0 -0
  184. package/demo/new_frame1_hook.png +0 -0
  185. package/demo/new_frame2_proof.png +0 -0
  186. package/demo/new_frame3_wow.png +0 -0
  187. package/demo/new_frame4_social.png +0 -0
  188. package/demo/new_frame5_cta.png +0 -0
  189. package/demo/package.json +0 -13
  190. package/demo/product-video-final.mp4 +0 -0
  191. package/demo/product-video-hype-v1.mp4 +0 -0
  192. package/demo/product-video-v1.mp4 +0 -0
  193. package/demo/public/index.html +0 -762
  194. package/demo/recording.cast +0 -55
  195. package/demo/server.js +0 -405
  196. package/demo-new.tape +0 -71
  197. package/demo-real.sh +0 -198
  198. package/demo-simple.tape +0 -205
  199. package/demo.html +0 -520
  200. package/demo.sh +0 -85
  201. package/demo.tape +0 -259
  202. package/dist/analytics/costAnalytics.d.ts.map +0 -1
  203. package/dist/analytics/costAnalytics.js.map +0 -1
  204. package/dist/benchmark/comprehensive.js.map +0 -1
  205. package/dist/benchmark/reproducible.d.ts.map +0 -1
  206. package/dist/benchmark/reproducible.js.map +0 -1
  207. package/dist/cache/prefixCache.d.ts.map +0 -1
  208. package/dist/cache/prefixCache.js.map +0 -1
  209. package/dist/cache/responseCache.d.ts.map +0 -1
  210. package/dist/cache/responseCache.js.map +0 -1
  211. package/dist/cache/semanticCache.d.ts.map +0 -1
  212. package/dist/cache/semanticCache.js.map +0 -1
  213. package/dist/cli/setupWizard.d.ts.map +0 -1
  214. package/dist/cli/setupWizard.js.map +0 -1
  215. package/dist/cost/budgetEnforcer.d.ts.map +0 -1
  216. package/dist/cost/budgetEnforcer.js.map +0 -1
  217. package/dist/cost/costTracker.d.ts.map +0 -1
  218. package/dist/cost/costTracker.js.map +0 -1
  219. package/dist/ensemble/multiRoundDialog.js.map +0 -1
  220. package/dist/ensemble/shapleyValue.js.map +0 -1
  221. package/dist/integrations/langchainAdapter.d.ts.map +0 -1
  222. package/dist/integrations/langchainAdapter.js.map +0 -1
  223. package/dist/integrations/oauth.d.ts.map +0 -1
  224. package/dist/integrations/oauth.js.map +0 -1
  225. package/dist/integrations/scienceAdapter.js.map +0 -1
  226. package/dist/memory/autoFetch.d.ts.map +0 -1
  227. package/dist/memory/autoFetch.js.map +0 -1
  228. package/dist/memory/episodicMemory.d.ts.map +0 -1
  229. package/dist/memory/episodicMemory.js.map +0 -1
  230. package/dist/memory/memoryTree.d.ts.map +0 -1
  231. package/dist/memory/memoryTree.js.map +0 -1
  232. package/dist/memory/obsidianVault.d.ts.map +0 -1
  233. package/dist/memory/obsidianVault.js.map +0 -1
  234. package/dist/observability/changeWatch.d.ts.map +0 -1
  235. package/dist/observability/changeWatch.js.map +0 -1
  236. package/dist/observability/fatigueDetector.d.ts.map +0 -1
  237. package/dist/observability/fatigueDetector.js.map +0 -1
  238. package/dist/observability/index.d.ts.map +0 -1
  239. package/dist/observability/index.js.map +0 -1
  240. package/dist/observability/metrics.d.ts.map +0 -1
  241. package/dist/observability/metrics.js.map +0 -1
  242. package/dist/observability/middleware.d.ts.map +0 -1
  243. package/dist/observability/middleware.js.map +0 -1
  244. package/dist/observability/tracer.d.ts.map +0 -1
  245. package/dist/observability/tracer.js.map +0 -1
  246. package/dist/observability/types.d.ts.map +0 -1
  247. package/dist/observability/types.js.map +0 -1
  248. package/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
  249. package/dist/orchestration/haloOrchestrator.js.map +0 -1
  250. package/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
  251. package/dist/orchestration/mctsWorkflow.js.map +0 -1
  252. package/dist/providers/localProvider.d.ts.map +0 -1
  253. package/dist/providers/localProvider.js.map +0 -1
  254. package/dist/providers/providerConfig.d.ts.map +0 -1
  255. package/dist/providers/providerConfig.js.map +0 -1
  256. package/dist/providers/registry.d.ts.map +0 -1
  257. package/dist/providers/registry.js.map +0 -1
  258. package/dist/routing/advancedRouter.d.ts.map +0 -1
  259. package/dist/routing/advancedRouter.js.map +0 -1
  260. package/dist/routing/crossModelValidation.d.ts.map +0 -1
  261. package/dist/routing/crossModelValidation.js.map +0 -1
  262. package/dist/routing/providerHealth.d.ts.map +0 -1
  263. package/dist/routing/providerHealth.js.map +0 -1
  264. package/dist/routing/providerRetry.d.ts.map +0 -1
  265. package/dist/routing/providerRetry.js.map +0 -1
  266. package/dist/scripts/banner.js +0 -29
  267. package/dist/security/guardrails.d.ts.map +0 -1
  268. package/dist/security/guardrails.js.map +0 -1
  269. package/dist/server/dashboard.d.ts.map +0 -1
  270. package/dist/server/dashboard.js.map +0 -1
  271. package/dist/server/modelMapper.d.ts.map +0 -1
  272. package/dist/server/modelMapper.js.map +0 -1
  273. package/dist/server/proxyServer.d.ts.map +0 -1
  274. package/dist/server/proxyServer.js.map +0 -1
  275. package/dist/skills/__tests__/skill_manager.test.d.ts +0 -2
  276. package/dist/skills/__tests__/skill_manager.test.d.ts.map +0 -1
  277. package/dist/skills/__tests__/skill_manager.test.js +0 -268
  278. package/dist/skills/__tests__/skill_manager.test.js.map +0 -1
  279. package/dist/tools/tmlpdTools.d.ts.map +0 -1
  280. package/dist/tools/tmlpdTools.js.map +0 -1
  281. package/dist/tui/dashboard.d.ts.map +0 -1
  282. package/dist/tui/dashboard.js.map +0 -1
  283. package/dist/tui/index.d.ts.map +0 -1
  284. package/dist/tui/index.js.map +0 -1
  285. package/dist/utils/batchProcessor.d.ts.map +0 -1
  286. package/dist/utils/batchProcessor.js.map +0 -1
  287. package/dist/utils/compression.d.ts.map +0 -1
  288. package/dist/utils/compression.js.map +0 -1
  289. package/dist/utils/costUtils.d.ts.map +0 -1
  290. package/dist/utils/costUtils.js.map +0 -1
  291. package/dist/utils/reliability.d.ts.map +0 -1
  292. package/dist/utils/reliability.js.map +0 -1
  293. package/dist/utils/sorting.d.ts.map +0 -1
  294. package/dist/utils/sorting.js.map +0 -1
  295. package/dist/utils/speculativeDecoding.d.ts.map +0 -1
  296. package/dist/utils/speculativeDecoding.js.map +0 -1
  297. package/dist/utils/tokenUtils.d.ts.map +0 -1
  298. package/dist/utils/tokenUtils.js.map +0 -1
  299. package/docs/.nojekyll +0 -0
  300. package/docs/ANALYSIS_PRINCIPLES.md +0 -162
  301. package/docs/API.md +0 -855
  302. package/docs/ARCHITECTURAL-IMPROVEMENTS-2025.md +0 -1391
  303. package/docs/ARCHITECTURAL-IMPROVEMENTS-REVISED-2025.md +0 -1051
  304. package/docs/BENCHMARK.md +0 -170
  305. package/docs/CHINESE_PROVIDER_RELIABILITY.md +0 -37
  306. package/docs/CITATIONS.md +0 -74
  307. package/docs/CLAIMS_AND_EVIDENCE.md +0 -58
  308. package/docs/CONFIGURATION.md +0 -476
  309. package/docs/COUNCIL_DECISION.json +0 -816
  310. package/docs/COUNCIL_SUMMARY.md +0 -319
  311. package/docs/COUNCIL_V2.2_DECISION.md +0 -416
  312. package/docs/ENGINEERING_SPEC.md +0 -55
  313. package/docs/FACTORY_RESET.md +0 -34
  314. package/docs/GEO.md +0 -66
  315. package/docs/GEO_OPTIMIZATION.md +0 -30
  316. package/docs/GEO_ROOT_CAUSE.md +0 -136
  317. package/docs/GEO_STATUS.md +0 -85
  318. package/docs/GEO_TEST_RESULTS.md +0 -176
  319. package/docs/HN_CHECKLIST.md +0 -38
  320. package/docs/HN_FOUNDER_COMMENT.md +0 -17
  321. package/docs/HN_SUBMISSION_FINAL.md +0 -180
  322. package/docs/HN_SUBMISSION_V3.md +0 -56
  323. package/docs/IMPROVEMENT_ROADMAP.md +0 -515
  324. package/docs/INTEGRATIONS.md +0 -420
  325. package/docs/LANGCHAIN_INTEGRATION.md +0 -147
  326. package/docs/LLM_COUNCIL_DECISION.md +0 -508
  327. package/docs/MIDDLEWARE_CHAIN.md +0 -35
  328. package/docs/PROMO_CHECKLIST.md +0 -200
  329. package/docs/QUICKSTART.md +0 -271
  330. package/docs/QUICK_START.md +0 -43
  331. package/docs/QUICK_START_VISIBILITY.md +0 -782
  332. package/docs/REDDIT_GAP_ANALYSIS.md +0 -299
  333. package/docs/RELEASE_CHECKLIST.md +0 -32
  334. package/docs/REPRODUCIBILITY.md +0 -63
  335. package/docs/RESEARCH_BACKED_IMPROVEMENTS.md +0 -1180
  336. package/docs/ROUTING_RUBRIC.md +0 -197
  337. package/docs/SEO_AUDIT.md +0 -186
  338. package/docs/SOCIAL_LISTENING.md +0 -219
  339. package/docs/TMLPD_QNA.md +0 -751
  340. package/docs/TMLPD_V2.1_COMPLETE.md +0 -763
  341. package/docs/TMLPD_V2.2_RESEARCH_ROADMAP.md +0 -754
  342. package/docs/UPDATE_TOPICS.md +0 -15
  343. package/docs/USE_CASES.md +0 -59
  344. package/docs/V2.2_IMPLEMENTATION_COMPLETE.md +0 -446
  345. package/docs/V2_IMPLEMENTATION_GUIDE.md +0 -388
  346. package/docs/VERCEL_AI_SDK.md +0 -209
  347. package/docs/VISIBILITY_ADOPTION_PLAN.md +0 -1005
  348. package/docs/_config.yml +0 -49
  349. package/docs/ai-plugin.json +0 -16
  350. package/docs/api.html +0 -513
  351. package/docs/architecture-diagram.md +0 -40
  352. package/docs/benchmark-chart.png +0 -0
  353. package/docs/benchmark.html +0 -387
  354. package/docs/blog/routerarena-number-one.html +0 -73
  355. package/docs/cli-cheatsheet.md +0 -339
  356. package/docs/compare.md +0 -109
  357. package/docs/comparison-litellm.md +0 -88
  358. package/docs/comparison.md +0 -108
  359. package/docs/cost-chart-ascii.md +0 -42
  360. package/docs/cost-comparison-chart.svg +0 -88
  361. package/docs/curl-examples.md +0 -247
  362. package/docs/demo-auto.html +0 -264
  363. package/docs/demo.html +0 -416
  364. package/docs/geo/GENERATIVE_ENGINE_OPTIMIZATION.md +0 -232
  365. package/docs/index.html +0 -507
  366. package/docs/launch-content/LAUNCH_EXECUTION_CHECKLIST.md +0 -421
  367. package/docs/launch-content/README.md +0 -457
  368. package/docs/launch-content/assets/cost_comparison_100_tasks.png +0 -0
  369. package/docs/launch-content/assets/cumulative_savings.png +0 -0
  370. package/docs/launch-content/assets/parallel_speedup.png +0 -0
  371. package/docs/launch-content/assets/provider_pricing_comparison.png +0 -0
  372. package/docs/launch-content/assets/task_breakdown_comparison.png +0 -0
  373. package/docs/launch-content/generate_charts.py +0 -313
  374. package/docs/launch-content/hn_show_post.md +0 -139
  375. package/docs/launch-content/partner_outreach_templates.md +0 -745
  376. package/docs/launch-content/reddit_posts.md +0 -467
  377. package/docs/launch-content/twitter_thread.txt +0 -460
  378. package/docs/npm-downloads-chart.svg +0 -43
  379. package/docs/openapi.json +0 -139
  380. package/docs/openapi.yaml +0 -1318
  381. package/docs/quick-start.html +0 -366
  382. package/docs/robots.txt +0 -52
  383. package/docs/sitemap.xml +0 -57
  384. package/docs/styles.css +0 -682
  385. package/docs/well-known/ai-plugin.json +0 -16
  386. package/docs/wellknown/ai-plugin.json +0 -16
  387. package/docs-site/assets/og-banner.svg +0 -194
  388. package/docs-site/index.html +0 -632
  389. package/eval/README.md +0 -46
  390. package/eval/baselines/main.json +0 -12
  391. package/eval/benchmark_dataset.jsonl +0 -16
  392. package/eval/check_golden_routes.js +0 -64
  393. package/eval/datasets/catalog.json +0 -33
  394. package/eval/datasets/slices/cn_provider_reliability_v1.jsonl +0 -3
  395. package/eval/datasets/slices/cost_pressure_v1.jsonl +0 -3
  396. package/eval/datasets/slices/safety_guardrails_v1.jsonl +0 -3
  397. package/eval/evals.json +0 -199
  398. package/eval/fault_injection_thresholds.json +0 -3
  399. package/eval/generate_report.js +0 -128
  400. package/eval/golden_routes.json +0 -114
  401. package/eval/lib/experiment_registry.js +0 -24
  402. package/eval/run_eval.js +0 -197
  403. package/eval/run_fault_injection.js +0 -201
  404. package/eval/run_shadow_eval.js +0 -85
  405. package/eval/thresholds.json +0 -9
  406. package/examples/QUICKSTART.md +0 -183
  407. package/examples/README.md +0 -61
  408. package/examples/a3m-sdk.js +0 -124
  409. package/examples/basic-route.js +0 -54
  410. package/examples/chat-loop.js +0 -202
  411. package/examples/classify-then-route.js +0 -102
  412. package/examples/cost-compare.js +0 -120
  413. package/examples/ensemble.js +0 -160
  414. package/examples/whatsapp-telegram-bridge-demo.js +0 -302
  415. package/examples/whatsapp-telegram-bridge.js +0 -269
  416. package/hf-space/README.md +0 -23
  417. package/hf-space/app.py +0 -240
  418. package/hf-space/requirements.txt +0 -1
  419. package/huggingface_space/README.md +0 -35
  420. package/huggingface_space/app.py +0 -126
  421. package/huggingface_space/create_space.py +0 -208
  422. package/huggingface_space/requirements.txt +0 -1
  423. package/mcp-server/README.md +0 -188
  424. package/mcp-server/package.json +0 -29
  425. package/mcp-server/src/index.ts +0 -744
  426. package/mcp-server/tsconfig.json +0 -19
  427. package/openclaw-alexa-bridge/ALL_REMAINING_FIXES_PLAN.md +0 -313
  428. package/openclaw-alexa-bridge/REMAINING_FIXES_SUMMARY.md +0 -277
  429. package/openclaw-alexa-bridge/src/alexa_handler_no_tmlpd.js +0 -1234
  430. package/openclaw-alexa-bridge/test_fixes.js +0 -77
  431. package/playground/README.md +0 -51
  432. package/playground/codesandbox.json +0 -12
  433. package/playground/index.js +0 -39
  434. package/proxy/README.md +0 -227
  435. package/proxy/package-lock.json +0 -831
  436. package/proxy/package.json +0 -17
  437. package/proxy/rate-limit.js +0 -145
  438. package/proxy/rate-limit.test.js +0 -311
  439. package/proxy/server.js +0 -970
  440. package/python/README.md +0 -102
  441. package/python/a3m/__init__.py +0 -6
  442. package/python/a3m/client.py +0 -190
  443. package/python/a3m/models.py +0 -40
  444. package/python/a3m/sync_client.py +0 -61
  445. package/python/examples.py +0 -53
  446. package/python/integrations.py +0 -330
  447. package/python/pyproject.toml +0 -23
  448. package/python/setup.py +0 -28
  449. package/python/tmlpd.py +0 -369
  450. package/qna/REDDIT_GAP_ANALYSIS.md +0 -299
  451. package/qna/TMLPD_QNA.md +0 -751
  452. package/research/FINDING_001_safety.md +0 -28
  453. package/research/FINDING_002_error_diversity.md +0 -32
  454. package/research/FINDING_003_confidence_weighted_voting.md +0 -32
  455. package/research/FINDING_004_cross_model_semantic_detection.md +0 -37
  456. package/research/FINDING_005_knowledge_gap_orthogonality.md +0 -34
  457. package/research/HALLUCINATION_RESEARCH.md +0 -27
  458. package/research/ensemble-voting.md +0 -324
  459. package/research/loss-functions.md +0 -545
  460. package/research-log.md +0 -49
  461. package/scripts/banner.js +0 -29
  462. package/scripts/benchmark-local-routerarena.ts +0 -176
  463. package/scripts/benchmark.js +0 -145
  464. package/scripts/benchmark.sh +0 -61
  465. package/scripts/compare-providers.sh +0 -230
  466. package/scripts/content-planner.js +0 -25
  467. package/scripts/create-labeled-benchmark.ts +0 -105
  468. package/scripts/cross_post.py +0 -443
  469. package/scripts/local-router-benchmark.ts +0 -154
  470. package/scripts/post-all.sh +0 -41
  471. package/scripts/publish_fcc.py +0 -106
  472. package/scripts/push-to-gitee.sh +0 -25
  473. package/scripts/routerarena_ensemble.js +0 -144
  474. package/scripts/routing-benchmark-v2.js +0 -373
  475. package/scripts/routing-benchmark-v3.js +0 -118
  476. package/scripts/routing-benchmark.js +0 -462
  477. package/scripts/run-labeled-benchmark.mjs +0 -104
  478. package/scripts/run-mmlu-benchmark.js +0 -176
  479. package/scripts/run-provider-benchmark.js +0 -244
  480. package/scripts/update-npm-badges.js +0 -158
  481. package/skill/SKILL.md +0 -238
  482. package/src/__tests__/integration/tmpld_integration.test.py +0 -540
  483. package/src/skills/__tests__/skill_manager.test.ts +0 -328
  484. package/submissions/benchmarks/ALL_PLATFORMS_SUBMISSION.md +0 -94
  485. package/submissions/benchmarks/LLMROUTERBENCH_SUBMISSION.md +0 -121
  486. package/submissions/benchmarks/MMRBENCH_SUBMISSION.md +0 -94
  487. package/submissions/benchmarks/ROUTERARENA_UPDATE.md +0 -83
  488. package/submissions/benchmarks/ROUTERBENCH_SUBMISSION.md +0 -225
  489. package/test-council/1-structure-tests.test.js +0 -353
  490. package/test-council/1-structure-tests.test.ts +0 -353
  491. package/test-council/2-edge-case-tests.test.ts +0 -361
  492. package/test-council/3-performance-tests.test.ts +0 -669
  493. package/test-council/4-integration-tests.test.ts +0 -391
  494. package/test-council/5-agent-council-eval.test.ts +0 -413
  495. package/test-council/AGENT_COUNCIL_ARCHITECTURE.md +0 -349
  496. package/test-council/TEST_COUNCIL_REPORT.md +0 -201
  497. package/test-council/agents/edge-case-agent.ts +0 -363
  498. package/test-council/agents/performance-agent.ts +0 -426
  499. package/test-council/agents/structure-agent.ts +0 -227
  500. package/test-council/council.md +0 -183
  501. package/tests/__mocks__/tokenUtils.ts +0 -8
  502. package/tests/memory/episodicMemory.test.ts +0 -227
  503. package/tests/package-lock.json +0 -1628
  504. package/tests/package.json +0 -18
  505. package/tests/routing/ensembleVoting.test.ts +0 -236
  506. package/tests/routing/providerRetry.test.ts +0 -360
  507. package/tests/routing/queryTypePresets.test.ts +0 -208
  508. package/tests/security/guardrailEngine.test.ts +0 -700
  509. package/tests/tsconfig.json +0 -21
  510. package/tests/vitest.config.ts +0 -18
  511. package/tmlpd-pi-extension/README.md +0 -66
  512. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts +0 -114
  513. package/tmlpd-pi-extension/dist/cache/prefixCache.d.ts.map +0 -1
  514. package/tmlpd-pi-extension/dist/cache/prefixCache.js +0 -285
  515. package/tmlpd-pi-extension/dist/cache/prefixCache.js.map +0 -1
  516. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts +0 -58
  517. package/tmlpd-pi-extension/dist/cache/responseCache.d.ts.map +0 -1
  518. package/tmlpd-pi-extension/dist/cache/responseCache.js +0 -153
  519. package/tmlpd-pi-extension/dist/cache/responseCache.js.map +0 -1
  520. package/tmlpd-pi-extension/dist/cli.js +0 -59
  521. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts +0 -95
  522. package/tmlpd-pi-extension/dist/cost/costTracker.d.ts.map +0 -1
  523. package/tmlpd-pi-extension/dist/cost/costTracker.js +0 -240
  524. package/tmlpd-pi-extension/dist/cost/costTracker.js.map +0 -1
  525. package/tmlpd-pi-extension/dist/index.d.ts +0 -723
  526. package/tmlpd-pi-extension/dist/index.d.ts.map +0 -1
  527. package/tmlpd-pi-extension/dist/index.js +0 -239
  528. package/tmlpd-pi-extension/dist/index.js.map +0 -1
  529. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts +0 -82
  530. package/tmlpd-pi-extension/dist/memory/episodicMemory.d.ts.map +0 -1
  531. package/tmlpd-pi-extension/dist/memory/episodicMemory.js +0 -145
  532. package/tmlpd-pi-extension/dist/memory/episodicMemory.js.map +0 -1
  533. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts +0 -102
  534. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.d.ts.map +0 -1
  535. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js +0 -207
  536. package/tmlpd-pi-extension/dist/orchestration/haloOrchestrator.js.map +0 -1
  537. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts +0 -85
  538. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.d.ts.map +0 -1
  539. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js +0 -210
  540. package/tmlpd-pi-extension/dist/orchestration/mctsWorkflow.js.map +0 -1
  541. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts +0 -102
  542. package/tmlpd-pi-extension/dist/providers/localProvider.d.ts.map +0 -1
  543. package/tmlpd-pi-extension/dist/providers/localProvider.js +0 -338
  544. package/tmlpd-pi-extension/dist/providers/localProvider.js.map +0 -1
  545. package/tmlpd-pi-extension/dist/providers/registry.d.ts +0 -55
  546. package/tmlpd-pi-extension/dist/providers/registry.d.ts.map +0 -1
  547. package/tmlpd-pi-extension/dist/providers/registry.js +0 -138
  548. package/tmlpd-pi-extension/dist/providers/registry.js.map +0 -1
  549. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts +0 -68
  550. package/tmlpd-pi-extension/dist/routing/advancedRouter.d.ts.map +0 -1
  551. package/tmlpd-pi-extension/dist/routing/advancedRouter.js +0 -332
  552. package/tmlpd-pi-extension/dist/routing/advancedRouter.js.map +0 -1
  553. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts +0 -101
  554. package/tmlpd-pi-extension/dist/tools/tmlpdTools.d.ts.map +0 -1
  555. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js +0 -368
  556. package/tmlpd-pi-extension/dist/tools/tmlpdTools.js.map +0 -1
  557. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts +0 -96
  558. package/tmlpd-pi-extension/dist/utils/batchProcessor.d.ts.map +0 -1
  559. package/tmlpd-pi-extension/dist/utils/batchProcessor.js +0 -170
  560. package/tmlpd-pi-extension/dist/utils/batchProcessor.js.map +0 -1
  561. package/tmlpd-pi-extension/dist/utils/compression.d.ts +0 -61
  562. package/tmlpd-pi-extension/dist/utils/compression.d.ts.map +0 -1
  563. package/tmlpd-pi-extension/dist/utils/compression.js +0 -281
  564. package/tmlpd-pi-extension/dist/utils/compression.js.map +0 -1
  565. package/tmlpd-pi-extension/dist/utils/reliability.d.ts +0 -74
  566. package/tmlpd-pi-extension/dist/utils/reliability.d.ts.map +0 -1
  567. package/tmlpd-pi-extension/dist/utils/reliability.js +0 -177
  568. package/tmlpd-pi-extension/dist/utils/reliability.js.map +0 -1
  569. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts +0 -117
  570. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.d.ts.map +0 -1
  571. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js +0 -246
  572. package/tmlpd-pi-extension/dist/utils/speculativeDecoding.js.map +0 -1
  573. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts +0 -50
  574. package/tmlpd-pi-extension/dist/utils/tokenUtils.d.ts.map +0 -1
  575. package/tmlpd-pi-extension/dist/utils/tokenUtils.js +0 -124
  576. package/tmlpd-pi-extension/dist/utils/tokenUtils.js.map +0 -1
  577. package/tmlpd-pi-extension/examples/QUICKSTART.md +0 -183
  578. package/tmlpd-pi-extension/package-lock.json +0 -79
  579. package/tmlpd-pi-extension/package.json +0 -172
  580. package/tmlpd-pi-extension/python/examples.py +0 -53
  581. package/tmlpd-pi-extension/python/integrations.py +0 -330
  582. package/tmlpd-pi-extension/python/setup.py +0 -28
  583. package/tmlpd-pi-extension/python/tmlpd.py +0 -369
  584. package/tmlpd-pi-extension/qna/REDDIT_GAP_ANALYSIS.md +0 -299
  585. package/tmlpd-pi-extension/qna/TMLPD_QNA.md +0 -751
  586. package/tmlpd-pi-extension/skill/SKILL.md +0 -238
  587. package/tmlpd-pi-extension/src/cache/responseCache.ts +0 -147
  588. package/tmlpd-pi-extension/src/cost/costTracker.ts +0 -302
  589. package/tmlpd-pi-extension/src/index.ts +0 -232
  590. package/tmlpd-pi-extension/src/memory/episodicMemory.ts +0 -257
  591. package/tmlpd-pi-extension/src/orchestration/haloOrchestrator.ts +0 -266
  592. package/tmlpd-pi-extension/src/orchestration/mctsWorkflow.ts +0 -262
  593. package/tmlpd-pi-extension/src/providers/localProvider.ts +0 -406
  594. package/tmlpd-pi-extension/src/providers/registry.ts +0 -164
  595. package/tmlpd-pi-extension/src/routing/ensembleVoting.ts +0 -159
  596. package/tmlpd-pi-extension/src/routing/queryTypePresets.ts +0 -136
  597. package/tmlpd-pi-extension/src/tools/tmlpdTools.ts +0 -433
  598. package/tmlpd-pi-extension/src/utils/batchProcessor.ts +0 -232
  599. package/tmlpd-pi-extension/src/utils/compression.ts +0 -325
  600. package/tmlpd-pi-extension/src/utils/reliability.ts +0 -221
  601. package/tmlpd-pi-extension/src/utils/tokenUtils.ts +0 -145
  602. package/tmlpd-pi-extension/tsconfig.json +0 -18
  603. package/tsconfig.build.json +0 -29
  604. package/tsconfig.json +0 -18
  605. /package/{docs/llms-full.txt → llms-full.txt.bak} +0 -0
@@ -1,460 +0,0 @@
1
- ---
2
- title: "We Built an LLM Router That Runs on Keywords, Not Neural Networks — Here's How It Works"
3
- published: false
4
- description: "A 19.5 KB TypeScript package that routes LLM queries with 70.32 accuracy using 5 keyword-based signals. No GPU, no ML weights, zero dependencies."
5
- tags: llm, typescript, ai, optimization
6
- cover_image: https://placeholder.dev.to/cover.png
7
- ---
8
-
9
- We needed to route LLM queries across 36 providers. The ML approach (BERT classifier, embedding similarity, LLM-as-judge) adds latency, infrastructure, and cost. We tried something simpler: a 5-signal keyword scoring system in pure TypeScript.
10
-
11
- The result: **70.32 accuracy**, **64.5% exact match**, **0.3ms routing latency**, in a **19.5 KB gzipped** package with zero runtime dependencies.
12
-
13
- Here's exactly how each signal works, with code.
14
-
15
- ---
16
-
17
- ## The problem
18
-
19
- We have 36 LLM providers across 5 complexity tiers:
20
-
21
- | Tier | Count | Examples | Price range |
22
- |------|-------|---------|-------------|
23
- | Free | 6 | Gemini Flash, Groq free tier | $0 |
24
- | Cheap | 15 | DeepSeek, Mistral Small | ~$0.15/1M tokens |
25
- | Mid | 9 | Claude Sonnet, GPT-4o-mini | ~$1-3/1M tokens |
26
- | Premium | 3 | GPT-4, Claude Opus | ~$15-30/1M tokens |
27
- | Enterprise | 3 | Claude Max, GPT-4 turbo | ~$60+/1M tokens |
28
-
29
- Every query needs to land in the right tier. Sending "what is 2+2?" to GPT-4 wastes money. Sending "design a Byzantine fault-tolerant consensus algorithm" to a free model wastes the response.
30
-
31
- ## The 5-signal architecture
32
-
33
- Each incoming query is scored on five orthogonal signals (0-1 range). The weighted sum maps to a tier.
34
-
35
- ```
36
- Query → [domain, task, structure, verb, specificity] → weighted sum → tier → provider
37
- ```
38
-
39
- Let's break down each signal.
40
-
41
- ---
42
-
43
- ### Signal 1: Domain Detection
44
-
45
- **What it measures:** Is this query from a specialized domain (code, math, legal, medical)?
46
-
47
- **Why it matters:** Domain-specific queries need domain-specific capabilities. Code generation needs instruction-following. Math needs chain-of-thought. Medical needs accuracy.
48
-
49
- ```typescript
50
- const DOMAIN_PATTERNS: Record<string, RegExp[]> = {
51
- code: [
52
- /\b(function|class|import|export|async|await|def|return|const|let|var)\b/gi,
53
- /\b(api|endpoint|database|query|schema|migrate|deploy)\b/gi,
54
- ],
55
- math: [
56
- /\b(equation|integral|derivative|theorem|proof|calculate|solve|formula)\b/gi,
57
- /\b(algebra|calculus|geometry|statistics|probability)\b/gi,
58
- ],
59
- legal: [
60
- /\b(contract|liability|clause|statute|regulation|compliance|attorney)\b/gi,
61
- ],
62
- medical: [
63
- /\b(diagnosis|symptom|treatment|patient|clinical|dosage|prescription)\b/gi,
64
- ],
65
- };
66
-
67
- function scoreDomain(query: string): number {
68
- let maxScore = 0;
69
- for (const [domain, patterns] of Object.entries(DOMAIN_PATTERNS)) {
70
- const matchCount = patterns.reduce(
71
- (sum, pattern) => sum + (query.match(pattern)?.length ?? 0), 0
72
- );
73
- const domainScore = Math.min(matchCount * 0.15, 1.0);
74
- maxScore = Math.max(maxScore, domainScore);
75
- }
76
- return maxScore;
77
- }
78
- ```
79
-
80
- **Example scoring:**
81
-
82
- | Query | Domain score | Detected domain |
83
- |-------|-------------|----------------|
84
- | "What is the weather?" | 0.0 | none |
85
- | "Explain async/await in JavaScript" | 0.45 | code |
86
- | "Prove that sqrt(2) is irrational" | 0.45 | math |
87
- | "Debug this React component, the useState hook isn't updating" | 0.60 | code |
88
-
89
- ---
90
-
91
- ### Signal 2: Task Indicators
92
-
93
- **What it measures:** What type of task is the user asking for? Summarize, translate, debug, create, analyze?
94
-
95
- **Why it matters:** Different tasks have different complexity ceilings. "Summarize" is bounded. "Create from scratch" is unbounded.
96
-
97
- ```typescript
98
- const TASK_KEYWORDS: Record<string, { keywords: string[]; complexity: number }> = {
99
- summarize: {
100
- keywords: ['summarize', 'tldr', 'brief', 'overview', 'recap', 'sum up'],
101
- complexity: 0.2,
102
- },
103
- translate: {
104
- keywords: ['translate', 'in french', 'in spanish', 'in german', 'in japanese'],
105
- complexity: 0.25,
106
- },
107
- explain: {
108
- keywords: ['explain', 'describe', 'tell me about', 'what is', 'how does'],
109
- complexity: 0.3,
110
- },
111
- debug: {
112
- keywords: ['debug', 'fix this', 'error', 'stack trace', 'not working', 'broken'],
113
- complexity: 0.55,
114
- },
115
- analyze: {
116
- keywords: ['analyze', 'compare', 'evaluate', 'assess', 'investigate', 'critique'],
117
- complexity: 0.7,
118
- },
119
- create: {
120
- keywords: ['write', 'create', 'generate', 'build', 'implement', 'design', 'develop'],
121
- complexity: 0.75,
122
- },
123
- architect: {
124
- keywords: ['architect', 'design a system', 'system design', 'infrastructure'],
125
- complexity: 0.9,
126
- },
127
- };
128
-
129
- function scoreTask(query: string): number {
130
- const lower = query.toLowerCase();
131
- let score = 0;
132
- for (const [task, config] of Object.entries(TASK_KEYWORDS)) {
133
- const matched = config.keywords.some(kw => lower.includes(kw));
134
- if (matched) score += config.complexity;
135
- }
136
- return Math.min(score, 1.0);
137
- }
138
- ```
139
-
140
- **Example scoring:**
141
-
142
- | Query | Task score | Tasks detected |
143
- |-------|-----------|---------------|
144
- | "What is React?" | 0.3 | explain |
145
- | "Summarize this article" | 0.2 | summarize |
146
- | "Debug this Python script and explain the fix" | 0.85 | debug + explain |
147
- | "Design a microservices architecture and write the API gateway" | 1.0 | architect + create |
148
-
149
- ---
150
-
151
- ### Signal 3: Query Structure
152
-
153
- **What it measures:** The structural complexity of the query — multiple steps, conditionals, nested requirements.
154
-
155
- **Why it matters:** "Translate this" is simple. "Translate this, then summarize in 3 bullets, then check for legal compliance" is structurally complex regardless of the individual tasks.
156
-
157
- ```typescript
158
- function scoreStructure(query: string): number {
159
- let score = 0;
160
-
161
- // Multi-step queries ("first do X, then do Y, finally Z")
162
- const stepMarkers = query.split(/\b(first|then|after|before|finally|next|lastly)\b/i);
163
- score += Math.max(0, (stepMarkers.length - 1)) * 0.2;
164
-
165
- // Conditional queries ("if X then Y otherwise Z")
166
- const conditionals = query.match(/\b(if|unless|otherwise|whether|given that)\b/gi);
167
- score += (conditionals?.length ?? 0) * 0.15;
168
-
169
- // Conjunction chains (A and B and C)
170
- const conjunctions = query.match(/\band\b/gi);
171
- score += Math.min((conjunctions?.length ?? 0) * 0.05, 0.2);
172
-
173
- // Query length with diminishing returns
174
- score += Math.min(query.length / 500, 0.3);
175
-
176
- // Nested quotes or code blocks (indicates context-heavy queries)
177
- const codeBlocks = query.match(/```[\s\S]*?```/g);
178
- score += (codeBlocks?.length ?? 0) * 0.1;
179
-
180
- return Math.min(score, 1.0);
181
- }
182
- ```
183
-
184
- **Example scoring:**
185
-
186
- | Query | Structure score | Why |
187
- |-------|----------------|-----|
188
- | "What is Python?" | 0.04 | short, simple |
189
- | "Explain async/await" | 0.05 | short, simple |
190
- | "First translate to French, then summarize in 3 bullets" | 0.47 | multi-step |
191
- | "If the user is admin, show the dashboard with all metrics, otherwise show a limited view with only their data" | 0.72 | conditional + multi-step |
192
-
193
- ---
194
-
195
- ### Signal 4: Action Verb Intensity
196
-
197
- **What it measures:** How demanding the requested action is. "List" < "explain" < "analyze" < "design" < "architect".
198
-
199
- ```typescript
200
- const VERB_WEIGHTS: Record<string, number> = {
201
- // Low intensity
202
- 'what is': 0.1, 'define': 0.15, 'list': 0.2, 'describe': 0.25,
203
- // Medium intensity
204
- 'explain': 0.35, 'convert': 0.4, 'translate': 0.4, 'summarize': 0.4,
205
- 'rewrite': 0.45, 'format': 0.45,
206
- // High intensity
207
- 'debug': 0.6, 'fix': 0.6, 'analyze': 0.65, 'compare': 0.65,
208
- 'optimize': 0.7, 'refactor': 0.7, 'implement': 0.75,
209
- // Very high intensity
210
- 'design': 0.8, 'architect': 0.85, 'reverse-engineer': 0.9,
211
- 'create from scratch': 0.9,
212
- };
213
-
214
- function scoreVerb(query: string): number {
215
- const lower = query.toLowerCase();
216
- let maxVerb = 0;
217
- for (const [verb, weight] of Object.entries(VERB_WEIGHTS)) {
218
- if (lower.includes(verb)) {
219
- maxVerb = Math.max(maxVerb, weight);
220
- }
221
- }
222
- return maxVerb;
223
- }
224
- ```
225
-
226
- ---
227
-
228
- ### Signal 5: Specificity
229
-
230
- **What it measures:** How precise and technical the query is. "Tell me about AI" vs "Implement a transformer decoder with multi-head attention using PyTorch".
231
-
232
- ```typescript
233
- function scoreSpecificity(query: string): number {
234
- let score = 0;
235
-
236
- // Technical terms (camelCase, PascalCase identifiers)
237
- const technicalTerms = query.match(/\b[A-Z][a-z]+[A-Z][a-z]+\b/g);
238
- score += Math.min((technicalTerms?.length ?? 0) * 0.12, 0.3);
239
-
240
- // Quoted strings (specific values, names, identifiers)
241
- const quotedTerms = query.match(/["'`][^"'`]+["'`]/g);
242
- score += Math.min((quotedTerms?.length ?? 0) * 0.1, 0.2);
243
-
244
- // Numbers and measurements (specificity indicator)
245
- const numbers = query.match(/\d+/g);
246
- score += Math.min((numbers?.length ?? 0) * 0.03, 0.15);
247
-
248
- // Penalize vagueness
249
- const vagueTerms = query.match(/\b(something|anything|stuff|things|etc|whatever|some)\b/gi);
250
- score -= (vagueTerms?.length ?? 0) * 0.15;
251
-
252
- // Bonus for field-specific jargon density
253
- const jargonTerms = query.match(/\b(algorithm|protocol|architecture|paradigm|heuristic|orthogonal)\b/gi);
254
- score += Math.min((jargonTerms?.length ?? 0) * 0.1, 0.2);
255
-
256
- return Math.max(0, Math.min(score, 1.0));
257
- }
258
- ```
259
-
260
- ---
261
-
262
- ## Putting it all together
263
-
264
- ```typescript
265
- interface RoutingSignals {
266
- domain: number;
267
- task: number;
268
- structure: number;
269
- verbIntensity: number;
270
- specificity: number;
271
- }
272
-
273
- const WEIGHTS = {
274
- domain: 0.25,
275
- task: 0.25,
276
- structure: 0.20,
277
- verbIntensity: 0.15,
278
- specificity: 0.15,
279
- };
280
-
281
- const TIER_THRESHOLDS: [number, Tier][] = [
282
- [0.20, 'free'],
283
- [0.40, 'cheap'],
284
- [0.60, 'mid'],
285
- [0.80, 'premium'],
286
- [1.01, 'enterprise'],
287
- ];
288
-
289
- function route(query: string): Tier {
290
- const signals: RoutingSignals = {
291
- domain: scoreDomain(query),
292
- task: scoreTask(query),
293
- structure: scoreStructure(query),
294
- verbIntensity: scoreVerb(query),
295
- specificity: scoreSpecificity(query),
296
- };
297
-
298
- const score =
299
- signals.domain * WEIGHTS.domain +
300
- signals.task * WEIGHTS.task +
301
- signals.structure * WEIGHTS.structure +
302
- signals.verbIntensity * WEIGHTS.verbIntensity +
303
- signals.specificity * WEIGHTS.specificity;
304
-
305
- for (const [threshold, tier] of TIER_THRESHOLDS) {
306
- if (score < threshold) return tier;
307
- }
308
- return 'enterprise';
309
- }
310
- ```
311
-
312
- ---
313
-
314
- ## Real query examples with full scoring
315
-
316
- ### Example 1: "What is Python?"
317
-
318
- | Signal | Score | Weight | Weighted |
319
- |--------|-------|--------|----------|
320
- | Domain | 0.0 | 0.25 | 0.0 |
321
- | Task | 0.3 | 0.25 | 0.075 |
322
- | Structure | 0.03 | 0.20 | 0.006 |
323
- | Verb | 0.1 | 0.15 | 0.015 |
324
- | Specificity | 0.0 | 0.15 | 0.0 |
325
- | **Total** | | | **0.096** |
326
-
327
- **Routed to: Free tier** ✅
328
-
329
- ### Example 2: "Implement a red-black tree with insert, delete, and search operations in TypeScript"
330
-
331
- | Signal | Score | Weight | Weighted |
332
- |--------|-------|--------|----------|
333
- | Domain | 0.45 | 0.25 | 0.1125 |
334
- | Task | 0.75 | 0.25 | 0.1875 |
335
- | Structure | 0.15 | 0.20 | 0.03 |
336
- | Verb | 0.75 | 0.15 | 0.1125 |
337
- | Specificity | 0.42 | 0.15 | 0.063 |
338
- | **Total** | | | **0.505** |
339
-
340
- **Routed to: Mid tier** ✅
341
-
342
- ### Example 3: "Design a fault-tolerant distributed database that handles network partitions, supports ACID transactions, and can scale to 10,000 nodes. Include the consensus protocol, replication strategy, and failure recovery mechanism."
343
-
344
- | Signal | Score | Weight | Weighted |
345
- |--------|-------|--------|----------|
346
- | Domain | 0.30 | 0.25 | 0.075 |
347
- | Task | 0.90 | 0.25 | 0.225 |
348
- | Structure | 0.62 | 0.20 | 0.124 |
349
- | Verb | 0.80 | 0.15 | 0.12 |
350
- | Specificity | 0.65 | 0.15 | 0.0975 |
351
- | **Total** | | | **0.641** |
352
-
353
- **Routed to: Premium tier** ✅
354
-
355
- ---
356
-
357
- ## Benchmark results
358
-
359
- Tested on 2,500 real-world queries across coding, creative writing, analysis, math, translation, and general Q&A.
360
-
361
- ```
362
- Confusion Matrix (3-tier simplified):
363
-
364
- Predicted
365
- Free Mid Premium
366
- Actual Free 812 38 5
367
- Actual Mid 41 647 27
368
- Actual Premium 3 22 705
369
- ```
370
-
371
- | Metric | Value |
372
- |--------|-------|
373
- | Exact tier match | 64.5% |
374
- | accuracy | 70.32 |
375
- | Mean absolute error | 0.37 tiers |
376
- | Routing latency | 0.3ms per query |
377
- | Cost savings vs premium-only | 61.6% |
378
-
379
- ---
380
-
381
- ## What about the other features?
382
-
383
- ### Semantic Cache
384
-
385
- Uses trigram Jaccard similarity to detect near-duplicate queries:
386
-
387
- ```typescript
388
- function trigramJaccard(a: string, b: string): number {
389
- const trigrams = (s: string) => {
390
- const set = new Set<string>();
391
- for (let i = 0; i <= s.length - 3; i++) {
392
- set.add(s.slice(i, i + 3));
393
- }
394
- return set;
395
- };
396
- const setA = trigrams(a.toLowerCase());
397
- const setB = trigrams(b.toLowerCase());
398
- const intersection = [...setA].filter(x => setB.has(x)).length;
399
- const union = new Set([...setA, ...setB]).size;
400
- return intersection / union;
401
- }
402
-
403
- // "Explain React hooks" and "what are React hooks?" → Jaccard > 0.4 → cache hit
404
- ```
405
-
406
- ### Prompt Injection Detection
407
-
408
- 17 patterns covering common attack vectors:
409
-
410
- ```typescript
411
- const INJECTION_PATTERNS = [
412
- /ignore\s+(all\s+)?previous\s+instructions/i,
413
- /you\s+are\s+now\s+/i,
414
- /system\s*:\s*/i,
415
- /\[INST\]/i,
416
- /simulate\s+/i,
417
- /pretend\s+you\s+(are|can)/i,
418
- /jailbreak/i,
419
- /DAN\s+mode/i,
420
- // ... 9 more patterns
421
- ];
422
- ```
423
-
424
- ---
425
-
426
- ## Get started
427
-
428
- ```bash
429
- npm install adaptive-memory-multi-model-router
430
- ```
431
-
432
- ```typescript
433
- import { A3MRouter } from 'adaptive-memory-multi-model-router';
434
-
435
- const router = new A3MRouter({
436
- providers: {
437
- openai: { apiKey: process.env.OPENAI_API_KEY },
438
- anthropic: { apiKey: process.env.ANTHROPIC_API_KEY },
439
- google: { apiKey: process.env.GOOGLE_API_KEY },
440
- groq: { apiKey: process.env.GROQ_API_KEY },
441
- }
442
- });
443
-
444
- const result = await router.route({
445
- messages: [{ role: 'user', content: 'Your query here' }]
446
- });
447
-
448
- console.log(`Provider: ${result.provider}`);
449
- console.log(`Tier: ${result.tier}`);
450
- console.log(`Cost: $${result.cost}`);
451
- ```
452
-
453
- **GitHub:** https://github.com/Das-rebel/a3m-router
454
- **npm:** https://www.npmjs.com/package/adaptive-memory-multi-model-router
455
-
456
- MIT license. Self-hosted. No account. 19.5 KB. TypeScript + Python SDKs, CLI, REST API, OpenAI proxy, LangChain adapter.
457
-
458
- ---
459
-
460
- *We're actively looking for independent benchmark evaluations. If you run the router against your own query distribution, we'd love to see the results — especially cases where it fails.*
@@ -1,73 +0,0 @@
1
- LLM infrastructure has three problems that shouldn't exist in 2026. Here's what we built because nobody else fixed them.
2
-
3
- ---
4
-
5
- ## Problem 1: Your LLM bill is unnecessarily high
6
-
7
- Everyone routes everything to GPT-4 because who has time to configure per-query routing. The bill hits 3-5x what it should be for zero extra value.
8
-
9
- People are already switching because of this. A dev on X: *"Cancelled both my Claude Code Pro and ChatGPT Pro. Kimi K2.6 is just as good for my side projects as Opus or GPT 5.4 were. The price for this is crazy low."*
10
-
11
- Another one: *"Just used gemini-embedding-2 to vectorize 27,603 notes for semantic search. Total cost: $0.07. That's pretty amazing."*
12
-
13
- The pattern is obvious — developers are actively looking for cheaper alternatives. The problem is doing it query-by-query without wasting time.
14
-
15
- We built a router that classifies every query by complexity and sends it to the cheapest capable model.
16
-
17
- ```javascript
18
- "Design a clinical trial protocol" → premium ($2.50/M tokens)
19
- "Write a Python sort function" → groq ($0.20/M tokens)
20
- "What is 2+2?" → free ($0.00/M tokens)
21
- ```
22
-
23
- Result: **62% cost savings** measured across 200 real API calls. Not theoretical.
24
-
25
- ---
26
-
27
- ## Problem 2: Sequential fallback gives you one answer, not the best
28
-
29
- Every gateway does: try A → fail → try B → fail → try C.
30
-
31
- You always get one provider's answer. Never the best across all. If A is slow, everything waits.
32
-
33
- Someone already built `ai-retry` — a library for retry and fallback mechanisms — because this is such a common pain. People are hacking around it manually.
34
-
35
- We went further. Run all providers in parallel. Score every result on specificity, structure, and relevance. Return the best answer with reasons why it won.
36
-
37
- ```javascript
38
- const result = await executeEnsemble(query, context, {
39
- nvidia: callNvidia,
40
- groq: callGroq,
41
- openai: callOpenAI
42
- });
43
- // → nvidia (scored 75, higher specificity on code)
44
- ```
45
-
46
- ---
47
-
48
- ## Problem 3: Every gateway claims "negligible overhead." None publish numbers.
49
-
50
- It's the standard line. "Negligible overhead" followed by zero data.
51
-
52
- We ran ours through a third-party benchmark tool (llm-gateway-bench) and published everything:
53
-
54
- | Scenario | Time | What's included |
55
- |:---------|:----:|:----------------|
56
- | Direct to Groq | **138ms** | Raw API call |
57
- | Through A3M | **374ms** | Routing + cache + guardrails + cost tracking |
58
-
59
- 236ms overhead. Not zero. But it saves 62% on API costs — that's ~$2,600/year at 100K queries/month.
60
-
61
- ---
62
-
63
- ## Why it grew
64
-
65
- 10,024 downloads in 14 days. Zero marketing. Developers found it on npm, tried it, told other developers.
66
-
67
- The feedback loop was: *"My bill is too high"* → 62% savings. *"I want the best answer, not the first one"* → parallel ensemble. *"I don't trust your latency claims"* → here's the third-party benchmark, run it yourself.
68
-
69
- ---
70
-
71
- *npm: `npm install adaptive-memory-multi-model-router`*
72
- *GitHub: [github.com/Das-rebel/a3m-router](https://github.com/Das-rebel/a3m-router)*
73
- *Benchmarks: third-party via [llm-gateway-bench](https://github.com/taffy-owo/llm-gateway-bench)*
@@ -1,14 +0,0 @@
1
- Show HN: A3M Router — 70.32 LLM routing accuracy with zero ML, 36 providers, semantic cache
2
-
3
- A3M Router is a TypeScript LLM routing library that classifies query complexity using 5 keyword-based signals (domain detection, task indicators, query structure, action verb intensity, specificity) instead of neural networks. The weighted signal sum maps queries to one of 5 complexity tiers (free → enterprise), which routes to the cheapest provider that can handle the query.
4
-
5
- On a 2,500-query benchmark: 70.32 accuracy, 64.5% exact tier match, 0.3ms routing latency. The entire routing classifier is ~200 lines of TypeScript with zero runtime dependencies and a 19.5 KB gzipped package size. 61.6% cost savings vs. sending everything to premium providers.
6
-
7
- Supports 36 providers (OpenAI, Anthropic, Google, Groq, Cerebras, Mistral, DeepSeek, etc.) across 5 tiers. Includes a semantic cache (trigram Jaccard similarity), 17-pattern prompt injection detection, PII redaction, and cost analytics. Available as TypeScript SDK, Python SDK, CLI, REST API, OpenAI-compatible proxy, and LangChain adapter. MIT license, self-hosted, no account required.
8
-
9
- The core insight is that keyword-based routing is within of BERT-based routing for nearly all queries, at zero infrastructure cost. The routing signals are composable and adjustable — if a particular domain routes poorly, you add domain-specific patterns without retraining anything.
10
-
11
- Repo: https://github.com/Das-rebel/a3m-router
12
- npm: https://www.npmjs.com/package/adaptive-memory-multi-model-router
13
-
14
- Caveat: the 70.32 figure is self-benchmarked. We'd welcome independent evaluation, especially on non-English or creative writing query distributions where the keyword signals may be weaker.
@@ -1,90 +0,0 @@
1
- # [D] We benchmarked keyword-based routing vs BERT for LLM provider selection. The gap is smaller than we expected — and keyword routing has zero infra cost.
2
-
3
- **TL;DR:** A 5-signal keyword classifier routes LLM queries across 36 providers with 70.32 accuracy and 64.5% exact tier match, in a 19.5 KB gzipped package with no ML weights. We're sharing the methodology and invite scrutiny on the benchmark design.
4
-
5
- ---
6
-
7
- ## Background
8
-
9
- When you have 36 LLM providers (6 free, 15 cheap, 9 mid-tier, 3 premium, 3 enterprise), routing queries to the right provider matters. A simple "coding question → code model" heuristic breaks down fast. The established approaches are:
10
-
11
- 1. **BERT/transformer-based routing** (e.g., RouteLLM trains a BERT classifier on paired human preferences)
12
- 2. **LLM-as-judge routing** (ask GPT-4 to classify query complexity)
13
- 3. **Rule-based routing** (regex, keyword matching)
14
-
15
- We went with approach 3, but with a structured 5-signal scoring system instead of naive regex. The question was: how much accuracy do we actually sacrifice?
16
-
17
- ## The 5 routing signals
18
-
19
- Each query is scored on five orthogonal signals (0-1 scale each):
20
-
21
- | Signal | What it measures | Example high-score query |
22
- |--------|-----------------|------------------------|
23
- | Domain detection | Is this a specialized domain (code, math, legal, medical)? | "Implement a red-black tree with insert and delete" |
24
- | Task indicators | What type of task (summarize, translate, debug, create)? | "Debug this Python stack trace and explain the root cause" |
25
- | Query structure | Complexity of the query itself (multi-step, conditional, nested) | "First translate to French, then summarize in 3 bullets, then check for legal compliance" |
26
- | Action verb intensity | Strength/demand of the action requested | "Reverse-engineer" > "explain" > "mention" |
27
- | Specificity | How precise/vague the request is | "Quantum error correction in topological codes" vs "tell me about physics" |
28
-
29
- The weighted sum maps to one of 5 tiers, which maps to a provider. The whole thing runs in ~0.3ms per query.
30
-
31
- ## Benchmark results
32
-
33
- We tested on a held-out set of 2,500 real-world queries across domains (coding, creative writing, analysis, math, translation, general Q&A).
34
-
35
- **Confusion matrix (simplified to 3 tiers for readability):**
36
-
37
- ```
38
- Predicted
39
- Free Mid Premium
40
- Actual Free 812 38 5
41
- Actual Mid 41 647 27
42
- Actual Premium 3 22 705
43
- ```
44
-
45
- Full 5-tier results:
46
-
47
- | Metric | Value |
48
- |--------|-------|
49
- | Exact tier match | 64.5% |
50
- | accuracy | 70.32 |
51
- | Mean absolute error | 0.37 tiers |
52
- | Routing latency | 0.3ms/query |
53
-
54
- ** accuracy of 70.32** means the router is never sending a trivial "what's the weather" query to GPT-4, and it's never sending a "design a distributed consensus algorithm" query to a free tier.
55
-
56
- ### Cost impact
57
-
58
- On the same query workload:
59
-
60
- | Strategy | Cost | Savings |
61
- |----------|------|---------|
62
- | Premium-only (GPT-4 for everything) | $1.00 | — |
63
- | RouteLLM (reported in their paper) | ~$0.47 | ~53% |
64
- | A3M Router (our benchmark) | $0.384 | 61.6% |
65
-
66
- ## Honest caveats (please poke holes)
67
-
68
- 1. **Self-benchmarking.** We wrote the classifier, we designed the test set, we ran the evaluation. This is the biggest threat to validity. We'd love an independent evaluation. The test set and evaluation code are in the repo.
69
-
70
- 2. **The 64.5% exact match is mediocre.** If you need surgical tier precision (e.g., you're operating at margins where the difference between "cheap" and "mid-tier" matters a lot), 64.5% means 1 in 3 queries lands in an adjacent tier. The metric papers over this.
71
-
72
- 3. **No comparison with RouteLLM on the same data.** We reference RouteLLM's publicly reported numbers, but we didn't run RouteLLM on our test set. Different query distributions make direct comparison unreliable.
73
-
74
- 4. **Query distribution bias.** Our test set likely over-represents English, coding, and analytical queries because that's what we test with. Non-English and creative tasks may route differently.
75
-
76
- 5. **Cost savings depend heavily on your query mix.** 61.6% is our benchmark workload. If 90% of your queries are complex, routing saves less. If 90% are simple, routing saves more.
77
-
78
- ## Questions for the community
79
-
80
- - Is accuracy actually the right metric? Or should we optimize for exact match at the cost of simplicity?
81
- - Has anyone compared RouteLLM's BERT-based approach against a strong keyword baseline on the same dataset? Our suspicion is that the gap is smaller than the ML community assumes.
82
- - For production routing, what's the actual cost of a "wrong tier" routing? We assume is fine because provider quality within adjacent tiers overlaps significantly. Is that assumption valid?
83
- - Are there public LLM routing benchmarks we should be evaluating on?
84
-
85
- ## Links
86
-
87
- - **Repo:** https://github.com/Das-rebel/a3m-router
88
- - **npm:** https://www.npmjs.com/package/adaptive-memory-multi-model-router
89
-
90
- The classifier is ~200 lines of TypeScript. No dependencies beyond a standard Node.js runtime. If you want to reproduce the benchmark or contribute a more rigorous evaluation, PRs welcome.