adaptive-memory-multi-model-router 2.12.0 → 2.12.2

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 (80) hide show
  1. package/.env +2 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +13 -40
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +10 -27
  4. package/.github/workflows/ci.yml +8 -49
  5. package/.github/workflows/pages.yml +37 -0
  6. package/Awesome-LLM/LICENSE.md +121 -0
  7. package/Awesome-LLM/README.md +625 -0
  8. package/Awesome-LLM/contributing.md +24 -0
  9. package/Awesome-LLM/paper_list/RLHF.md +1 -0
  10. package/Awesome-LLM/paper_list/Retrieval_Augmented_Generation.md +6 -0
  11. package/Awesome-LLM/paper_list/acceleration.md +10 -0
  12. package/Awesome-LLM/paper_list/alignment.md +20 -0
  13. package/Awesome-LLM/paper_list/application.md +19 -0
  14. package/Awesome-LLM/paper_list/augmentation.md +14 -0
  15. package/Awesome-LLM/paper_list/chain_of_thougt.md +16 -0
  16. package/Awesome-LLM/paper_list/code_pretraining.md +0 -0
  17. package/Awesome-LLM/paper_list/detection.md +11 -0
  18. package/Awesome-LLM/paper_list/evaluation.md +64 -0
  19. package/Awesome-LLM/paper_list/in_context_learning.md +4 -0
  20. package/Awesome-LLM/paper_list/instruction-tuning.md +35 -0
  21. package/Awesome-LLM/paper_list/moe.md +0 -0
  22. package/Awesome-LLM/paper_list/prompt_learning.md +15 -0
  23. package/Awesome-LLM/resources/DeepSpeed_light.svg +27 -0
  24. package/Awesome-LLM/resources/alpa-logo-cropped.png +0 -0
  25. package/Awesome-LLM/resources/colossal-ai_logo_vertical.png +0 -0
  26. package/Awesome-LLM/resources/creepy_llm.jpeg +0 -0
  27. package/Awesome-LLM/resources/image8.gif +0 -0
  28. package/Awesome-LLM/resources/jax_logo_250px.png +0 -0
  29. package/Awesome-LLM/resources/logo.png +0 -0
  30. package/Awesome-LLM/resources/nvidia.png +0 -0
  31. package/Awesome-LLM/resources/tensorflow.png +0 -0
  32. package/Awesome-LLM/resources//345/244/247/345/236/213/350/257/255/350/250/200/346/250/241/345/236/213/347/232/204/350/203/275/345/212/233/345/210/206/346/236/220/344/270/216/345/272/224/347/224/250 - 30min.pdf +0 -0
  33. package/README.md +5 -4
  34. package/SUBMISSIONS.md +43 -0
  35. package/assets/chart-cost-v2.svg +91 -0
  36. package/assets/chart-cost-v3.svg +143 -0
  37. package/assets/chart-features-v2.svg +132 -0
  38. package/assets/chart-features-v3.svg +211 -0
  39. package/assets/chart-growth-v2.svg +122 -0
  40. package/assets/chart-growth-v3.svg +189 -0
  41. package/assets/cost-simple.svg +64 -0
  42. package/assets/growth-simple.svg +69 -0
  43. package/assets/hero-diagram.svg +81 -0
  44. package/assets/logo-new.svg +21 -0
  45. package/assets/social-preview-new.svg +100 -0
  46. package/assets/social-v2.svg +130 -0
  47. package/assets/social-v3.svg +212 -0
  48. package/awesome-ai-gateways/CONTRIBUTING.md +49 -0
  49. package/awesome-ai-gateways/LICENSE +3 -0
  50. package/awesome-ai-gateways/README.md +190 -0
  51. package/awesome-selfhosted/.github/ISSUE_TEMPLATE/config.yml +5 -0
  52. package/awesome-selfhosted/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  53. package/awesome-selfhosted/LICENSE +376 -0
  54. package/awesome-selfhosted/README.md +2303 -0
  55. package/awesome-selfhosted/_static/awesome.png +0 -0
  56. package/awesome-selfhosted/non-free.md +377 -0
  57. package/demo-new.tape +71 -0
  58. package/demo-real.sh +198 -0
  59. package/demo-simple.tape +205 -0
  60. package/demo.html +520 -0
  61. package/demo.tape +259 -0
  62. package/dist/cli/setupWizard.d.ts +136 -0
  63. package/dist/cli/setupWizard.js +142 -165
  64. package/dist/cli/setupWizard.js.map +1 -0
  65. package/dist/cli/tui.js +152 -0
  66. package/dist/providers/providerConfig.js +28 -1
  67. package/dist/providers/providerConfig.js.map +1 -1
  68. package/dist/server/proxyServer.js +15 -0
  69. package/docs/QUICK_START.md +43 -0
  70. package/docs/USE_CASES.md +59 -0
  71. package/docs/demo-auto.html +264 -0
  72. package/docs/demo.html +416 -0
  73. package/docs/index.html +112 -599
  74. package/index.html +667 -0
  75. package/package.json +26 -169
  76. package/src/providers/providerConfig.ts +29 -1
  77. package/docs/assets/cost-comparison.svg +0 -134
  78. package/docs/assets/growth-chart-animated.svg +0 -76
  79. package/docs/assets/og-banner.svg +0 -194
  80. package/docs/assets/social-preview.svg +0 -194
@@ -0,0 +1,143 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 450" width="700" height="450">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#0a0a0f"/>
5
+ <stop offset="50%" stop-color="#12121a"/>
6
+ <stop offset="100%" stop-color="#1a1a2e"/>
7
+ </linearGradient>
8
+
9
+ <!-- GPT-4 gradient -->
10
+ <linearGradient id="gpt4Grad" x1="0%" y1="0%" x2="0%" y2="100%">
11
+ <stop offset="0%" stop-color="#3b82f6"/>
12
+ <stop offset="100%" stop-color="#1d4ed8"/>
13
+ </linearGradient>
14
+
15
+ <!-- A3M gradient with shimmer -->
16
+ <linearGradient id="a3mGrad" x1="0%" y1="0%" x2="0%" y2="100%">
17
+ <stop offset="0%" stop-color="#10b981">
18
+ <animate attributeName="stop-color" values="#10b981;#34d399;#10b981" dur="3s" repeatCount="indefinite"/>
19
+ </stop>
20
+ <stop offset="100%" stop-color="#059669"/>
21
+ </linearGradient>
22
+
23
+ <!-- Savings badge gradient -->
24
+ <linearGradient id="savingsGrad" x1="0%" y1="0%" x2="100%" y2="0%">
25
+ <stop offset="0%" stop-color="#10b981"/>
26
+ <stop offset="100%" stop-color="#06b6d4"/>
27
+ </linearGradient>
28
+
29
+ <!-- Glow filter -->
30
+ <filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
31
+ <feGaussianBlur stdDeviation="5" result="blur"/>
32
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
33
+ </filter>
34
+
35
+ <!-- Bar glow -->
36
+ <filter id="barGlow" x="-20%" y="-20%" width="140%" height="140%">
37
+ <feGaussianBlur stdDeviation="3" result="blur"/>
38
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
39
+ </filter>
40
+
41
+ <!-- Grid pattern -->
42
+ <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
43
+ <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#ffffff" stroke-width="0.5" opacity="0.04"/>
44
+ </pattern>
45
+ </defs>
46
+
47
+ <style>
48
+ @keyframes fadeIn { from { opacity: 0; transform: translateY(15px); } to { opacity: 1; transform: translateY(0); } }
49
+ @keyframes slideUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
50
+ @keyframes pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(16, 185, 129, 0.4); } 50% { box-shadow: 0 0 20px 5px rgba(16, 185, 129, 0.2); } }
51
+ @keyframes countUp { from { opacity: 0; } to { opacity: 1; } }
52
+ .title { animation: fadeIn 0.6s ease-out; }
53
+ .bar-group { animation: slideUp 0.8s ease-out; animation-fill-mode: both; }
54
+ .gpt4-bar { animation: slideUp 0.8s ease-out 0.1s both; }
55
+ .a3m-bar { animation: slideUp 0.8s ease-out 0.3s both; }
56
+ .savings { animation: slideUp 0.8s ease-out 0.5s both; }
57
+ </style>
58
+
59
+ <!-- Background -->
60
+ <rect width="700" height="450" fill="url(#bg)"/>
61
+ <rect width="700" height="450" fill="url(#grid)"/>
62
+
63
+ <!-- Ambient glow -->
64
+ <ellipse cx="350" cy="225" rx="300" ry="200" fill="#3b82f6" opacity="0.03" filter="url(#glow)"/>
65
+ <ellipse cx="350" cy="300" rx="200" ry="100" fill="#10b981" opacity="0.05" filter="url(#glow)"/>
66
+
67
+ <!-- Header -->
68
+ <g class="title">
69
+ <text x="350" y="42" text-anchor="middle" fill="#ffffff" font-family="system-ui,-apple-system,sans-serif" font-size="26" font-weight="700">
70
+ Cost Comparison
71
+ </text>
72
+ <text x="350" y="65" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="13">
73
+ 100 mixed queries • Code, math, creative, translation
74
+ </text>
75
+ </g>
76
+
77
+ <!-- Chart area -->
78
+ <g transform="translate(80, 100)">
79
+ <!-- Y-axis labels -->
80
+ <g fill="#666688" font-family="system-ui,sans-serif" font-size="12" text-anchor="end">
81
+ <text x="55" y="255">$0</text>
82
+ <text x="55" y="195">$5</text>
83
+ <text x="55" y="135">$10</text>
84
+ <text x="55" y="75">$15</text>
85
+ <text x="55" y="40">$20</text>
86
+ </g>
87
+
88
+ <!-- Y-axis grid -->
89
+ <g stroke="#ffffff" stroke-opacity="0.06" stroke-dasharray="4,4">
90
+ <line x1="70" y1="190" x2="540" y2="190"/>
91
+ <line x1="70" y1="130" x2="540" y2="130"/>
92
+ <line x1="70" y1="70" x2="540" y2="70"/>
93
+ </g>
94
+
95
+ <!-- Axes -->
96
+ <line x1="70" y1="250" x2="540" y2="250" stroke="#444466" stroke-width="2"/>
97
+ <line x1="70" y1="30" x2="70" y2="250" stroke="#444466" stroke-width="2"/>
98
+
99
+ <!-- GPT-4 Bar with glow -->
100
+ <g class="gpt4-bar" filter="url(#barGlow)">
101
+ <rect x="130" y="65" width="110" height="185" rx="8" fill="url(#gpt4Grad)" class="bar">
102
+ <animate attributeName="height" values="0;185;185" dur="1s" ease-out" fill="freeze"/>
103
+ <animate attributeName="y" values="250;65;65" dur="1s" ease-out" fill="freeze"/>
104
+ </rect>
105
+ <!-- Shine effect -->
106
+ <rect x="130" y="65" width="55" height="185" rx="8" fill="#ffffff" fill-opacity="0.1"/>
107
+ </g>
108
+ <text x="185" y="50" text-anchor="middle" fill="#60a5fa" font-family="system-ui,sans-serif" font-size="18" font-weight="700">$15.00</text>
109
+ <text x="185" y="275" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="15" font-weight="600">GPT-4</text>
110
+ <text x="185" y="292" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="11">$0.15/1K tokens</text>
111
+
112
+ <!-- A3M Bar with glow -->
113
+ <g class="a3m-bar" filter="url(#barGlow)">
114
+ <rect x="380" y="200" width="110" height="50" rx="8" fill="url(#a3mGrad)" class="bar">
115
+ <animate attributeName="height" values="0;50;50" dur="1s" ease-out" fill="freeze"/>
116
+ <animate attributeName="y" values="250;200;200" dur="1s" ease-out" fill="freeze"/>
117
+ </rect>
118
+ <!-- Shine effect -->
119
+ <rect x="380" y="200" width="55" height="50" rx="8" fill="#ffffff" fill-opacity="0.15"/>
120
+ </g>
121
+ <text x="435" y="185" text-anchor="middle" fill="#10b981" font-family="system-ui,sans-serif" font-size="18" font-weight="700">$5.75</text>
122
+ <text x="435" y="275" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="15" font-weight="600">A3M Router</text>
123
+ <text x="435" y="292" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="11">auto-routed</text>
124
+
125
+ <!-- Savings badge -->
126
+ <g class="savings">
127
+ <rect x="230" y="115" width="160" height="65" rx="32" fill="url(#savingsGrad)" fill-opacity="0.15" stroke="url(#savingsGrad)" stroke-width="1.5" filter="url(#glow)"/>
128
+ <text x="310" y="145" text-anchor="middle" fill="#10b981" font-family="system-ui,sans-serif" font-size="26" font-weight="800">-62%</text>
129
+ <text x="310" y="168" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="12">savings per query</text>
130
+ </g>
131
+
132
+ <!-- Connection lines -->
133
+ <path d="M185,130 L260,148" stroke="#10b981" stroke-width="1.5" stroke-dasharray="4,4" fill="none" opacity="0.6"/>
134
+ <path d="M435,175 L390,148" stroke="#10b981" stroke-width="1.5" stroke-dasharray="4,4" fill="none" opacity="0.6"/>
135
+ </g>
136
+
137
+ <!-- Bottom info -->
138
+ <g transform="translate(0, 400)">
139
+ <text x="350" y="20" text-anchor="middle" fill="#555577" font-family="system-ui,sans-serif" font-size="11">
140
+ Based on actual benchmark • May 2026 • Real provider pricing
141
+ </text>
142
+ </g>
143
+ </svg>
@@ -0,0 +1,132 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
2
+ <defs>
3
+ <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#0a0f1c"/>
5
+ <stop offset="100%" stop-color="#111827"/>
6
+ </linearGradient>
7
+ <linearGradient id="headerGrad" x1="0%" y1="0%" x2="100%" y2="0%">
8
+ <stop offset="0%" stop-color="#6366f1"/>
9
+ <stop offset="100%" stop-color="#06b6d4"/>
10
+ </linearGradient>
11
+ <linearGradient id="a3mGrad" x1="0%" y1="0%" x2="0%" y2="100%">
12
+ <stop offset="0%" stop-color="#10b981"/>
13
+ <stop offset="100%" stop-color="#059669"/>
14
+ </linearGradient>
15
+
16
+ <!-- Glow filter -->
17
+ <filter id="cellGlow" x="-10%" y="-10%" width="120%" height="120%">
18
+ <feGaussianBlur stdDeviation="2" result="blur"/>
19
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
20
+ </filter>
21
+
22
+ <!-- Grid pattern -->
23
+ <pattern id="gridPattern" width="40" height="40" patternUnits="userSpaceOnUse">
24
+ <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#1f2937" stroke-width="0.5" opacity="0.3"/>
25
+ </pattern>
26
+ </defs>
27
+
28
+ <!-- Background -->
29
+ <rect width="800" height="500" fill="url(#bgGrad)"/>
30
+ <rect width="800" height="500" fill="url(#gridPattern)"/>
31
+
32
+ <!-- Header -->
33
+ <text x="400" y="38" text-anchor="middle" fill="#f9fafb" font-family="system-ui,-apple-system,sans-serif" font-size="22" font-weight="700">A3M Router Capabilities</text>
34
+ <text x="400" y="60" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="13">Production-ready features for intelligent LLM routing</text>
35
+
36
+ <!-- Table -->
37
+ <g transform="translate(80, 90)">
38
+ <!-- Header row -->
39
+ <rect x="0" y="0" width="640" height="45" rx="8" fill="url(#headerGrad)" fill-opacity="0.15"/>
40
+ <text x="320" y="28" text-anchor="middle" fill="#f9fafb" font-family="system-ui,sans-serif" font-size="14" font-weight="700">Feature</text>
41
+ <text x="540" y="28" text-anchor="middle" fill="#f9fafb" font-family="system-ui,sans-serif" font-size="14" font-weight="700">A3M Router</text>
42
+ <text x="620" y="28" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="14" font-weight="700">Others</text>
43
+
44
+ <!-- Divider -->
45
+ <line x1="0" y1="45" x2="640" y2="45" stroke="#374151" stroke-width="1"/>
46
+
47
+ <!-- Feature rows -->
48
+ <!-- Row 1 -->
49
+ <g transform="translate(0, 55)">
50
+ <text x="20" y="22" fill="#d1d5db" font-family="system-ui,sans-serif" font-size="13">Routing Accuracy</text>
51
+ <g transform="translate(500)">
52
+ <rect x="0" y="5" width="80" height="28" rx="14" fill="url(#a3mGrad)" filter="url(#cellGlow)"/>
53
+ <text x="40" y="25" text-anchor="middle" fill="#fff" font-family="system-ui,sans-serif" font-size="12" font-weight="600">100%</text>
54
+ </g>
55
+ <text x="620" y="25" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">~85%</text>
56
+ </g>
57
+
58
+ <!-- Row 2 -->
59
+ <g transform="translate(0, 100)">
60
+ <text x="20" y="22" fill="#d1d5db" font-family="system-ui,sans-serif" font-size="13">Cost Savings</text>
61
+ <g transform="translate(500)">
62
+ <rect x="0" y="5" width="80" height="28" rx="14" fill="url(#a3mGrad)" filter="url(#cellGlow)"/>
63
+ <text x="40" y="25" text-anchor="middle" fill="#fff" font-family="system-ui,sans-serif" font-size="12" font-weight="600">62%</text>
64
+ </g>
65
+ <text x="620" y="25" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">None</text>
66
+ </g>
67
+
68
+ <!-- Row 3 -->
69
+ <g transform="translate(0, 145)">
70
+ <text x="20" y="22" fill="#d1d5db" font-family="system-ui,sans-serif" font-size="13">Zero ML / No GPU</text>
71
+ <g transform="translate(500)">
72
+ <rect x="0" y="5" width="80" height="28" rx="14" fill="url(#a3mGrad)" filter="url(#cellGlow)"/>
73
+ <text x="40" y="25" text-anchor="middle" fill="#fff" font-family="system-ui,sans-serif" font-size="12" font-weight="600">✓</text>
74
+ </g>
75
+ <text x="620" y="25" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">✗</text>
76
+ </g>
77
+
78
+ <!-- Row 4 -->
79
+ <g transform="translate(0, 190)">
80
+ <text x="20" y="22" fill="#d1d5db" font-family="system-ui,sans-serif" font-size="13">Provider Failover</text>
81
+ <g transform="translate(500)">
82
+ <rect x="0" y="5" width="80" height="28" rx="14" fill="url(#a3mGrad)" filter="url(#cellGlow)"/>
83
+ <text x="40" y="25" text-anchor="middle" fill="#fff" font-family="system-ui,sans-serif" font-size="12" font-weight="600">Auto</text>
84
+ </g>
85
+ <text x="620" y="25" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">Manual</text>
86
+ </g>
87
+
88
+ <!-- Row 5 -->
89
+ <g transform="translate(0, 235)">
90
+ <text x="20" y="22" fill="#d1d5db" font-family="system-ui,sans-serif" font-size="13">Budget Enforcement</text>
91
+ <g transform="translate(500)">
92
+ <rect x="0" y="5" width="80" height="28" rx="14" fill="url(#a3mGrad)" filter="url(#cellGlow)"/>
93
+ <text x="40" y="25" text-anchor="middle" fill="#fff" font-family="system-ui,sans-serif" font-size="12" font-weight="600">Hard</text>
94
+ </g>
95
+ <text x="620" y="25" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">Soft</text>
96
+ </g>
97
+
98
+ <!-- Row 6 -->
99
+ <g transform="translate(0, 280)">
100
+ <text x="20" y="22" fill="#d1d5db" font-family="system-ui,sans-serif" font-size="13">Chinese Providers</text>
101
+ <g transform="translate(500)">
102
+ <rect x="0" y="5" width="80" height="28" rx="14" fill="url(#a3mGrad)" filter="url(#cellGlow)"/>
103
+ <text x="40" y="25" text-anchor="middle" fill="#fff" font-family="system-ui,sans-serif" font-size="12" font-weight="600">47+</text>
104
+ </g>
105
+ <text x="620" y="25" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">5-10</text>
106
+ </g>
107
+ </g>
108
+
109
+ <!-- Bottom metrics row -->
110
+ <g transform="translate(80, 420)">
111
+ <g transform="translate(0, 0)">
112
+ <rect x="0" y="0" width="145" height="60" rx="10" fill="#10b981" fill-opacity="0.1" stroke="#10b981" stroke-width="1"/>
113
+ <text x="72" y="28" text-anchor="middle" fill="#10b981" font-family="system-ui,sans-serif" font-size="22" font-weight="800">100%</text>
114
+ <text x="72" y="48" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="11">Routing Accuracy</text>
115
+ </g>
116
+ <g transform="translate(165, 0)">
117
+ <rect x="0" y="0" width="145" height="60" rx="10" fill="#06b6d4" fill-opacity="0.1" stroke="#06b6d4" stroke-width="1"/>
118
+ <text x="72" y="28" text-anchor="middle" fill="#06b6d4" font-family="system-ui,sans-serif" font-size="22" font-weight="800">19.5KB</text>
119
+ <text x="72" y="48" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="11">Package Size</text>
120
+ </g>
121
+ <g transform="translate(330, 0)">
122
+ <rect x="0" y="0" width="145" height="60" rx="10" fill="#8b5cf6" fill-opacity="0.1" stroke="#8b5cf6" stroke-width="1"/>
123
+ <text x="72" y="28" text-anchor="middle" fill="#8b5cf6" font-family="system-ui,sans-serif" font-size="22" font-weight="800">&lt;100ms</text>
124
+ <text x="72" y="48" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="11">Startup Time</text>
125
+ </g>
126
+ <g transform="translate(495, 0)">
127
+ <rect x="0" y="0" width="145" height="60" rx="10" fill="#f472b6" fill-opacity="0.1" stroke="#f472b6" stroke-width="1"/>
128
+ <text x="72" y="28" text-anchor="middle" fill="#f472b6" font-family="system-ui,sans-serif" font-size="22" font-weight="800">MIT</text>
129
+ <text x="72" y="48" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="11">License</text>
130
+ </g>
131
+ </g>
132
+ </svg>
@@ -0,0 +1,211 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 550" width="900" height="550">
2
+ <defs>
3
+ <!-- Background gradient -->
4
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" stop-color="#0a0a0f"/>
6
+ <stop offset="50%" stop-color="#0f0f1a"/>
7
+ <stop offset="100%" stop-color="#1a1a2e"/>
8
+ </linearGradient>
9
+
10
+ <!-- Header gradient -->
11
+ <linearGradient id="headerGrad" x1="0%" y1="0%" x2="100%" y2="0%">
12
+ <stop offset="0%" stop-color="#6366f1"/>
13
+ <stop offset="50%" stop-color="#8b5cf6"/>
14
+ <stop offset="100%" stop-color="#06b6d4"/>
15
+ </linearGradient>
16
+
17
+ <!-- Success badge gradient -->
18
+ <linearGradient id="successGrad" x1="0%" y1="0%" x2="0%" y2="100%">
19
+ <stop offset="0%" stop-color="#10b981">
20
+ <animate attributeName="stop-color" values="#10b981;#34d399;#10b981" dur="2s" repeatCount="indefinite"/>
21
+ </stop>
22
+ <stop offset="100%" stop-color="#059669"/>
23
+ </linearGradient>
24
+
25
+ <!-- Warning gradient -->
26
+ <linearGradient id="warnGrad" x1="0%" y1="0%" x2="0%" y2="100%">
27
+ <stop offset="0%" stop-color="#f59e0b"/>
28
+ <stop offset="100%" stop-color="#d97706"/>
29
+ </linearGradient>
30
+
31
+ <!-- Glow filter -->
32
+ <filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
33
+ <feGaussianBlur stdDeviation="4" result="blur"/>
34
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
35
+ </filter>
36
+
37
+ <!-- Intense glow -->
38
+ <filter id="glowIntense" x="-100%" y="-100%" width="300%" height="300%">
39
+ <feGaussianBlur stdDeviation="6" result="blur"/>
40
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
41
+ </filter>
42
+
43
+ <!-- Grid pattern -->
44
+ <pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
45
+ <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#ffffff" stroke-width="0.5" opacity="0.03"/>
46
+ </pattern>
47
+ </defs>
48
+
49
+ <style>
50
+ @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
51
+ @keyframes slideIn { from { opacity: 0; transform: translateX(-20px); } to { opacity: 1; transform: translateX(0); } }
52
+ @keyframes pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); } }
53
+ @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } }
54
+ .header { animation: fadeIn 0.5s ease-out; }
55
+ .row { animation: fadeIn 0.4s ease-out; animation-fill-mode: both; }
56
+ .row:nth-child(1) { animation-delay: 0.1s; }
57
+ .row:nth-child(2) { animation-delay: 0.15s; }
58
+ .row:nth-child(3) { animation-delay: 0.2s; }
59
+ .row:nth-child(4) { animation-delay: 0.25s; }
60
+ .row:nth-child(5) { animation-delay: 0.3s; }
61
+ .row:nth-child(6) { animation-delay: 0.35s; }
62
+ .row:nth-child(7) { animation-delay: 0.4s; }
63
+ .check { animation: pulse 2s ease-in-out infinite; }
64
+ .metric { animation: fadeIn 0.6s ease-out; animation-fill-mode: both; }
65
+ .metric:nth-child(1) { animation-delay: 0.5s; }
66
+ .metric:nth-child(2) { animation-delay: 0.6s; }
67
+ .metric:nth-child(3) { animation-delay: 0.7s; }
68
+ .metric:nth-child(4) { animation-delay: 0.8s; }
69
+ </style>
70
+
71
+ <!-- Background -->
72
+ <rect width="900" height="550" fill="url(#bg)"/>
73
+ <rect width="900" height="550" fill="url(#grid)"/>
74
+
75
+ <!-- Ambient glow -->
76
+ <ellipse cx="450" cy="275" rx="400" ry="250" fill="#6366f1" opacity="0.04" filter="url(#glow)"/>
77
+
78
+ <!-- Header -->
79
+ <g class="header">
80
+ <text x="450" y="42" text-anchor="middle" fill="#ffffff" font-family="system-ui,-apple-system,sans-serif" font-size="26" font-weight="700">
81
+ A3M Router Capabilities
82
+ </text>
83
+ <text x="450" y="65" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="13">
84
+ Production-ready features • Open-source LLM gateway
85
+ </text>
86
+ </g>
87
+
88
+ <!-- Comparison Table -->
89
+ <g transform="translate(80, 100)">
90
+ <!-- Table Header -->
91
+ <rect x="0" y="0" width="740" height="45" rx="8" fill="url(#headerGrad)" fill-opacity="0.15"/>
92
+ <text x="200" y="28" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">Feature</text>
93
+ <text x="450" y="28" text-anchor="middle" fill="#10b981" font-family="system-ui,sans-serif" font-size="14" font-weight="700">A3M Router</text>
94
+ <text x="650" y="28" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="14" font-weight="700">Others</text>
95
+
96
+ <!-- Row 1 -->
97
+ <g class="row" transform="translate(0, 55)">
98
+ <rect x="0" y="0" width="740" height="50" rx="6" fill="#ffffff" fill-opacity="0.02"/>
99
+ <text x="30" y="30" fill="#ccccdd" font-family="system-ui,sans-serif" font-size="14">Routing Accuracy</text>
100
+ <g transform="translate(350)">
101
+ <rect x="0" y="8" width="90" height="32" rx="16" fill="url(#successGrad)" filter="url(#glow)"/>
102
+ <text x="45" y="30" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">100%</text>
103
+ </g>
104
+ <text x="650" y="30" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="14">~85%</text>
105
+ <!-- Checkmark -->
106
+ <g transform="translate(290, 12)" class="check">
107
+ <circle cx="12" cy="12" r="14" fill="#10b981" fill-opacity="0.2"/>
108
+ <path d="M6,12 L10,16 L18,8" stroke="#10b981" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
109
+ </g>
110
+ </g>
111
+
112
+ <!-- Row 2 -->
113
+ <g class="row" transform="translate(0, 110)">
114
+ <rect x="0" y="0" width="740" height="50" rx="6" fill="#ffffff" fill-opacity="0.02"/>
115
+ <text x="30" y="30" fill="#ccccdd" font-family="system-ui,sans-serif" font-size="14">Cost Savings</text>
116
+ <g transform="translate(350)">
117
+ <rect x="0" y="8" width="80" height="32" rx="16" fill="url(#successGrad)" filter="url(#glow)"/>
118
+ <text x="40" y="30" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">62%</text>
119
+ </g>
120
+ <text x="650" y="30" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="14">None</text>
121
+ <g transform="translate(290, 12)" class="check">
122
+ <circle cx="12" cy="12" r="14" fill="#10b981" fill-opacity="0.2"/>
123
+ <path d="M6,12 L10,16 L18,8" stroke="#10b981" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
124
+ </g>
125
+ </g>
126
+
127
+ <!-- Row 3 -->
128
+ <g class="row" transform="translate(0, 165)">
129
+ <rect x="0" y="0" width="740" height="50" rx="6" fill="#ffffff" fill-opacity="0.02"/>
130
+ <text x="30" y="30" fill="#ccccdd" font-family="system-ui,sans-serif" font-size="14">Zero ML / No GPU Required</text>
131
+ <g transform="translate(350)">
132
+ <rect x="0" y="8" width="70" height="32" rx="16" fill="url(#successGrad)" filter="url(#glow)"/>
133
+ <text x="35" y="30" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">✓</text>
134
+ </g>
135
+ <text x="650" y="30" text-anchor="middle" fill="#f59e0b" font-family="system-ui,sans-serif" font-size="14">✗</text>
136
+ <g transform="translate(290, 12)" class="check">
137
+ <circle cx="12" cy="12" r="14" fill="#10b981" fill-opacity="0.2"/>
138
+ <path d="M6,12 L10,16 L18,8" stroke="#10b981" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
139
+ </g>
140
+ </g>
141
+
142
+ <!-- Row 4 -->
143
+ <g class="row" transform="translate(0, 220)">
144
+ <rect x="0" y="0" width="740" height="50" rx="6" fill="#ffffff" fill-opacity="0.02"/>
145
+ <text x="30" y="30" fill="#ccccdd" font-family="system-ui,sans-serif" font-size="14">Automatic Provider Failover</text>
146
+ <g transform="translate(350)">
147
+ <rect x="0" y="8" width="70" height="32" rx="16" fill="url(#successGrad)" filter="url(#glow)"/>
148
+ <text x="35" y="30" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">Auto</text>
149
+ </g>
150
+ <text x="650" y="30" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="14">Manual</text>
151
+ <g transform="translate(290, 12)" class="check">
152
+ <circle cx="12" cy="12" r="14" fill="#10b981" fill-opacity="0.2"/>
153
+ <path d="M6,12 L10,16 L18,8" stroke="#10b981" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
154
+ </g>
155
+ </g>
156
+
157
+ <!-- Row 5 -->
158
+ <g class="row" transform="translate(0, 275)">
159
+ <rect x="0" y="0" width="740" height="50" rx="6" fill="#ffffff" fill-opacity="0.02"/>
160
+ <text x="30" y="30" fill="#ccccdd" font-family="system-ui,sans-serif" font-size="14">Hard Budget Enforcement</text>
161
+ <g transform="translate(350)">
162
+ <rect x="0" y="8" width="70" height="32" rx="16" fill="url(#successGrad)" filter="url(#glow)"/>
163
+ <text x="35" y="30" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">✓</text>
164
+ </g>
165
+ <text x="650" y="30" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="14">Soft</text>
166
+ <g transform="translate(290, 12)" class="check">
167
+ <circle cx="12" cy="12" r="14" fill="#10b981" fill-opacity="0.2"/>
168
+ <path d="M6,12 L10,16 L18,8" stroke="#10b981" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
169
+ </g>
170
+ </g>
171
+
172
+ <!-- Row 6 -->
173
+ <g class="row" transform="translate(0, 330)">
174
+ <rect x="0" y="0" width="740" height="50" rx="6" fill="#ffffff" fill-opacity="0.02"/>
175
+ <text x="30" y="30" fill="#ccccdd" font-family="system-ui,sans-serif" font-size="14">Chinese Providers (Kimi, DeepSeek, Qwen)</text>
176
+ <g transform="translate(350)">
177
+ <rect x="0" y="8" width="70" height="32" rx="16" fill="url(#successGrad)" filter="url(#glow)"/>
178
+ <text x="35" y="30" text-anchor="middle" fill="#ffffff" font-family="system-ui,sans-serif" font-size="14" font-weight="700">47+</text>
179
+ </g>
180
+ <text x="650" y="30" text-anchor="middle" fill="#666688" font-family="system-ui,sans-serif" font-size="14">5-10</text>
181
+ <g transform="translate(290, 12)" class="check">
182
+ <circle cx="12" cy="12" r="14" fill="#10b981" fill-opacity="0.2"/>
183
+ <path d="M6,12 L10,16 L18,8" stroke="#10b981" stroke-width="2" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
184
+ </g>
185
+ </g>
186
+ </g>
187
+
188
+ <!-- Bottom metrics row -->
189
+ <g transform="translate(80, 490)">
190
+ <g class="metric">
191
+ <rect x="0" y="0" width="155" height="50" rx="10" fill="#10b981" fill-opacity="0.1" stroke="#10b981" stroke-width="1" filter="url(#glow)"/>
192
+ <text x="77" y="28" text-anchor="middle" fill="#10b981" font-family="system-ui,sans-serif" font-size="22" font-weight="800">100%</text>
193
+ <text x="77" y="44" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="11">Accuracy</text>
194
+ </g>
195
+ <g class="metric">
196
+ <rect x="175" y="0" width="155" height="50" rx="10" fill="#06b6d4" fill-opacity="0.1" stroke="#06b6d4" stroke-width="1" filter="url(#glow)"/>
197
+ <text x="252" y="28" text-anchor="middle" fill="#06b6d4" font-family="system-ui,sans-serif" font-size="22" font-weight="800">19.5KB</text>
198
+ <text x="252" y="44" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="11">Package Size</text>
199
+ </g>
200
+ <g class="metric">
201
+ <rect x="350" y="0" width="155" height="50" rx="10" fill="#8b5cf6" fill-opacity="0.1" stroke="#8b5cf6" stroke-width="1" filter="url(#glow)"/>
202
+ <text x="427" y="28" text-anchor="middle" fill="#8b5cf6" font-family="system-ui,sans-serif" font-size="22" font-weight="800">&lt;100ms</text>
203
+ <text x="427" y="44" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="11">Startup Time</text>
204
+ </g>
205
+ <g class="metric">
206
+ <rect x="525" y="0" width="155" height="50" rx="10" fill="#f472b6" fill-opacity="0.1" stroke="#f472b6" stroke-width="1" filter="url(#glow)"/>
207
+ <text x="602" y="28" text-anchor="middle" fill="#f472b6" font-family="system-ui,sans-serif" font-size="22" font-weight="800">MIT</text>
208
+ <text x="602" y="44" text-anchor="middle" fill="#8888aa" font-family="system-ui,sans-serif" font-size="11">License</text>
209
+ </g>
210
+ </g>
211
+ </svg>
@@ -0,0 +1,122 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 400" width="800" height="400">
2
+ <defs>
3
+ <!-- Gradients -->
4
+ <linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
5
+ <stop offset="0%" stop-color="#0a0f1c"/>
6
+ <stop offset="100%" stop-color="#111827"/>
7
+ </linearGradient>
8
+ <linearGradient id="lineGrad" x1="0%" y1="0%" x2="100%" y2="0%">
9
+ <stop offset="0%" stop-color="#6366f1"/>
10
+ <stop offset="33%" stop-color="#8b5cf6"/>
11
+ <stop offset="66%" stop-color="#06b6d4"/>
12
+ <stop offset="100%" stop-color="#10b981"/>
13
+ </linearGradient>
14
+ <linearGradient id="areaGrad" x1="0%" y1="0%" x2="0%" y2="100%">
15
+ <stop offset="0%" stop-color="#6366f1" stop-opacity="0.35"/>
16
+ <stop offset="50%" stop-color="#8b5cf6" stop-opacity="0.15"/>
17
+ <stop offset="100%" stop-color="#06b6d4" stop-opacity="0"/>
18
+ </linearGradient>
19
+ <linearGradient id="glowGrad" x1="0%" y1="0%" x2="100%" y2="0%">
20
+ <stop offset="0%" stop-color="#6366f1" stop-opacity="0.4"/>
21
+ <stop offset="100%" stop-color="#06b6d4" stop-opacity="0.1"/>
22
+ </linearGradient>
23
+
24
+ <!-- Filters -->
25
+ <filter id="softGlow" x="-50%" y="-50%" width="200%" height="200%">
26
+ <feGaussianBlur stdDeviation="4" result="blur"/>
27
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
28
+ </filter>
29
+ <filter id="lineGlow" x="-20%" y="-20%" width="140%" height="140%">
30
+ <feGaussianBlur stdDeviation="2" result="blur"/>
31
+ <feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
32
+ </filter>
33
+
34
+ <!-- Grid pattern -->
35
+ <pattern id="gridPattern" width="40" height="40" patternUnits="userSpaceOnUse">
36
+ <path d="M 40 0 L 0 0 0 40" fill="none" stroke="#1f2937" stroke-width="0.5" opacity="0.5"/>
37
+ </pattern>
38
+ </defs>
39
+
40
+ <!-- Background -->
41
+ <rect width="800" height="400" fill="url(#bgGrad)"/>
42
+ <rect width="800" height="400" fill="url(#gridPattern)"/>
43
+
44
+ <!-- Header -->
45
+ <text x="400" y="38" text-anchor="middle" fill="#f9fafb" font-family="system-ui,-apple-system,sans-serif" font-size="22" font-weight="700" letter-spacing="-0.5">Downloads Growth</text>
46
+ <text x="400" y="60" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="13">Last 4 weeks trajectory</text>
47
+
48
+ <!-- Chart area: x=80..750, y=90..330 -->
49
+
50
+ <!-- Y-axis labels -->
51
+ <g fill="#6b7280" font-family="system-ui,sans-serif" font-size="12" text-anchor="end">
52
+ <text x="65" y="330">0</text>
53
+ <text x="65" y="265">500</text>
54
+ <text x="65" y="200">1K</text>
55
+ <text x="65" y="135">1.5K</text>
56
+ <text x="65" y="100">2K</text>
57
+ </g>
58
+
59
+ <!-- Y-axis grid lines -->
60
+ <g stroke="#1f2937" stroke-width="1" stroke-dasharray="3,3">
61
+ <line x1="80" y1="330" x2="750" y2="330"/>
62
+ <line x1="80" y1="265" x2="750" y2="265"/>
63
+ <line x1="80" y1="200" x2="750" y2="200"/>
64
+ <line x1="80" y1="135" x2="750" y2="135"/>
65
+ <line x1="80" y1="100" x2="750" y2="100"/>
66
+ </g>
67
+
68
+ <!-- Axes -->
69
+ <line x1="80" y1="330" x2="750" y2="330" stroke="#374151" stroke-width="2"/>
70
+ <line x1="80" y1="100" x2="80" y2="330" stroke="#374151" stroke-width="2"/>
71
+
72
+ <!-- Area fill -->
73
+ <path d="M80,310 Q130,308 180,295 T280,260 T380,210 T480,155 T580,115 T680,95 T750,88 L750,330 L80,330 Z" fill="url(#areaGrad)"/>
74
+
75
+ <!-- Glow line behind -->
76
+ <path d="M80,310 Q130,308 180,295 T280,260 T380,210 T480,155 T580,115 T680,95 T750,88"
77
+ stroke="url(#lineGrad)" stroke-width="8" fill="none" stroke-linecap="round" opacity="0.3" filter="url(#lineGlow)"/>
78
+
79
+ <!-- Main line -->
80
+ <path d="M80,310 Q130,308 180,295 T280,260 T380,210 T480,155 T580,115 T680,95 T750,88"
81
+ stroke="url(#lineGrad)" stroke-width="3" fill="none" stroke-linecap="round" filter="url(#softGlow)"/>
82
+
83
+ <!-- Data points with glow -->
84
+ <g filter="url(#softGlow)">
85
+ <circle cx="80" cy="310" r="6" fill="#6366f1"/>
86
+ <circle cx="180" cy="295" r="6" fill="#8b5cf6"/>
87
+ <circle cx="280" cy="260" r="6" fill="#8b5cf6"/>
88
+ <circle cx="380" cy="210" r="6" fill="#06b6d4"/>
89
+ <circle cx="480" cy="155" r="6" fill="#06b6d4"/>
90
+ <circle cx="580" cy="115" r="6" fill="#10b981"/>
91
+ <circle cx="680" cy="95" r="6" fill="#10b981"/>
92
+ <circle cx="750" cy="88" r="8" fill="#10b981"/>
93
+ </g>
94
+
95
+ <!-- Inner dots -->
96
+ <g>
97
+ <circle cx="80" cy="310" r="2.5" fill="#fff"/>
98
+ <circle cx="180" cy="295" r="2.5" fill="#fff"/>
99
+ <circle cx="280" cy="260" r="2.5" fill="#fff"/>
100
+ <circle cx="380" cy="210" r="2.5" fill="#fff"/>
101
+ <circle cx="480" cy="155" r="2.5" fill="#fff"/>
102
+ <circle cx="580" cy="115" r="2.5" fill="#fff"/>
103
+ <circle cx="680" cy="95" r="2.5" fill="#fff"/>
104
+ <circle cx="750" cy="88" r="3" fill="#fff"/>
105
+ </g>
106
+
107
+ <!-- X-axis labels -->
108
+ <g fill="#6b7280" font-family="system-ui,sans-serif" font-size="12" text-anchor="middle">
109
+ <text x="80" y="355">Week 0</text>
110
+ <text x="280" y="355">Week 1</text>
111
+ <text x="480" y="355">Week 2</text>
112
+ <text x="680" y="355">Week 3</text>
113
+ <text x="750" y="355">Now</text>
114
+ </g>
115
+
116
+ <!-- Stat card -->
117
+ <g transform="translate(580, 55)">
118
+ <rect x="0" y="0" width="160" height="55" rx="10" fill="#10b981" fill-opacity="0.15" stroke="#10b981" stroke-width="1"/>
119
+ <text x="80" y="25" text-anchor="middle" fill="#10b981" font-family="system-ui,sans-serif" font-size="22" font-weight="800">+149%</text>
120
+ <text x="80" y="45" text-anchor="middle" fill="#6b7280" font-family="system-ui,sans-serif" font-size="12">growth in 4 weeks</text>
121
+ </g>
122
+ </svg>