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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/.github/ISSUE_TEMPLATE/checklist.md +35 -0
  2. package/.github/workflows/ci.yml +9 -6
  3. package/POPULARITY_BOOSTERS.md +18 -0
  4. package/PR_STATUS_REPORT.md +55 -148
  5. package/README.md +222 -1035
  6. package/assets/chart-accuracy-by-tier.svg +63 -0
  7. package/assets/chart-confusion-matrix.svg +98 -0
  8. package/assets/chart-cost-comparison.svg +66 -0
  9. package/assets/chart-latency-overhead.svg +102 -0
  10. package/assets/chart-routerena-leaderboard.svg +76 -0
  11. package/dist/analytics/costAnalytics.d.ts +1 -0
  12. package/dist/benchmark/comprehensive.d.ts +4 -53
  13. package/dist/benchmark/comprehensive.d.ts.map +1 -0
  14. package/dist/benchmark/comprehensive.js +112 -214
  15. package/dist/benchmark/comprehensive.js.map +1 -1
  16. package/dist/benchmark/reproducible.d.ts +1 -0
  17. package/dist/cache/semanticCache.d.ts +1 -0
  18. package/dist/cli/setupWizard.d.ts +6 -1
  19. package/dist/cli/setupWizard.d.ts.map +1 -1
  20. package/dist/cli/setupWizard.js +6 -9
  21. package/dist/cli/setupWizard.js.map +1 -1
  22. package/dist/cost/budgetEnforcer.d.ts +1 -0
  23. package/dist/cost/costTracker.d.ts +1 -0
  24. package/dist/ensemble/multiRoundDialog.d.ts +1 -0
  25. package/dist/ensemble/multiRoundDialog.d.ts.map +1 -0
  26. package/dist/ensemble/shapleyValue.d.ts +1 -0
  27. package/dist/ensemble/shapleyValue.d.ts.map +1 -0
  28. package/dist/ensemble.d.ts +1 -0
  29. package/dist/index.d.ts +1 -0
  30. package/dist/integrations/langchainAdapter.d.ts +1 -0
  31. package/dist/integrations/oauth.d.ts +1 -0
  32. package/dist/integrations/scienceAdapter.d.ts +1 -0
  33. package/dist/integrations/scienceAdapter.d.ts.map +1 -0
  34. package/dist/memory/autoFetch.d.ts +1 -0
  35. package/dist/memory/hybridMemory.d.ts +1 -0
  36. package/dist/memory/hybridMemory.d.ts.map +1 -0
  37. package/dist/memory/memoryTree.d.ts +1 -0
  38. package/dist/memory/memoryTree.d.ts.map +1 -1
  39. package/dist/memory/obsidianVault.d.ts +1 -0
  40. package/dist/memory/obsidianVault.d.ts.map +1 -1
  41. package/dist/memory/reasoningBank.d.ts +1 -0
  42. package/dist/memory/reasoningBank.d.ts.map +1 -0
  43. package/dist/observability/changeWatch.d.ts +1 -0
  44. package/dist/observability/fatigueDetector.d.ts +1 -0
  45. package/dist/observability/index.d.ts +1 -0
  46. package/dist/observability/metrics.d.ts +1 -0
  47. package/dist/observability/metrics.d.ts.map +1 -1
  48. package/dist/observability/middleware.d.ts +1 -0
  49. package/dist/observability/tracer.d.ts +1 -0
  50. package/dist/observability/tracer.d.ts.map +1 -1
  51. package/dist/observability/types.d.ts +1 -0
  52. package/dist/providers/providerConfig.d.ts +1 -0
  53. package/dist/providers/providerConfig.d.ts.map +1 -1
  54. package/dist/routing/advancedRouter.d.ts +2 -1
  55. package/dist/routing/advancedRouter.d.ts.map +1 -1
  56. package/dist/routing/crossModelValidation.d.ts +1 -0
  57. package/dist/routing/providerHealth.d.ts +1 -0
  58. package/dist/routing/providerHealth.d.ts.map +1 -1
  59. package/dist/routing/providerRetry.d.ts +1 -0
  60. package/dist/sdk.d.ts +1 -0
  61. package/dist/security/guardrails.d.ts +1 -0
  62. package/dist/security/guardrails.d.ts.map +1 -1
  63. package/dist/server/dashboard.d.ts +1 -0
  64. package/dist/server/handlers/chatHandler.d.ts +11 -0
  65. package/dist/server/handlers/chatHandler.d.ts.map +1 -0
  66. package/dist/server/handlers/chatHandler.js +159 -0
  67. package/dist/server/handlers/chatHandler.js.map +1 -0
  68. package/dist/server/handlers/completionsHandler.d.ts +10 -0
  69. package/dist/server/handlers/completionsHandler.d.ts.map +1 -0
  70. package/dist/server/handlers/completionsHandler.js +124 -0
  71. package/dist/server/handlers/completionsHandler.js.map +1 -0
  72. package/dist/server/handlers/embeddingsHandler.d.ts +17 -0
  73. package/dist/server/handlers/embeddingsHandler.d.ts.map +1 -0
  74. package/dist/server/handlers/embeddingsHandler.js +235 -0
  75. package/dist/server/handlers/embeddingsHandler.js.map +1 -0
  76. package/dist/server/handlers/healthHandler.d.ts +10 -0
  77. package/dist/server/handlers/healthHandler.d.ts.map +1 -0
  78. package/dist/server/handlers/healthHandler.js +49 -0
  79. package/dist/server/handlers/healthHandler.js.map +1 -0
  80. package/dist/server/handlers/metricsHandler.d.ts +11 -0
  81. package/dist/server/handlers/metricsHandler.d.ts.map +1 -0
  82. package/dist/server/handlers/metricsHandler.js +24 -0
  83. package/dist/server/handlers/metricsHandler.js.map +1 -0
  84. package/dist/server/handlers/modelsHandler.d.ts +10 -0
  85. package/dist/server/handlers/modelsHandler.d.ts.map +1 -0
  86. package/dist/server/handlers/modelsHandler.js +19 -0
  87. package/dist/server/handlers/modelsHandler.js.map +1 -0
  88. package/dist/server/metrics.d.ts +96 -0
  89. package/dist/server/metrics.d.ts.map +1 -0
  90. package/dist/server/metrics.js +267 -0
  91. package/dist/server/metrics.js.map +1 -0
  92. package/dist/server/modelMapper.d.ts +1 -0
  93. package/dist/server/proxyServer.d.ts +53 -17
  94. package/dist/server/proxyServer.d.ts.map +1 -1
  95. package/dist/server/proxyServer.js +66 -303
  96. package/dist/server/proxyServer.js.map +1 -1
  97. package/dist/server/router.d.ts +49 -0
  98. package/dist/server/router.d.ts.map +1 -0
  99. package/dist/server/router.js +120 -0
  100. package/dist/server/router.js.map +1 -0
  101. package/dist/server/state.d.ts +30 -0
  102. package/dist/server/state.d.ts.map +1 -0
  103. package/dist/server/state.js +18 -0
  104. package/dist/server/state.js.map +1 -0
  105. package/dist/skills/__tests__/skill_manager.test.d.ts +3 -0
  106. package/dist/skills/__tests__/skill_manager.test.d.ts.map +1 -1
  107. package/dist/skills/__tests__/skill_manager.test.js +3 -6
  108. package/dist/skills/__tests__/skill_manager.test.js.map +1 -1
  109. package/dist/tui/dashboard.d.ts +1 -0
  110. package/dist/tui/index.d.ts +1 -0
  111. package/dist/utils/costUtils.d.ts +1 -0
  112. package/dist/utils/reliability.js +4 -18
  113. package/dist/utils/sorting.d.ts +1 -0
  114. package/dist/utils/tokenUtils.d.ts +1 -0
  115. package/docs/assets/chart-accuracy-by-tier.svg +63 -0
  116. package/docs/assets/chart-confusion-matrix.svg +98 -0
  117. package/docs/assets/chart-cost-comparison.svg +66 -0
  118. package/docs/assets/chart-latency-overhead.svg +102 -0
  119. package/docs/assets/chart-routerena-leaderboard.svg +76 -0
  120. package/docs/index.html +72 -80
  121. package/docs/llms-full.txt +156 -184
  122. package/docs/llms.txt +77 -42
  123. package/llms-full.txt +156 -184
  124. package/llms.txt +77 -42
  125. package/mcp-server/package.json +6 -0
  126. package/mcp-server/tsconfig.json +3 -2
  127. package/package.json +4 -3
  128. package/scripts/postinstall-nudge.js +3 -0
  129. package/src/server/handlers/chatHandler.ts +173 -0
  130. package/src/server/handlers/completionsHandler.ts +120 -0
  131. package/src/server/handlers/embeddingsHandler.ts +271 -0
  132. package/src/server/handlers/healthHandler.ts +57 -0
  133. package/src/server/handlers/metricsHandler.ts +30 -0
  134. package/src/server/handlers/modelsHandler.ts +25 -0
  135. package/src/server/metrics.ts +303 -0
  136. package/src/server/proxyServer.ts +71 -394
  137. package/src/server/router.ts +157 -0
  138. package/src/server/state.ts +34 -0
  139. package/src/skills/__tests__/skill_manager.test.ts +3 -3
  140. package/index.html +0 -667
package/index.html DELETED
@@ -1,667 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>A3M Router - Animated Charts Gallery</title>
7
- <meta name="description" content="High-quality GSAP-powered HTML animations for presentations, videos, and social media. Built with HyperFrames-inspired techniques.">
8
-
9
- <!-- Open Graph -->
10
- <meta property="og:title" content="A3M Router - Animated Charts Gallery">
11
- <meta property="og:description" content="High-quality GSAP-powered HTML animations for presentations, videos, and social media.">
12
- <meta property="og:type" content="website">
13
-
14
- <!-- Favicon -->
15
- <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect fill='%236366f1' rx='20' width='100' height='100'/><text x='50' y='65' text-anchor='middle' fill='white' font-size='40' font-weight='bold'>A3</text></svg>">
16
-
17
- <link rel="preconnect" href="https://fonts.googleapis.com">
18
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
19
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
20
-
21
- <style>
22
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
23
-
24
- :root {
25
- --bg-primary: #0a0a0f;
26
- --bg-secondary: #111827;
27
- --bg-tertiary: #1a1a2e;
28
- --bg-card: rgba(255,255,255,0.03);
29
- --border: rgba(255,255,255,0.08);
30
- --border-hover: rgba(255,255,255,0.15);
31
- --text-primary: #ffffff;
32
- --text-secondary: #9ca3af;
33
- --text-muted: #6b7280;
34
- --accent-indigo: #6366f1;
35
- --accent-violet: #8b5cf6;
36
- --accent-cyan: #06b6d4;
37
- --accent-emerald: #10b981;
38
- --accent-pink: #f472b6;
39
- --accent-amber: #fbbf24;
40
- --gradient-main: linear-gradient(135deg, var(--accent-indigo), var(--accent-violet), var(--accent-cyan));
41
- }
42
-
43
- html { scroll-behavior: smooth; }
44
-
45
- body {
46
- font-family: 'Inter', system-ui, -apple-system, sans-serif;
47
- background: var(--bg-primary);
48
- color: var(--text-primary);
49
- min-height: 100vh;
50
- line-height: 1.6;
51
- overflow-x: hidden;
52
- }
53
-
54
- /* Animated grid background */
55
- .bg-grid {
56
- position: fixed;
57
- inset: 0;
58
- background-image:
59
- linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
60
- linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px);
61
- background-size: 80px 80px;
62
- pointer-events: none;
63
- z-index: 0;
64
- }
65
-
66
- /* Ambient glows */
67
- .glow {
68
- position: fixed;
69
- border-radius: 50%;
70
- filter: blur(120px);
71
- pointer-events: none;
72
- z-index: 0;
73
- }
74
- .glow-1 { width: 600px; height: 600px; top: -200px; left: -200px; background: var(--accent-indigo); opacity: 0.08; }
75
- .glow-2 { width: 500px; height: 500px; bottom: -150px; right: -150px; background: var(--accent-cyan); opacity: 0.06; }
76
- .glow-3 { width: 400px; height: 400px; top: 50%; left: 50%; transform: translate(-50%, -50%); background: var(--accent-violet); opacity: 0.05; }
77
-
78
- .container {
79
- max-width: 1400px;
80
- margin: 0 auto;
81
- padding: 0 40px;
82
- position: relative;
83
- z-index: 1;
84
- }
85
-
86
- /* Header */
87
- header {
88
- padding: 100px 0 80px;
89
- text-align: center;
90
- }
91
-
92
- .logo-badge {
93
- display: inline-flex;
94
- align-items: center;
95
- gap: 14px;
96
- background: var(--gradient-main);
97
- padding: 14px 28px;
98
- border-radius: 60px;
99
- font-size: 20px;
100
- font-weight: 800;
101
- margin-bottom: 32px;
102
- box-shadow: 0 10px 40px rgba(99,102,241,0.4);
103
- animation: float 3s ease-in-out infinite;
104
- }
105
-
106
- @keyframes float {
107
- 0%, 100% { transform: translateY(0); }
108
- 50% { transform: translateY(-8px); }
109
- }
110
-
111
- @keyframes fadeInUp {
112
- from { opacity: 0; transform: translateY(30px); }
113
- to { opacity: 1; transform: translateY(0); }
114
- }
115
-
116
- @keyframes fadeInLeft {
117
- from { opacity: 0; transform: translateX(-30px); }
118
- to { opacity: 1; transform: translateX(0); }
119
- }
120
-
121
- @keyframes scaleIn {
122
- from { opacity: 0; transform: scale(0.9); }
123
- to { opacity: 1; transform: scale(1); }
124
- }
125
-
126
- .badge-tag {
127
- background: rgba(16,185,129,0.15);
128
- border: 1px solid rgba(16,185,129,0.3);
129
- color: var(--accent-emerald);
130
- padding: 6px 16px;
131
- border-radius: 20px;
132
- font-size: 12px;
133
- font-weight: 600;
134
- display: inline-block;
135
- margin-bottom: 20px;
136
- animation: fadeInUp 0.6s ease-out 0.1s both;
137
- }
138
-
139
- h1 {
140
- font-size: clamp(40px, 7vw, 72px);
141
- font-weight: 900;
142
- letter-spacing: -3px;
143
- line-height: 1.05;
144
- margin-bottom: 20px;
145
- animation: fadeInUp 0.8s ease-out 0.2s both;
146
- }
147
-
148
- h1 .gradient-text {
149
- background: var(--gradient-main);
150
- -webkit-background-clip: text;
151
- -webkit-text-fill-color: transparent;
152
- background-clip: text;
153
- }
154
-
155
- .subtitle {
156
- font-size: clamp(16px, 2vw, 20px);
157
- color: var(--text-secondary);
158
- max-width: 650px;
159
- margin: 0 auto 48px;
160
- animation: fadeInUp 0.8s ease-out 0.4s both;
161
- }
162
-
163
- /* Stats row */
164
- .stats-row {
165
- display: flex;
166
- justify-content: center;
167
- gap: 48px;
168
- flex-wrap: wrap;
169
- animation: fadeInUp 0.8s ease-out 0.6s both;
170
- }
171
-
172
- .stat-box {
173
- background: var(--bg-card);
174
- border: 1px solid var(--border);
175
- border-radius: 16px;
176
- padding: 24px 36px;
177
- text-align: center;
178
- transition: all 0.3s ease;
179
- }
180
-
181
- .stat-box:hover {
182
- border-color: var(--border-hover);
183
- transform: translateY(-4px);
184
- box-shadow: 0 20px 40px rgba(0,0,0,0.3);
185
- }
186
-
187
- .stat-value {
188
- font-size: 32px;
189
- font-weight: 800;
190
- background: var(--gradient-main);
191
- -webkit-background-clip: text;
192
- -webkit-text-fill-color: transparent;
193
- background-clip: text;
194
- }
195
-
196
- .stat-label {
197
- font-size: 13px;
198
- color: var(--text-muted);
199
- margin-top: 4px;
200
- text-transform: uppercase;
201
- letter-spacing: 1px;
202
- }
203
-
204
- /* Section title */
205
- .section-header {
206
- display: flex;
207
- align-items: center;
208
- gap: 20px;
209
- margin-bottom: 40px;
210
- animation: fadeInLeft 0.6s ease-out 0.3s both;
211
- }
212
-
213
- .section-tag {
214
- background: rgba(6,182,212,0.1);
215
- border: 1px solid rgba(6,182,212,0.3);
216
- color: var(--accent-cyan);
217
- padding: 8px 16px;
218
- border-radius: 8px;
219
- font-size: 12px;
220
- font-weight: 700;
221
- text-transform: uppercase;
222
- letter-spacing: 1px;
223
- }
224
-
225
- .section-title {
226
- font-size: 14px;
227
- font-weight: 600;
228
- color: var(--text-muted);
229
- text-transform: uppercase;
230
- letter-spacing: 2px;
231
- flex: 1;
232
- }
233
-
234
- .section-line {
235
- height: 1px;
236
- flex: 1;
237
- background: linear-gradient(90deg, var(--border), transparent);
238
- }
239
-
240
- /* Charts section */
241
- section {
242
- padding: 60px 0;
243
- }
244
-
245
- .charts-grid {
246
- display: grid;
247
- grid-template-columns: repeat(auto-fit, minmax(560px, 1fr));
248
- gap: 32px;
249
- }
250
-
251
- /* Chart card */
252
- .chart-card {
253
- background: var(--bg-card);
254
- border: 1px solid var(--border);
255
- border-radius: 28px;
256
- overflow: hidden;
257
- transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
258
- animation: scaleIn 0.8s ease-out both;
259
- }
260
-
261
- .chart-card:nth-child(1) { animation-delay: 0.3s; }
262
- .chart-card:nth-child(2) { animation-delay: 0.45s; }
263
- .chart-card:nth-child(3) { animation-delay: 0.6s; }
264
-
265
- .chart-card:hover {
266
- border-color: rgba(99,102,241,0.3);
267
- transform: translateY(-12px) scale(1.02);
268
- box-shadow:
269
- 0 40px 80px rgba(0,0,0,0.4),
270
- 0 0 60px rgba(99,102,241,0.1);
271
- }
272
-
273
- .chart-preview {
274
- position: relative;
275
- width: 100%;
276
- aspect-ratio: 16/9;
277
- background: var(--bg-primary);
278
- overflow: hidden;
279
- }
280
-
281
- .chart-preview::before {
282
- content: '';
283
- position: absolute;
284
- inset: 0;
285
- background-image:
286
- linear-gradient(rgba(255,255,255,0.02) 1px, transparent 1px),
287
- linear-gradient(90deg, rgba(255,255,255,0.02) 1px, transparent 1px);
288
- background-size: 40px 40px;
289
- pointer-events: none;
290
- }
291
-
292
- .chart-iframe {
293
- width: 100%;
294
- height: 100%;
295
- border: none;
296
- transform: scale(0.85);
297
- transform-origin: center center;
298
- }
299
-
300
- .chart-badge {
301
- position: absolute;
302
- top: 16px;
303
- right: 16px;
304
- background: rgba(16,185,129,0.15);
305
- backdrop-filter: blur(10px);
306
- border: 1px solid rgba(16,185,129,0.3);
307
- color: var(--accent-emerald);
308
- padding: 6px 14px;
309
- border-radius: 20px;
310
- font-size: 11px;
311
- font-weight: 700;
312
- letter-spacing: 0.5px;
313
- }
314
-
315
- .chart-type-badge {
316
- position: absolute;
317
- top: 16px;
318
- left: 16px;
319
- background: rgba(99,102,241,0.2);
320
- backdrop-filter: blur(10px);
321
- border: 1px solid rgba(99,102,241,0.3);
322
- color: var(--accent-violet);
323
- padding: 6px 14px;
324
- border-radius: 20px;
325
- font-size: 11px;
326
- font-weight: 600;
327
- }
328
-
329
- .chart-info {
330
- padding: 28px;
331
- }
332
-
333
- .chart-title {
334
- font-size: 22px;
335
- font-weight: 700;
336
- color: var(--text-primary);
337
- margin-bottom: 10px;
338
- display: flex;
339
- align-items: center;
340
- gap: 10px;
341
- }
342
-
343
- .chart-title span {
344
- font-size: 24px;
345
- }
346
-
347
- .chart-desc {
348
- font-size: 14px;
349
- color: var(--text-muted);
350
- margin-bottom: 24px;
351
- line-height: 1.7;
352
- }
353
-
354
- .chart-actions {
355
- display: flex;
356
- gap: 12px;
357
- }
358
-
359
- .btn {
360
- padding: 12px 24px;
361
- border-radius: 12px;
362
- font-size: 14px;
363
- font-weight: 600;
364
- text-decoration: none;
365
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
366
- display: inline-flex;
367
- align-items: center;
368
- gap: 8px;
369
- cursor: pointer;
370
- border: none;
371
- }
372
-
373
- .btn-primary {
374
- background: var(--gradient-main);
375
- color: #fff;
376
- box-shadow: 0 4px 20px rgba(99,102,241,0.3);
377
- }
378
-
379
- .btn-primary:hover {
380
- transform: translateY(-3px) scale(1.05);
381
- box-shadow: 0 12px 30px rgba(99,102,241,0.5);
382
- }
383
-
384
- .btn-secondary {
385
- background: rgba(255,255,255,0.05);
386
- border: 1px solid var(--border);
387
- color: var(--text-secondary);
388
- }
389
-
390
- .btn-secondary:hover {
391
- background: rgba(255,255,255,0.1);
392
- border-color: var(--border-hover);
393
- color: var(--text-primary);
394
- }
395
-
396
- /* Full-width showcase */
397
- .showcase-section {
398
- padding: 80px 0;
399
- }
400
-
401
- .showcase-card {
402
- background: var(--bg-card);
403
- border: 1px solid var(--border);
404
- border-radius: 32px;
405
- overflow: hidden;
406
- position: relative;
407
- }
408
-
409
- .showcase-preview {
410
- width: 100%;
411
- aspect-ratio: 21/9;
412
- background: var(--bg-primary);
413
- position: relative;
414
- overflow: hidden;
415
- }
416
-
417
- .showcase-preview::before {
418
- content: '';
419
- position: absolute;
420
- inset: 0;
421
- background-image:
422
- linear-gradient(rgba(255,255,255,0.015) 1px, transparent 1px),
423
- linear-gradient(90deg, rgba(255,255,255,0.015) 1px, transparent 1px);
424
- background-size: 60px 60px;
425
- pointer-events: none;
426
- }
427
-
428
- /* CTA section */
429
- .cta-section {
430
- padding: 100px 0;
431
- }
432
-
433
- .cta-card {
434
- background: linear-gradient(135deg, rgba(99,102,241,0.08), rgba(139,92,246,0.08), rgba(6,182,212,0.08));
435
- border: 1px solid rgba(99,102,241,0.2);
436
- border-radius: 40px;
437
- padding: 80px;
438
- text-align: center;
439
- position: relative;
440
- overflow: hidden;
441
- }
442
-
443
- .cta-card::before {
444
- content: '';
445
- position: absolute;
446
- top: -100%;
447
- left: -100%;
448
- width: 300%;
449
- height: 300%;
450
- background: radial-gradient(circle at center, rgba(99,102,241,0.08) 0%, transparent 50%);
451
- animation: pulse-glow 6s ease-in-out infinite;
452
- }
453
-
454
- @keyframes pulse-glow {
455
- 0%, 100% { transform: scale(1); opacity: 0.5; }
456
- 50% { transform: scale(1.2); opacity: 1; }
457
- }
458
-
459
- .cta-title {
460
- font-size: clamp(28px, 4vw, 42px);
461
- font-weight: 800;
462
- margin-bottom: 16px;
463
- position: relative;
464
- }
465
-
466
- .cta-desc {
467
- font-size: 18px;
468
- color: var(--text-secondary);
469
- margin-bottom: 40px;
470
- position: relative;
471
- }
472
-
473
- .cta-code {
474
- display: inline-block;
475
- background: rgba(0,0,0,0.6);
476
- border: 1px solid var(--border);
477
- padding: 20px 40px;
478
- border-radius: 16px;
479
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
480
- font-size: 18px;
481
- color: var(--accent-cyan);
482
- cursor: pointer;
483
- transition: all 0.3s ease;
484
- position: relative;
485
- }
486
-
487
- .cta-code:hover {
488
- background: rgba(6,182,212,0.1);
489
- border-color: var(--accent-cyan);
490
- transform: scale(1.02);
491
- }
492
-
493
- .cta-code .copy-hint {
494
- display: block;
495
- font-size: 11px;
496
- color: var(--text-muted);
497
- margin-top: 8px;
498
- font-family: 'Inter', sans-serif;
499
- }
500
-
501
- /* Footer */
502
- footer {
503
- padding: 60px 0;
504
- border-top: 1px solid var(--border);
505
- text-align: center;
506
- }
507
-
508
- .footer-content {
509
- display: flex;
510
- flex-direction: column;
511
- gap: 16px;
512
- }
513
-
514
- .footer-links {
515
- display: flex;
516
- justify-content: center;
517
- gap: 32px;
518
- }
519
-
520
- .footer-links a {
521
- color: var(--text-muted);
522
- text-decoration: none;
523
- font-size: 14px;
524
- transition: color 0.2s ease;
525
- }
526
-
527
- .footer-links a:hover {
528
- color: var(--accent-violet);
529
- }
530
-
531
- footer p {
532
- font-size: 13px;
533
- color: var(--text-muted);
534
- }
535
-
536
- /* Responsive */
537
- @media (max-width: 768px) {
538
- .container { padding: 0 24px; }
539
- .charts-grid { grid-template-columns: 1fr; }
540
- .stats-row { gap: 20px; }
541
- .stat-box { padding: 16px 24px; }
542
- .stat-value { font-size: 24px; }
543
- .cta-card { padding: 48px 24px; }
544
- .chart-actions { flex-wrap: wrap; }
545
- .btn { width: 100%; justify-content: center; }
546
- }
547
- </style>
548
- </head>
549
- <body>
550
- <div class="bg-grid"></div>
551
- <div class="glow glow-1"></div>
552
- <div class="glow glow-2"></div>
553
- <div class="glow glow-3"></div>
554
-
555
- <div class="container">
556
- <header>
557
- <div class="logo-badge">A3</div>
558
- <div class="badge-tag">Animated HTML Charts</div>
559
- <h1>A3M Router<br><span class="gradient-text">Charts Gallery</span></h1>
560
- <p class="subtitle">High-quality GSAP-powered HTML animations for presentations, videos, and social media. Inspired by HyperFrames.</p>
561
-
562
- <div class="stats-row">
563
- <div class="stat-box">
564
- <div class="stat-value">3</div>
565
- <div class="stat-label">Animated Charts</div>
566
- </div>
567
- <div class="stat-box">
568
- <div class="stat-value">60fps</div>
569
- <div class="stat-label">Smooth Animation</div>
570
- </div>
571
- <div class="stat-box">
572
- <div class="stat-value">0</div>
573
- <div class="stat-label">Dependencies</div>
574
- </div>
575
- <div class="stat-box">
576
- <div class="stat-value">MIT</div>
577
- <div class="stat-label">License</div>
578
- </div>
579
- </div>
580
- </header>
581
-
582
- <section>
583
- <div class="section-header">
584
- <span class="section-tag">Charts</span>
585
- <span class="section-title">Animated Visualizations</span>
586
- <div class="section-line"></div>
587
- </div>
588
-
589
- <div class="charts-grid">
590
- <!-- Downloads Growth -->
591
- <div class="chart-card">
592
- <div class="chart-preview">
593
- <span class="chart-type-badge">Line Chart</span>
594
- <span class="chart-badge">Trending</span>
595
- <iframe class="chart-iframe" src="assets/a3m-downloads-growth.html" title="Downloads Growth"></iframe>
596
- </div>
597
- <div class="chart-info">
598
- <h3 class="chart-title"><span>📈</span> Downloads Growth</h3>
599
- <p class="chart-desc">Animated line chart with gradient stroke, pulsing data points, and +149% growth badge. Perfect for presentations and social posts.</p>
600
- <div class="chart-actions">
601
- <a href="assets/a3m-downloads-growth.html" class="btn btn-primary" target="_blank">▶ Preview Full</a>
602
- <a href="https://raw.githubusercontent.com/Das-rebel/a3m-router/main/assets/a3m-downloads-growth.html" class="btn btn-secondary" download>↓ Download .html</a>
603
- </div>
604
- </div>
605
- </div>
606
-
607
- <!-- Cost Comparison -->
608
- <div class="chart-card">
609
- <div class="chart-preview">
610
- <span class="chart-type-badge">Bar Chart</span>
611
- <span class="chart-badge">Popular</span>
612
- <iframe class="chart-iframe" src="assets/a3m-cost-comparison.html" title="Cost Comparison"></iframe>
613
- </div>
614
- <div class="chart-info">
615
- <h3 class="chart-title"><span>💰</span> Cost Comparison</h3>
616
- <p class="chart-desc">RouterArena proof visualization: 0.9404 score, 96.77% accuracy, $0.0768/1K, 1.0000 robustness, and 0 abnormal entries across 8,400 queries.</p>
617
- <div class="chart-actions">
618
- <a href="assets/a3m-cost-comparison.html" class="btn btn-primary" target="_blank">▶ Preview Full</a>
619
- <a href="https://raw.githubusercontent.com/Das-rebel/a3m-router/main/assets/a3m-cost-comparison.html" class="btn btn-secondary" download>↓ Download .html</a>
620
- </div>
621
- </div>
622
- </div>
623
-
624
- <!-- Social Banner -->
625
- <div class="chart-card">
626
- <div class="chart-preview">
627
- <span class="chart-type-badge">Social Banner</span>
628
- <span class="chart-badge">Full Width</span>
629
- <iframe class="chart-iframe" src="assets/a3m-social-banner.html" title="Social Banner"></iframe>
630
- </div>
631
- <div class="chart-info">
632
- <h3 class="chart-title"><span>🎨</span> Social Banner</h3>
633
- <p class="chart-desc">Complete social media banner with routing flow diagram, 5 metric cards, and animated CTA button. Ready for Twitter, LinkedIn, YouTube.</p>
634
- <div class="chart-actions">
635
- <a href="assets/a3m-social-banner.html" class="btn btn-primary" target="_blank">▶ Preview Full</a>
636
- <a href="https://raw.githubusercontent.com/Das-rebel/a3m-router/main/assets/a3m-social-banner.html" class="btn btn-secondary" download>↓ Download .html</a>
637
- </div>
638
- </div>
639
- </div>
640
- </div>
641
- </section>
642
-
643
- <section class="cta-section">
644
- <div class="cta-card">
645
- <h2 class="cta-title">Ready to use in your project?</h2>
646
- <p class="cta-desc">Open-source LLM gateway validated by RouterArena PR #144: 96.77% accuracy, $0.0768/1K, 1.0000 robustness, 47+ providers, and zero ML required.</p>
647
- <div class="cta-code" onclick="navigator.clipboard.writeText('npm install adaptive-memory-multi-model-router'); this.querySelector('.copy-hint').textContent='Copied! ✓'; setTimeout(()=>this.querySelector('.copy-hint').textContent='Click to copy',2000)">
648
- npm install adaptive-memory-multi-model-router
649
- <span class="copy-hint">Click to copy</span>
650
- </div>
651
- </div>
652
- </section>
653
-
654
- <footer>
655
- <div class="footer-content">
656
- <div class="footer-links">
657
- <a href="https://github.com/Das-rebel/a3m-router" target="_blank">GitHub</a>
658
- <a href="https://www.npmjs.com/package/adaptive-memory-multi-model-router" target="_blank">npm</a>
659
- <a href="https://github.com/heygen-com/hyperframes" target="_blank">Inspired by HyperFrames</a>
660
- <a href="https://gsap.com" target="_blank">Built with GSAP</a>
661
- </div>
662
- <p>A3M Router • Open-source LLM Gateway • MIT License</p>
663
- </div>
664
- </footer>
665
- </div>
666
- </body>
667
- </html>