adaptive-memory-multi-model-router 2.16.2 → 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 (73) 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 -219
  9. package/data/jev-distill.jsonl +320 -0
  10. package/dist/routing/jev/jevRouter.d.ts +49 -0
  11. package/dist/routing/jev/jevRouter.js +231 -0
  12. package/dist/routing/jev/jevRouter.js.map +1 -0
  13. package/dist/routing/jev/optionAttention.d.ts +63 -0
  14. package/dist/routing/jev/optionAttention.js +158 -0
  15. package/dist/routing/jev/optionAttention.js.map +1 -0
  16. package/dist/routing/jev/remote.d.ts +14 -0
  17. package/dist/routing/jev/remote.js +55 -0
  18. package/dist/routing/jev/remote.js.map +1 -0
  19. package/dist/routing/jev/types.d.ts +71 -0
  20. package/dist/routing/jev/types.js +19 -0
  21. package/dist/routing/jev/types.js.map +1 -0
  22. package/dist/routing/jev/weights/jev-router-weights.json +1 -0
  23. package/dist/server/modelMapper.js +18 -0
  24. package/dist/server/modelMapper.js.map +1 -1
  25. package/docs/assets/og-banner.svg +193 -0
  26. package/docs/index.html +1523 -465
  27. package/docs-site/index.html +1427 -563
  28. package/package.json +29 -20
  29. package/python/pyproject.toml +1 -1
  30. package/src/cli/setupWizard.ts +4 -2
  31. package/src/routing/jev/jevRouter.ts +251 -0
  32. package/src/routing/jev/optionAttention.ts +186 -0
  33. package/src/routing/jev/remote.ts +50 -0
  34. package/src/routing/jev/types.ts +79 -0
  35. package/src/routing/jev/weights/jev-router-weights.json +1 -0
  36. package/src/server/modelMapper.ts +17 -0
  37. package/tests/routing/jev.test.ts +110 -0
  38. package/tools/calibrate_temp.py +81 -0
  39. package/tools/distill.mjs +143 -0
  40. package/tools/train_jev.py +213 -0
  41. package/dist/cli/tui.d.ts +0 -6
  42. package/dist/cli/tui.js.map +0 -1
  43. package/dist/routing/shadowSampler.d.ts.map +0 -1
  44. /package/{ARCHITECTURE.md → archive/ARCHITECTURE.md} +0 -0
  45. /package/{ENTERPRISE_INTEGRATIONS.md → archive/ENTERPRISE_INTEGRATIONS.md} +0 -0
  46. /package/{MANIFESTO.md → archive/MANIFESTO.md} +0 -0
  47. /package/{README_ja.md → archive/README_ja.md} +0 -0
  48. /package/{README_zh.md → archive/README_zh.md} +0 -0
  49. /package/{SECURITY.md → archive/SECURITY.md} +0 -0
  50. /package/{TECHNICAL_README.md → archive/TECHNICAL_README.md} +0 -0
  51. /package/{TODO_BROWSER_AUTOMATION.md → archive/TODO_BROWSER_AUTOMATION.md} +0 -0
  52. /package/{AGENT_COUNCIL_FINDINGS.md → archive/campaign/AGENT_COUNCIL_FINDINGS.md} +0 -0
  53. /package/{AUDIT_REPORT.md → archive/campaign/AUDIT_REPORT.md} +0 -0
  54. /package/{CONTRIBUTORS.md → archive/campaign/CONTRIBUTORS.md} +0 -0
  55. /package/{IMPROVEMENT_PLAN.md → archive/campaign/IMPROVEMENT_PLAN.md} +0 -0
  56. /package/{INTEGRATION_PROGRESS.md → archive/campaign/INTEGRATION_PROGRESS.md} +0 -0
  57. /package/{CAMPAIGN_SUMMARY.md → archive/launch/CAMPAIGN_SUMMARY.md} +0 -0
  58. /package/{LANDING.md → archive/launch/LANDING.md} +0 -0
  59. /package/{LAUNCH-PAIN-DRIVEN.md → archive/launch/LAUNCH-PAIN-DRIVEN.md} +0 -0
  60. /package/{LAUNCH.md → archive/launch/LAUNCH.md} +0 -0
  61. /package/{LAUNCH_CHECKLIST.md → archive/launch/LAUNCH_CHECKLIST.md} +0 -0
  62. /package/{LAUNCH_SNAPSHOT.md → archive/launch/LAUNCH_SNAPSHOT.md} +0 -0
  63. /package/{REDESIGN.md → archive/launch/REDESIGN.md} +0 -0
  64. /package/{HEALTH_REPORT.md → archive/research/HEALTH_REPORT.md} +0 -0
  65. /package/{OPPORTUNITIES_100.md → archive/research/OPPORTUNITIES_100.md} +0 -0
  66. /package/{POPULARITY_BOOSTERS.md → archive/research/POPULARITY_BOOSTERS.md} +0 -0
  67. /package/{PR_STATUS_REPORT.md → archive/research/PR_STATUS_REPORT.md} +0 -0
  68. /package/{research-log.md → archive/research/research-log.md} +0 -0
  69. /package/{RELEASE_v2.16.0.md → archive/submissions/RELEASE_v2.16.0.md} +0 -0
  70. /package/{RUNKIT.md → archive/submissions/RUNKIT.md} +0 -0
  71. /package/{SUBMISSIONS.md → archive/submissions/SUBMISSIONS.md} +0 -0
  72. /package/{a3m-integrations-summary.md → archive/submissions/a3m-integrations-summary.md} +0 -0
  73. /package/{discoverability-diagnosis.md → archive/submissions/discoverability-diagnosis.md} +0 -0
@@ -5,19 +5,19 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
 
7
7
  <!-- Primary SEO Meta Tags -->
8
- <title>A3M Router — Parallel LLM Routing Gateway</title>
9
- <meta name="description" content="Intelligent LLM routing proxy. Routes queries to cheapest capable model across 47+ providers. 96.77% RouterArena accuracy, $0.0768 per 1K tokens. Drop-in OpenAI-compatible API.">
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">
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
11
  <meta name="author" content="A3M Router Team">
12
12
  <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large">
13
- <link rel="canonical" href="https://das-rebel.github.io/adaptive-memory-multi-model-router/">
13
+ <link rel="canonical" href="https://das-rebel.github.io/a3m-router/">
14
14
 
15
15
  <!-- Open Graph / Social Sharing -->
16
16
  <meta property="og:type" content="website">
17
- <meta property="og:url" content="https://das-rebel.github.io/adaptive-memory-multi-model-router/">
18
- <meta property="og:title" content="A3M Router — Parallel LLM Routing Gateway">
19
- <meta property="og:description" content="Parallel multi-provider routing with confidence scoring. Semantic cache. 47+ providers. OpenAI-compatible proxy with 47+ providers.">
20
- <meta property="og:image" content="https://das-rebel.github.io/adaptive-memory-multi-model-router/assets/og-banner.svg">
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
21
  <meta property="og:image:width" content="1200">
22
22
  <meta property="og:image:height" content="630">
23
23
  <meta property="og:site_name" content="A3M Router">
@@ -25,667 +25,1531 @@
25
25
 
26
26
  <!-- Twitter Card -->
27
27
  <meta name="twitter:card" content="summary_large_image">
28
- <meta name="twitter:title" content="A3M Router — Parallel LLM Routing Gateway">
29
- <meta name="twitter:description" content="Parallel multi-provider routing with confidence scoring. Semantic cache. 47+ providers. OpenAI-compatible proxy.">
30
- <meta name="twitter:image" content="https://das-rebel.github.io/adaptive-memory-multi-model-router/assets/og-banner.svg">
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
31
 
32
- <!-- JSON-LD Structured Data: FAQPage -->
33
- <script type="application/ld+json">
34
- {
35
- "@context": "https://schema.org",
36
- "@type": "FAQPage",
37
- "mainEntity": [
38
- {
39
- "@type": "Question",
40
- "name": "What is an LLM router?",
41
- "acceptedAnswer": {
42
- "@type": "Answer",
43
- "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."
44
- }
45
- },
46
- {
47
- "@type": "Question",
48
- "name": "How does A3M Router differ from sequential fallback?",
49
- "acceptedAnswer": {
50
- "@type": "Answer",
51
- "text": "Most gateways use sequential fallback: try Provider A, fail, try B, fail, try C, succeed, return. The first provider to succeed wins. A3M Router calls multiple providers in parallel and scores every response using weighted signals (domain match, specificity, structure alignment, verb matching, cost tier). The cheapest provider that fully satisfies the query wins — not just the first one that responds successfully."
52
- }
53
- },
54
- {
55
- "@type": "Question",
56
- "name": "Which providers does A3M Router support?",
57
- "acceptedAnswer": {
58
- "@type": "Answer",
59
- "text": "A3M Router supports 47+ providers including OpenAI (GPT-4o, GPT-4o-mini, o1-preview, o1-mini), Anthropic (Claude 3.5 Sonnet, Claude 3 Haiku), Google (Gemini 1.5 Pro, Gemini 1.5 Flash), Groq (LLaMA 3.3 70B, Mixtral 8x7B), Mistral (Mistral Large, Mistral 7B), DeepSeek (DeepSeek V3, DeepSeek Chat), Cerebras (LLaMA 3.3 70B), Ollama (local models), and many more."
60
- }
61
- },
62
- {
63
- "@type": "Question",
64
- "name": "How fast is A3M Router?",
65
- "acceptedAnswer": {
66
- "@type": "Answer",
67
- "text": "A3M Router makes routing decisions in sub-millisecond time (typically 0.1–0.5ms) using a keyword-based classifier. The end-to-end latency depends on the selected provider's model. Parallel calls wait for the fastest responders, so ensemble mode often completes faster than sequential fallback."
68
- }
69
- },
70
- {
71
- "@type": "Question",
72
- "name": "Is A3M Router open source?",
73
- "acceptedAnswer": {
74
- "@type": "Answer",
75
- "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."
76
- }
77
- },
78
- {
79
- "@type": "Question",
80
- "name": "How do I get started with A3M Router?",
81
- "acceptedAnswer": {
82
- "@type": "Answer",
83
- "text": "npm install -g adaptive-memory-multi-model-router && a3m-router serve. Then use the OpenAI SDK with base_url: http://localhost:8787/v1. For Python: pip install adaptive-memory-multi-model-router and use the A3MRouter client. Full docs at https://a3m-router.com."
84
- }
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;
85
54
  }
86
- ]
87
- }
88
- </script>
89
55
 
90
- <!-- JSON-LD Structured Data: SoftwareApplication -->
91
- <script type="application/ld+json">
92
- {
93
- "@context": "https://schema.org",
94
- "@type": "SoftwareApplication",
95
- "name": "A3M Router",
96
- "description": "OpenAI-compatible LLM router validated by Parallel multi-provider routing with confidence scoring. Semantic cache. 47+ providers. 47+ providers, semantic cache, guardrails, cost analytics.",
97
- "url": "https://github.com/Das-rebel/a3m-router",
98
- "applicationCategory": "DeveloperApplication",
99
- "operatingSystem": "Linux, macOS, Windows",
100
- "programmingLanguage": "TypeScript",
101
- "offers": {
102
- "@type": "Offer",
103
- "price": "0",
104
- "priceCurrency": "USD",
105
- "description": "MIT License. Free and open source."
106
- },
107
- "softwareVersion": "2.14.56",
108
- "installUrl": "https://www.npmjs.com/package/adaptive-memory-multi-model-router",
109
- "codeRepository": "https://github.com/Das-rebel/a3m-router",
110
- "license": "https://opensource.org/licenses/MIT",
111
- "author": {
112
- "@type": "Organization",
113
- "name": "A3M Router Team",
114
- "url": "https://github.com/Das-rebel"
115
- },
116
- "aggregateRating": {
117
- "@type": "AggregateRating",
118
- "ratingValue": "4.8",
119
- "reviewCount": "52",
120
- "bestRating": "5"
121
- },
122
- "featureList": [
123
- "OpenAI-compatible proxy",
124
- "47+ LLM providers",
125
- "Intelligent query routing",
126
- "63% cost savings | Semantic cache | Parallel ensemble",
127
- "Semantic cache",
128
- "Security guardrails",
129
- "Real-time cost analytics",
130
- "LangChain adapter",
131
- "Batch processing",
132
- "Circuit breaker"
133
- ]
134
- }
135
- </script>
56
+ html { scroll-behavior: smooth; }
136
57
 
137
- <!-- JSON-LD: FAQPage for rich results -->
138
- <script type="application/ld+json">
139
- {
140
- "@context": "https://schema.org",
141
- "@type": "FAQPage",
142
- "mainEntity": [
143
- {
144
- "@type": "Question",
145
- "name": "What is A3M Router?",
146
- "acceptedAnswer": {
147
- "@type": "Answer",
148
- "text": "A3M Router is an OpenAI-compatible proxy that analyzes each LLM query and routes it to the cheapest capable provider. Supports 47+ providers including Groq, Cerebras, OpenAI, Anthropic, DeepSeek, MiniMax, and free local models via Ollama. Parallel ensemble execution with confidence-weighted scoring."
149
- }
150
- },
151
- {
152
- "@type": "Question",
153
- "name": "How much can I save with A3M Router?",
154
- "acceptedAnswer": {
155
- "@type": "Answer",
156
- "text": "A3M Router is optimized for cost-quality routing. Parallel multi-provider execution, semantic caching, and EXP3-inspired exploration achieve 63% cost savings vs premium-only routing."
157
- }
158
- },
159
- {
160
- "@type": "Question",
161
- "name": "Is A3M Router free?",
162
- "acceptedAnswer": {
163
- "@type": "Answer",
164
- "text": "Yes, A3M Router is MIT-licensed open source software. It's free to use. You only pay for the underlying LLM API calls you route through it, and A3M Router minimizes those costs by selecting the cheapest capable provider."
165
- }
166
- },
167
- {
168
- "@type": "Question",
169
- "name": "How do I get started with A3M Router?",
170
- "acceptedAnswer": {
171
- "@type": "Answer",
172
- "text": "Install with npm install adaptive-memory-multi-model-router, then run npx a3m-router serve to start the OpenAI-compatible proxy on port 8787. Point your existing OpenAI SDK base URL to http://localhost:8787/v1 and you're done."
173
- }
174
- },
175
- {
176
- "@type": "Question",
177
- "name": "What LLM providers does A3M Router support?",
178
- "acceptedAnswer": {
179
- "@type": "Answer",
180
- "text": "A3M Router supports 47+ providers including OpenAI, Anthropic (Claude), Google (Gemini), Groq, Cerebras, DeepSeek, Mistral, Fireworks, Together AI, Perplexity, Cohere, xAI (Grok), MiniMax, Ollama, OpenRouter, and many more. Free options include CommandCode, Ollama, LM Studio, and vLLM."
181
- }
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;
182
64
  }
183
- ]
184
- }
185
- </script>
186
65
 
187
- <!-- JSON-LD: BreadcrumbList -->
188
- <script type="application/ld+json">
189
- {
190
- "@context": "https://schema.org",
191
- "@type": "BreadcrumbList",
192
- "itemListElement": [
193
- {
194
- "@type": "ListItem",
195
- "position": 1,
196
- "name": "Home",
197
- "item": "https://das-rebel.github.io/adaptive-memory-multi-model-router/"
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;
198
78
  }
199
- ]
200
- }
201
- </script>
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; }
202
87
 
203
- <style>
204
- * {
205
- margin: 0;
206
- padding: 0;
207
- box-sizing: border-box;
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);
208
96
  }
209
-
210
- body {
211
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
212
- background: linear-gradient(135deg, #0f172a 0%, #1e1b4b 50%, #312e81 100%);
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);
213
148
  color: #fff;
214
- min-height: 100vh;
215
149
  }
216
-
217
- .container {
218
- max-width: 1200px;
219
- margin: 0 auto;
220
- padding: 2rem;
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;
221
155
  }
222
-
223
- header {
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;
224
178
  text-align: center;
225
- padding: 4rem 0;
226
179
  }
227
-
228
- .logo {
229
- width: 120px;
230
- height: 120px;
231
- margin: 0 auto 2rem;
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;
232
191
  }
233
-
234
- h1 {
235
- font-size: 4rem;
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);
236
204
  font-weight: 800;
237
- background: linear-gradient(135deg, #6366f1, #8b5cf6, #06b6d4);
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%);
238
211
  -webkit-background-clip: text;
239
212
  -webkit-text-fill-color: transparent;
240
- margin-bottom: 1rem;
213
+ background-size: 200% auto;
241
214
  }
242
-
243
- .tagline {
244
- font-size: 1.5rem;
245
- color: #94a3b8;
246
- margin-bottom: 2rem;
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;
247
221
  }
248
-
249
- .stats {
222
+ .hero-actions {
250
223
  display: flex;
224
+ align-items: center;
251
225
  justify-content: center;
252
- gap: 3rem;
253
- margin: 3rem 0;
226
+ gap: 12px;
254
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);
255
241
  }
256
-
257
- .stat {
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;
258
317
  text-align: center;
259
- padding: 1.5rem 2rem;
260
- background: rgba(255,255,255,0.05);
261
- border-radius: 16px;
262
- border: 1px solid rgba(255,255,255,0.1);
263
318
  }
264
-
265
- .stat-value {
266
- font-size: 2.5rem;
319
+ .stat-cell .val {
320
+ font-size: 1.5rem;
267
321
  font-weight: 700;
268
- color: #6366f1;
322
+ color: var(--text);
323
+ letter-spacing: -0.03em;
269
324
  }
270
-
271
- .stat-label {
272
- font-size: 0.9rem;
273
- color: #64748b;
274
- margin-top: 0.5rem;
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;
275
330
  }
276
-
277
- .cta {
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;
278
353
  display: flex;
279
- gap: 1rem;
354
+ align-items: center;
280
355
  justify-content: center;
281
- margin: 3rem 0;
282
- flex-wrap: wrap;
283
- }
284
-
285
- .btn {
286
- padding: 1rem 2rem;
287
- border-radius: 12px;
288
356
  font-size: 1.1rem;
357
+ margin-bottom: 16px;
358
+ }
359
+ .feature-card h3 {
360
+ font-size: 0.9375rem;
289
361
  font-weight: 600;
290
- text-decoration: none;
291
- transition: all 0.3s ease;
362
+ margin-bottom: 8px;
363
+ letter-spacing: -0.01em;
292
364
  }
293
-
294
- .btn-primary {
295
- background: linear-gradient(135deg, #6366f1, #8b5cf6);
296
- color: white;
365
+ .feature-card p {
366
+ font-size: 0.875rem;
367
+ color: var(--text-muted);
368
+ line-height: 1.6;
297
369
  }
298
-
299
- .btn-primary:hover {
300
- transform: translateY(-2px);
301
- box-shadow: 0 10px 40px rgba(99, 102, 241, 0.4);
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;
302
414
  }
303
-
304
- .btn-secondary {
305
- background: rgba(255,255,255,0.1);
306
- color: white;
307
- border: 1px solid rgba(255,255,255,0.2);
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;
308
423
  }
309
-
310
- .btn-secondary:hover {
311
- background: rgba(255,255,255,0.15);
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;
312
438
  }
313
-
314
- .features {
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 {
315
445
  display: grid;
316
- grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
317
- gap: 2rem;
318
- margin: 4rem 0;
319
- }
320
-
321
- .feature {
322
- padding: 2rem;
323
- background: rgba(255,255,255,0.03);
324
- border-radius: 20px;
325
- border: 1px solid rgba(255,255,255,0.05);
326
- transition: all 0.3s ease;
327
- }
328
-
329
- .feature:hover {
330
- background: rgba(255,255,255,0.05);
331
- transform: translateY(-5px);
332
- }
333
-
334
- .feature-icon {
335
- font-size: 2.5rem;
336
- margin-bottom: 1rem;
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;
337
453
  }
338
-
339
- .feature h2 {
340
- font-size: 1.3rem;
341
- margin-bottom: 0.5rem;
342
- color: #fff;
454
+ .step-card {
455
+ background: var(--bg);
456
+ padding: 32px 28px;
343
457
  }
344
-
345
- .feature p {
346
- color: #94a3b8;
347
- line-height: 1.6;
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;
348
465
  }
349
-
350
- .code-section {
351
- margin: 4rem 0;
352
- text-align: center;
466
+ .step-card h3 {
467
+ font-size: 1rem;
468
+ font-weight: 600;
469
+ margin-bottom: 10px;
353
470
  }
354
-
355
- .code-block {
356
- background: #0f172a;
357
- border-radius: 16px;
358
- padding: 2rem;
359
- margin: 2rem auto;
360
- max-width: 800px;
361
- text-align: left;
362
- border: 1px solid rgba(255,255,255,0.1);
363
- overflow-x: auto;
471
+ .step-card p {
472
+ font-size: 0.875rem;
473
+ color: var(--text-muted);
474
+ line-height: 1.6;
364
475
  }
365
-
366
- .code-block pre {
367
- color: #e2e8f0;
368
- font-family: 'Monaco', 'Menlo', monospace;
369
- font-size: 0.95rem;
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;
370
485
  line-height: 1.6;
371
486
  }
372
-
373
- .code-block .comment {
374
- color: #64748b;
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;
375
496
  }
376
-
377
- .code-block .keyword {
378
- color: #c084fc;
497
+ .install-card {
498
+ background: var(--surface);
499
+ border: 1px solid var(--border);
500
+ border-radius: var(--radius-lg);
501
+ overflow: hidden;
379
502
  }
380
-
381
- .code-block .string {
382
- color: #4ade80;
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);
383
512
  }
384
-
385
- .code-block .function {
386
- color: #60a5fa;
513
+ .install-card-header .pkg-name { color: var(--text); }
514
+ .install-card-body {
515
+ padding: 16px 18px;
387
516
  }
388
-
389
- .providers-section {
390
- margin: 4rem 0;
391
- text-align: center;
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;
392
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); }
393
530
 
394
- .provider-tiers {
395
- display: grid;
396
- grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
397
- gap: 1.5rem;
398
- margin-top: 2rem;
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;
399
538
  }
400
-
401
- .tier {
402
- padding: 1.5rem;
403
- background: rgba(255,255,255,0.03);
404
- border-radius: 16px;
405
- border: 1px solid rgba(255,255,255,0.08);
406
- text-align: left;
539
+ .demo-card .demo-icon {
540
+ font-size: 2.5rem;
541
+ margin-bottom: 16px;
407
542
  }
408
-
409
- .tier h3 {
410
- font-size: 1.1rem;
411
- margin-bottom: 0.5rem;
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;
412
553
  }
413
554
 
414
- .tier .price {
415
- color: #10b981;
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;
416
564
  font-weight: 700;
417
- font-size: 1.2rem;
418
- margin-bottom: 0.5rem;
565
+ text-transform: uppercase;
566
+ letter-spacing: 0.08em;
567
+ color: var(--accent-hover);
568
+ margin-bottom: 12px;
419
569
  }
420
-
421
- .tier ul {
422
- list-style: none;
423
- color: #94a3b8;
424
- font-size: 0.9rem;
570
+ .benchmark-metric {
571
+ display: flex;
572
+ align-items: baseline;
573
+ gap: 8px;
574
+ margin-bottom: 8px;
425
575
  }
426
-
427
- .tier ul li {
428
- padding: 0.2rem 0;
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;
429
612
  }
430
613
 
431
- .faq-section {
432
- margin: 4rem 0;
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;
433
630
  }
434
631
 
435
- .faq-section h2 {
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;
436
644
  text-align: center;
437
- font-size: 2.5rem;
438
- margin-bottom: 2rem;
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;
439
660
  }
440
661
 
662
+ /* ─── FAQ ─── */
663
+ .faq-list { max-width: 680px; margin: 0 auto; }
441
664
  .faq-item {
442
- max-width: 800px;
443
- margin: 1rem auto;
444
- padding: 1.5rem;
445
- background: rgba(255,255,255,0.03);
446
- border-radius: 12px;
447
- border: 1px solid rgba(255,255,255,0.08);
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;
448
704
  }
449
705
 
450
- .faq-item h3 {
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);
451
722
  font-size: 1.1rem;
452
- color: #6366f1;
453
- margin-bottom: 0.5rem;
723
+ max-width: 480px;
724
+ margin: 0 auto 36px;
454
725
  }
455
-
456
- .faq-item p {
457
- color: #94a3b8;
458
- line-height: 1.6;
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);
459
740
  }
741
+ .cta-stack .cmd-block .cmd { color: var(--green); }
460
742
 
743
+ /* ─── Footer ─── */
461
744
  footer {
462
- text-align: center;
463
- padding: 4rem 0;
464
- border-top: 1px solid rgba(255,255,255,0.1);
465
- margin-top: 4rem;
745
+ padding: 48px 0;
746
+ border-top: 1px solid var(--border);
466
747
  }
467
-
468
- .links {
748
+ .footer-inner {
469
749
  display: flex;
470
- justify-content: center;
471
- gap: 2rem;
472
- margin-bottom: 2rem;
750
+ justify-content: space-between;
751
+ align-items: center;
752
+ flex-wrap: wrap;
753
+ gap: 16px;
473
754
  }
474
-
475
- .links a {
476
- color: #94a3b8;
477
- text-decoration: none;
478
- transition: color 0.3s;
755
+ .footer-left {
756
+ display: flex;
757
+ align-items: center;
758
+ gap: 24px;
479
759
  }
480
-
481
- .links a:hover {
482
- color: #6366f1;
760
+ .footer-brand {
761
+ font-weight: 700;
762
+ font-size: 0.9rem;
483
763
  }
484
-
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 ─── */
485
787
  @media (max-width: 768px) {
486
- h1 {
487
- font-size: 2.5rem;
488
- }
489
-
490
- .stats {
491
- gap: 1rem;
492
- }
493
-
494
- .stat {
495
- padding: 1rem;
496
- }
497
-
498
- .stat-value {
499
- font-size: 1.8rem;
500
- }
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; }
501
802
  }
502
803
  </style>
503
804
  </head>
504
805
  <body>
505
- <div class="container">
506
- <header>
507
- <div class="logo">
508
- <svg viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg">
509
- <defs>
510
- <linearGradient id="g1" x1="0%" y1="0%" x2="100%" y2="100%">
511
- <stop offset="0%" style="stop-color:#6366f1"/>
512
- <stop offset="100%" style="stop-color:#8b5cf6"/>
513
- </linearGradient>
514
- </defs>
515
- <circle cx="100" cy="100" r="80" fill="none" stroke="url(#g1)" stroke-width="2" opacity="0.3"/>
516
- <circle cx="100" cy="100" r="60" fill="url(#g1)" opacity="0.2"/>
517
- <circle cx="100" cy="100" r="25" fill="url(#g1)"/>
518
- <circle cx="100" cy="40" r="12" fill="#6366f1"/>
519
- <circle cx="152" cy="130" r="10" fill="#10b981"/>
520
- <circle cx="48" cy="130" r="10" fill="#f59e0b"/>
521
- <text x="100" y="108" font-size="14" font-weight="bold" fill="white" text-anchor="middle">A3M</text>
806
+
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"/>
522
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 ─── -->
836
+ <section class="hero">
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>
868
+ </section>
869
+
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>
523
894
  </div>
524
- <h1>A3M Router</h1>
525
- <p class="tagline">Intelligent LLM Routing Proxy &mdash; Drop-in OpenAI Replacement<br>Route queries to the cheapest capable model &bull; Parallel ensemble across 47+ providers</p>
526
-
527
- <div class="stats">
528
- <div class="stat">
529
- <div class="stat-value">5,400+</div>
530
- <div class="stat-label">Monthly Downloads</div>
531
- </div>
532
- <div class="stat">
533
- <div class="stat-value">47+</div>
534
- <div class="stat-label">LLM Providers</div>
535
- </div>
536
- <div class="stat">
537
- <div class="stat-value">96.77%</div>
538
- <div class="stat-label">RouterArena Accuracy</div>
539
- </div>
540
- <div class="stat">
541
- <div class="stat-value">$0.08</div>
542
- <div class="stat-label">Per 1K Tokens</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>
543
908
  </div>
909
+ <div class="stat-cell">
910
+ <div class="val">63%</div>
911
+ <div class="lbl">Cost Savings</div>
912
+ </div>
913
+ </div>
914
+ </div>
915
+ </section>
916
+
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>
544
925
  </div>
545
-
546
- <div class="cta">
547
- <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router" class="btn btn-primary">Install from NPM</a>
548
- <a href="https://github.com/Das-rebel/a3m-router" class="btn btn-secondary">Star on GitHub</a>
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>
549
963
  </div>
550
- </header>
964
+ </div>
965
+ </section>
551
966
 
552
- <section class="features">
553
- <div class="feature">
554
- <div class="feature-icon">&#x1F9E0;</div>
555
- <h2>Intelligent LLM Routing</h2>
556
- <p>Analyzes query complexity and routes to the cheapest capable model. Code queries go to code models. Simple queries use budget providers. Premium models only when needed.</p>
967
+ <hr class="divider">
968
+
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>
557
975
  </div>
558
- <div class="feature">
559
- <div class="feature-icon">&#x1F4B0;</div>
560
- <h2>Cost Optimization</h2>
561
- <p>Parallel ensemble routing across 47+ providers. Confidence-weighted scoring. 63% cost savings vs premium-only routing.</p>
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>
562
1012
  </div>
563
- <div class="feature">
564
- <div class="feature-icon">&#x1F504;</div>
565
- <h2>Smart Fallback &amp; Retry</h2>
566
- <p>When a provider fails, automatically retry with the next best option. Circuit breaker pattern keeps your app resilient.</p>
1013
+ </div>
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>
567
1024
  </div>
568
- <div class="feature">
569
- <div class="feature-icon">&#x1F4CA;</div>
570
- <h2>Real-time Analytics</h2>
571
- <p>Monitor spend, latency, cache hits, and provider health in real-time. Set budgets. Get alerts.</p>
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>
572
1098
  </div>
573
- <div class="feature">
574
- <div class="feature-icon">&#x1F512;</div>
575
- <h2>Security Guardrails</h2>
576
- <p>Built-in prompt injection detection, PII redaction, content filtering, and rate limiting. Production-ready security out of the box.</p>
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>
577
1103
  </div>
578
- <div class="feature">
579
- <div class="feature-icon">&#x26A1;</div>
580
- <h2>Semantic Cache</h2>
581
- <p>Trigram Jaccard similarity cache eliminates redundant API calls. Batch processing with automatic rate limiting for high-throughput applications.</p>
1104
+ </div>
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>
582
1115
  </div>
583
- </section>
584
-
585
- <section class="providers-section">
586
- <h2>LLM Provider Pricing Tiers</h2>
587
- <p style="color: #94a3b8; margin-bottom: 2rem;">47+ providers from free to premium. Parallel ensemble routing achieves best accuracy/cost tradeoff.</p>
588
- <div class="provider-tiers">
589
- <div class="tier">
590
- <h3>Free Tier</h3>
591
- <div class="price">$0 / 1M tokens</div>
592
- <ul>
593
- <li>CommandCode</li>
594
- <li>Ollama (local)</li>
595
- <li>LM Studio</li>
596
- <li>vLLM</li>
597
- </ul>
598
- </div>
599
- <div class="tier">
600
- <h3>Budget Tier</h3>
601
- <div class="price">$0.59 - $0.60 / 1M tokens</div>
602
- <ul>
603
- <li>Groq (Llama 3.3 70B)</li>
604
- <li>Cerebras (Llama 3.3 70B)</li>
605
- </ul>
606
- </div>
607
- <div class="tier">
608
- <h3>Mid Tier</h3>
609
- <div class="price">$1.50 - $2.80 / 1M tokens</div>
610
- <ul>
611
- <li>DeepSeek</li>
612
- <li>Mistral</li>
613
- <li>MiniMax</li>
614
- <li>Qwen / GLM-4</li>
615
- </ul>
616
- </div>
617
- <div class="tier">
618
- <h3>Premium Tier</h3>
619
- <div class="price">$10 - $30 / 1M tokens</div>
620
- <ul>
621
- <li>OpenAI (GPT-4o)</li>
622
- <li>Anthropic (Claude)</li>
623
- <li>Google (Gemini)</li>
624
- </ul>
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>
625
1176
  </div>
626
1177
  </div>
627
- </section>
628
-
629
- <section class="code-section">
630
- <h2>Quick Start: LLM Routing in 30 Seconds</h2>
631
- <p style="color: #94a3b8; margin-bottom: 2rem;">One-line installation, instant routing. Drop-in replacement for api.openai.com.</p>
632
-
633
- <div class="code-block">
634
- <pre><span class="comment"># Install</span>
635
- npm install adaptive-memory-multi-model-router
636
-
637
- <span class="comment"># Start the OpenAI-compatible proxy</span>
638
- npx a3m-router serve
639
- <span class="comment"># Now listening on http://localhost:8787/v1</span>
640
-
641
- <span class="comment"># Or use programmatically</span>
642
- <span class="keyword">const</span> { <span class="function">createA3MRouter</span> } = <span class="function">require</span>(<span class="string">'adaptive-memory-multi-model-router'</span>);
643
- <span class="keyword">const</span> router = <span class="function">createA3MRouter</span>();
644
- <span class="keyword">const</span> result = <span class="keyword">await</span> router.<span class="function">route</span>(<span class="string">"Explain quantum computing"</span>);
645
- <span class="function">console</span>.<span class="function">log</span>(result.primary_model); <span class="comment">// "groq/llama-3.3-70b" (cheapest capable)</span>
646
- <span class="function">console</span>.<span class="function">log</span>(result); <span class="comment">// confidence: 0.94, tier: mid</span></pre>
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>
647
1188
  </div>
648
- </section>
1189
+ </div>
1190
+ </section>
1191
+
1192
+ <hr class="divider">
649
1193
 
650
- <section class="faq-section">
651
- <h2>Frequently Asked Questions</h2>
652
- <div class="faq-item">
653
- <h3>What is A3M Router?</h3>
654
- <p>A3M Router is an OpenAI-compatible proxy that analyzes each LLM query and routes it to the cheapest capable provider. Supports 47+ providers including Groq, Cerebras, OpenAI, Anthropic, DeepSeek, MiniMax, and free local models via Ollama. Parallel ensemble execution with confidence-weighted scoring.</p>
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>
655
1200
  </div>
656
- <div class="faq-item">
657
- <h3>How much can I save with A3M Router?</h3>
658
- <p>A3M Router is optimized for cost-quality routing. Parallel multi-provider execution, semantic caching, and EXP3-inspired exploration achieve 63% cost savings vs premium-only routing.</p>
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>
1240
+ </div>
1241
+ </section>
1242
+
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>
1260
+ </section>
1261
+
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>
659
1270
  </div>
660
- <div class="faq-item">
661
- <h3>Is A3M Router free?</h3>
662
- <p>Yes, A3M Router is MIT-licensed open source software. It's free to use. You only pay for the underlying LLM API calls you route through it, and A3M Router minimizes those costs by selecting the cheapest capable provider.</p>
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>
663
1305
  </div>
664
- <div class="faq-item">
665
- <h3>How do I get started with A3M Router?</h3>
666
- <p>Install with <code>npm install adaptive-memory-multi-model-router</code>, then run <code>npx a3m-router serve</code> to start the OpenAI-compatible proxy on port 8787. Point your existing OpenAI SDK base URL to http://localhost:8787/v1 and you're done.</p>
1306
+ </div>
1307
+ </section>
1308
+
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>
667
1316
  </div>
668
- <div class="faq-item">
669
- <h3>What LLM providers does A3M Router support?</h3>
670
- <p>47+ providers including OpenAI, Anthropic (Claude), Google (Gemini), Groq, Cerebras, DeepSeek, Mistral, Fireworks, Together AI, Perplexity, Cohere, xAI (Grok), MiniMax, Ollama, OpenRouter, and more. Free options include CommandCode, Ollama, LM Studio, and vLLM.</p>
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>
671
1395
  </div>
672
- <div class="faq-item">
673
- <h3>How does A3M Router compare to LiteLLM?</h3>
674
- <p>A3M Router focuses on intelligent cost-based routing with semantic caching, guardrails, and real-time cost analytics built in. Unlike generic proxy tools, it actively analyzes query complexity to pick the cheapest capable model. Zero config needed for basic usage.</p>
1396
+ </div>
1397
+ </section>
1398
+
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>
675
1418
  </div>
676
- </section>
677
-
678
- <footer>
679
- <div class="links">
680
- <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router">NPM</a>
681
- <a href="https://github.com/Das-rebel/a3m-router">GitHub</a>
682
- <a href="/sitemap.xml">Sitemap</a>
683
- <a href="https://github.com/Das-rebel/a3m-router/issues">Issues</a>
684
- <a href="https://github.com/Das-rebel/a3m-router/discussions">Discussions</a>
685
- <a href="https://github.com/Das-rebel/a3m-router/blob/main/docs/API.md">API Docs</a>
1419
+ </div>
1420
+ </section>
1421
+
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>
686
1440
  </div>
687
- <p style="color: #64748b;">MIT License &copy; 2026 A3M Router Team</p>
688
- </footer>
689
- </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>
1553
+
690
1554
  </body>
691
1555
  </html>