rohitsar567 Claude Opus 4.7 (1M context) commited on
Commit
897727d
·
1 Parent(s): 792acb1

fix(admin): KI-187 — explicit Provider column (Google / NVIDIA NIM / OpenRouter)

Browse files

User: "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
- var availCols = ['Model', 'Tier', 'Status'].concat(SIMPLE_USE_ORDER.map(function (r) { return SIMPLE_USE_LABELS[r]; }));
 
 
 
 
1528
  availCols.forEach(function (h, i) {
1529
  var th = createEl('th', { text: h });
1530
- if (i >= 3) th.style.textAlign = 'center';
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';