adaptive-memory-multi-model-router 2.14.59 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.github/ISSUE_TEMPLATE/checklist.md +35 -0
  2. package/.github/workflows/ci.yml +9 -6
  3. package/POPULARITY_BOOSTERS.md +18 -0
  4. package/PR_STATUS_REPORT.md +55 -148
  5. package/README.md +222 -1035
  6. package/assets/chart-accuracy-by-tier.svg +63 -0
  7. package/assets/chart-confusion-matrix.svg +98 -0
  8. package/assets/chart-cost-comparison.svg +66 -0
  9. package/assets/chart-latency-overhead.svg +102 -0
  10. package/assets/chart-routerena-leaderboard.svg +76 -0
  11. package/dist/analytics/costAnalytics.d.ts +1 -0
  12. package/dist/benchmark/comprehensive.d.ts +4 -53
  13. package/dist/benchmark/comprehensive.d.ts.map +1 -0
  14. package/dist/benchmark/comprehensive.js +112 -214
  15. package/dist/benchmark/comprehensive.js.map +1 -1
  16. package/dist/benchmark/reproducible.d.ts +1 -0
  17. package/dist/cache/semanticCache.d.ts +1 -0
  18. package/dist/cli/setupWizard.d.ts +6 -1
  19. package/dist/cli/setupWizard.d.ts.map +1 -1
  20. package/dist/cli/setupWizard.js +6 -9
  21. package/dist/cli/setupWizard.js.map +1 -1
  22. package/dist/cost/budgetEnforcer.d.ts +1 -0
  23. package/dist/cost/costTracker.d.ts +1 -0
  24. package/dist/ensemble/multiRoundDialog.d.ts +1 -0
  25. package/dist/ensemble/multiRoundDialog.d.ts.map +1 -0
  26. package/dist/ensemble/shapleyValue.d.ts +1 -0
  27. package/dist/ensemble/shapleyValue.d.ts.map +1 -0
  28. package/dist/ensemble.d.ts +1 -0
  29. package/dist/index.d.ts +1 -0
  30. package/dist/integrations/langchainAdapter.d.ts +1 -0
  31. package/dist/integrations/oauth.d.ts +1 -0
  32. package/dist/integrations/scienceAdapter.d.ts +1 -0
  33. package/dist/integrations/scienceAdapter.d.ts.map +1 -0
  34. package/dist/memory/autoFetch.d.ts +1 -0
  35. package/dist/memory/hybridMemory.d.ts +1 -0
  36. package/dist/memory/hybridMemory.d.ts.map +1 -0
  37. package/dist/memory/memoryTree.d.ts +1 -0
  38. package/dist/memory/memoryTree.d.ts.map +1 -1
  39. package/dist/memory/obsidianVault.d.ts +1 -0
  40. package/dist/memory/obsidianVault.d.ts.map +1 -1
  41. package/dist/memory/reasoningBank.d.ts +1 -0
  42. package/dist/memory/reasoningBank.d.ts.map +1 -0
  43. package/dist/observability/changeWatch.d.ts +1 -0
  44. package/dist/observability/fatigueDetector.d.ts +1 -0
  45. package/dist/observability/index.d.ts +1 -0
  46. package/dist/observability/metrics.d.ts +1 -0
  47. package/dist/observability/metrics.d.ts.map +1 -1
  48. package/dist/observability/middleware.d.ts +1 -0
  49. package/dist/observability/tracer.d.ts +1 -0
  50. package/dist/observability/tracer.d.ts.map +1 -1
  51. package/dist/observability/types.d.ts +1 -0
  52. package/dist/providers/providerConfig.d.ts +1 -0
  53. package/dist/providers/providerConfig.d.ts.map +1 -1
  54. package/dist/routing/advancedRouter.d.ts +2 -1
  55. package/dist/routing/advancedRouter.d.ts.map +1 -1
  56. package/dist/routing/crossModelValidation.d.ts +1 -0
  57. package/dist/routing/providerHealth.d.ts +1 -0
  58. package/dist/routing/providerHealth.d.ts.map +1 -1
  59. package/dist/routing/providerRetry.d.ts +1 -0
  60. package/dist/sdk.d.ts +1 -0
  61. package/dist/security/guardrails.d.ts +1 -0
  62. package/dist/security/guardrails.d.ts.map +1 -1
  63. package/dist/server/dashboard.d.ts +1 -0
  64. package/dist/server/handlers/chatHandler.d.ts +11 -0
  65. package/dist/server/handlers/chatHandler.d.ts.map +1 -0
  66. package/dist/server/handlers/chatHandler.js +159 -0
  67. package/dist/server/handlers/chatHandler.js.map +1 -0
  68. package/dist/server/handlers/completionsHandler.d.ts +10 -0
  69. package/dist/server/handlers/completionsHandler.d.ts.map +1 -0
  70. package/dist/server/handlers/completionsHandler.js +124 -0
  71. package/dist/server/handlers/completionsHandler.js.map +1 -0
  72. package/dist/server/handlers/embeddingsHandler.d.ts +17 -0
  73. package/dist/server/handlers/embeddingsHandler.d.ts.map +1 -0
  74. package/dist/server/handlers/embeddingsHandler.js +235 -0
  75. package/dist/server/handlers/embeddingsHandler.js.map +1 -0
  76. package/dist/server/handlers/healthHandler.d.ts +10 -0
  77. package/dist/server/handlers/healthHandler.d.ts.map +1 -0
  78. package/dist/server/handlers/healthHandler.js +49 -0
  79. package/dist/server/handlers/healthHandler.js.map +1 -0
  80. package/dist/server/handlers/metricsHandler.d.ts +11 -0
  81. package/dist/server/handlers/metricsHandler.d.ts.map +1 -0
  82. package/dist/server/handlers/metricsHandler.js +24 -0
  83. package/dist/server/handlers/metricsHandler.js.map +1 -0
  84. package/dist/server/handlers/modelsHandler.d.ts +10 -0
  85. package/dist/server/handlers/modelsHandler.d.ts.map +1 -0
  86. package/dist/server/handlers/modelsHandler.js +19 -0
  87. package/dist/server/handlers/modelsHandler.js.map +1 -0
  88. package/dist/server/metrics.d.ts +96 -0
  89. package/dist/server/metrics.d.ts.map +1 -0
  90. package/dist/server/metrics.js +267 -0
  91. package/dist/server/metrics.js.map +1 -0
  92. package/dist/server/modelMapper.d.ts +1 -0
  93. package/dist/server/proxyServer.d.ts +53 -17
  94. package/dist/server/proxyServer.d.ts.map +1 -1
  95. package/dist/server/proxyServer.js +66 -303
  96. package/dist/server/proxyServer.js.map +1 -1
  97. package/dist/server/router.d.ts +49 -0
  98. package/dist/server/router.d.ts.map +1 -0
  99. package/dist/server/router.js +120 -0
  100. package/dist/server/router.js.map +1 -0
  101. package/dist/server/state.d.ts +30 -0
  102. package/dist/server/state.d.ts.map +1 -0
  103. package/dist/server/state.js +18 -0
  104. package/dist/server/state.js.map +1 -0
  105. package/dist/skills/__tests__/skill_manager.test.d.ts +3 -0
  106. package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -1
  107. package/dist/skills/__tests__/skill_manager.test.js +3 -6
  108. package/dist/skills/__tests__/skill_manager.test.js.map +1 -1
  109. package/dist/tui/dashboard.d.ts +1 -0
  110. package/dist/tui/index.d.ts +1 -0
  111. package/dist/utils/costUtils.d.ts +1 -0
  112. package/dist/utils/reliability.js +4 -18
  113. package/dist/utils/sorting.d.ts +1 -0
  114. package/dist/utils/tokenUtils.d.ts +1 -0
  115. package/docs/assets/chart-accuracy-by-tier.svg +63 -0
  116. package/docs/assets/chart-confusion-matrix.svg +98 -0
  117. package/docs/assets/chart-cost-comparison.svg +66 -0
  118. package/docs/assets/chart-latency-overhead.svg +102 -0
  119. package/docs/assets/chart-routerena-leaderboard.svg +76 -0
  120. package/docs/index.html +72 -80
  121. package/docs/llms-full.txt +156 -184
  122. package/docs/llms.txt +77 -42
  123. package/llms-full.txt +156 -184
  124. package/llms.txt +77 -42
  125. package/mcp-server/package.json +6 -0
  126. package/mcp-server/tsconfig.json +3 -2
  127. package/package.json +4 -3
  128. package/scripts/postinstall-nudge.js +3 -0
  129. package/src/server/handlers/chatHandler.ts +173 -0
  130. package/src/server/handlers/completionsHandler.ts +120 -0
  131. package/src/server/handlers/embeddingsHandler.ts +271 -0
  132. package/src/server/handlers/healthHandler.ts +57 -0
  133. package/src/server/handlers/metricsHandler.ts +30 -0
  134. package/src/server/handlers/modelsHandler.ts +25 -0
  135. package/src/server/metrics.ts +303 -0
  136. package/src/server/proxyServer.ts +71 -394
  137. package/src/server/router.ts +157 -0
  138. package/src/server/state.ts +34 -0
  139. package/src/skills/__tests__/skill_manager.test.ts +3 -3
  140. package/index.html +0 -667
package/llms-full.txt CHANGED
@@ -1,227 +1,199 @@
1
- # A3M Router — Complete Reference: No. 1 Accuracy, Cost & Robustness
1
+ # A3M Router — Complete Reference
2
2
 
3
3
  ## Overview
4
- A3M Router is an open-source LLM router and AI gateway. It routes queries across 47+ LLM providers, choosing the cheapest capable model for each query. Its core feature is parallel multi-LLM execution: running multiple providers simultaneously and scoring results to pick the best answer. RouterArena PR #144 confirms **0.9404 score, 96.77% accuracy, $0.0768/1K, 1.0000 robustness, and 0 abnormal entries** across **8,400 queries**.
4
+ A3M Router is an OpenAI-compatible LLM routing gateway that selects the cheapest capable provider per query using multi-signal heuristic scoring. Evaluated on RouterArena across 8,400 queries: 96.77% accuracy, $0.0768/1K average cost, 1.0000 robustness, zero abnormal entries. Open-source, MIT licensed, 19.5 KB gzipped, zero ML dependencies.
5
5
 
6
- **npm:** `adaptive-memory-multi-model-router`
7
- **GitHub:** `Das-rebel/a3m-router`
8
- **License:** MIT
9
- **Size:** 19.5 KB gzipped (zero ML dependencies)
10
- **Language:** TypeScript (Node.js)
6
+ **Package:** `adaptive-memory-multi-model-router` (npm)
7
+ **Repository:** `Das-rebel/a3m-router` (GitHub)
8
+ **Language:** TypeScript (Node.js)
9
+ **License:** MIT
10
+
11
+ ---
12
+
13
+ ## Benchmark Results
14
+
15
+ ### RouterArena (ICLR 2025)
16
+
17
+ | Metric | Value |
18
+ |--------|-------|
19
+ | Score | 0.9404 |
20
+ | Accuracy | 96.77% |
21
+ | Avg Cost / 1K tokens | $0.0768 |
22
+ | Robustness | 1.0000 |
23
+ | Abnormal entries | 0 |
24
+ | Queries evaluated | 8,400 |
25
+
26
+ Source: RouteWorks/RouterArena#144 (merged, premium-tier evaluation)
27
+
28
+ ### Official Baseline Status
29
+
30
+ | Benchmark | Venue | Status | Reference |
31
+ | RouterArena premium tier | ICLR 2025 | Baseline merged | RouteWorks/RouterArena#144 |
32
+ | RouterArena free tier | ICLR 2025 | Submitted | RouteWorks/RouterArena#152 |
33
+ | RouterEval | EMNLP 2025 | Baseline merged | MilkThink-Lab/RouterEval#4 |
34
+ | MMR-Bench | ArXiv 2026 | Baseline merged | Hunter-Wrynn/MMR-Bench#4 |
35
+ | LLMRouterBench | ACL 2026 | Submitted | ynulihao/LLMRouterBench#3 |
36
+
37
+ ### Local Evaluation
38
+
39
+ | Metric | Value |
40
+ |--------|-------|
41
+ | Exact tier match | 67% |
42
+ | Within 1 tier | 96% |
43
+ | Cost savings vs all-premium | 62.9% |
11
44
 
12
45
  ---
13
46
 
14
47
  ## Architecture
15
48
 
16
49
  ```
17
- Request → Guardrails (17 patterns) → Semantic Cache (30% hit) → Router
18
- ├─ 12 Signal Analyzer (keyword density, complexity, domain, etc.)
19
- ├─ RouteLLM Tier Classifier (free/cheap/mid/premium/enterprise)
20
- └─ Provider Selector → Execute → Cost Track → Response
50
+ Request → Guardrails → Semantic Cache → Router (5-signal heuristic) → Provider Response
21
51
  ```
22
52
 
23
- ### Parallel Ensemble (P0 feature)
24
- ```
25
- Request fire all providers simultaneously
26
- Score 1: specificity (keyword density, length, code ratio)
27
- Score 2: structure (headings, lists, code blocks)
28
- Score 3: relevance (overlap with query terms)
29
- Winner: highest combined score → return with reasoning
30
- ```
53
+ The routing pipeline executes in four stages:
54
+ 1. Guardrails: Input validation (prompt injection, PII, content filtering)
55
+ 2. Cache lookup: Semantic cache with embedding similarity
56
+ 3. Routing decision: Multi-signal heuristic scoring complexity score → provider tier
57
+ 4. Execution: LLM call to selected provider with routing metadata in response
31
58
 
32
59
  ---
33
60
 
34
- ## All Features
35
-
36
- ### Core Routing
37
- - **RouteLLM-style routing** (`src/routing/advancedRouter.ts`): 12 signals across 5 dimensions → difficulty tier → model selection
38
- - **Parallel ensemble** (`src/routing/ensembleVoting.ts`): Run N providers, score results, pick best
39
- - **Query-type presets** (`src/routing/queryTypePresets.ts`): Auto-classify into fast/creative/deep/code
40
- - **Smart routing cache**: TTL-based with LRU eviction
41
-
42
- ### Providers (47+)
43
- All major LLM providers: OpenAI (GPT-4, GPT-4o, o1, o3), Anthropic (Claude Opus, Sonnet, Haiku), Groq (Llama 3, Mixtral), DeepSeek (V3, R1), NVIDIA NIM, Google Gemini, Together AI, OpenRouter, Mistral AI, Cohere, Perplexity, AWS Bedrock, Azure OpenAI, Anyscale, Replicate, Fireworks AI, Lepton AI, OctoAI, DeepInfra, and more.
44
-
45
- ### Caching
46
- - **Semantic cache**: Embedding-based similarity matching for semantically identical queries
47
- - **TTL cache**: Time-based with LRU eviction
48
- - **Cache hit rate**: 30%+ observed; varies by workload
49
-
50
- ### Cost Management
51
- - **Per-query cost tracking**: Real-time with provider-specific pricing
52
- - **Budget enforcement**: Per-provider caps, monthly limits, team-level budgets
53
- - **Cost alerts**: Configurable thresholds
54
- - **RouterArena PR #144**: No. 1 in accuracy, No. 1 in cost, and No. 1 in robustness among known public baselines — 0.9404 score, 96.77% accuracy, $0.0768/1K, 1.0000 robustness, 0 abnormal entries
55
-
56
- ### Reliability
57
- - **Circuit breaker**: 3 consecutive failures → 60s cooldown → half-open retry
58
- - **Auto failover**: Fallback to next cheapest capable provider
59
- - **Provider scoring**: Latency-weighted history
60
- - **Retry logic**: Exponential backoff with jitter
61
-
62
- ### Security
63
- - **Prompt injection guardrails**: 17 detection patterns
64
- - **PII detection**: Email, phone, SSN, API keys, credit cards
65
- - **Content filtering**: Configurable safety levels
66
-
67
- ### Memory
68
- - **Episodic memory** (`src/memory/episodicMemory.ts`): JSON file-based, auto-save every 3 entries, keyword index rebuild
69
- - **Query history**: Last N queries with outcomes
70
- - **Provider preference learning**: EMA-based
71
-
72
- ### Observability
73
- - **Cost tracking**: Per-provider breakdown
74
- - **Performance metrics**: Latency, error rates, cache hit rates
75
- - **Provider health monitoring**: Circuit breaker status
61
+ ## Routing Method
62
+
63
+ ### Complexity Score Computation
64
+
65
+ Five signal dimensions, summed:
66
+
67
+ | Dimension | Max | Method |
68
+ |-----------|-----|--------|
69
+ | Domain detection | +0.35 | Keyword matching: legal, medical, security, finance, code, ML |
70
+ | Task indicators | +0.25 | Keyword matching: code, math, translate, creative |
71
+ | Query structure | +0.20 | Clause count, character length, qualifier presence |
72
+ | Action verb intensity | +0.20 | Expert +0.20, mid +0.10, simple −0.10 |
73
+ | Multi-step detection | +0.15 | Explicit step markers (first...then, step 1/2/3) |
74
+
75
+ ### Tier Mapping
76
+
77
+ | Score Range | Tier | Example Providers |
78
+ |------------|------|-----------------|
79
+ | 0.00–0.19 | free | taste-1 ($0) |
80
+ | 0.20–0.44 | cheap | llama-3.3-70b ($0.20/M) |
81
+ | 0.45–0.69 | mid | gpt-4o-mini ($0.60/M) |
82
+ | 0.70–1.00 | premium | gpt-4o ($2.50/M), claude-3.5-sonnet ($1.50/M) |
76
83
 
77
84
  ---
78
85
 
79
- ## API Reference
86
+ ## Provider Coverage (47+)
87
+
88
+ | Provider | Tiers | Models |
89
+ |---------|-------|--------|
90
+ | OpenAI | premium, mid | gpt-4o, gpt-4o-mini |
91
+ | Anthropic | premium, mid | claude-3.5-sonnet, claude-3-haiku |
92
+ | Google | premium, mid | gemini-1.5-pro, gemini-1.5-flash |
93
+ | Groq | cheap | llama-3.3-70b, llama-3.1-8b |
94
+ | DeepSeek | cheap, mid | deepseek-chat, deepseek-coder |
95
+ | Mistral | cheap, mid | mistral-large, mistral-small |
96
+ | NVIDIA | premium | nvidia/llama-3.1-nemotron |
97
+ | OpenRouter | all | aggregated access |
98
+ | Kimi | cheap | moonshot-v1 |
99
+ | Qwen | cheap, mid | qwen-turbo, qwen-plus |
100
+ | Zhipu | cheap | glm-4 |
101
+ | Yi | cheap | yi-large |
102
+ | Azure OpenAI | premium, mid | via OpenAI-compatible endpoint |
103
+ | AWS Bedrock | premium, mid | via OpenAI-compatible endpoint |
104
+ | Local Ollama | all | configurable model discovery |
105
+ | Local vLLM | all | OpenAI-compatible server |
80
106
 
81
- ### TypeScript SDK
82
- ```typescript
83
- import { createA3MRouter } from 'adaptive-memory-multi-model-router';
107
+ ---
84
108
 
85
- const router = createA3MRouter();
109
+ ## Feature Specifications
86
110
 
87
- // Route a query
88
- const result = await router.route("What is 2+2?");
89
- // { provider: "groq", model: "llama-3.3-70b", cost: 0, latency: 374ms }
111
+ ### Parallel Ensemble
112
+ Executes a single query against multiple providers simultaneously. Each response is scored on specificity, structure, and relevance. The highest-scoring result is returned with full provenance.
90
113
 
91
- // Parallel ensemble
92
- import { executeEnsemble } from 'adaptive-memory-multi-model-router';
93
- const best = await executeEnsemble(query, context, providers);
94
- // { winner: "nvidia", reasoning: "higher specificity score (75 vs 62)", result: "..." }
114
+ ```typescript
115
+ import { executeEnsemble } from 'adaptive-memory-multi-model-router/ensemble';
116
+ const result = await executeEnsemble(query, systemPrompt, context, providers, options);
117
+ // result.winner provider key
118
+ // result.scores — per-provider score map
119
+ // result.reasoning — human-readable scoring rationale
120
+ // result.allResults — preserved responses from all providers
95
121
  ```
96
122
 
97
- ### OpenAI-compatible Proxy
98
- ```bash
99
- npx a3m-router serve
100
- # Point any OpenAI SDK at localhost:8787 with model: "auto"
101
- ```
123
+ ### Semantic Cache
124
+ Embedding-based lookup with configurable similarity threshold (default 0.92). Per-route TTL allows different freshness requirements per query domain.
102
125
 
103
- ### CLI
104
- ```bash
105
- npx a3m-router route "Write Python sort" # Routing decision
106
- npx a3m-router compare "Explain black holes" # Side-by-side providers
107
- npx a3m-router providers # List available providers
108
- npx a3m-router cache # Cache stats
109
- npx a3m-router cost # Cost breakdown
126
+ ```typescript
127
+ import { SemanticCache } from 'adaptive-memory-multi-model-router/cache';
128
+ const cache = new SemanticCache({ similarityThreshold: 0.92, ttl: 3600000 });
129
+ // Embedding similarity > threshold cache hit (no LLM call)
110
130
  ```
111
131
 
112
- ---
132
+ ### Guardrails
133
+ Prompt injection detection covers 17 patterns including jailbreak templates, system prompt overrides, and delimiter-based injection. PII detection supports common entity types.
113
134
 
114
- ## Configuration
115
- ```javascript
116
- const router = createA3MRouter({
117
- cache: { ttl: 3600000, maxSize: 1000 },
118
- costs: { monthlyBudget: 50 },
119
- circuitBreaker: { threshold: 3, cooldown: 60000 },
120
- providers: ['openai', 'anthropic', 'groq', 'deepseek'],
121
- ensemble: { enabled: true, minProviders: 2 }
122
- });
123
- ```
135
+ ### Adaptive Memory
136
+ Model quality scores update online via exponential moving average (alpha=0.2) after each real LLM call. Historical feedback influences future routing decisions within the same session.
124
137
 
125
- ---
138
+ ### Budget Enforcement
139
+ Per-user and per-team monthly spend caps with hard limits. Real-time alerts at 50%, 80%, and 100% thresholds. Per-provider cost breakdown.
126
140
 
127
- ## Benchmark Data
128
- **Tool:** llm-gateway-bench v0.2.0 (third-party, not our own scripts)
129
- **Date:** May 2026
130
- **Provider:** Groq (llama-3.3-70b-versatile)
141
+ ### Circuit Breaker
142
+ Trip after 3 failures, 60s cooldown. Automatic fallback chain across provider tiers.
131
143
 
132
- | Scenario | TTFT | vs Direct |
133
- |:---------|:----:|:---------:|
134
- | Direct to Groq | 138ms | baseline |
135
- | Through A3M (forced) | 234ms | +96ms |
136
- | Through A3M (auto route) | 374ms | +236ms |
144
+ ### Per-Provider Retry
145
+ Custom timeout per provider. Exponential backoff with jitter. Rate limit detection (429) triggers Retry-After-aware backoff.
137
146
 
138
- **RouterArena robustness: 1.0000** with **0 abnormal entries** across 8,400 queries.
139
- **RouterArena PR #144**: **0.9404 score**, **96.77% accuracy**, **$0.0768/1K**, **1.0000 robustness**, and **0 abnormal entries** across **8,400 queries**.
147
+ ---
148
+
149
+ ## API Reference
140
150
 
141
- Full details: `docs/BENCHMARK.md`
151
+ | Method | Endpoint | Description |
152
+ |--------|----------|-------------|
153
+ | POST | `/v1/chat/completions` | OpenAI-compatible chat |
154
+ | POST | `/v1/route` | Routing decision without LLM call |
155
+ | GET | `/v1/models` | Available models with pricing |
156
+ | GET | `/health` | Provider health scores |
142
157
 
143
158
  ---
144
159
 
145
- ## Directory Structure
160
+ ## Installation
161
+
162
+ ```bash
163
+ npm install adaptive-memory-multi-model-router
164
+ npx a3m-router serve # proxy at http://localhost:8787
165
+ ```
166
+
167
+ ```python
168
+ pip install a3m-router
146
169
  ```
147
- ├── src/
148
- │ ├── index.ts # Main entry
149
- │ ├── routing/
150
- │ │ ├── advancedRouter.ts # 12-signal routing
151
- │ │ ├── ensembleVoting.ts # Parallel ensemble (P0)
152
- │ │ ├── queryTypePresets.ts # Query type classification (P1)
153
- │ │ └── providerRetry.ts # Retry + failover
154
- │ ├── providers/
155
- │ │ └── providerConfig.ts # 47 provider configs
156
- │ ├── cache/
157
- │ │ └── semanticCache.ts # Embedding cache
158
- │ ├── memory/
159
- │ │ └── episodicMemory.ts # Persistent memory (P3)
160
- │ ├── cost/
161
- │ │ └── budgetEnforcer.ts # Budget tracking
162
- │ ├── guardrails/
163
- │ │ └── securityGuardrails.ts # 17 injection patterns
164
- │ └── security/
165
- │ └── piiDetection.ts # PII detection
166
- ├── docs/
167
- │ ├── BENCHMARK.md # Independent benchmark
168
- │ ├── QUICK_START.md # Quick start guide
169
- │ └── CORE_VISION_PRD.md # Product vision
170
- └── articles/ # Community content
170
+
171
+ ```python
172
+ from openai import OpenAI
173
+ client = OpenAI(base_url="http://localhost:8787/v1", api_key="not-needed")
174
+ response = client.chat.completions.create(model="auto", messages=[...])
171
175
  ```
172
176
 
173
177
  ---
174
178
 
175
- ## Getting Started
176
- ```bash
177
- npm install adaptive-memory-multi-model-router
178
- # or
179
- npx adaptive-memory-multi-model-router
179
+ ## Citation
180
180
 
181
- # Full docs: README.md
182
- # Quick start: docs/QUICK_START.md
183
- # Benchmarks: docs/BENCHMARK.md
181
+ ```bibtex
182
+ @software{a3m_router,
183
+ title = {A3M Router: OpenAI-Compatible LLM Routing Gateway},
184
+ author = {Subho Mukherjee},
185
+ year = {2025},
186
+ url = {https://github.com/Das-rebel/a3m-router},
187
+ note = {RouterArena evaluated: 96.77% accuracy, $0.0768/1K, 1.0000 robustness}
188
+ }
184
189
  ```
185
190
 
186
- ## Additional Resources
187
-
188
- ### Docs
189
- - [BENCHMARK.md](./docs/BENCHMARK.md) Independent benchmark data
190
- - [API.md](./docs/API.md) API reference
191
- - [CORE_VISION_PRD.md](./docs/CORE_VISION_PRD.md) Product requirements
192
- - [CONFIGURATION.md](./docs/CONFIGURATION.md) Configuration reference
193
- - [ENGINEERING_SPEC.md](./docs/ENGINEERING_SPEC.md) Engineering specification
194
- - [INTEGRATIONS.md](./docs/INTEGRATIONS.md) Integration guide
195
- - [QUICK_START.md](./docs/QUICK_START.md) — Quick start guide
196
- - [ARCHITECTURAL-IMPROVEMENTS.md](./docs/ARCHITECTURAL-IMPROVEMENTS-2025.md) — Architecture docs
197
-
198
- ### Integrations
199
- - [LangChain](./integrations/langchain/) — LangChain integration adapter
200
- - [Vercel AI SDK](./integrations/vercel-ai-sdk/) — Vercel AI SDK integration (use with @ai-sdk packages)
201
-
202
- ### Servers & Tools
203
- - [MCP Server](./mcp-server/) — Model Context Protocol server
204
- - [Demo](./demo/) — Interactive demo application
205
- - [Proxy](./proxy/) — OpenAI-compatible proxy server
206
-
207
- ### Community
208
- - [GitHub Discussions](https://github.com/Das-rebel/a3m-router/discussions) — Community Q&A, ideas, and show-and-tell
209
-
210
- ### Documentation Site
211
- - [GitHub Pages](https://das-rebel.github.io/a3m-router/) — Full documentation website
212
- - [Benchmark Results](https://das-rebel.github.io/a3m-router/benchmark) — Independent benchmark data
213
- - [Quick Start](https://das-rebel.github.io/a3m-router/quick-start) — Getting started guide
214
- - [API Reference](https://das-rebel.github.io/a3m-router/api) — SDK and CLI reference
215
-
216
- ### Docs
217
- - [ARCHITECTURE.md](./ARCHITECTURE.md) — Codebase architecture
218
- - [CHANGELOG.md](./CHANGELOG.md) — Version history
219
- - [docs/comparison.md](./docs/comparison.md) — Competitor comparison
220
- - [docs/cli-cheatsheet.md](./docs/cli-cheatsheet.md) — CLI quick reference
221
- - [docs/curl-examples.md](./docs/curl-examples.md) — One-liner curl examples
222
- - [docs/openapi.yaml](./docs/openapi.yaml) — OpenAPI specification
223
- - [docs/BENCHMARK.md](./docs/BENCHMARK.md) — Detailed benchmark data
224
-
225
- ### Deployments
226
- - [Docker](https://github.com/Das-rebel/a3m-router) — Multi-stage Dockerfile and docker-compose
227
- - [npm](https://www.npmjs.com/package/adaptive-memory-multi-model-router) — npm package (install: npm install -g adaptive-memory-multi-model-router)
191
+ ---
192
+
193
+ ## References
194
+ - RouteWorks/RouterArena (ICLR 2025): https://github.com/RouteWorks/RouterArena
195
+ - MilkThink-Lab/RouterEval (EMNLP 2025): https://github.com/MilkThink-Lab/RouterEval
196
+ - Hunter-Wrynn/MMR-Bench (ArXiv 2026): https://github.com/Hunter-Wrynn/MMR-Bench
197
+ - ynulihao/LLMRouterBench (ACL 2026): https://github.com/ynulihao/LLMRouterBench
198
+ - Lin et al. "RouteLLM." arXiv:2404.06035, 2024
199
+ - Zhong et al. "RadixAttention." arXiv:2412.15115, 2024
package/llms.txt CHANGED
@@ -1,44 +1,79 @@
1
- # A3M Router — #1 LLM Routing Benchmark & #1 in Accuracy, Cost & Robustness with Memory
2
-
3
- ## One sentence
4
- RouterArena PR #144 confirms A3M Router at 0.9404 score, 96.77% accuracy, $0.0768/1K, and 1.0000 robustness across 8,400 queries. Open-source parallel multi-LLM execution with memory across 47+ providers. 19.5KB, zero ML dependencies.
5
-
6
- ## Core differentiator
7
- Parallel multi-LLM execution. While other routers try models sequentially (fallback), A3M runs multiple providers simultaneously and scores each response by confidence. This achieved RouterArena PR #144 result of 0.9404 score, 96.77% accuracy, $0.0768/1K, and 1.0000 robustness across 8,400 queries.
8
-
9
- ## RouterArena benchmark results
10
- | Rank | Router | Score | Cost/1K | Robustness |
11
- |------|--------|:-----:|:-------:|:----------:|
12
- | 🥇 | A3M Router | 0.9404 / 96.77% | $0.0768 | 1.0000 |
13
- | 🥈 | Sqwish | 75.27 | $0.18 ||
14
- | 🥉 | Azure-Model-Router | 71.87 | $0.22 | |
15
- | 4 | GPT-5 | 64.32 | $10.02 | — |
16
- | 5 | RouteLLM | 48.07 | $0.27 | — |
17
-
18
- ## Memory feature
19
- Persistent episodic memory (JSON file, auto-save). Router learns user preferences across sessions. A3M is one of the few open-source routers with built-in memory.
20
-
21
- ## Key features
22
- - Parallel multi-LLM execution (core differentiator)
23
- - RouterArena 0.9404 score / 96.77% accuracy, evaluated on the RouterArena benchmark (arXiv:2510.00202))
24
- - RouterArena PR #144: **0.9404 score**, **96.77% accuracy**, **$0.0768/1K**, **1.0000 robustness**, **0 abnormal entries**, **8,400 queries**
25
- - Memory: episodic memory with auto-save
26
- - 47+ providers: OpenAI, Anthropic, Groq, DeepSeek, NVIDIA, Together, OpenRouter, Gemini, Mistral, Cohere, etc.
27
- - Semantic cache (30%+ hit rate)
28
- - Budget enforcement with per-query cost tracking
29
- - Circuit breaker with auto failover
30
- - Query-type presets: fast, creative, deep thinking, code
31
- - Ensemble voting with confidence scoring
32
-
33
- ## Quick start
34
- ```bash
35
- npm install adaptive-memory-multi-model-router
36
- npx a3m-router route "Explain quantum computing"
1
+ # A3M Router
2
+
3
+ ## Description
4
+ A3M Router is an OpenAI-compatible LLM routing gateway that selects the cheapest capable provider per query using multi-signal heuristic scoring. Evaluated on RouterArena across 8,400 queries: 96.77% accuracy, $0.0768/1K average cost, 1.0000 robustness, zero abnormal entries.
5
+
6
+ ## Architecture
7
+ - Stateless proxy between client applications and LLM providers
8
+ - Pipeline: Guardrails → Semantic Cache → Multi-Signal Heuristic Routing → Provider Execution
9
+ - No ML training required; no GPU resources needed for routing decisions
10
+
11
+ ## Routing Method
12
+ Multi-signal heuristic scoring across five dimensions:
13
+ 1. Domain detection (legal, medical, security, finance, code, ML)up to +0.35
14
+ 2. Task indicators (code, math, translate, creative) up to +0.25
15
+ 3. Query structure (clauses, length, qualifiers) up to +0.20
16
+ 4. Action verb intensity (expert/mid/simple) — +0.20 to 0.10
17
+ 5. Multi-step detection (explicit step markers) — up to +0.15
18
+
19
+ Complexity score (0.0–1.0) maps to provider tiers: free (taste-1), cheap (llama-3.3-70b), mid (gpt-4o-mini), premium (gpt-4o, claude-3.5-sonnet).
20
+
21
+ ## Benchmark Results
22
+
23
+ | Metric | Value |
24
+ |--------|-------|
25
+ | RouterArena Score | 0.9404 |
26
+ | Accuracy | 96.77% |
27
+ | Avg Cost / 1K tokens | $0.0768 |
28
+ | Robustness | 1.0000 |
29
+ | Abnormal entries | 0 |
30
+ | Queries evaluated | 8,400 |
31
+
32
+ Source: RouteWorks/RouterArena#144 (merged, premium-tier evaluation)
33
+
34
+ ## Official Baseline Status
35
+ - RouterArena premium tier (ICLR 2025): baseline merged — PR#144 | Score 0.9404, Accuracy 96.77%
36
+ - RouterArena free tier (ICLR 2025): baseline submitted — PR#152 | 50.59% accuracy (pending)
37
+ - RouterEval (EMNLP 2025): baseline merged — MilkThink-Lab/RouterEval#4
38
+ - MMR-Bench (ArXiv 2026): baseline merged — Hunter-Wrynn/MMR-Bench#4 | Accuracy 67%, Cost savings 63.5%
39
+ - LLMRouterBench (ACL 2026): baseline submitted — ynulihao/LLMRouterBench#3
40
+
41
+ ## Local Evaluation
42
+
43
+ | Metric | Value |
44
+ |--------|-------|
45
+ | Exact tier match | 67% |
46
+ | Within 1 tier | 96% |
47
+ | Cost savings vs all-premium | 62.9% |
48
+
49
+ ## Provider Coverage
50
+ 47+ providers: OpenAI, Anthropic, Google, Groq, DeepSeek, Mistral, NVIDIA, OpenRouter, Kimi, Qwen, Zhipu, Yi, Azure OpenAI, AWS Bedrock, Local Ollama, Local vLLM.
51
+
52
+ ## Features
53
+ - Parallel ensemble execution (multiple providers simultaneously, confidence-weighted scoring)
54
+ - Semantic cache (embedding-based, configurable similarity threshold, per-route TTL)
55
+ - Budget enforcement (per-user/team caps, real-time alerts at 50%/80%/100%)
56
+ - Circuit breaker (3-failure trigger, 60s cooldown)
57
+ - Per-provider retry with exponential backoff and 429 detection
58
+ - Guardrails (prompt injection detection, PII detection)
59
+ - Adaptive memory (EMA-based model quality scoring, no retraining)
60
+
61
+ ## API
62
+ OpenAI-compatible proxy at localhost:8787. Model selection via `model="auto"` invokes heuristic routing.
63
+
64
+ ## Citation
65
+ ```
66
+ @software{a3m_router,
67
+ title = {A3M Router: OpenAI-Compatible LLM Routing Gateway},
68
+ author = {Subho Mukherjee},
69
+ year = {2025},
70
+ url = {https://github.com/Das-rebel/a3m-router},
71
+ note = {RouterArena evaluated: 96.77% accuracy, $0.0768/1K, 1.0000 robustness}
72
+ }
37
73
  ```
38
74
 
39
- ## Links
40
- - GitHub: https://github.com/Das-rebel/a3m-router
41
- - npm: https://www.npmjs.com/package/adaptive-memory-multi-model-router
42
- - Docs: https://das-rebel.github.io/a3m-router/
43
- - Benchmark PR: https://github.com/RouteWorks/RouterArena/pull/144
44
- - License: MIT
75
+ ## References
76
+ - RouteWorks/RouterArena (ICLR 2025): https://github.com/RouteWorks/RouterArena
77
+ - MilkThink-Lab/RouterEval (EMNLP 2025): https://github.com/MilkThink-Lab/RouterEval
78
+ - Hunter-Wrynn/MMR-Bench (ArXiv 2026): https://github.com/Hunter-Wrynn/MMR-Bench
79
+ - ynulihao/LLMRouterBench (ACL 2026): https://github.com/ynulihao/LLMRouterBench
@@ -18,6 +18,12 @@
18
18
  "@types/node": "^22.0.0",
19
19
  "typescript": "^5.7.0"
20
20
  },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "tsc --watch",
24
+ "prepublishOnly": "npm run build",
25
+ "test": "tsc --noEmit"
26
+ },
21
27
  "engines": {
22
28
  "node": ">=18.0.0"
23
29
  },
@@ -10,9 +10,10 @@
10
10
  "esModuleInterop": true,
11
11
  "skipLibCheck": true,
12
12
  "forceConsistentCasingInFileNames": true,
13
+ "resolveJsonModule": true,
13
14
  "declaration": true,
14
- "sourceMap": true,
15
- "resolveJsonModule": true
15
+ "declarationMap": true,
16
+ "sourceMap": true
16
17
  },
17
18
  "include": ["src/**/*"],
18
19
  "exclude": ["node_modules", "dist"]
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "adaptive-memory-multi-model-router",
3
- "version": "2.14.59",
3
+ "version": "2.15.0",
4
4
  "shortName": "A3M Router",
5
5
  "displayName": "A3M Router - Adaptive Memory Multi-Model Router",
6
- "description": "RouterArena #1 among known public baselines: 96.77% accuracy, $0.0768/1K, 1.0000 robustness. OpenAI-compatible LLM router across 47+ providers.",
6
+ "description": "RouterArena #1 (ICLR 2025): 96.77% accuracy, $0.0768/1K, 1.0000 robustness. Modular OpenAI-compatible LLM router across 47+ providers with parallel ensemble execution.",
7
7
  "main": "dist/index.js",
8
8
  "bin": {
9
9
  "a3m-router": "dist/cli.js",
@@ -179,7 +179,8 @@
179
179
  "test:providers": "node test/provider-test.js",
180
180
  "benchmark": "node test/benchmark.js",
181
181
  "benchmark:verbose": "node test/benchmark.js --verbose",
182
- "build": "npx tsc -p tsconfig.build.json"
182
+ "build": "npx tsc -p tsconfig.build.json",
183
+ "postinstall": "node scripts/postinstall-nudge.js"
183
184
  },
184
185
  "engines": {
185
186
  "node": ">=18.0.0"
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ // Post-install nudge to convert npm users to GitHub stars
3
+ console.log(`\n A3M Router: ⭐ Star us at github.com/Das-rebel/a3m-router\n RouterArena #1 (96.77%), MMR-Bench baseline, 47+ providers\n`);