Spaces:
Sleeping
Sleeping
Commit ·
897727d
1
Parent(s): 792acb1
fix(admin): KI-187 — explicit Provider column (Google / NVIDIA NIM / OpenRouter)
Browse filesUser: "Call out what is from NIM and call out what is from OpenRouter
very clearly."
Previously the only way to tell NIM rows from OR rows was the ':free'
suffix on the model id. For the same base model (qwen3-next-80b
appears in both NIM and OR pools) this was easy to miss.
Added explicit Provider column with brand-coded colors:
- Google AI Studio → blue (#4285f4)
- NVIDIA NIM → green (#76b900)
- OpenRouter → orange (#ffa657)
Column order: Model | Provider | Tier | Status | Brain Fast | Brain Main | Judge
Verification: node --check on inline script — clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
frontend/public/admin/llm-control.html
CHANGED
|
@@ -1524,11 +1524,15 @@
|
|
| 1524 |
// KI-186 (2026-05-15) — added "Tier" column so Gemini + OR rows can
|
| 1525 |
// be shown alongside NIM rows. Tier 0 = Google AI Studio, Tier 1 =
|
| 1526 |
// NIM (probed), Tier 2 = OpenRouter free pool.
|
| 1527 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1528 |
availCols.forEach(function (h, i) {
|
| 1529 |
var th = createEl('th', { text: h });
|
| 1530 |
-
if (i >=
|
| 1531 |
-
if (i === 1 || i === 2) th.style.textAlign = 'center';
|
| 1532 |
availHr.appendChild(th);
|
| 1533 |
});
|
| 1534 |
availThead.appendChild(availHr);
|
|
@@ -1543,16 +1547,31 @@
|
|
| 1543 |
// garbage invariant).
|
| 1544 |
var STATIC_TIER_ROWS = [
|
| 1545 |
// Tier 0 — Google AI Studio (Gemini, free 1500/day)
|
| 1546 |
-
{ model: 'google/gemini-2.5-flash', tier: 'T0', healthy: true, brainFast: '—', brainMain: 'primary', judge: '—' },
|
| 1547 |
-
{ model: 'google/gemini-2.5-flash-lite', tier: 'T0', healthy: true, brainFast: 'primary', brainMain: '—', judge: '—' },
|
| 1548 |
// Tier 2 — OpenRouter free pool (server-side fallback inside OR)
|
| 1549 |
-
{ model: 'nvidia/nemotron-3-super-120b-a12b:free', tier: 'T2', healthy: true, brainFast: '✓', brainMain: '✓', judge: '—' },
|
| 1550 |
-
{ model: 'qwen/qwen3-next-80b-a3b-instruct:free', tier: 'T2', healthy: true, brainFast: '✓', brainMain: '—', judge: '✓' },
|
| 1551 |
-
{ model: 'google/gemma-4-31b-it:free', tier: 'T2', healthy: true, brainFast: '✓', brainMain: '—', judge: '—' },
|
| 1552 |
];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1553 |
STATIC_TIER_ROWS.forEach(function (row) {
|
| 1554 |
var tr = createEl('tr');
|
| 1555 |
tr.appendChild(createEl('td', { className: 'model-name', text: row.model }));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1556 |
// Tier badge
|
| 1557 |
var tierCell = createEl('td', { className: 'tier-cell' });
|
| 1558 |
tierCell.style.textAlign = 'center';
|
|
@@ -1595,6 +1614,14 @@
|
|
| 1595 |
var tr = createEl('tr');
|
| 1596 |
tr.appendChild(createEl('td', { className: 'model-name', text: model }));
|
| 1597 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1598 |
// KI-186 — Tier badge (NIM models are Tier 1)
|
| 1599 |
var tierCell = createEl('td', { className: 'tier-cell' });
|
| 1600 |
tierCell.style.textAlign = 'center';
|
|
|
|
| 1524 |
// KI-186 (2026-05-15) — added "Tier" column so Gemini + OR rows can
|
| 1525 |
// be shown alongside NIM rows. Tier 0 = Google AI Studio, Tier 1 =
|
| 1526 |
// NIM (probed), Tier 2 = OpenRouter free pool.
|
| 1527 |
+
// KI-187 (2026-05-15) — added explicit "Provider" column ("Google
|
| 1528 |
+
// AI Studio" / "NVIDIA NIM" / "OpenRouter") so users don't have to
|
| 1529 |
+
// infer provider from the model-id suffix (e.g., qwen3-next-80b
|
| 1530 |
+
// appears in BOTH NIM and OR; only `:free` suffix disambiguated).
|
| 1531 |
+
var availCols = ['Model', 'Provider', 'Tier', 'Status'].concat(SIMPLE_USE_ORDER.map(function (r) { return SIMPLE_USE_LABELS[r]; }));
|
| 1532 |
availCols.forEach(function (h, i) {
|
| 1533 |
var th = createEl('th', { text: h });
|
| 1534 |
+
if (i >= 4) th.style.textAlign = 'center';
|
| 1535 |
+
if (i === 1 || i === 2 || i === 3) th.style.textAlign = 'center';
|
| 1536 |
availHr.appendChild(th);
|
| 1537 |
});
|
| 1538 |
availThead.appendChild(availHr);
|
|
|
|
| 1547 |
// garbage invariant).
|
| 1548 |
var STATIC_TIER_ROWS = [
|
| 1549 |
// Tier 0 — Google AI Studio (Gemini, free 1500/day)
|
| 1550 |
+
{ model: 'google/gemini-2.5-flash', provider: 'Google AI Studio', tier: 'T0', healthy: true, brainFast: '—', brainMain: 'primary', judge: '—' },
|
| 1551 |
+
{ model: 'google/gemini-2.5-flash-lite', provider: 'Google AI Studio', tier: 'T0', healthy: true, brainFast: 'primary', brainMain: '—', judge: '—' },
|
| 1552 |
// Tier 2 — OpenRouter free pool (server-side fallback inside OR)
|
| 1553 |
+
{ model: 'nvidia/nemotron-3-super-120b-a12b:free', provider: 'OpenRouter', tier: 'T2', healthy: true, brainFast: '✓', brainMain: '✓', judge: '—' },
|
| 1554 |
+
{ model: 'qwen/qwen3-next-80b-a3b-instruct:free', provider: 'OpenRouter', tier: 'T2', healthy: true, brainFast: '✓', brainMain: '—', judge: '✓' },
|
| 1555 |
+
{ model: 'google/gemma-4-31b-it:free', provider: 'OpenRouter', tier: 'T2', healthy: true, brainFast: '✓', brainMain: '—', judge: '—' },
|
| 1556 |
];
|
| 1557 |
+
// KI-187 — provider colors: blue for Google (matches their brand),
|
| 1558 |
+
// green for NVIDIA NIM (matches NVIDIA), orange for OpenRouter
|
| 1559 |
+
// (distinct from the others).
|
| 1560 |
+
var PROVIDER_COLORS = {
|
| 1561 |
+
'Google AI Studio': '#4285f4', // Google blue
|
| 1562 |
+
'NVIDIA NIM': '#76b900', // NVIDIA green
|
| 1563 |
+
'OpenRouter': '#ffa657', // OR orange
|
| 1564 |
+
};
|
| 1565 |
STATIC_TIER_ROWS.forEach(function (row) {
|
| 1566 |
var tr = createEl('tr');
|
| 1567 |
tr.appendChild(createEl('td', { className: 'model-name', text: row.model }));
|
| 1568 |
+
// Provider badge — KI-187
|
| 1569 |
+
var provCell = createEl('td', { className: 'provider-cell' });
|
| 1570 |
+
provCell.style.textAlign = 'center';
|
| 1571 |
+
provCell.style.fontWeight = '600';
|
| 1572 |
+
provCell.style.color = PROVIDER_COLORS[row.provider] || 'var(--muted)';
|
| 1573 |
+
provCell.textContent = row.provider;
|
| 1574 |
+
tr.appendChild(provCell);
|
| 1575 |
// Tier badge
|
| 1576 |
var tierCell = createEl('td', { className: 'tier-cell' });
|
| 1577 |
tierCell.style.textAlign = 'center';
|
|
|
|
| 1614 |
var tr = createEl('tr');
|
| 1615 |
tr.appendChild(createEl('td', { className: 'model-name', text: model }));
|
| 1616 |
|
| 1617 |
+
// KI-187 — Provider badge (NIM-derived rows all come from NVIDIA NIM)
|
| 1618 |
+
var provCell = createEl('td', { className: 'provider-cell' });
|
| 1619 |
+
provCell.style.textAlign = 'center';
|
| 1620 |
+
provCell.style.fontWeight = '600';
|
| 1621 |
+
provCell.style.color = PROVIDER_COLORS['NVIDIA NIM'];
|
| 1622 |
+
provCell.textContent = 'NVIDIA NIM';
|
| 1623 |
+
tr.appendChild(provCell);
|
| 1624 |
+
|
| 1625 |
// KI-186 — Tier badge (NIM models are Tier 1)
|
| 1626 |
var tierCell = createEl('td', { className: 'tier-cell' });
|
| 1627 |
tierCell.style.textAlign = 'center';
|