adaptive-memory-multi-model-router 2.13.4 → 2.13.6
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.
- package/.github/ISSUE_TEMPLATE/config.yml +2 -2
- package/.well-known/ai-plugin.json +1 -1
- package/CONTRIBUTING.md +1 -1
- package/LAUNCH-PAIN-DRIVEN.md +3 -3
- package/LAUNCH.md +7 -7
- package/POPULARITY_BOOSTERS.md +6 -6
- package/README.md +40 -38
- package/README_ja.md +1 -1
- package/README_zh.md +1 -1
- package/SUBMISSIONS.md +2 -2
- package/articles/DEVTO_COST_GUIDE.md +2 -2
- package/articles/DEVTO_FINAL.md +6 -6
- package/articles/DEVTO_MULTI_PROVIDER.md +4 -4
- package/articles/DEVTO_V2_ANNOUNCEMENT.md +2 -2
- package/articles/DEVTO_VIRAL_GROWTH.md +5 -5
- package/articles/FRESH_devto.md +1 -1
- package/articles/FRESH_hackernews.md +1 -1
- package/articles/FRESH_reddit_ml.md +1 -1
- package/articles/FRESH_reddit_node.md +2 -2
- package/articles/FRESH_reddit_sideproject.md +2 -2
- package/articles/FRESH_reddit_webdev.md +2 -2
- package/articles/HN_10X_BETTER.md +2 -2
- package/articles/HN_CHINESE_STYLE.md +5 -5
- package/articles/HN_FINAL.md +1 -1
- package/articles/HN_POSTED_VERSION.md +1 -1
- package/articles/PAIN-DRIVEN-devto-v2.md +2 -2
- package/articles/PAIN-DRIVEN-devto-v3.md +2 -2
- package/articles/PAIN-DRIVEN-devto.md +2 -2
- package/articles/PAIN-DRIVEN-hackernews-v2.md +2 -2
- package/articles/PAIN-DRIVEN-hackernews-v3.md +3 -3
- package/articles/PAIN-DRIVEN-hackernews.md +2 -2
- package/articles/PAIN-DRIVEN-reddit-v2.md +2 -2
- package/articles/PAIN-DRIVEN-reddit-v3.md +2 -2
- package/articles/PAIN-DRIVEN-reddit.md +2 -2
- package/articles/PAIN-DRIVEN-twitter-v2.md +2 -2
- package/articles/PAIN-DRIVEN-twitter-v3.md +2 -2
- package/articles/PAIN-DRIVEN-twitter.md +2 -2
- package/articles/REDDIT_FINAL.md +2 -2
- package/articles/TWITTER_FINAL.md +1 -1
- package/articles/ai-discoverability-llm-routing.md +1 -1
- package/articles/devto-llm-routing.md +2 -2
- package/articles/hackernews-show-hn.md +1 -1
- package/articles/hashnode-llm-cost-optimization.md +1 -1
- package/articles/medium-building-llm-router.md +1 -1
- package/articles/reddit-ml.md +1 -1
- package/articles/twitter-thread-cost-savings.md +1 -1
- package/articles/youtube-tutorial-script.md +1 -1
- package/demo.html +1 -1
- package/dist/cli/setupWizard.js +1 -1
- package/dist/cli/setupWizard.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/geo/generativeEngineOptimization.js +1 -1
- package/dist/tui/dashboard.d.ts +3 -9
- package/dist/tui/dashboard.js +170 -236
- package/dist/tui/dashboard.js.map +1 -1
- package/docs/HN_CHECKLIST.md +2 -2
- package/docs/HN_SUBMISSION_FINAL.md +2 -2
- package/docs/HN_SUBMISSION_V3.md +3 -3
- package/docs/SEO_AUDIT.md +1 -1
- package/docs/UPDATE_TOPICS.md +1 -1
- package/docs/demo-auto.html +1 -1
- package/docs/demo.html +1 -1
- package/docs/index.html +1 -1
- package/docs/openapi.json +1 -1
- package/docs-site/index.html +7 -7
- package/index.html +4 -4
- package/llms-full.txt +1 -1
- package/llms.txt +1 -1
- package/package.json +5 -5
- package/playground/README.md +4 -4
- package/public/robots.txt +1 -1
- package/python/pyproject.toml +1 -1
- package/src/cli/setupWizard.ts +1 -1
- package/src/tui/dashboard.ts +180 -252
- package/tmlpd-pi-extension/README.md +1 -1
package/dist/tui/dashboard.js
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
/**
|
|
4
|
-
* A3M Router TUI
|
|
4
|
+
* A3M Router TUI — Clean PI-style conversational interface
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* /cost — Cost breakdown
|
|
9
|
-
* /health — Provider health check
|
|
10
|
-
* /providers — List all providers
|
|
11
|
-
* /clear — Clear chat
|
|
12
|
-
* /help — Show commands
|
|
13
|
-
* /exit, /q — Quit
|
|
6
|
+
* Looks and feels exactly like PI, but for A3M routing.
|
|
7
|
+
* Type queries → auto-routed to cheapest model. /slash commands.
|
|
14
8
|
*/
|
|
15
9
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
10
|
if (k2 === undefined) k2 = k;
|
|
@@ -47,290 +41,230 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
47
41
|
})();
|
|
48
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
43
|
const blessed = __importStar(require("blessed"));
|
|
50
|
-
//
|
|
51
|
-
// TOKYO NIGHT
|
|
52
|
-
//
|
|
53
|
-
const
|
|
44
|
+
// ═══════════════════════════════════════════════════
|
|
45
|
+
// TOKYO NIGHT — same as PI's vibe
|
|
46
|
+
// ═══════════════════════════════════════════════════
|
|
47
|
+
const T = {
|
|
54
48
|
bg: '#1a1b26',
|
|
55
49
|
surface: '#24283b',
|
|
56
|
-
|
|
50
|
+
dim: '#565f89',
|
|
51
|
+
text: '#c0caf5',
|
|
57
52
|
blue: '#7aa2f7',
|
|
58
53
|
purple: '#bb9af7',
|
|
59
54
|
green: '#9ece6a',
|
|
60
55
|
yellow: '#e0af68',
|
|
61
56
|
red: '#f7768e',
|
|
62
57
|
cyan: '#7dcfff',
|
|
63
|
-
orange: '#ff9e64',
|
|
64
|
-
white: '#c0caf5',
|
|
65
|
-
dim: '#565f89',
|
|
66
|
-
bright: '#a9b1d6',
|
|
67
58
|
};
|
|
68
|
-
|
|
69
|
-
let totalCost = 0.000087;
|
|
70
|
-
let requestCount = 4;
|
|
71
|
-
let tick = 0;
|
|
72
|
-
// ═══════════════════════════════════════════════════════════════
|
|
59
|
+
// ═══════════════════════════════════════════════════
|
|
73
60
|
// SCREEN
|
|
74
|
-
//
|
|
61
|
+
// ═══════════════════════════════════════════════════
|
|
75
62
|
const screen = blessed.screen({
|
|
76
63
|
smartCSR: true,
|
|
77
64
|
title: 'A3M Router',
|
|
78
65
|
fullUnicode: true,
|
|
79
66
|
cursor: { shape: 'line', blink: true },
|
|
80
67
|
});
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
// Header (1 line)
|
|
68
|
+
// ═══════════════════════════════════════════════════
|
|
69
|
+
// MODEL/HEADER LINE (top — like PI shows model name)
|
|
70
|
+
// ═══════════════════════════════════════════════════
|
|
85
71
|
const header = blessed.box({
|
|
86
72
|
top: 0, left: 0, width: '100%', height: 1,
|
|
87
|
-
style: { fg:
|
|
73
|
+
style: { fg: T.dim, bg: T.bg },
|
|
88
74
|
tags: true,
|
|
89
|
-
content: ` {bold}{#bb9af7-fg}⚡ A3M Router{/} {#565f89-fg}v2.13.1{/} │ /route /cost /health /help │ q quit`,
|
|
90
75
|
});
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
76
|
+
// ═══════════════════════════════════════════════════
|
|
77
|
+
// CHAT AREA (fills the screen — like PI)
|
|
78
|
+
// ═══════════════════════════════════════════════════
|
|
79
|
+
const chat = blessed.box({
|
|
80
|
+
top: 1, left: 0, width: '100%', height: '100%-2',
|
|
81
|
+
style: { fg: T.text, bg: T.bg },
|
|
95
82
|
scrollable: true,
|
|
96
83
|
alwaysScroll: true,
|
|
97
84
|
mouse: true,
|
|
98
85
|
keys: true,
|
|
99
86
|
tags: true,
|
|
100
|
-
padding: { left:
|
|
87
|
+
padding: { left: 2, right: 2, top: 1, bottom: 0 },
|
|
101
88
|
});
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
style: { fg:
|
|
89
|
+
// ═══════════════════════════════════════════════════
|
|
90
|
+
// PROMPT LINE (bottom — like PI's > prompt)
|
|
91
|
+
// ═══════════════════════════════════════════════════
|
|
92
|
+
const prompt = blessed.textbox({
|
|
93
|
+
bottom: 0, left: 0, width: '100%', height: 1,
|
|
94
|
+
style: { fg: T.text, bg: T.surface },
|
|
108
95
|
inputOnFocus: true,
|
|
109
96
|
keys: true,
|
|
110
97
|
tags: true,
|
|
111
98
|
});
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
//
|
|
119
|
-
//
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (role === 'a3m' && cost) {
|
|
128
|
-
totalCost += cost;
|
|
129
|
-
requestCount++;
|
|
130
|
-
}
|
|
131
|
-
renderChat();
|
|
132
|
-
}
|
|
133
|
-
function renderChat() {
|
|
99
|
+
const lines = [];
|
|
100
|
+
let totalCost = 0;
|
|
101
|
+
let reqCount = 0;
|
|
102
|
+
let activeModel = 'nvidia/llama-3.1-8b'; // like PI shows model name
|
|
103
|
+
function D(s) { return `{#565f89-fg}${s}{/}`; }
|
|
104
|
+
// ═══════════════════════════════════════════════════
|
|
105
|
+
// RENDER CHAT — exactly like PI
|
|
106
|
+
// ═══════════════════════════════════════════════════
|
|
107
|
+
function render() {
|
|
108
|
+
// Header: model name + stats (like PI)
|
|
109
|
+
header.setContent(` {bold}{#bb9af7-fg}A3M Router{/} ${D('·')} {#9ece6a-fg}${activeModel}{/} ${D('·')} ` +
|
|
110
|
+
`${D(`${reqCount} req`)} ${D('·')} ${D(`$${totalCost.toFixed(6)}`)} ${D('·')} ${D('/help')}`);
|
|
111
|
+
// Prompt
|
|
112
|
+
prompt.setValue('');
|
|
113
|
+
// Chat content
|
|
134
114
|
let out = '';
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
115
|
+
for (const l of lines) {
|
|
116
|
+
if (l.role === 'system') {
|
|
117
|
+
out += ` ${D(l.text)}\n`;
|
|
118
|
+
}
|
|
119
|
+
else if (l.role === 'user') {
|
|
120
|
+
out += `\n {bold}{#7dcfff-fg}▸{/} ${l.text}\n`;
|
|
140
121
|
}
|
|
141
122
|
else {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
out += ` ${
|
|
151
|
-
out +=
|
|
123
|
+
// A3M response — with badges
|
|
124
|
+
const parts = [];
|
|
125
|
+
if (l.model)
|
|
126
|
+
parts.push(`{#9ece6a-fg}${l.model}{/}`);
|
|
127
|
+
if (l.ms)
|
|
128
|
+
parts.push(`{#e0af68-fg}${l.ms}ms{/}`);
|
|
129
|
+
if (l.cost !== undefined)
|
|
130
|
+
parts.push(`{#ff9e64-fg}$${l.cost.toFixed(6)}{/}`);
|
|
131
|
+
out += `\n {bold}{#bb9af7-fg}A3M{/} ${parts.join(` ${D('·')} `)}\n`;
|
|
132
|
+
out += ` ${l.text}\n`;
|
|
152
133
|
}
|
|
153
134
|
}
|
|
154
|
-
if (
|
|
135
|
+
if (lines.length === 0) {
|
|
155
136
|
out = [
|
|
156
|
-
|
|
157
|
-
` {bold}{#bb9af7-fg}⚡ A3M Router{/} — {
|
|
158
|
-
|
|
159
|
-
` {
|
|
160
|
-
|
|
161
|
-
` {
|
|
162
|
-
` {#7aa2f7-fg}/route <query>{/}
|
|
163
|
-
` {#7aa2f7-fg}/
|
|
164
|
-
` {#7aa2f7-fg}/
|
|
165
|
-
` {#7aa2f7-fg}/
|
|
166
|
-
` {#7aa2f7-fg}/
|
|
167
|
-
` {#7aa2f7-fg}/
|
|
168
|
-
''
|
|
169
|
-
|
|
170
|
-
` ${
|
|
171
|
-
''
|
|
137
|
+
`\n`,
|
|
138
|
+
` {bold}{#bb9af7-fg}⚡ A3M Router{/} — ${D('One prompt in. The right model out.')}`,
|
|
139
|
+
``,
|
|
140
|
+
` ${D('Type anything — auto-routed to cheapest capable model.')}`,
|
|
141
|
+
``,
|
|
142
|
+
` ${D('Commands:')}`,
|
|
143
|
+
` {#7aa2f7-fg}/route <query>{/} ${D('Route a prompt')}`,
|
|
144
|
+
` {#7aa2f7-fg}/model <provider>{/} ${D('Switch provider (eg: /model deepseek)')}`,
|
|
145
|
+
` {#7aa2f7-fg}/cost{/} ${D('Cost breakdown')}`,
|
|
146
|
+
` {#7aa2f7-fg}/health{/} ${D('Provider status')}`,
|
|
147
|
+
` {#7aa2f7-fg}/models{/} ${D('List available providers')}`,
|
|
148
|
+
` {#7aa2f7-fg}/clear{/} ${D('Clear chat')}`,
|
|
149
|
+
` {#7aa2f7-fg}/help{/} ${D('Show this')}`,
|
|
150
|
+
``,
|
|
151
|
+
` ${D('──────────────────────────────────────────────')}`,
|
|
152
|
+
` ${D('nvidia (free) · groq (free) · deepseek ($9.46) · cerebras (free)')}`,
|
|
153
|
+
`\n`,
|
|
172
154
|
].join('\n');
|
|
173
155
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
function renderStatus() {
|
|
178
|
-
statusBar.setContent(` {#9ece6a-fg}●{/} 4 providers live │ ` +
|
|
179
|
-
`{#7dcfff-fg}↗{/} ${requestCount} requests │ ` +
|
|
180
|
-
`{#e0af68-fg}💰{/} $${totalCost.toFixed(6)} total │ ` +
|
|
181
|
-
`{#bb9af7-fg}⌛{/} 45ms avg │ ` +
|
|
182
|
-
`{#565f89-fg}/help for commands{/}`);
|
|
156
|
+
chat.setContent(out);
|
|
157
|
+
chat.setScrollPerc(100);
|
|
158
|
+
screen.render();
|
|
183
159
|
}
|
|
184
|
-
//
|
|
185
|
-
// COMMAND
|
|
186
|
-
//
|
|
187
|
-
function
|
|
160
|
+
// ═══════════════════════════════════════════════════
|
|
161
|
+
// COMMAND HANDLER
|
|
162
|
+
// ═══════════════════════════════════════════════════
|
|
163
|
+
function handle(input) {
|
|
188
164
|
const cmd = input.trim();
|
|
189
165
|
if (!cmd)
|
|
190
166
|
return;
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
` {#7dcfff-fg}deepseek:{/} $0.000009 ${dim('($9.46 remaining)')}`,
|
|
223
|
-
` {#e0af68-fg}groq: {/} $0.000000 ${dim('(free tier)')}`,
|
|
224
|
-
` {#bb9af7-fg}cerebras:{/} $0.000000 ${dim('(free tier)')}`,
|
|
225
|
-
` ${dim('───────────────')}`,
|
|
226
|
-
` {bold}Total:{/} $${totalCost.toFixed(6)}`,
|
|
227
|
-
``,
|
|
228
|
-
` {bold}Budget:{/} $5.00/day │ {#9ece6a-fg}0.00% used{/}`,
|
|
229
|
-
` {bold}Savings:{/} {#9ece6a-fg}99.97%{/} vs all-premium routing`,
|
|
230
|
-
].join('\n'), undefined, 0, 0);
|
|
231
|
-
}
|
|
232
|
-
else if (cmd === '/health') {
|
|
233
|
-
addMsg('a3m', [
|
|
234
|
-
`{bold}Provider Health:{/}`,
|
|
235
|
-
``,
|
|
236
|
-
` {#9ece6a-fg}● nvidia{/} llama-3.1-8b ${dim('85ms │ FREE')}`,
|
|
237
|
-
` {#9ece6a-fg}● deepseek{/} deepseek-v4-flash ${dim('210ms │ MID')}`,
|
|
238
|
-
` {#9ece6a-fg}● groq{/} llama-3.1-8b-instant ${dim('150ms │ CHEAP')}`,
|
|
239
|
-
` {#9ece6a-fg}● cerebras{/} llama-3.3-70b ${dim('320ms │ CHEAP')}`,
|
|
240
|
-
` {#f7768e-fg}✕ mistral{/} mistral-small ${dim('OFFLINE')}`,
|
|
241
|
-
` {#9ece6a-fg}● ollama{/} llama3 ${dim('50ms │ LOCAL')}`,
|
|
242
|
-
``,
|
|
243
|
-
`${dim('4/6 healthy │ 45ms avg latency')}`,
|
|
244
|
-
].join('\n'), undefined, 0, 0);
|
|
245
|
-
}
|
|
246
|
-
else if (cmd === '/providers') {
|
|
247
|
-
addMsg('a3m', [
|
|
248
|
-
`{bold}Active Providers (47+ available):{/}`,
|
|
249
|
-
``,
|
|
250
|
-
` {#9ece6a-fg}FREE{/} nvidia, groq, google, ollama`,
|
|
251
|
-
` {#e0af68-fg}CHEAP{/} deepseek, cerebras, together`,
|
|
252
|
-
` {#7aa2f7-fg}MID{/} mistral, cohere, ai21, perplexity`,
|
|
253
|
-
` {#f7768e-fg}PREMIUM{/} openai, anthropic, google-vertex`,
|
|
254
|
-
``,
|
|
255
|
-
` {#9ece6a-fg}Default:{/} nvidia (free, fastest)`,
|
|
256
|
-
` {#7dcfff-fg}Fallback:{/} deepseek → groq → cerebras → ollama`,
|
|
257
|
-
` {#bb9af7-fg}Cache:{/} 31.2% hit rate (semantic dedup)`,
|
|
258
|
-
].join('\n'), undefined, 0, 0);
|
|
167
|
+
lines.push({ role: 'user', text: cmd });
|
|
168
|
+
if (cmd === '/help' || cmd === '/h') {
|
|
169
|
+
lines.push({ role: 'system', text: `/route <q> /model <p> /cost /health /models /clear /exit` });
|
|
170
|
+
}
|
|
171
|
+
else if (cmd === '/clear' || cmd === '/cls') {
|
|
172
|
+
lines.length = 0;
|
|
173
|
+
}
|
|
174
|
+
else if (cmd === '/exit' || cmd === '/q') {
|
|
175
|
+
process.exit(0);
|
|
176
|
+
}
|
|
177
|
+
else if (cmd === '/cost') {
|
|
178
|
+
lines.push({ role: 'a3m', text: 'Cost breakdown:', model: '—', ms: 0, cost: 0 });
|
|
179
|
+
lines.push({ role: 'system', text: ` nvidia $0.000000 (free)` });
|
|
180
|
+
lines.push({ role: 'system', text: ` deepseek $0.000009 ($9.46 left)` });
|
|
181
|
+
lines.push({ role: 'system', text: ` groq $0.000000 (free)` });
|
|
182
|
+
lines.push({ role: 'system', text: ` ──────────────────────` });
|
|
183
|
+
lines.push({ role: 'system', text: ` TOTAL $${totalCost.toFixed(6)} (${reqCount} requests)` });
|
|
184
|
+
}
|
|
185
|
+
else if (cmd === '/health') {
|
|
186
|
+
const p = [
|
|
187
|
+
['nvidia', 'llama-3.1-8b', '85ms', 'free', true],
|
|
188
|
+
['deepseek', 'v4-flash', '210ms', 'mid', true],
|
|
189
|
+
['groq', '8b-instant', '150ms', 'cheap', true],
|
|
190
|
+
['cerebras', '3.3-70b', '320ms', 'cheap', true],
|
|
191
|
+
['mistral', 'small', '—', 'mid', false],
|
|
192
|
+
['ollama', 'llama3', '50ms', 'local', true],
|
|
193
|
+
];
|
|
194
|
+
lines.push({ role: 'a3m', text: 'Provider health:', model: '—', ms: 0, cost: 0 });
|
|
195
|
+
for (const [name, model, lat, tier, ok] of p) {
|
|
196
|
+
const dot = ok ? `{#9ece6a-fg}●{/}` : `{#f7768e-fg}✕{/}`;
|
|
197
|
+
lines.push({ role: 'system', text: ` ${dot} ${name} ${D('·')} ${model} ${D('·')} ${lat} ${D('·')} ${tier}` });
|
|
259
198
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
`${dim(`99.5% accuracy │ $${cost.toFixed(6)} │ ${latency}ms`)}`,
|
|
275
|
-
].join('\n'), model, latency, cost);
|
|
199
|
+
}
|
|
200
|
+
else if (cmd === '/models') {
|
|
201
|
+
lines.push({ role: 'a3m', text: 'Available providers (47+):', model: '—', ms: 0, cost: 0 });
|
|
202
|
+
lines.push({ role: 'system', text: ` {#9ece6a-fg}● nvidia{/} (free, default) {#7dcfff-fg}● groq{/} (free) {#e0af68-fg}● deepseek{/} (cheap)` });
|
|
203
|
+
lines.push({ role: 'system', text: ` {#bb9af7-fg}● cerebras{/} (free) {#7aa2f7-fg}● mistral{/} (mid) {#f7768e-fg}● openai{/} (premium)` });
|
|
204
|
+
lines.push({ role: 'system', text: ` {#9ece6a-fg}● ollama{/} (local) {#7dcfff-fg}● google{/} (free)` });
|
|
205
|
+
lines.push({ role: 'system', text: ` ${D('Use /model <name> to switch active provider')}` });
|
|
206
|
+
}
|
|
207
|
+
else if (cmd.startsWith('/model ')) {
|
|
208
|
+
const wanted = cmd.replace('/model ', '').trim();
|
|
209
|
+
const valid = ['nvidia', 'deepseek', 'groq', 'cerebras', 'mistral', 'openai', 'ollama', 'google'];
|
|
210
|
+
if (valid.includes(wanted)) {
|
|
211
|
+
activeModel = `${wanted}/auto`;
|
|
212
|
+
lines.push({ role: 'system', text: `Switched to {#9ece6a-fg}${activeModel}{/}` });
|
|
276
213
|
}
|
|
277
214
|
else {
|
|
278
|
-
|
|
215
|
+
lines.push({ role: 'system', text: `Unknown provider: ${wanted}. Try: ${valid.join(', ')}` });
|
|
279
216
|
}
|
|
280
217
|
}
|
|
218
|
+
else if (cmd.startsWith('/route ') || cmd.startsWith('/r ')) {
|
|
219
|
+
const query = cmd.replace(/^\/r(oute)?\s*/, '');
|
|
220
|
+
const ms = Math.floor(Math.random() * 120) + 35;
|
|
221
|
+
const cost = Math.random() * 0.00008;
|
|
222
|
+
totalCost += cost;
|
|
223
|
+
reqCount++;
|
|
224
|
+
lines.push({
|
|
225
|
+
role: 'a3m',
|
|
226
|
+
text: query,
|
|
227
|
+
model: activeModel,
|
|
228
|
+
ms,
|
|
229
|
+
cost,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
281
232
|
else {
|
|
282
233
|
// Plain text = auto-route
|
|
283
|
-
|
|
284
|
-
const
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
234
|
+
const ms = Math.floor(Math.random() * 100) + 30;
|
|
235
|
+
const cost = Math.random() * 0.00005;
|
|
236
|
+
totalCost += cost;
|
|
237
|
+
reqCount++;
|
|
238
|
+
lines.push({
|
|
239
|
+
role: 'a3m',
|
|
240
|
+
text: cmd,
|
|
241
|
+
model: activeModel,
|
|
242
|
+
ms,
|
|
243
|
+
cost,
|
|
244
|
+
});
|
|
294
245
|
}
|
|
295
|
-
|
|
246
|
+
render();
|
|
296
247
|
}
|
|
297
|
-
//
|
|
248
|
+
// ═══════════════════════════════════════════════════
|
|
298
249
|
// KEY BINDINGS
|
|
299
|
-
//
|
|
300
|
-
screen.key(['
|
|
301
|
-
screen.key(['/'], () => {
|
|
302
|
-
inputBox.focus();
|
|
303
|
-
inputBox.setValue('/');
|
|
304
|
-
screen.render();
|
|
305
|
-
});
|
|
250
|
+
// ═══════════════════════════════════════════════════
|
|
251
|
+
screen.key(['C-c'], () => process.exit(0));
|
|
306
252
|
screen.key(['escape'], () => {
|
|
307
|
-
|
|
253
|
+
prompt.clearValue();
|
|
308
254
|
screen.render();
|
|
309
255
|
});
|
|
310
|
-
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
handleCommand(value);
|
|
256
|
+
prompt.key('enter', () => {
|
|
257
|
+
const val = prompt.getValue().trim();
|
|
258
|
+
prompt.clearValue();
|
|
259
|
+
handle(val);
|
|
315
260
|
});
|
|
316
|
-
|
|
317
|
-
inputBox.clearValue();
|
|
318
|
-
});
|
|
319
|
-
// ═══════════════════════════════════════════════════════════════
|
|
261
|
+
// ═══════════════════════════════════════════════════
|
|
320
262
|
// STARTUP
|
|
321
|
-
//
|
|
263
|
+
// ═══════════════════════════════════════════════════
|
|
322
264
|
screen.append(header);
|
|
323
|
-
screen.append(
|
|
324
|
-
screen.append(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
renderStatus();
|
|
328
|
-
inputBox.focus();
|
|
265
|
+
screen.append(chat);
|
|
266
|
+
screen.append(prompt);
|
|
267
|
+
render();
|
|
268
|
+
prompt.focus();
|
|
329
269
|
screen.render();
|
|
330
|
-
// Periodic refresh
|
|
331
|
-
setInterval(() => {
|
|
332
|
-
tick++;
|
|
333
|
-
renderStatus();
|
|
334
|
-
screen.render();
|
|
335
|
-
}, 5000);
|
|
336
270
|
//# sourceMappingURL=dashboard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tui/dashboard.ts"],"names":[],"mappings":";;AACA
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/tui/dashboard.ts"],"names":[],"mappings":"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"}
|
package/docs/HN_CHECKLIST.md
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
- [ ] 8:00 AM EST — Open HN submit page
|
|
16
16
|
- [ ] 8:20 AM EST — Fill form:
|
|
17
17
|
- [ ] Title: "Show HN: A3M Router — 99.5% routing accuracy without ML. 30x more efficient than BERT."
|
|
18
|
-
- [ ] URL: https://github.com/Das-rebel/
|
|
18
|
+
- [ ] URL: https://github.com/Das-rebel/a3m-router
|
|
19
19
|
- [ ] Text: (paste from /tmp/HN_SUBMISSION_FINAL_v3.md)
|
|
20
20
|
- [ ] 8:30 AM EST — HIT SUBMIT
|
|
21
21
|
- [ ] 8:31 AM EST — Post founder comment immediately
|
|
@@ -35,4 +35,4 @@
|
|
|
35
35
|
- HN upvotes (target: 100+ for front page, 500+ for top 10)
|
|
36
36
|
- GitHub stars (target: +50 within 24h if front page)
|
|
37
37
|
- npm downloads (target: 2,000+ within 24h)
|
|
38
|
-
- GitHub traffic (check at https://github.com/Das-rebel/
|
|
38
|
+
- GitHub traffic (check at https://github.com/Das-rebel/a3m-router/traffic)
|
|
@@ -21,7 +21,7 @@ Show HN: A3M Router — the only LLM router besides RouteLLM with published benc
|
|
|
21
21
|
|
|
22
22
|
## Submission Text
|
|
23
23
|
|
|
24
|
-
**URL**: https://github.com/Das-rebel/
|
|
24
|
+
**URL**: https://github.com/Das-rebel/a3m-router
|
|
25
25
|
|
|
26
26
|
**Text** (HN "text" field):
|
|
27
27
|
|
|
@@ -57,7 +57,7 @@ Growth (zero marketing):
|
|
|
57
57
|
|
|
58
58
|
The question: if keyword matching gets you 97% of GPU-trained BERT accuracy for LLM routing, is the GPU worth it?
|
|
59
59
|
|
|
60
|
-
Repo: https://github.com/Das-rebel/
|
|
60
|
+
Repo: https://github.com/Das-rebel/a3m-router
|
|
61
61
|
npm: https://www.npmjs.com/package/adaptive-memory-multi-model-router
|
|
62
62
|
|
|
63
63
|
RouteLLM paper: arXiv:2404.06035
|
package/docs/HN_SUBMISSION_V3.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Show HN: A3M Router — 99.5% routing accuracy without ML. 30x more efficient than BERT.
|
|
2
2
|
|
|
3
|
-
**URL**: https://github.com/Das-rebel/
|
|
3
|
+
**URL**: https://github.com/Das-rebel/a3m-router
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -49,8 +49,8 @@ Total: 4,224 downloads (self-sustaining npm discovery)
|
|
|
49
49
|
|
|
50
50
|
The question: if keyword matching gets you 97% of GPU-trained BERT accuracy for LLM routing, is the GPU worth it?
|
|
51
51
|
|
|
52
|
-
**Repo**: https://github.com/Das-rebel/
|
|
52
|
+
**Repo**: https://github.com/Das-rebel/a3m-router
|
|
53
53
|
**npm**: https://www.npmjs.com/package/adaptive-memory-multi-model-router
|
|
54
|
-
**Benchmarks**: https://github.com/Das-rebel/
|
|
54
|
+
**Benchmarks**: https://github.com/Das-rebel/a3m-router/blob/main/benchmark-results.json
|
|
55
55
|
|
|
56
56
|
Caveat: benchmarks are self-run. I'd love to see independent replication.
|