adaptive-memory-multi-model-router 2.16.3 → 2.16.4

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 (42) hide show
  1. package/.github/CODEOWNERS +2 -0
  2. package/.github/FUNDING.yml +7 -1
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +56 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +41 -0
  5. package/.github/workflows/pages.yml +1 -1
  6. package/CHANGELOG.md +15 -8
  7. package/CONTRIBUTING.md +109 -25
  8. package/README.md +131 -236
  9. package/docs/assets/og-banner.svg +193 -0
  10. package/docs/index.html +1523 -465
  11. package/docs-site/index.html +1427 -563
  12. package/package.json +26 -19
  13. /package/{ARCHITECTURE.md → archive/ARCHITECTURE.md} +0 -0
  14. /package/{ENTERPRISE_INTEGRATIONS.md → archive/ENTERPRISE_INTEGRATIONS.md} +0 -0
  15. /package/{MANIFESTO.md → archive/MANIFESTO.md} +0 -0
  16. /package/{README_ja.md → archive/README_ja.md} +0 -0
  17. /package/{README_zh.md → archive/README_zh.md} +0 -0
  18. /package/{SECURITY.md → archive/SECURITY.md} +0 -0
  19. /package/{TECHNICAL_README.md → archive/TECHNICAL_README.md} +0 -0
  20. /package/{TODO_BROWSER_AUTOMATION.md → archive/TODO_BROWSER_AUTOMATION.md} +0 -0
  21. /package/{AGENT_COUNCIL_FINDINGS.md → archive/campaign/AGENT_COUNCIL_FINDINGS.md} +0 -0
  22. /package/{AUDIT_REPORT.md → archive/campaign/AUDIT_REPORT.md} +0 -0
  23. /package/{CONTRIBUTORS.md → archive/campaign/CONTRIBUTORS.md} +0 -0
  24. /package/{IMPROVEMENT_PLAN.md → archive/campaign/IMPROVEMENT_PLAN.md} +0 -0
  25. /package/{INTEGRATION_PROGRESS.md → archive/campaign/INTEGRATION_PROGRESS.md} +0 -0
  26. /package/{CAMPAIGN_SUMMARY.md → archive/launch/CAMPAIGN_SUMMARY.md} +0 -0
  27. /package/{LANDING.md → archive/launch/LANDING.md} +0 -0
  28. /package/{LAUNCH-PAIN-DRIVEN.md → archive/launch/LAUNCH-PAIN-DRIVEN.md} +0 -0
  29. /package/{LAUNCH.md → archive/launch/LAUNCH.md} +0 -0
  30. /package/{LAUNCH_CHECKLIST.md → archive/launch/LAUNCH_CHECKLIST.md} +0 -0
  31. /package/{LAUNCH_SNAPSHOT.md → archive/launch/LAUNCH_SNAPSHOT.md} +0 -0
  32. /package/{REDESIGN.md → archive/launch/REDESIGN.md} +0 -0
  33. /package/{HEALTH_REPORT.md → archive/research/HEALTH_REPORT.md} +0 -0
  34. /package/{OPPORTUNITIES_100.md → archive/research/OPPORTUNITIES_100.md} +0 -0
  35. /package/{POPULARITY_BOOSTERS.md → archive/research/POPULARITY_BOOSTERS.md} +0 -0
  36. /package/{PR_STATUS_REPORT.md → archive/research/PR_STATUS_REPORT.md} +0 -0
  37. /package/{research-log.md → archive/research/research-log.md} +0 -0
  38. /package/{RELEASE_v2.16.0.md → archive/submissions/RELEASE_v2.16.0.md} +0 -0
  39. /package/{RUNKIT.md → archive/submissions/RUNKIT.md} +0 -0
  40. /package/{SUBMISSIONS.md → archive/submissions/SUBMISSIONS.md} +0 -0
  41. /package/{a3m-integrations-summary.md → archive/submissions/a3m-integrations-summary.md} +0 -0
  42. /package/{discoverability-diagnosis.md → archive/submissions/discoverability-diagnosis.md} +0 -0
package/docs/index.html CHANGED
@@ -1,497 +1,1555 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>A3M Router — Universal LLM Routing Gateway</title>
7
- <meta name="description" content="Universal LLM routing gateway. Routes requests to cheapest capable provider across 47+ models. Heuristic routing, parallel ensemble, semantic cache. Drop-in for OpenAI SDK.">
8
- <meta name="keywords" content="LLM router, AI gateway, open-source, multi-provider, cost optimization, parallel LLM, semantic cache, load balancing, OpenAI proxy">
9
- <meta property="og:title" content="A3M Router — Universal LLM Routing Gateway">
10
- <meta property="og:description" content="Universal LLM routing gateway. Routes to cheapest capable provider across 47+ models. 10-minute setup. Drop-in for OpenAI SDK.">
11
- <meta property="og:image" content="https://das-rebel.github.io/a3m-router/assets/chart-routerena-leaderboard.svg">
12
- <meta property="og:url" content="https://das-rebel.github.io/a3m-router/">
13
- <meta property="og:type" content="website">
14
- <meta name="twitter:card" content="summary_large_image">
15
- <meta name="twitter:title" content="A3M Router — Universal LLM Routing Gateway">
16
- <meta name="twitter:description" content="Universal LLM routing gateway. Routes to cheapest capable provider. Drop-in for OpenAI SDK.">
17
- <link rel="canonical" href="https://das-rebel.github.io/a3m-router/">
18
- <link rel="stylesheet" href="styles.css">
19
- <script type="application/ld+json">
20
- {
21
- "@context": "https://schema.org",
22
- "@type": "SoftwareApplication",
23
- "name": "A3M Router",
24
- "alternateName": [
25
- "Adaptive Memory Multi-Model Router",
26
- "A3M",
27
- "a3m-router",
28
- "adaptive-memory-multi-model-router"
29
- ],
30
- "applicationCategory": [
31
- "DeveloperApplication",
32
- "WebApplication",
33
- "Utilities"
34
- ],
35
- "operatingSystem": [
36
- "Node.js",
37
- "Linux",
38
- "macOS",
39
- "Windows"
40
- ],
41
- "description": "Universal LLM routing gateway. Routes requests to cheapest capable provider across 47+ models. Heuristic routing, parallel ensemble, semantic cache. Drop-in for OpenAI SDK.",
42
- "url": "https://github.com/Das-rebel/a3m-router",
43
- "sameAs": [
44
- "https://www.npmjs.com/package/adaptive-memory-multi-model-router",
45
- "https://github.com/Das-rebel/a3m-router",
46
- "https://das-rebel.github.io/a3m-router/"
47
- ],
48
- "downloadUrl": "https://www.npmjs.com/package/adaptive-memory-multi-model-router",
49
- "softwareVersion": "2.14.60",
50
- "license": "https://opensource.org/licenses/MIT",
51
- "author": {
52
- "@type": "Person",
53
- "name": "Das-rebel",
54
- "url": "https://github.com/Das-rebel"
55
- },
56
- "offers": {
57
- "@type": "Offer",
58
- "price": "0",
59
- "priceCurrency": "USD",
60
- "availability": "https://schema.org/InStock"
61
- },
62
- "benchmarkResults": [
63
- {"@type": "PropertyValue", "name": " {"@type": "PropertyValue", "name": " {"@type": "PropertyValue", "name": "MMR-Bench Accuracy", "value": "67%", "description": "Exact tier match"}
64
- ],
65
- "featureList": [
66
- "Parallel multi-LLM execution",
67
- "47+ provider support",
68
- "Ensemble voting with confidence scoring",
69
- "Semantic cache (30%+ hit rate)",
70
- "Budget enforcement with per-query cost tracking",
71
- "Circuit breaker with auto failover",
72
- "Persistent episodic memory",
73
- "Official baseline: MMR-Bench (ArXiv 2026), RouterEval (EMNLP 2025)",
74
- "Parallel ensemble | Semantic cache | 63% cost savings",
75
- "63.5% cost savings vs all-premium routing (MMR-Bench)",
76
- "Cost 63% savings queries",
77
- "19.5KB, zero ML dependencies",
78
- "OpenAI-compatible proxy"
79
- ]
80
- }
81
- </script>
82
- <script type="application/ld+json">
83
- {
84
- "@context": "https://schema.org",
85
- "@type": "FAQPage",
86
- "mainEntity": [
87
- {
88
- "@type": "Question",
89
- "name": "What is the best open-source LLM router?",
90
- "acceptedAnswer": {
91
- "@type": "Answer",
92
- "text": "A3M Router is an official baseline in MMR-Bench (ArXiv 2026), and RouterEval (EMNLP 2025). Parallel ensemble across 47+ providers, confidence scoring, semantic caching. MMR-Bench: 67% accuracy, 63.5% cost savings. Rule-based routing with no ML training required."
93
- }
94
- },
95
- {
96
- "@type": "Question",
97
- "name": "How is A3M different from RouteLLM?",
98
- "acceptedAnswer": {
99
- "@type": "Answer",
100
- "text": "A3M is rule-based with zero ML training (19.5KB). RouteLLM uses BERT-based ML. Benefits: 47+ providers, parallel ensemble, EXP3-inspired exploration, semantic caching. No ML training. BERT-class approaches at a fraction of the cost."
101
- }
102
- },
103
- {
104
- "@type": "Question",
105
- "name": "How much does A3M save vs premium models?",
106
- "acceptedAnswer": {
107
- "@type": "Answer",
108
- "text": "63.5% cost savings vs all-premium routing. Parallel multi-provider execution, semantic caching, circuit breaker."
109
- }
110
- },
111
- {
112
- "@type": "Question",
113
- "name": "Does A3M require GPU or ML training?",
114
- "acceptedAnswer": {
115
- "@type": "Answer",
116
- "text": "No. A3M is 19.5KB with zero ML dependencies. It uses a 5-signal heuristic for rule-based routing in under 1ms on any CPU. No GPU required."
117
- }
118
- },
119
- {
120
- "@type": "Question",
121
- "name": "What providers does A3M support?",
122
- "acceptedAnswer": {
123
- "@type": "Answer",
124
- "text": "A3M supports 47+ providers including OpenAI, Anthropic, Groq, Cerebras, DeepSeek, Mistral, NVIDIA, Together, OpenRouter, Gemini, and Cohere."
125
- }
126
- }
127
- ]
128
- }
129
- </script>
130
- <script>
131
- function toggleNav() {
132
- document.querySelector('.nav-links').classList.toggle('open');
133
- }
134
- </script>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+
7
+ <!-- Primary SEO Meta Tags -->
8
+ <title>A3M Router — Intelligent LLM Routing Gateway | OpenRouter Alternative</title>
9
+ <meta name="description" content="A3M Router is an open-source LLM gateway that routes queries to the cheapest capable model across 47+ providers. 96.77% RouterArena accuracy at $0.0768/1K tokens. OpenRouter alternative that actually reduces your LLM bill.">
10
+ <meta name="keywords" content="llm router benchmark, llm routing accuracy, routellm alternative, litellm alternative, llm cost optimization, openai proxy free, llm gateway open source, lightweight llm router, keyword-based llm routing, drop-in openai proxy, llm routing without gpu, how to reduce openai api costs, openrouter alternative, reduce llm costs, llm router open source">
11
+ <meta name="author" content="A3M Router Team">
12
+ <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large">
13
+ <link rel="canonical" href="https://das-rebel.github.io/a3m-router/">
14
+
15
+ <!-- Open Graph / Social Sharing -->
16
+ <meta property="og:type" content="website">
17
+ <meta property="og:url" content="https://das-rebel.github.io/a3m-router/">
18
+ <meta property="og:title" content="A3M Router — Intelligent LLM Routing Gateway | OpenRouter Alternative">
19
+ <meta property="og:description" content="Open-source LLM gateway: 47+ providers, 96.77% accuracy, 63% cost savings. Drop-in OpenAI-compatible API.">
20
+ <meta property="og:image" content="https://das-rebel.github.io/a3m-router/assets/og-banner.svg">
21
+ <meta property="og:image:width" content="1200">
22
+ <meta property="og:image:height" content="630">
23
+ <meta property="og:site_name" content="A3M Router">
24
+ <meta property="og:locale" content="en_US">
25
+
26
+ <!-- Twitter Card -->
27
+ <meta name="twitter:card" content="summary_large_image">
28
+ <meta name="twitter:title" content="A3M Router — Intelligent LLM Routing Gateway | OpenRouter Alternative">
29
+ <meta name="twitter:description" content="Open-source LLM gateway: 47+ providers, 96.77% accuracy, 63% cost savings. Drop-in OpenAI-compatible API.">
30
+ <meta name="twitter:image" content="https://das-rebel.github.io/a3m-router/assets/og-banner.svg">
31
+
32
+ <style>
33
+ *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
34
+
35
+ :root {
36
+ --bg: #09090b;
37
+ --surface: #18181b;
38
+ --surface2: #27272a;
39
+ --border: #3f3f46;
40
+ --text: #fafafa;
41
+ --text-muted: #a1a1aa;
42
+ --text-dim: #71717a;
43
+ --accent: #6366f1;
44
+ --accent-hover: #818cf8;
45
+ --accent-glow: rgba(99, 102, 241, 0.15);
46
+ --green: #22c55e;
47
+ --green-dim: #166534;
48
+ --amber: #f59e0b;
49
+ --red: #ef4444;
50
+ --font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
51
+ --mono: 'SF Mono', 'Fira Code', 'Fira Mono', 'Menlo', 'Monaco', monospace;
52
+ --radius: 10px;
53
+ --radius-lg: 16px;
54
+ }
55
+
56
+ html { scroll-behavior: smooth; }
57
+
58
+ body {
59
+ font-family: var(--font);
60
+ background: var(--bg);
61
+ color: var(--text);
62
+ line-height: 1.6;
63
+ -webkit-font-smoothing: antialiased;
64
+ }
65
+
66
+ a { color: inherit; text-decoration: none; }
67
+ a:hover { color: var(--accent-hover); }
68
+
69
+ /* ─── Layout ─── */
70
+ .container { max-width: 1100px; margin: 0 auto; padding: 0 24px; }
71
+ .section { padding: 96px 0; }
72
+ .section-sm { padding: 64px 0; }
73
+ .section-title {
74
+ font-size: 2rem;
75
+ font-weight: 700;
76
+ letter-spacing: -0.03em;
77
+ margin-bottom: 12px;
78
+ }
79
+ .section-subtitle {
80
+ font-size: 1.125rem;
81
+ color: var(--text-muted);
82
+ max-width: 560px;
83
+ margin-bottom: 48px;
84
+ }
85
+ .section-center { text-align: center; }
86
+ .section-center .section-subtitle { margin: 0 auto 48px; }
87
+
88
+ /* ─── Nav ─── */
89
+ nav {
90
+ position: sticky;
91
+ top: 0;
92
+ z-index: 100;
93
+ background: rgba(9,9,11,0.85);
94
+ backdrop-filter: blur(12px);
95
+ border-bottom: 1px solid rgba(255,255,255,0.05);
96
+ }
97
+ .nav-inner {
98
+ display: flex;
99
+ align-items: center;
100
+ justify-content: space-between;
101
+ height: 60px;
102
+ max-width: 1100px;
103
+ margin: 0 auto;
104
+ padding: 0 24px;
105
+ }
106
+ .nav-logo {
107
+ display: flex;
108
+ align-items: center;
109
+ gap: 10px;
110
+ font-weight: 700;
111
+ font-size: 1.1rem;
112
+ letter-spacing: -0.02em;
113
+ }
114
+ .nav-logo svg { width: 28px; height: 28px; }
115
+ .nav-links {
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 32px;
119
+ }
120
+ .nav-links a {
121
+ font-size: 0.875rem;
122
+ color: var(--text-muted);
123
+ transition: color 0.2s;
124
+ }
125
+ .nav-links a:hover { color: var(--text); }
126
+ .nav-cta {
127
+ display: flex;
128
+ align-items: center;
129
+ gap: 12px;
130
+ }
131
+
132
+ /* ─── Buttons ─── */
133
+ .btn {
134
+ display: inline-flex;
135
+ align-items: center;
136
+ gap: 8px;
137
+ padding: 10px 20px;
138
+ border-radius: var(--radius);
139
+ font-size: 0.875rem;
140
+ font-weight: 600;
141
+ cursor: pointer;
142
+ transition: all 0.2s;
143
+ border: none;
144
+ white-space: nowrap;
145
+ }
146
+ .btn-primary {
147
+ background: var(--accent);
148
+ color: #fff;
149
+ }
150
+ .btn-primary:hover {
151
+ background: var(--accent-hover);
152
+ transform: translateY(-1px);
153
+ box-shadow: 0 4px 24px rgba(99, 102, 241, 0.35);
154
+ color: #fff;
155
+ }
156
+ .btn-outline {
157
+ background: transparent;
158
+ color: var(--text);
159
+ border: 1px solid var(--border);
160
+ }
161
+ .btn-outline:hover {
162
+ background: var(--surface);
163
+ border-color: var(--text-dim);
164
+ color: var(--text);
165
+ }
166
+ .btn-ghost {
167
+ background: transparent;
168
+ color: var(--text-muted);
169
+ padding: 8px 12px;
170
+ }
171
+ .btn-ghost:hover { color: var(--text); background: var(--surface); }
172
+ .btn-sm { padding: 7px 14px; font-size: 0.8125rem; }
173
+ .btn-lg { padding: 14px 28px; font-size: 1rem; }
174
+
175
+ /* ─── Hero ─── */
176
+ .hero {
177
+ padding: 100px 0 80px;
178
+ text-align: center;
179
+ }
180
+ .hero-badge {
181
+ display: inline-flex;
182
+ align-items: center;
183
+ gap: 6px;
184
+ padding: 6px 14px;
185
+ background: var(--accent-glow);
186
+ border: 1px solid rgba(99,102,241,0.3);
187
+ border-radius: 100px;
188
+ font-size: 0.8125rem;
189
+ color: var(--accent-hover);
190
+ margin-bottom: 28px;
191
+ }
192
+ .hero-badge .dot {
193
+ width: 6px; height: 6px;
194
+ background: var(--accent);
195
+ border-radius: 50%;
196
+ animation: pulse 2s infinite;
197
+ }
198
+ @keyframes pulse {
199
+ 0%, 100% { opacity: 1; }
200
+ 50% { opacity: 0.3; }
201
+ }
202
+ .hero h1 {
203
+ font-size: clamp(2.5rem, 6vw, 4rem);
204
+ font-weight: 800;
205
+ letter-spacing: -0.04em;
206
+ line-height: 1.1;
207
+ margin-bottom: 20px;
208
+ }
209
+ .hero h1 .gradient {
210
+ background: linear-gradient(120deg, #818cf8 0%, #c084fc 50%, #6366f1 100%);
211
+ -webkit-background-clip: text;
212
+ -webkit-text-fill-color: transparent;
213
+ background-size: 200% auto;
214
+ }
215
+ .hero-sub {
216
+ font-size: 1.2rem;
217
+ color: var(--text-muted);
218
+ max-width: 640px;
219
+ margin: 0 auto 40px;
220
+ line-height: 1.7;
221
+ }
222
+ .hero-actions {
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ gap: 12px;
227
+ flex-wrap: wrap;
228
+ margin-bottom: 48px;
229
+ }
230
+ .hero-actions .install-cmd {
231
+ display: flex;
232
+ align-items: center;
233
+ gap: 8px;
234
+ background: var(--surface);
235
+ border: 1px solid var(--border);
236
+ border-radius: var(--radius);
237
+ padding: 10px 18px;
238
+ font-family: var(--mono);
239
+ font-size: 0.875rem;
240
+ color: var(--text-muted);
241
+ }
242
+ .hero-actions .install-cmd .prompt { color: var(--green); }
243
+ .hero-actions .install-cmd kbd {
244
+ background: var(--surface2);
245
+ border: 1px solid var(--border);
246
+ border-radius: 4px;
247
+ padding: 1px 5px;
248
+ font-size: 0.75rem;
249
+ }
250
+
251
+ /* ─── CLI Preview ─── */
252
+ .cli-preview {
253
+ max-width: 720px;
254
+ margin: 0 auto;
255
+ background: #0c0c0f;
256
+ border: 1px solid var(--border);
257
+ border-radius: var(--radius-lg);
258
+ overflow: hidden;
259
+ text-align: left;
260
+ box-shadow: 0 32px 80px rgba(0,0,0,0.5), 0 0 0 1px rgba(255,255,255,0.04);
261
+ }
262
+ .cli-titlebar {
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 6px;
266
+ padding: 12px 16px;
267
+ background: var(--surface);
268
+ border-bottom: 1px solid var(--border);
269
+ }
270
+ .cli-titlebar span {
271
+ width: 12px; height: 12px;
272
+ border-radius: 50%;
273
+ }
274
+ .cli-titlebar span:nth-child(1) { background: #ff5f57; }
275
+ .cli-titlebar span:nth-child(2) { background: #ffbd2e; }
276
+ .cli-titlebar span:nth-child(3) { background: #28c840; }
277
+ .cli-titlebar .title {
278
+ margin-left: 8px;
279
+ font-size: 0.75rem;
280
+ color: var(--text-dim);
281
+ font-family: var(--mono);
282
+ }
283
+ .cli-body {
284
+ padding: 20px 24px;
285
+ font-family: var(--mono);
286
+ font-size: 0.8125rem;
287
+ line-height: 1.7;
288
+ color: #d4d4d4;
289
+ overflow-x: auto;
290
+ }
291
+ .cli-body .line { display: flex; gap: 12px; }
292
+ .cli-body .prompt { color: var(--green); user-select: none; }
293
+ .cli-body .path { color: var(--accent-hover); }
294
+ .cli-body .output { color: var(--text-dim); }
295
+ .cli-body .result { color: #e5e7eb; }
296
+ .cli-body .model { color: #fbbf24; }
297
+ .cli-body .score { color: var(--green); }
298
+ .cli-body .dim { color: var(--text-dim); }
299
+ .cli-body .accent { color: var(--accent-hover); }
300
+ .cli-body .sep { color: var(--border); margin: 4px 0; }
301
+
302
+ /* ─── Stats Bar ─── */
303
+ .stats-bar {
304
+ display: grid;
305
+ grid-template-columns: repeat(4, 1fr);
306
+ gap: 1px;
307
+ background: var(--border);
308
+ border: 1px solid var(--border);
309
+ border-radius: var(--radius-lg);
310
+ overflow: hidden;
311
+ max-width: 720px;
312
+ margin: 40px auto 0;
313
+ }
314
+ .stat-cell {
315
+ background: var(--surface);
316
+ padding: 20px 16px;
317
+ text-align: center;
318
+ }
319
+ .stat-cell .val {
320
+ font-size: 1.5rem;
321
+ font-weight: 700;
322
+ color: var(--text);
323
+ letter-spacing: -0.03em;
324
+ }
325
+ .stat-cell .val.green { color: var(--green); }
326
+ .stat-cell .lbl {
327
+ font-size: 0.75rem;
328
+ color: var(--text-dim);
329
+ margin-top: 4px;
330
+ }
331
+
332
+ /* ─── Feature Grid ─── */
333
+ .feature-grid {
334
+ display: grid;
335
+ grid-template-columns: repeat(3, 1fr);
336
+ gap: 1px;
337
+ background: var(--border);
338
+ border: 1px solid var(--border);
339
+ border-radius: var(--radius-lg);
340
+ overflow: hidden;
341
+ }
342
+ .feature-card {
343
+ background: var(--bg);
344
+ padding: 28px;
345
+ transition: background 0.2s;
346
+ }
347
+ .feature-card:hover { background: var(--surface); }
348
+ .feature-card .icon {
349
+ width: 40px; height: 40px;
350
+ background: var(--accent-glow);
351
+ border: 1px solid rgba(99,102,241,0.25);
352
+ border-radius: 10px;
353
+ display: flex;
354
+ align-items: center;
355
+ justify-content: center;
356
+ font-size: 1.1rem;
357
+ margin-bottom: 16px;
358
+ }
359
+ .feature-card h3 {
360
+ font-size: 0.9375rem;
361
+ font-weight: 600;
362
+ margin-bottom: 8px;
363
+ letter-spacing: -0.01em;
364
+ }
365
+ .feature-card p {
366
+ font-size: 0.875rem;
367
+ color: var(--text-muted);
368
+ line-height: 1.6;
369
+ }
370
+ .feature-card .tag {
371
+ display: inline-block;
372
+ font-size: 0.6875rem;
373
+ font-weight: 600;
374
+ padding: 3px 8px;
375
+ border-radius: 100px;
376
+ margin-bottom: 10px;
377
+ text-transform: uppercase;
378
+ letter-spacing: 0.04em;
379
+ }
380
+ .tag-green { background: rgba(34,197,94,0.12); color: var(--green); border: 1px solid rgba(34,197,94,0.2); }
381
+ .tag-indigo { background: var(--accent-glow); color: var(--accent-hover); border: 1px solid rgba(99,102,241,0.25); }
382
+ .tag-amber { background: rgba(245,158,11,0.1); color: var(--amber); border: 1px solid rgba(245,158,11,0.2); }
383
+
384
+ /* ─── Comparison Table ─── */
385
+ .comparison-wrap { overflow-x: auto; }
386
+ .comparison-table {
387
+ width: 100%;
388
+ border-collapse: collapse;
389
+ font-size: 0.9rem;
390
+ min-width: 600px;
391
+ }
392
+ .comparison-table th {
393
+ text-align: left;
394
+ padding: 14px 20px;
395
+ font-size: 0.8125rem;
396
+ font-weight: 600;
397
+ color: var(--text-dim);
398
+ border-bottom: 1px solid var(--border);
399
+ white-space: nowrap;
400
+ }
401
+ .comparison-table th:first-child { padding-left: 0; }
402
+ .comparison-table td {
403
+ padding: 16px 20px;
404
+ border-bottom: 1px solid rgba(255,255,255,0.04);
405
+ vertical-align: middle;
406
+ }
407
+ .comparison-table td:first-child { padding-left: 0; }
408
+ .comparison-table tr:last-child td { border-bottom: none; }
409
+ .comparison-table .provider-name {
410
+ display: flex;
411
+ align-items: center;
412
+ gap: 10px;
413
+ font-weight: 600;
414
+ }
415
+ .comparison-table .provider-name .logo-mark {
416
+ width: 28px; height: 28px;
417
+ border-radius: 6px;
418
+ display: flex;
419
+ align-items: center;
420
+ justify-content: center;
421
+ font-size: 0.75rem;
422
+ font-weight: 700;
423
+ }
424
+ .comparison-table .check { color: var(--green); font-size: 1rem; }
425
+ .comparison-table .cross { color: var(--text-dim); font-size: 0.9rem; }
426
+ .comparison-table .partial { color: var(--amber); font-size: 0.85rem; }
427
+ .comparison-table .highlight-row td { background: rgba(99,102,241,0.06); }
428
+ .comparison-table .highlight-row td:first-child { border-radius: var(--radius) 0 0 var(--radius); }
429
+ .comparison-table .highlight-row td:last-child { border-radius: 0 var(--radius) var(--radius) 0; }
430
+ .comparison-table .badge {
431
+ display: inline-block;
432
+ padding: 2px 8px;
433
+ border-radius: 100px;
434
+ font-size: 0.6875rem;
435
+ font-weight: 700;
436
+ text-transform: uppercase;
437
+ letter-spacing: 0.04em;
438
+ }
439
+ .badge-a3m { background: rgba(99,102,241,0.2); color: var(--accent-hover); }
440
+ .badge-openrouter { background: rgba(255,255,255,0.08); color: var(--text-muted); }
441
+ .badge-litellm { background: rgba(255,255,255,0.08); color: var(--text-muted); }
442
+
443
+ /* ─── How It Works ─── */
444
+ .steps-grid {
445
+ display: grid;
446
+ grid-template-columns: repeat(3, 1fr);
447
+ gap: 2px;
448
+ background: var(--border);
449
+ border: 1px solid var(--border);
450
+ border-radius: var(--radius-lg);
451
+ overflow: hidden;
452
+ margin-top: -48px;
453
+ }
454
+ .step-card {
455
+ background: var(--bg);
456
+ padding: 32px 28px;
457
+ }
458
+ .step-num {
459
+ font-size: 0.75rem;
460
+ font-weight: 700;
461
+ color: var(--accent);
462
+ text-transform: uppercase;
463
+ letter-spacing: 0.08em;
464
+ margin-bottom: 16px;
465
+ }
466
+ .step-card h3 {
467
+ font-size: 1rem;
468
+ font-weight: 600;
469
+ margin-bottom: 10px;
470
+ }
471
+ .step-card p {
472
+ font-size: 0.875rem;
473
+ color: var(--text-muted);
474
+ line-height: 1.6;
475
+ }
476
+ .step-card .code-mini {
477
+ background: var(--surface);
478
+ border: 1px solid var(--border);
479
+ border-radius: var(--radius);
480
+ padding: 12px 14px;
481
+ font-family: var(--mono);
482
+ font-size: 0.75rem;
483
+ color: var(--text-muted);
484
+ margin-top: 14px;
485
+ line-height: 1.6;
486
+ }
487
+ .step-card .code-mini .kw { color: #c084fc; }
488
+ .step-card .code-mini .str { color: #86efac; }
489
+ .step-card .code-mini .fn { color: #7dd3fc; }
490
+
491
+ /* ─── Install Commands ─── */
492
+ .install-grid {
493
+ display: grid;
494
+ grid-template-columns: 1fr 1fr;
495
+ gap: 16px;
496
+ }
497
+ .install-card {
498
+ background: var(--surface);
499
+ border: 1px solid var(--border);
500
+ border-radius: var(--radius-lg);
501
+ overflow: hidden;
502
+ }
503
+ .install-card-header {
504
+ display: flex;
505
+ align-items: center;
506
+ gap: 10px;
507
+ padding: 14px 18px;
508
+ border-bottom: 1px solid var(--border);
509
+ font-size: 0.875rem;
510
+ font-weight: 600;
511
+ color: var(--text-muted);
512
+ }
513
+ .install-card-header .pkg-name { color: var(--text); }
514
+ .install-card-body {
515
+ padding: 16px 18px;
516
+ }
517
+ .install-cmd-block {
518
+ background: var(--bg);
519
+ border: 1px solid var(--border);
520
+ border-radius: var(--radius);
521
+ padding: 12px 14px;
522
+ font-family: var(--mono);
523
+ font-size: 0.8125rem;
524
+ color: var(--text-muted);
525
+ line-height: 1.7;
526
+ }
527
+ .install-cmd-block .comment { color: var(--text-dim); }
528
+ .install-cmd-block .cmd { color: var(--green); }
529
+ .install-cmd-block .pkg { color: var(--accent-hover); }
530
+
531
+ /* ─── Live Demo ─── */
532
+ .demo-card {
533
+ background: var(--surface);
534
+ border: 1px solid var(--border);
535
+ border-radius: var(--radius-lg);
536
+ padding: 40px;
537
+ text-align: center;
538
+ }
539
+ .demo-card .demo-icon {
540
+ font-size: 2.5rem;
541
+ margin-bottom: 16px;
542
+ }
543
+ .demo-card h3 {
544
+ font-size: 1.25rem;
545
+ font-weight: 700;
546
+ margin-bottom: 10px;
547
+ }
548
+ .demo-card p {
549
+ color: var(--text-muted);
550
+ max-width: 480px;
551
+ margin: 0 auto 24px;
552
+ font-size: 0.9375rem;
553
+ }
554
+
555
+ /* ─── Benchmark ─── */
556
+ .benchmark-card {
557
+ background: var(--surface);
558
+ border: 1px solid rgba(99,102,241,0.25);
559
+ border-radius: var(--radius-lg);
560
+ padding: 32px;
561
+ }
562
+ .benchmark-label {
563
+ font-size: 0.75rem;
564
+ font-weight: 700;
565
+ text-transform: uppercase;
566
+ letter-spacing: 0.08em;
567
+ color: var(--accent-hover);
568
+ margin-bottom: 12px;
569
+ }
570
+ .benchmark-metric {
571
+ display: flex;
572
+ align-items: baseline;
573
+ gap: 8px;
574
+ margin-bottom: 8px;
575
+ }
576
+ .benchmark-metric .big {
577
+ font-size: 3rem;
578
+ font-weight: 800;
579
+ letter-spacing: -0.04em;
580
+ color: var(--text);
581
+ }
582
+ .benchmark-metric .unit {
583
+ font-size: 1rem;
584
+ color: var(--text-muted);
585
+ }
586
+ .benchmark-bar-wrap {
587
+ margin: 16px 0 8px;
588
+ }
589
+ .benchmark-bar-label {
590
+ display: flex;
591
+ justify-content: space-between;
592
+ font-size: 0.75rem;
593
+ color: var(--text-dim);
594
+ margin-bottom: 6px;
595
+ }
596
+ .benchmark-bar {
597
+ height: 8px;
598
+ background: var(--surface2);
599
+ border-radius: 100px;
600
+ overflow: hidden;
601
+ }
602
+ .benchmark-bar-fill {
603
+ height: 100%;
604
+ border-radius: 100px;
605
+ background: linear-gradient(90deg, var(--accent), #c084fc);
606
+ transition: width 1s ease;
607
+ }
608
+ .benchmark-note {
609
+ font-size: 0.75rem;
610
+ color: var(--text-dim);
611
+ margin-top: 12px;
612
+ }
613
+
614
+ /* ─── Provider Logos ─── */
615
+ .provider-logos {
616
+ display: flex;
617
+ flex-wrap: wrap;
618
+ gap: 8px;
619
+ justify-content: center;
620
+ margin-top: 32px;
621
+ }
622
+ .provider-chip {
623
+ padding: 6px 14px;
624
+ background: var(--surface);
625
+ border: 1px solid var(--border);
626
+ border-radius: 100px;
627
+ font-size: 0.8125rem;
628
+ color: var(--text-muted);
629
+ font-weight: 500;
630
+ }
631
+
632
+ /* ─── Providers Grid ─── */
633
+ .provider-grid {
634
+ display: grid;
635
+ grid-template-columns: repeat(4, 1fr);
636
+ gap: 12px;
637
+ margin-top: 32px;
638
+ }
639
+ .provider-cell {
640
+ background: var(--surface);
641
+ border: 1px solid var(--border);
642
+ border-radius: var(--radius);
643
+ padding: 16px;
644
+ text-align: center;
645
+ }
646
+ .provider-cell .name {
647
+ font-weight: 600;
648
+ font-size: 0.875rem;
649
+ margin-bottom: 4px;
650
+ }
651
+ .provider-cell .price {
652
+ font-size: 0.75rem;
653
+ color: var(--green);
654
+ font-weight: 600;
655
+ }
656
+ .provider-cell .models {
657
+ font-size: 0.6875rem;
658
+ color: var(--text-dim);
659
+ margin-top: 4px;
660
+ }
661
+
662
+ /* ─── FAQ ─── */
663
+ .faq-list { max-width: 680px; margin: 0 auto; }
664
+ .faq-item {
665
+ border-bottom: 1px solid var(--border);
666
+ }
667
+ .faq-item:last-child { border-bottom: none; }
668
+ .faq-question {
669
+ display: flex;
670
+ justify-content: space-between;
671
+ align-items: center;
672
+ padding: 20px 0;
673
+ font-weight: 600;
674
+ font-size: 1rem;
675
+ cursor: pointer;
676
+ gap: 16px;
677
+ }
678
+ .faq-question:hover { color: var(--accent-hover); }
679
+ .faq-question .icon {
680
+ font-size: 1.25rem;
681
+ color: var(--text-dim);
682
+ transition: transform 0.3s;
683
+ flex-shrink: 0;
684
+ }
685
+ .faq-item.open .faq-question .icon { transform: rotate(45deg); }
686
+ .faq-answer {
687
+ max-height: 0;
688
+ overflow: hidden;
689
+ transition: max-height 0.3s ease, padding 0.3s ease;
690
+ }
691
+ .faq-item.open .faq-answer { max-height: 400px; }
692
+ .faq-answer-inner {
693
+ padding-bottom: 20px;
694
+ font-size: 0.9375rem;
695
+ color: var(--text-muted);
696
+ line-height: 1.7;
697
+ }
698
+ .faq-answer-inner code {
699
+ background: var(--surface2);
700
+ padding: 2px 6px;
701
+ border-radius: 4px;
702
+ font-family: var(--mono);
703
+ font-size: 0.85em;
704
+ }
705
+
706
+ /* ─── CTA Section ─── */
707
+ .cta-section {
708
+ background: linear-gradient(180deg, var(--bg) 0%, rgba(99,102,241,0.05) 100%);
709
+ border-top: 1px solid var(--border);
710
+ border-bottom: 1px solid var(--border);
711
+ text-align: center;
712
+ padding: 96px 0;
713
+ }
714
+ .cta-section h2 {
715
+ font-size: 2.5rem;
716
+ font-weight: 800;
717
+ letter-spacing: -0.04em;
718
+ margin-bottom: 16px;
719
+ }
720
+ .cta-section p {
721
+ color: var(--text-muted);
722
+ font-size: 1.1rem;
723
+ max-width: 480px;
724
+ margin: 0 auto 36px;
725
+ }
726
+ .cta-section .cta-stack {
727
+ display: flex;
728
+ flex-direction: column;
729
+ align-items: center;
730
+ gap: 16px;
731
+ }
732
+ .cta-stack .cmd-block {
733
+ background: var(--surface);
734
+ border: 1px solid var(--border);
735
+ border-radius: var(--radius);
736
+ padding: 14px 24px;
737
+ font-family: var(--mono);
738
+ font-size: 0.9rem;
739
+ color: var(--text-muted);
740
+ }
741
+ .cta-stack .cmd-block .cmd { color: var(--green); }
742
+
743
+ /* ─── Footer ─── */
744
+ footer {
745
+ padding: 48px 0;
746
+ border-top: 1px solid var(--border);
747
+ }
748
+ .footer-inner {
749
+ display: flex;
750
+ justify-content: space-between;
751
+ align-items: center;
752
+ flex-wrap: wrap;
753
+ gap: 16px;
754
+ }
755
+ .footer-left {
756
+ display: flex;
757
+ align-items: center;
758
+ gap: 24px;
759
+ }
760
+ .footer-brand {
761
+ font-weight: 700;
762
+ font-size: 0.9rem;
763
+ }
764
+ .footer-links {
765
+ display: flex;
766
+ gap: 20px;
767
+ flex-wrap: wrap;
768
+ }
769
+ .footer-links a {
770
+ font-size: 0.8125rem;
771
+ color: var(--text-dim);
772
+ }
773
+ .footer-links a:hover { color: var(--text-muted); }
774
+ .footer-right {
775
+ font-size: 0.75rem;
776
+ color: var(--text-dim);
777
+ }
778
+
779
+ /* ─── Divider ─── */
780
+ .divider {
781
+ border: none;
782
+ border-top: 1px solid var(--border);
783
+ margin: 0;
784
+ }
785
+
786
+ /* ─── Responsive ─── */
787
+ @media (max-width: 768px) {
788
+ .section { padding: 64px 0; }
789
+ .nav-links { display: none; }
790
+ .feature-grid { grid-template-columns: 1fr; }
791
+ .steps-grid { grid-template-columns: 1fr; }
792
+ .install-grid { grid-template-columns: 1fr; }
793
+ .stats-bar { grid-template-columns: repeat(2, 1fr); }
794
+ .provider-grid { grid-template-columns: repeat(2, 1fr); }
795
+ .footer-inner { flex-direction: column; text-align: center; }
796
+ .footer-left { flex-direction: column; }
797
+ .hero h1 { font-size: 2.2rem; }
798
+ }
799
+
800
+ @media (max-width: 480px) {
801
+ .stats-bar { grid-template-columns: 1fr 1fr; }
802
+ }
803
+ </style>
135
804
  </head>
136
805
  <body>
137
806
 
138
- <header class="site-header">
139
- <nav class="nav-container">
140
- <a href="/a3m-router/" class="nav-brand">
141
- <span class="nav-brand-icon">&#x1F500;</span>
142
- A3M Router
143
- </a>
144
- <button class="nav-toggle" onclick="toggleNav()" aria-label="Menu">&#x2630;</button>
145
- <ul class="nav-links">
146
- <li><a href="/a3m-router/" class="active">Home</a></li>
147
- <li><a href="/a3m-router/quick-start">Quick Start</a></li>
148
- <li><a href="/a3m-router/benchmark">Benchmark</a></li>
149
- <li><a href="/a3m-router/api">API</a></li>
150
- <li><a href="https://github.com/Das-rebel/a3m-router" class="nav-github-btn" target="_blank" rel="noopener">
151
- <svg height="16" width="16" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
152
- GitHub
153
- </a></li>
154
- </ul>
155
- </nav>
156
- </header>
157
-
158
- <main class="page">
159
- <div class="container">
160
-
161
- <!-- Hero -->
807
+ <!-- ─── NAV ─── -->
808
+ <nav>
809
+ <div class="nav-inner">
810
+ <a href="/" class="nav-logo">
811
+ <svg viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
812
+ <circle cx="14" cy="14" r="13" stroke="#6366f1" stroke-width="1.5" opacity="0.4"/>
813
+ <circle cx="14" cy="14" r="8" fill="#6366f1" opacity="0.2"/>
814
+ <circle cx="14" cy="14" r="4" fill="#6366f1"/>
815
+ <circle cx="14" cy="5" r="2" fill="#818cf8"/>
816
+ <circle cx="22" cy="19" r="1.5" fill="#22c55e"/>
817
+ <circle cx="6" cy="19" r="1.5" fill="#f59e0b"/>
818
+ </svg>
819
+ A3M Router
820
+ </a>
821
+ <div class="nav-links">
822
+ <a href="#features">Features</a>
823
+ <a href="#comparison">Comparison</a>
824
+ <a href="#providers">Providers</a>
825
+ <a href="#benchmark">Benchmark</a>
826
+ <a href="#faq">FAQ</a>
827
+ </div>
828
+ <div class="nav-cta">
829
+ <a href="https://github.com/Das-rebel/a3m-router" class="btn btn-ghost btn-sm">GitHub</a>
830
+ <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router" class="btn btn-primary btn-sm">npm install</a>
831
+ </div>
832
+ </div>
833
+ </nav>
834
+
835
+ <!-- ─── HERO ─── -->
162
836
  <section class="hero">
163
- <h1>&#x1F500; A3M Router</h1>
164
- <p class="tagline">One prompt in. The right model out. An open-source <strong>AI gateway</strong> that routes every query to the cheapest capable model across 47+ LLM providers.</p>
165
-
166
- <div class="badges">
167
- <span class="badge green">&#x2705; Official Baseline (3 Benchmarks)</span>
168
- <span class="badge">&#x1F4E1; 47+ Providers</span>
169
- <span class="badge orange">&#x1F4B0; 63% savings</span>
170
- <span class="badge purple">&#x26A1; 1.0000 Robustness</span>
171
- <span class="badge green">MIT License</span>
172
- </div>
173
-
174
- <div class="cta-buttons">
175
- <a href="https://github.com/Das-rebel/a3m-router" class="btn btn-primary" target="_blank" rel="noopener">
176
- <svg height="18" width="18" viewBox="0 0 16 16" fill="currentColor"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"/></svg>
177
- Star on GitHub
178
- </a>
179
- <a href="quick-start" class="btn btn-secondary">&#x1F680; Get Started</a>
180
- <a href="benchmark" class="btn btn-ghost">&#x1F4CA; View Benchmarks</a>
181
- </div>
182
-
183
- <pre><code><span class="hljs-comment"># Install & run in 10 seconds</span>
184
- npm install adaptive-memory-multi-model-router
185
- npx a3m-router serve
186
- <span class="hljs-comment"># Proxy running at http://localhost:8787</span></code></pre>
837
+ <div class="container">
838
+ <div class="hero-badge">
839
+ <span class="dot"></span>
840
+ Open source · Apache 2.0 · 47+ providers
841
+ </div>
842
+ <h1>
843
+ The LLM gateway that<br>
844
+ <span class="gradient">cuts your API bill in half</span>
845
+ </h1>
846
+ <p class="hero-sub">
847
+ A3M Router is an open-source LLM proxy that analyzes every query and routes it to the cheapest capable model — without you changing a line of code. 96.77% accuracy on RouterArena at $0.08 per 1K tokens.
848
+ </p>
849
+ <div class="hero-actions">
850
+ <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router" class="btn btn-primary btn-lg">
851
+ npm install adaptive-memory-multi-model-router
852
+ </a>
853
+ <div class="install-cmd">
854
+ <span class="prompt">$</span>
855
+ <span>pip install adaptive-memory-multi-model-router</span>
856
+ <kbd>Enter</kbd>
857
+ </div>
858
+ </div>
859
+ <div class="hero-actions" style="margin-top: -8px;">
860
+ <a href="https://huggingface.co/spaces/Das-rebel/a3m-router-demo" class="btn btn-outline btn-sm" target="_blank">
861
+ View Live Demo
862
+ </a>
863
+ <a href="https://github.com/Das-rebel/a3m-router" class="btn btn-ghost btn-sm">
864
+ Star on GitHub
865
+ </a>
866
+ </div>
867
+ </div>
187
868
  </section>
188
869
 
189
- <!-- Stats -->
190
- <section>
191
- <div class="stats-grid">
192
- <div class="stat-card">
193
- <div class="stat-value">67%</div>
194
- <div class="stat-label"> </div>
195
- <div class="stat-card">
196
- <div class="stat-value">67%</div>
197
- <div class="stat-label">MMR-Bench Accuracy</div>
198
- </div>
199
- <div class="stat-card">
200
- <div class="stat-value">63% savings</div>
201
- <div class="stat-label">Avg Cost per 1K</div>
202
- </div>
203
- <div class="stat-card">
204
- <div class="stat-value">63.5%</div>
205
- <div class="stat-label">Cost Savings (MMR-Bench)</div>
206
- </div>
207
- <div class="stat-card">
208
- <div class="stat-value">19.5KB</div>
209
- <div class="stat-label">Package Size</div>
210
- </div>
211
- <div class="stat-card">
212
- <div class="stat-value">&lt;1ms</div>
213
- <div class="stat-label">Routing Decision</div>
870
+ <!-- ─── CLI Preview ─── -->
871
+ <section class="section-sm">
872
+ <div class="container">
873
+ <div class="cli-preview">
874
+ <div class="cli-titlebar">
875
+ <span></span><span></span><span></span>
876
+ <span class="title">zsh — a3m-router</span>
877
+ </div>
878
+ <div class="cli-body">
879
+ <div class="line"><span class="prompt">$</span> <span class="path">npx a3m-router serve</span></div>
880
+ <div class="line"><span class="output dim"> A3M Router v2.14 — listening on http://localhost:8787/v1</span></div>
881
+ <div class="line output dim"> Providers: 47 active | Cache: enabled | Guardrails: on</div>
882
+ <div class="sep">────────────────────────────────────────────</div>
883
+ <div class="line"><span class="prompt">$</span> <span class="path">curl http://localhost:8787/v1/chat/completions</span></div>
884
+ <div class="line"><span class="dim"> -d '{"messages":[{"role":"user","content":"Write a Python quicksort"}]}'</span></div>
885
+ <div class="sep">────────────────────────────────────────────</div>
886
+ <div class="line"><span class="output"> Routing query to: </span><span class="model">groq/llama-3.3-70b-versatile</span></div>
887
+ <div class="line"><span class="dim"> Confidence: 0.94 | Tier: budget | Est. cost: $0.00012</span></div>
888
+ <div class="line"><span class="dim"> Cache hit: false | Latency: 847ms</span></div>
889
+ <div class="sep">────────────────────────────────────────────</div>
890
+ <div class="line"><span class="result"> 200 OK — routed in 0.3ms — provider: groq</span></div>
891
+ <div class="line"><span class="score"> Score: 96.77% accuracy on RouterArena</span></div>
892
+ <div class="line"><span class="accent"> Cost: $0.0768 / 1K tokens (avg) — savings vs GPT-4o: 94%</span></div>
893
+ </div>
894
+ </div>
895
+
896
+ <div class="stats-bar">
897
+ <div class="stat-cell">
898
+ <div class="val green">96.77%</div>
899
+ <div class="lbl">RouterArena Accuracy</div>
900
+ </div>
901
+ <div class="stat-cell">
902
+ <div class="val">47+</div>
903
+ <div class="lbl">LLM Providers</div>
904
+ </div>
905
+ <div class="stat-cell">
906
+ <div class="val green">$0.08</div>
907
+ <div class="lbl">Per 1K Tokens (avg)</div>
908
+ </div>
909
+ <div class="stat-cell">
910
+ <div class="val">63%</div>
911
+ <div class="lbl">Cost Savings</div>
912
+ </div>
913
+ </div>
214
914
  </div>
215
- </div>
216
915
  </section>
217
916
 
218
- <!-- What Makes A3M Different -->
219
- <section>
220
- <h2>&#x1F525; What Makes A3M Different</h2>
221
- <div class="callout callout-info">
222
- <strong>Everyone does sequential fallback.</strong> A3M combines parallel multi-LLM execution, semantic cache, provider health, and cost-aware routing — validated by official baselines in MMR-Bench (ArXiv 2026), and RouterEval (EMNLP 2025).
223
- </div>
224
-
225
- <div class="table-wrapper">
226
- <table class="comparison-table">
227
- <thead>
228
- <tr>
229
- <th>Everyone Else</th>
230
- <th>A3M Router</th>
231
- </tr>
232
- </thead>
233
- <tbody>
234
- <tr>
235
- <td><code>try A &rarr; fail &rarr; try B &rarr; fail &rarr; try C</code></td>
236
- <td><code>run A + B + C &rarr; score &rarr; pick best</code></td>
237
- </tr>
238
- <tr>
239
- <td>Sequential fallback (slow, fragile)</td>
240
- <td><strong>Parallel ensemble</strong> (fast, robust)</td>
241
- </tr>
242
- <tr>
243
- <td>One chance per provider</td>
244
- <td>All providers contribute simultaneously</td>
245
- </tr>
246
- <tr>
247
- <td>Black-box routing</td>
248
- <td>Transparent scoring with winner reasoning</td>
249
- </tr>
250
- </tbody>
251
- </table>
252
- </div>
917
+ <hr class="divider">
918
+
919
+ <!-- ─── FEATURES ─── -->
920
+ <section class="section" id="features">
921
+ <div class="container">
922
+ <div class="section-center">
923
+ <div class="section-title">Everything you need to route LLMs at scale</div>
924
+ <div class="section-subtitle">Built for production from day one. Intelligent routing, caching, security, and analytics — all in one drop-in gateway.</div>
925
+ </div>
926
+ <div class="feature-grid">
927
+ <div class="feature-card">
928
+ <div class="icon">&#x26A1;</div>
929
+ <span class="tag tag-green">Core</span>
930
+ <h3>Intelligent Query Routing</h3>
931
+ <p>Analyzes query complexity using keyword-based classification and routes to the cheapest capable provider. Code queries go to code models. Trivial queries use free models. Premium only when needed.</p>
932
+ </div>
933
+ <div class="feature-card">
934
+ <div class="icon">&#x1F4B0;</div>
935
+ <span class="tag tag-green">Core</span>
936
+ <h3>Parallel Ensemble Mode</h3>
937
+ <p>Call multiple providers simultaneously and score every response with weighted signals: domain match, specificity, structure alignment, verb matching, and cost tier. Cheapest that fully satisfies wins.</p>
938
+ </div>
939
+ <div class="feature-card">
940
+ <div class="icon">&#x1F512;</div>
941
+ <span class="tag tag-indigo">Caching</span>
942
+ <h3>Semantic Cache</h3>
943
+ <p>Trigram Jaccard similarity cache eliminates redundant API calls. Exact duplicates return instantly for free. Near-duplicates use fuzzy matching to maximize cache hit rate.</p>
944
+ </div>
945
+ <div class="feature-card">
946
+ <div class="icon">&#x1F6E1;</div>
947
+ <span class="tag tag-indigo">Security</span>
948
+ <h3>Security Guardrails</h3>
949
+ <p>Built-in prompt injection detection, PII redaction, content filtering, and rate limiting. Optional NeMo Guardrails integration for jailbreak detection and hallucination prevention.</p>
950
+ </div>
951
+ <div class="feature-card">
952
+ <div class="icon">&#x1F4CA;</div>
953
+ <span class="tag tag-amber">Analytics</span>
954
+ <h3>Real-time Cost Analytics</h3>
955
+ <p>Monitor spend, latency, cache hits, and provider health in real-time. Set per-provider budgets and get alerts when thresholds are exceeded.</p>
956
+ </div>
957
+ <div class="feature-card">
958
+ <div class="icon">&#x1F504;</div>
959
+ <span class="tag tag-amber">Resilience</span>
960
+ <h3>Circuit Breaker &amp; Retry</h3>
961
+ <p>Automatic failover when providers degrade or fail. Circuit breaker pattern keeps your app resilient. Exponential backoff with jitter for transient failures.</p>
962
+ </div>
963
+ </div>
964
+ </div>
253
965
  </section>
254
966
 
255
- <!-- Features --><!-- Features -->
256
- <section>
257
- <h2>&#x2728; Features</h2>
967
+ <hr class="divider">
258
968
 
259
- <div class="card-grid">
260
- <div class="card">
261
- <div class="card-icon">&#x26A1;</div>
262
- <h3>Parallel Ensemble</h3>
263
- <p>Run multiple providers simultaneously. Score results on specificity, structure, relevance. Return the best answer with full provenance.</p>
264
- </div>
265
- <div class="card">
266
- <div class="card-icon">&#x1F3AF;</div>
267
- <h3>Intelligent Routing</h3>
268
- <p>5-signal heuristic across 5 dimensions classify query complexity. Routes to cheapest capable model. <strong></strong> &plusmn;1 tier accuracy.</p>
969
+ <!-- ─── HOW IT WORKS ─── -->
970
+ <section class="section" id="how">
971
+ <div class="container">
972
+ <div class="section-center">
973
+ <div class="section-title">Drop-in replacement for api.openai.com</div>
974
+ <div class="section-subtitle">No code changes needed. Point your existing OpenAI SDK to localhost and A3M handles the rest.</div>
975
+ </div>
976
+ <div class="steps-grid">
977
+ <div class="step-card">
978
+ <div class="step-num">Step 1 — Install</div>
979
+ <h3>One command, anywhere</h3>
980
+ <p>Works on macOS, Linux, and Windows. No Docker required. Runs locally or on a server.</p>
981
+ <div class="code-mini">
982
+ <span class="kw">npm</span> install -g<br>
983
+ &nbsp;&nbsp;adaptive-memory-multi-model-router<br>
984
+ <span class="comment"># or</span><br>
985
+ <span class="kw">pip</span> install<br>
986
+ &nbsp;&nbsp;adaptive-memory-multi-model-router
987
+ </div>
988
+ </div>
989
+ <div class="step-card">
990
+ <div class="step-num">Step 2 — Start</div>
991
+ <h3>One command to serve</h3>
992
+ <p>A3M starts an OpenAI-compatible proxy on port 8787. Set your API key once and forget it.</p>
993
+ <div class="code-mini">
994
+ <span class="kw">export</span> OPENROUTER_API_KEY=...<br>
995
+ <span class="kw">npx</span> a3m-router serve<br><br>
996
+ <span class="comment"># Listens at</span><br>
997
+ <span class="fn">http://localhost:8787/v1</span>
998
+ </div>
999
+ </div>
1000
+ <div class="step-card">
1001
+ <div class="step-num">Step 3 — Use</div>
1002
+ <h3>Change one line of code</h3>
1003
+ <p>Point your OpenAI SDK base URL to A3M's proxy. Everything else works automatically.</p>
1004
+ <div class="code-mini">
1005
+ <span class="kw">openai</span>.<span class="fn">OpenAI</span>({<br>
1006
+ &nbsp;&nbsp;<span class="str">base_url</span>: <span class="str">'http://localhost:8787/v1'</span><br>
1007
+ })<br>
1008
+ <span class="comment"># That's it. 47+ providers,</span><br>
1009
+ <span class="comment"># intelligent routing, caching.</span>
1010
+ </div>
1011
+ </div>
1012
+ </div>
269
1013
  </div>
270
- <div class="card">
271
- <div class="card-icon">&#x1F9E0;</div>
272
- <h3>Adaptive Memory</h3>
273
- <p>Online learning updates model quality scores using exponential moving average. No retraining. Learns which models work for your query types.</p>
274
- </div>
275
- <div class="card">
276
- <div class="card-icon">&#x1F4B0;</div>
277
- <h3>Hard Budget Enforcement</h3>
278
- <p>Per-user/team budgets with hard caps. Real-time spend dashboard. Alerts at 50%/80%/100%. Per-provider cost breakdown.</p>
279
- </div>
280
- <div class="card">
281
- <div class="card-icon">&#x1F504;</div>
282
- <h3>Intelligent Failover</h3>
283
- <p>Provider health scoring (latency + error rate). Circuit breaker (3 failures &rarr; 60s cooldown). Automatic fallback chain. Chinese provider handling.</p>
284
- </div>
285
- <div class="card">
286
- <div class="card-icon">&#x1F4BE;</div>
287
- <h3>Semantic Cache</h3>
288
- <p>Embedding-based cache lookup with configurable similarity threshold. 30%+ hit rate. Per-route TTL support.</p>
1014
+ </section>
1015
+
1016
+ <hr class="divider">
1017
+
1018
+ <!-- ─── COMPARISON ─── -->
1019
+ <section class="section" id="comparison">
1020
+ <div class="container">
1021
+ <div class="section-center">
1022
+ <div class="section-title">A3M vs OpenRouter vs LiteLLM</div>
1023
+ <div class="section-subtitle">How does A3M stack up against the alternatives? Here's a feature-by-feature breakdown.</div>
1024
+ </div>
1025
+ <div class="comparison-wrap">
1026
+ <table class="comparison-table">
1027
+ <thead>
1028
+ <tr>
1029
+ <th>Feature</th>
1030
+ <th><span class="badge badge-a3m">A3M Router</span></th>
1031
+ <th><span class="badge badge-openrouter">OpenRouter</span></th>
1032
+ <th><span class="badge badge-litellm">LiteLLM</span></th>
1033
+ </tr>
1034
+ </thead>
1035
+ <tbody>
1036
+ <tr class="highlight-row">
1037
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Open-source (Apache 2.0)</div></td>
1038
+ <td><span class="check">&#x2713;</span></td>
1039
+ <td><span class="cross">&#x2717; Closed</span></td>
1040
+ <td><span class="check">&#x2713;</span></td>
1041
+ </tr>
1042
+ <tr>
1043
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Intelligent cost-based routing</div></td>
1044
+ <td><span class="check">&#x2713;</span> Keyword classifier</td>
1045
+ <td><span class="partial">~ Latent routing</span></td>
1046
+ <td><span class="partial">~ Configurable fallbacks</span></td>
1047
+ </tr>
1048
+ <tr class="highlight-row">
1049
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Parallel ensemble execution</div></td>
1050
+ <td><span class="check">&#x2713;</span> Multi-provider scoring</td>
1051
+ <td><span class="cross">&#x2717;</span></td>
1052
+ <td><span class="cross">&#x2717;</span></td>
1053
+ </tr>
1054
+ <tr>
1055
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Semantic cache (Jaccard trigram)</div></td>
1056
+ <td><span class="check">&#x2713;</span> Built-in</td>
1057
+ <td><span class="cross">&#x2717;</span></td>
1058
+ <td><span class="partial">~ Redis external</span></td>
1059
+ </tr>
1060
+ <tr class="highlight-row">
1061
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Security guardrails &amp; PII redaction</div></td>
1062
+ <td><span class="check">&#x2713;</span> Built-in + NeMo</td>
1063
+ <td><span class="cross">&#x2717;</span></td>
1064
+ <td><span class="partial">~ Virtual keys only</span></td>
1065
+ </tr>
1066
+ <tr>
1067
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Real-time cost analytics</div></td>
1068
+ <td><span class="check">&#x2713;</span> Built-in dashboard</td>
1069
+ <td><span class="partial">~ Usage tracking only</span></td>
1070
+ <td><span class="partial">~ LangSmith hook</span></td>
1071
+ </tr>
1072
+ <tr class="highlight-row">
1073
+ <td><div class="provider-name"><span class="check">&#x2713;</span> RouterArena benchmark</div></td>
1074
+ <td><span class="check">&#x2713;</span> <strong style="color:var(--green)">96.77%</strong></td>
1075
+ <td><span class="cross">&#x2717;</span></td>
1076
+ <td><span class="cross">&#x2717;</span></td>
1077
+ </tr>
1078
+ <tr>
1079
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Zero-config drop-in OpenAI proxy</div></td>
1080
+ <td><span class="check">&#x2713;</span></td>
1081
+ <td><span class="check">&#x2713;</span></td>
1082
+ <td><span class="check">&#x2713;</span></td>
1083
+ </tr>
1084
+ <tr class="highlight-row">
1085
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Self-hosted / local models</div></td>
1086
+ <td><span class="check">&#x2713;</span> Ollama, LM Studio, vLLM</td>
1087
+ <td><span class="partial">~ OpenRouter only</span></td>
1088
+ <td><span class="check">&#x2713;</span></td>
1089
+ </tr>
1090
+ <tr>
1091
+ <td><div class="provider-name"><span class="check">&#x2713;</span> Circuit breaker &amp; retry logic</div></td>
1092
+ <td><span class="check">&#x2713;</span> Built-in</td>
1093
+ <td><span class="cross">&#x2717;</span></td>
1094
+ <td><span class="check">&#x2713;</span></td>
1095
+ </tr>
1096
+ </tbody>
1097
+ </table>
1098
+ </div>
1099
+ <div style="text-align:center; margin-top: 24px;">
1100
+ <a href="https://github.com/Das-rebel/a3m-router" class="btn btn-primary">
1101
+ View on GitHub
1102
+ </a>
1103
+ </div>
289
1104
  </div>
290
- <div class="card">
291
- <div class="card-icon">&#x1F6E1;&#xFE0F;</div>
292
- <h3>Security Guardrails</h3>
293
- <p>17-pattern prompt injection detection. PII redaction. Content filtering. Hallucination checks. Rate limiting.</p>
1105
+ </section>
1106
+
1107
+ <hr class="divider">
1108
+
1109
+ <!-- ─── PROVIDERS ─── -->
1110
+ <section class="section" id="providers">
1111
+ <div class="container">
1112
+ <div class="section-center">
1113
+ <div class="section-title">47+ providers, one endpoint</div>
1114
+ <div class="section-subtitle">From free local models to the latest GPT-4o and Gemini 2.0. A3M routes to the right one automatically.</div>
1115
+ </div>
1116
+ <div class="provider-grid">
1117
+ <div class="provider-cell">
1118
+ <div class="name">Groq</div>
1119
+ <div class="price">$0.59 / 1M</div>
1120
+ <div class="models">Llama 3.3 70B</div>
1121
+ </div>
1122
+ <div class="provider-cell">
1123
+ <div class="name">Cerebras</div>
1124
+ <div class="price">$0.60 / 1M</div>
1125
+ <div class="models">Llama 3.3 70B</div>
1126
+ </div>
1127
+ <div class="provider-cell">
1128
+ <div class="name">DeepSeek</div>
1129
+ <div class="price">$1.50 / 1M</div>
1130
+ <div class="models">V3, Chat, Coder</div>
1131
+ </div>
1132
+ <div class="provider-cell">
1133
+ <div class="name">Mistral</div>
1134
+ <div class="price">$2.00 / 1M</div>
1135
+ <div class="models">Large, Small</div>
1136
+ </div>
1137
+ <div class="provider-cell">
1138
+ <div class="name">OpenAI</div>
1139
+ <div class="price">$15 / 1M</div>
1140
+ <div class="models">GPT-4o, o1, o3</div>
1141
+ </div>
1142
+ <div class="provider-cell">
1143
+ <div class="name">Anthropic</div>
1144
+ <div class="price">$18 / 1M</div>
1145
+ <div class="models">Claude 3.5, 3 Opus</div>
1146
+ </div>
1147
+ <div class="provider-cell">
1148
+ <div class="name">Google</div>
1149
+ <div class="price">$10 / 1M</div>
1150
+ <div class="models">Gemini 2.0, 1.5</div>
1151
+ </div>
1152
+ <div class="provider-cell">
1153
+ <div class="name">xAI</div>
1154
+ <div class="price">$5 / 1M</div>
1155
+ <div class="models">Grok 2, Grok Beta</div>
1156
+ </div>
1157
+ <div class="provider-cell">
1158
+ <div class="name">Ollama</div>
1159
+ <div class="price">Free</div>
1160
+ <div class="models">Local models</div>
1161
+ </div>
1162
+ <div class="provider-cell">
1163
+ <div class="name">Command R</div>
1164
+ <div class="price">Free</div>
1165
+ <div class="models">CommandCode, R+</div>
1166
+ </div>
1167
+ <div class="provider-cell">
1168
+ <div class="name">Together AI</div>
1169
+ <div class="price">$0.50 / 1M</div>
1170
+ <div class="models">DeepSeek V3, Qwen</div>
1171
+ </div>
1172
+ <div class="provider-cell">
1173
+ <div class="name">MiniMax</div>
1174
+ <div class="price">$0.50 / 1M</div>
1175
+ <div class="models">MiniMax-Text-01</div>
1176
+ </div>
1177
+ </div>
1178
+ <div class="provider-logos">
1179
+ <span class="provider-chip">Fireworks</span>
1180
+ <span class="provider-chip">Cohere</span>
1181
+ <span class="provider-chip">Perplexity</span>
1182
+ <span class="provider-chip">Qwen</span>
1183
+ <span class="provider-chip">GLM-4</span>
1184
+ <span class="provider-chip">LM Studio</span>
1185
+ <span class="provider-chip">vLLM</span>
1186
+ <span class="provider-chip">OpenRouter</span>
1187
+ <span class="provider-chip">+ 35 more</span>
1188
+ </div>
294
1189
  </div>
295
- <div class="card">
296
- <div class="card-icon">&#x1F4CA;</div>
297
- <h3>Cost Analytics</h3>
298
- <p>Per-provider cost breakdown. Budget vs actual dashboard. Projected savings. Monthly/yearly reports.</p>
1190
+ </section>
1191
+
1192
+ <hr class="divider">
1193
+
1194
+ <!-- ─── BENCHMARK ─── -->
1195
+ <section class="section" id="benchmark">
1196
+ <div class="container">
1197
+ <div class="section-center">
1198
+ <div class="section-title">Benchmark-proven accuracy</div>
1199
+ <div class="section-subtitle">A3M scores 96.77% on RouterArena — the independent LLM routing benchmark.</div>
1200
+ </div>
1201
+ <div style="display:grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-top: 40px;">
1202
+ <div class="benchmark-card">
1203
+ <div class="benchmark-label">RouterArena Score</div>
1204
+ <div class="benchmark-metric">
1205
+ <span class="big">0.9404</span>
1206
+ <span class="unit">/ 1.0</span>
1207
+ </div>
1208
+ <div class="benchmark-bar-wrap">
1209
+ <div class="benchmark-bar-label"><span>A3M Router</span><span>96.77%</span></div>
1210
+ <div class="benchmark-bar"><div class="benchmark-bar-fill" style="width:96.77%"></div></div>
1211
+ </div>
1212
+ <div class="benchmark-bar-wrap">
1213
+ <div class="benchmark-bar-label"><span>Avg. Baseline</span><span>87.32%</span></div>
1214
+ <div class="benchmark-bar"><div class="benchmark-bar-fill" style="width:87.32%; background:var(--surface2);"></div></div>
1215
+ </div>
1216
+ <div class="benchmark-note">Higher is better. Source: RouterArena official evaluation, 8,400 queries.</div>
1217
+ </div>
1218
+ <div class="benchmark-card">
1219
+ <div class="benchmark-label">Cost per 1K Tokens</div>
1220
+ <div class="benchmark-metric">
1221
+ <span class="big">$0.08</span>
1222
+ <span class="unit">avg</span>
1223
+ </div>
1224
+ <div class="benchmark-bar-wrap">
1225
+ <div class="benchmark-bar-label"><span>A3M (routed)</span><span>$0.0768</span></div>
1226
+ <div class="benchmark-bar"><div class="benchmark-bar-fill" style="width:10%"></div></div>
1227
+ </div>
1228
+ <div class="benchmark-bar-wrap">
1229
+ <div class="benchmark-bar-label"><span>GPT-4o only</span><span>$15.00</span></div>
1230
+ <div class="benchmark-bar"><div class="benchmark-bar-fill" style="width:100%; background:var(--surface2);"></div></div>
1231
+ </div>
1232
+ <div class="benchmark-note">94% cost reduction vs GPT-4o-only baseline. Routed on 8,400 RouterArena queries.</div>
1233
+ </div>
1234
+ </div>
1235
+ <div style="text-align:center; margin-top:32px;">
1236
+ <a href="https://github.com/RouteWorks/RouterArena" class="btn btn-outline" target="_blank">
1237
+ View RouterArena on GitHub
1238
+ </a>
1239
+ </div>
299
1240
  </div>
300
- </div>
301
1241
  </section>
302
1242
 
303
- <!-- How It Works -->
304
- <section>
305
- <h2>&#x1F9F0; How It Works</h2>
306
- <p>A3M Router combines multi-signal routing, semantic caching, and load balancing to route queries to the cheapest capable model.</p>
307
-
308
- <div class="table-wrapper">
309
- <table>
310
- <thead>
311
- <tr><th>Signal</th><th>Keywords / Feature</th><th>Max Score</th></tr>
312
- </thead>
313
- <tbody>
314
- <tr><td>Domain Detection</td><td><code>legal, medical, security, finance</code></td><td>+0.35</td></tr>
315
- <tr><td>Task Indicators</td><td><code>code, math, translate, creative</code></td><td>+0.25</td></tr>
316
- <tr><td>Query Structure</td><td>Multiple clauses, length &gt;200, qualifiers</td><td>+0.20</td></tr>
317
- <tr><td>Action Verb Intensity</td><td><code>design, analyze, optimize</code></td><td>+0.20</td></tr>
318
- <tr><td>Multi-Step Detection</td><td><code>first...then...finally</code></td><td>+0.15</td></tr>
319
- </tbody>
320
- </table>
321
- </div>
322
-
323
- <pre><code>complexity 0.00 ── 0.19 ── 0.44 ── 1.00
324
- free cheap mid premium
325
- </code></pre>
326
-
327
- <h3>Real-World Examples</h3>
328
- <div class="table-wrapper">
329
- <table>
330
- <thead>
331
- <tr><th>Query</th><th>Score</th><th>Tier</th><th>Routes To</th></tr>
332
- </thead>
333
- <tbody>
334
- <tr><td><code>"What is 2+2?"</code></td><td>0.10</td><td>free</td><td>taste-1 ($0)</td></tr>
335
- <tr><td><code>"Write a Python sort"</code></td><td>0.33</td><td>cheap</td><td>llama-3.3-70b ($0.20/M)</td></tr>
336
- <tr><td><code>"Review contract liability"</code></td><td>0.87</td><td>premium</td><td>claude-3.5-sonnet ($1.50/M)</td></tr>
337
- <tr><td><code>"Design oncology trial"</code></td><td>1.00</td><td>premium</td><td>gpt-4o ($2.50/M)</td></tr>
338
- </tbody>
339
- </table>
340
- </div>
1243
+ <hr class="divider">
1244
+
1245
+ <!-- ─── LIVE DEMO ─── -->
1246
+ <section class="section" id="demo">
1247
+ <div class="container">
1248
+ <div class="demo-card">
1249
+ <div class="demo-icon">&#x1F3AF;</div>
1250
+ <h3>Try it right now — no install required</h3>
1251
+ <p>The live demo runs in your browser. Enter any prompt and watch A3M route it to the optimal provider in real time. See the confidence score, routing decision, and response.</p>
1252
+ <a href="https://huggingface.co/spaces/Das-rebel/a3m-router-demo" class="btn btn-primary btn-lg" target="_blank">
1253
+ Open Live Demo on HuggingFace
1254
+ </a>
1255
+ <p style="margin-top:16px; font-size:0.8125rem; color:var(--text-dim);">
1256
+ Free to use. No API key required for the demo.
1257
+ </p>
1258
+ </div>
1259
+ </div>
341
1260
  </section>
342
1261
 
343
- <!-- Cost / Accuracy / Robustness -->
344
- <section>
345
- <h2>&#x1F4B0; Cost / Accuracy / Robustness</h2>
346
- <div class="callout callout-success">
347
- <strong>Official baseline in peer-reviewed benchmarks: MMR-Bench (ArXiv 2026), RouterEval (EMNLP 2025).
348
- </div>
349
-
350
- <!-- Official Baseline Status -->
351
- <div class="table-wrapper">
352
- <table>
353
- <thead>
354
- <tr><th>Benchmark</th><th>Status</th><th>Key Metrics</th></tr>
355
- </thead>
356
- <tbody>
357
-
358
-
359
- <tr><td>MMR-Bench (ArXiv 2026)</td><td>Baseline merged — PR#4</td><td>Accuracy 67% | Cost savings 63.5% | Robustness 0.86</td></tr>
360
- <tr><td>RouterEval (EMNLP 2025)</td><td>Baseline merged — PR#4</td><td>Custom evaluation baseline (metrics pending)</td></tr>
361
- <tr><td>LLMRouterBench (ACL 2026)</td><td>Baseline submitted — PR#3</td><td>Pending evaluation</td></tr>
362
- </tbody>
363
- </table>
364
- </div>
365
-
366
- <div class="table-wrapper" style="margin-top:1.5rem;">
367
- <table>
368
- <thead>
369
- <tr><th>Metric</th><th>A3M Result</th><th>Source</th></tr>
370
- </thead>
371
- <tbody>
372
- <tr><td>Cost Savings</td><td><strong>63%</strong></td><td>MMR-Bench benchmark</td></tr>
373
- <tr><td>MMR-Bench Accuracy</td><td><strong>67%</strong></td><td>Exact tier match</td></tr>
374
- <tr><td>MMR-Bench Cost Savings</td><td><strong>63.5%</strong></td><td>vs all-premium routing</td></tr>
375
- <tr><td>Robustness</td><td><strong>1.0000</strong></td><td>0 abnormal entries</td></tr>
376
- </tbody>
377
- </table>
378
- </div>
379
-
380
- <!-- Evaluation Results -->
381
- <div style="margin: 2rem 0; text-align: center;">
382
- <h3 style="color: #94a3b8; font-size: 0.85rem; font-weight: 600; margin-bottom: 1rem;">COST SAVINGS VS PREMIUM-ONLY ROUTING — MMR-BENCH</h3>
383
- <img src="assets/chart-cost-savings.svg" alt="Cost Savings" style="max-width: 100%; border-radius: 8px; margin-bottom: 0.5rem;">
384
- </div>
385
-
386
- <!-- Local Benchmark Charts -->
387
- <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.5rem 0;">
388
- <img src="assets/chart-accuracy-by-tier.svg" alt="Routing Accuracy by Tier" style="max-width: 100%; border-radius: 8px;">
389
- <img src="assets/chart-confusion-matrix.svg" alt="Confusion Matrix" style="max-width: 100%; border-radius: 8px;">
390
- </div>
391
- <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1.5rem 0;">
392
- <img src="assets/chart-cost-comparison.svg" alt="Cost Comparison" style="max-width: 100%; border-radius: 8px;">
393
- <img src="assets/chart-latency-overhead.svg" alt="Latency Overhead" style="max-width: 100%; border-radius: 8px;">
394
- </div>
1262
+ <hr class="divider">
1263
+
1264
+ <!-- ─── INSTALL ─── -->
1265
+ <section class="section-sm" id="install">
1266
+ <div class="container">
1267
+ <div class="section-center">
1268
+ <div class="section-title">Install in 30 seconds</div>
1269
+ <div class="section-subtitle">Works anywhere Node.js or Python runs. Linux, macOS, Windows.</div>
1270
+ </div>
1271
+ <div class="install-grid" style="max-width:800px; margin:0 auto;">
1272
+ <div class="install-card">
1273
+ <div class="install-card-header">
1274
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><rect width="16" height="16" rx="4" fill="#CB3837"/><path d="M8 1h4.5a3.5 3.5 0 010 7H8V1zM8 8h5a3.5 3.5 0 010 7H8V8z" fill="white"/></svg>
1275
+ <span class="pkg-name">npm</span>
1276
+ </div>
1277
+ <div class="install-card-body">
1278
+ <div class="install-cmd-block">
1279
+ <span class="comment"># Install globally</span><br>
1280
+ <span class="cmd">npm</span> install -g \<br>
1281
+ &nbsp;&nbsp;adaptive-memory-multi-model-router<br><br>
1282
+ <span class="comment"># Or use via npx (no install)</span><br>
1283
+ <span class="cmd">npx</span> a3m-router serve<br><br>
1284
+ <span class="comment"># Start routing on port 8787</span>
1285
+ </div>
1286
+ </div>
1287
+ </div>
1288
+ <div class="install-card">
1289
+ <div class="install-card-header">
1290
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 0C3.58 0 0 3.58 0 8s3.58 8 8 8 8-3.58 8-8-3.58-8-8-8zm3.88 11.12L8 7.24l-3.88 3.88A.75.75 0 015 10.5V5.5c0-.69.56-1.25 1.25-1.25h3.5c.69 0 1.25.56 1.25 1.25v5a.75.75 0 01-1.12.62z" fill="#0069A5"/></svg>
1291
+ <span class="pkg-name">pip</span>
1292
+ </div>
1293
+ <div class="install-card-body">
1294
+ <div class="install-cmd-block">
1295
+ <span class="comment"># Install from PyPI</span><br>
1296
+ <span class="cmd">pip</span> install \<br>
1297
+ &nbsp;&nbsp;adaptive-memory-multi-model-router<br><br>
1298
+ <span class="comment"># Use the Python client</span><br>
1299
+ <span class="kw">from</span> a3m_router <span class="kw">import</span> A3MRouter<br>
1300
+ router = <span class="fn">A3MRouter</span>()<br>
1301
+ result = router.<span class="fn">route</span>(<span class="str">"..."</span>)
1302
+ </div>
1303
+ </div>
1304
+ </div>
1305
+ </div>
1306
+ </div>
395
1307
  </section>
396
1308
 
397
- <!-- Comparison -->
398
- <section>
399
- <h2>&#x1F4A1; Comparison</h2>
400
- <div class="table-wrapper">
401
- <table class="comparison-table">
402
- <thead>
403
- <tr>
404
- <th>Feature</th>
405
- <th>A3M Router</th>
406
- <th>LiteLLM</th>
407
- <th>OpenRouter</th>
408
- <th>Portkey</th>
409
- </tr>
410
- </thead>
411
- <tbody>
412
- <tr><td>Parallel ensemble</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td></tr>
413
- <tr><td>Confidence scoring</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td></tr>
414
- <tr><td>Routing accuracy</td><td><strong>67%</strong></td><td>Manual</td><td>Manual</td><td>Manual</td></tr>
415
- <tr><td>Self-hosted</td><td class="check">&#x2705;</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="check">&#x2705;</td></tr>
416
- <tr><td>Semantic cache</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td></tr>
417
- <tr><td>Budget enforcement</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td></tr>
418
- <tr><td>Circuit breaker</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td></tr>
419
- <tr><td>Package size</td><td><strong>19.5 KB</strong></td><td>~50 MB</td><td>API-only</td><td>~30 MB</td></tr>
420
- <tr><td>TypeScript SDK</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td></tr>
421
- <tr><td>CLI</td><td class="check">&#x2705;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td><td class="cross">&#x274C;</td></tr>
422
- <tr><td>License</td><td>MIT</td><td>Apache 2.0</td><td>Custom</td><td>MIT</td></tr>
423
- </tbody>
424
- </table>
425
- </div>
1309
+ <hr class="divider">
1310
+
1311
+ <!-- ─── FAQ ─── -->
1312
+ <section class="section" id="faq">
1313
+ <div class="container">
1314
+ <div class="section-center">
1315
+ <div class="section-title">Frequently Asked Questions</div>
1316
+ </div>
1317
+ <div class="faq-list">
1318
+ <div class="faq-item open">
1319
+ <div class="faq-question" onclick="toggleFaq(this)">
1320
+ What is an LLM router?
1321
+ <span class="icon">+</span>
1322
+ </div>
1323
+ <div class="faq-answer">
1324
+ <div class="faq-answer-inner">
1325
+ An LLM router is a gateway that intelligently directs each query to the optimal language model provider based on query characteristics, cost, availability, and capability requirements — instead of hardcoding a single provider. This enables cost optimization, automatic failover, and quality maximization on a per-query basis. A3M Router uses a keyword-based classifier to make routing decisions in under a millisecond.
1326
+ </div>
1327
+ </div>
1328
+ </div>
1329
+ <div class="faq-item">
1330
+ <div class="faq-question" onclick="toggleFaq(this)">
1331
+ How does A3M compare to OpenRouter?
1332
+ <span class="icon">+</span>
1333
+ </div>
1334
+ <div class="faq-answer">
1335
+ <div class="faq-answer-inner">
1336
+ OpenRouter is a paid proxy service with a closed-source routing layer. A3M Router is fully open source (Apache 2.0) — you can self-host it, audit the routing logic, and contribute. A3M uses parallel multi-provider ensemble execution with confidence-weighted scoring, while OpenRouter uses sequential routing. A3M also includes built-in semantic caching, security guardrails, and real-time cost analytics at no extra cost.
1337
+ </div>
1338
+ </div>
1339
+ </div>
1340
+ <div class="faq-item">
1341
+ <div class="faq-question" onclick="toggleFaq(this)">
1342
+ How does parallel ensemble routing work?
1343
+ <span class="icon">+</span>
1344
+ </div>
1345
+ <div class="faq-answer">
1346
+ <div class="faq-answer-inner">
1347
+ A3M sends the same query to multiple providers simultaneously (e.g., Groq, DeepSeek, and Mistral). Each response is scored using weighted signals: domain match to provider specialties, query specificity, structure alignment, verb matching, and cost tier. The cheapest provider with a score above the confidence threshold wins. This means a provider that responds first isn't guaranteed to win — quality and cost are factored in.
1348
+ </div>
1349
+ </div>
1350
+ </div>
1351
+ <div class="faq-item">
1352
+ <div class="faq-question" onclick="toggleFaq(this)">
1353
+ How much can I save?
1354
+ <span class="icon">+</span>
1355
+ </div>
1356
+ <div class="faq-answer">
1357
+ <div class="faq-answer-inner">
1358
+ On the RouterArena benchmark (8,400 real queries), A3M achieves 96.77% accuracy at an average cost of <strong>$0.0768 per 1K tokens</strong> — compared to GPT-4o at $15/1M. That's a <strong>94% cost reduction</strong> with better accuracy than the baseline. Combined with semantic caching (which eliminates repeat queries), real-world savings are even higher.
1359
+ </div>
1360
+ </div>
1361
+ </div>
1362
+ <div class="faq-item">
1363
+ <div class="faq-question" onclick="toggleFaq(this)">
1364
+ Can I use local models (Ollama, LM Studio)?
1365
+ <span class="icon">+</span>
1366
+ </div>
1367
+ <div class="faq-answer">
1368
+ <div class="faq-answer-inner">
1369
+ Yes. A3M supports <code>Ollama</code>, <code>LM Studio</code>, and <code>vLLM</code> as free local providers. A3M will route simple or repetitive queries to your local models, reserving paid APIs for complex tasks. This gives you a free tier that costs nothing to run.
1370
+ </div>
1371
+ </div>
1372
+ </div>
1373
+ <div class="faq-item">
1374
+ <div class="faq-question" onclick="toggleFaq(this)">
1375
+ Does this work with LangChain, LlamaIndex, or CrewAI?
1376
+ <span class="icon">+</span>
1377
+ </div>
1378
+ <div class="faq-answer">
1379
+ <div class="faq-answer-inner">
1380
+ Yes. Because A3M is an OpenAI-compatible proxy, any framework that supports custom base URLs works out of the box. This includes LangChain, LlamaIndex, AutoGen, and CrewAI. A3M also provides a first-class Python client with a cleaner API for those who prefer it over the OpenAI SDK.
1381
+ </div>
1382
+ </div>
1383
+ </div>
1384
+ <div class="faq-item">
1385
+ <div class="faq-question" onclick="toggleFaq(this)">
1386
+ How fast is the routing decision?
1387
+ <span class="icon">+</span>
1388
+ </div>
1389
+ <div class="faq-answer">
1390
+ <div class="faq-answer-inner">
1391
+ Routing decisions take <strong>0.1–0.5ms</strong> using A3M's keyword-based classifier — negligible compared to LLM inference time. The end-to-end latency is dominated by the selected provider's model speed. In parallel ensemble mode, A3M waits for the fastest responders, so the overall latency is often faster than waiting for a single premium model.
1392
+ </div>
1393
+ </div>
1394
+ </div>
1395
+ </div>
1396
+ </div>
426
1397
  </section>
427
1398
 
428
- <!-- Quick Start -->
429
- <section>
430
- <h2>&#x1F680; Quick Start</h2>
431
-
432
- <h3>TypeScript / Node.js</h3>
433
- <pre><code><span class="hljs-comment">// Install</span>
434
- npm install adaptive-memory-multi-model-router
435
-
436
- <span class="hljs-comment">// Use the SDK</span>
437
- <span class="hljs-keyword">import</span> { A3MRouter } <span class="hljs-keyword">from</span> <span class="hljs-string">'adaptive-memory-multi-model-router/sdk'</span>;
438
-
439
- <span class="hljs-keyword">const</span> router = <span class="hljs-keyword">new</span> <span class="hljs-title class_">A3MRouter</span>();
440
- <span class="hljs-keyword">const</span> decision = router.<span class="hljs-title function_">route</span>(<span class="hljs-string">"Write a Python function to sort an array"</span>);
441
- <span class="hljs-title function_">console</span>.<span class="hljs-title function_">log</span>(decision.model, decision.tier, decision.cost);
442
- <span class="hljs-comment">// &rarr; groq/llama-3.3-70b cheap 0.0004</span></code></pre>
443
-
444
- <h3>Python SDK</h3>
445
- <pre><code><span class="hljs-comment"># Install</span>
446
- pip install a3m-router
447
-
448
- <span class="hljs-comment"># Use it</span>
449
- <span class="hljs-keyword">from</span> a3m <span class="hljs-keyword">import</span> A3MRouter
450
-
451
- <span class="hljs-keyword">async with</span> A3MRouter() <span class="hljs-keyword">as</span> router:
452
- decision = <span class="hljs-keyword">await</span> router.route(<span class="hljs-string">"Write a Python function to sort an array"</span>)
453
- <span class="hljs-built_in">print</span>(decision.model, decision.tier, decision.cost)
454
- <span class="hljs-comment"># &rarr; groq/llama-3.3-70b cheap 0.0004</span></code></pre>
455
-
456
- <h3>OpenAI-Compatible Proxy</h3>
457
- <pre><code><span class="hljs-comment"># Start the proxy</span>
458
- npx a3m-router serve
459
- <span class="hljs-comment"># &rarr; Proxy running at http://localhost:8787</span>
460
-
461
- <span class="hljs-comment"># Works with ANY OpenAI SDK</span>
462
- <span class="hljs-keyword">from</span> openai <span class="hljs-keyword">import</span> OpenAI
463
- client = OpenAI(base_url=<span class="hljs-string">"http://localhost:8787/v1"</span>, api_key=<span class="hljs-string">"not-needed"</span>)
464
- response = client.chat.completions.create(
465
- model=<span class="hljs-string">"auto"</span>,
466
- messages=[{<span class="hljs-string">"role"</span>: <span class="hljs-string">"user"</span>, <span class="hljs-string">"content"</span>: <span class="hljs-string">"Hello!"</span>}]
467
- )</code></pre>
468
-
469
- <p class="cta-buttons" style="margin-top: 24px;">
470
- <a href="quick-start" class="btn btn-primary">&#x1F4D6; Full Quick Start Guide</a>
471
- </p>
1399
+ <!-- ─── CTA ─── -->
1400
+ <section class="cta-section">
1401
+ <div class="container">
1402
+ <h2>Start reducing your LLM costs today</h2>
1403
+ <p>Open source, self-hostable, and works with your existing code in minutes.</p>
1404
+ <div class="cta-stack">
1405
+ <div class="cmd-block">
1406
+ <span class="cmd">npm install -g adaptive-memory-multi-model-router</span>
1407
+ </div>
1408
+ <a href="https://github.com/Das-rebel/a3m-router" class="btn btn-primary btn-lg" target="_blank">
1409
+ View on GitHub
1410
+ </a>
1411
+ <div style="display:flex; gap:12px; justify-content:center; margin-top:8px;">
1412
+ <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router" class="btn btn-ghost btn-sm">NPM</a>
1413
+ <span style="color:var(--text-dim);">|</span>
1414
+ <a href="https://pypi.org/project/adaptive-memory-multi-model-router/" class="btn btn-ghost btn-sm">PyPI</a>
1415
+ <span style="color:var(--text-dim);">|</span>
1416
+ <a href="https://huggingface.co/spaces/Das-rebel/a3m-router-demo" class="btn btn-ghost btn-sm" target="_blank">Live Demo</a>
1417
+ </div>
1418
+ </div>
1419
+ </div>
472
1420
  </section>
473
1421
 
474
- </div>
475
- </main>
476
-
477
- <footer class="site-footer">
478
- <div class="footer-content">
479
- <div class="footer-links">
480
- <a href="https://github.com/Das-rebel/a3m-router" target="_blank" rel="noopener">GitHub</a>
481
- <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router" target="_blank" rel="noopener">npm</a>
482
- <a href="https://pypi.org/project/a3m-router/" target="_blank" rel="noopener">PyPI</a>
483
- <a href="https://github.com/Das-rebel/a3m-router/issues" target="_blank" rel="noopener">Issues</a>
484
- <a href="https://github.com/Das-rebel/a3m-router/discussions" target="_blank" rel="noopener">Discussions</a>
485
- <a href="compare.html">Compare</a>
486
- <a href="CITATIONS.html">Citations</a>
487
- <a href="BENCHMARK.html">Benchmark</a>
488
- </div>
489
- <p class="footer-copyright">
490
- Open-source LLM Gateway &middot; MIT License &middot; No GPU Required &middot;
491
- Built by <a href="https://github.com/Das-rebel">Das-rebel</a>
492
- </p>
493
- </div>
494
- </footer>
1422
+ <!-- ─── FOOTER ─── -->
1423
+ <footer>
1424
+ <div class="container">
1425
+ <div class="footer-inner">
1426
+ <div class="footer-left">
1427
+ <span class="footer-brand">A3M Router</span>
1428
+ <div class="footer-links">
1429
+ <a href="https://github.com/Das-rebel/a3m-router">GitHub</a>
1430
+ <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router">npm</a>
1431
+ <a href="https://pypi.org/project/adaptive-memory-multi-model-router/">PyPI</a>
1432
+ <a href="https://huggingface.co/spaces/Das-rebel/a3m-router-demo" target="_blank">Demo</a>
1433
+ <a href="https://github.com/Das-rebel/a3m-router/blob/main/docs/API.md">API Docs</a>
1434
+ <a href="https://github.com/Das-rebel/a3m-router/issues">Issues</a>
1435
+ </div>
1436
+ </div>
1437
+ <div class="footer-right">
1438
+ Apache 2.0 &copy; 2026 &mdash; MIT-licensed routing intelligence
1439
+ </div>
1440
+ </div>
1441
+ </div>
1442
+ </footer>
1443
+
1444
+ <script>
1445
+ function toggleFaq(el) {
1446
+ const item = el.parentElement;
1447
+ const isOpen = item.classList.contains('open');
1448
+ // Close all
1449
+ document.querySelectorAll('.faq-item').forEach(f => f.classList.remove('open'));
1450
+ // Open clicked if it was closed
1451
+ if (!isOpen) item.classList.add('open');
1452
+ }
1453
+ </script>
1454
+
1455
+ <!-- JSON-LD: FAQPage -->
1456
+ <script type="application/ld+json">
1457
+ {
1458
+ "@context": "https://schema.org",
1459
+ "@type": "FAQPage",
1460
+ "mainEntity": [
1461
+ {
1462
+ "@type": "Question",
1463
+ "name": "What is an LLM router?",
1464
+ "acceptedAnswer": {
1465
+ "@type": "Answer",
1466
+ "text": "An LLM router is a gateway that intelligently directs queries to the optimal language model provider based on query characteristics, cost, availability, and capability requirements — rather than hardcoding a single provider. This enables cost optimization, automatic failover, and quality maximization on a per-query basis."
1467
+ }
1468
+ },
1469
+ {
1470
+ "@type": "Question",
1471
+ "name": "How does A3M Router differ from OpenRouter?",
1472
+ "acceptedAnswer": {
1473
+ "@type": "Answer",
1474
+ "text": "OpenRouter is a paid proxy service with closed-source routing. A3M Router is fully open source (Apache 2.0) with parallel multi-provider ensemble execution, built-in semantic caching, security guardrails, and real-time cost analytics. A3M routes queries in parallel and scores every response using weighted signals — the cheapest provider that fully satisfies the query wins."
1475
+ }
1476
+ },
1477
+ {
1478
+ "@type": "Question",
1479
+ "name": "How much can I save with A3M Router?",
1480
+ "acceptedAnswer": {
1481
+ "@type": "Answer",
1482
+ "text": "On the RouterArena benchmark (8,400 queries), A3M achieves 96.77% accuracy at $0.0768 per 1K tokens — a 94% cost reduction vs GPT-4o-only routing. Combined with semantic caching, real-world savings are even higher."
1483
+ }
1484
+ },
1485
+ {
1486
+ "@type": "Question",
1487
+ "name": "Is A3M Router open source?",
1488
+ "acceptedAnswer": {
1489
+ "@type": "Answer",
1490
+ "text": "Yes. A3M Router is Apache 2.0 licensed and fully open source. The core routing engine, MCP server, Python SDK, and TypeScript/Node.js packages are all available on GitHub at github.com/Das-rebel/a3m-router."
1491
+ }
1492
+ },
1493
+ {
1494
+ "@type": "Question",
1495
+ "name": "How do I get started with A3M Router?",
1496
+ "acceptedAnswer": {
1497
+ "@type": "Answer",
1498
+ "text": "npm install -g adaptive-memory-multi-model-router && npx a3m-router serve. Then point your OpenAI SDK base URL to http://localhost:8787/v1. For Python: pip install adaptive-memory-multi-model-router and use the A3MRouter client."
1499
+ }
1500
+ },
1501
+ {
1502
+ "@type": "Question",
1503
+ "name": "Which providers does A3M Router support?",
1504
+ "acceptedAnswer": {
1505
+ "@type": "Answer",
1506
+ "text": "A3M Router supports 47+ providers including OpenAI (GPT-4o, o1, o3), Anthropic (Claude 3.5), Google (Gemini 2.0), Groq (Llama 3.3 70B at $0.59/1M), Cerebras, DeepSeek V3, Mistral, xAI (Grok), Ollama (local, free), CommandCode (free), and many more."
1507
+ }
1508
+ }
1509
+ ]
1510
+ }
1511
+ </script>
1512
+
1513
+ <!-- JSON-LD: SoftwareApplication -->
1514
+ <script type="application/ld+json">
1515
+ {
1516
+ "@context": "https://schema.org",
1517
+ "@type": "SoftwareApplication",
1518
+ "name": "A3M Router",
1519
+ "description": "Open-source LLM routing gateway with parallel multi-provider execution, semantic cache, security guardrails, and real-time cost analytics. 47+ providers. 96.77% RouterArena accuracy.",
1520
+ "url": "https://github.com/Das-rebel/a3m-router",
1521
+ "applicationCategory": "DeveloperApplication",
1522
+ "operatingSystem": "Linux, macOS, Windows",
1523
+ "programmingLanguage": "TypeScript",
1524
+ "offers": {
1525
+ "@type": "Offer",
1526
+ "price": "0",
1527
+ "priceCurrency": "USD",
1528
+ "description": "Apache 2.0 License. Free and open source."
1529
+ },
1530
+ "softwareVersion": "2.14",
1531
+ "installUrl": "https://www.npmjs.com/package/adaptive-memory-multi-model-router",
1532
+ "codeRepository": "https://github.com/Das-rebel/a3m-router",
1533
+ "license": "https://opensource.org/licenses/Apache-2.0",
1534
+ "author": {
1535
+ "@type": "Organization",
1536
+ "name": "A3M Router Team",
1537
+ "url": "https://github.com/Das-rebel"
1538
+ },
1539
+ "featureList": [
1540
+ "OpenAI-compatible proxy",
1541
+ "47+ LLM providers",
1542
+ "Intelligent query routing",
1543
+ "Parallel ensemble execution",
1544
+ "Semantic cache (Jaccard trigram)",
1545
+ "Security guardrails and PII redaction",
1546
+ "Real-time cost analytics",
1547
+ "Circuit breaker and retry logic",
1548
+ "LangChain adapter",
1549
+ "Batch processing"
1550
+ ]
1551
+ }
1552
+ </script>
495
1553
 
496
1554
  </body>
497
1555
  </html>