From 8633840f945a8e05be514506eeb2453e5ffd8d95 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 19 Sep 2026 03:48:38 +0200 Subject: [PATCH] fix(diagnostic): Modell-Katalog als Tabelle (Beschreibung + VRAM-Spalten), Button-Layout, Flotte nachziehen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Katalog jetzt echte Tabelle: Spalten Modell | Kann gut/Beschreibung | VRAM | Status | Ziel-Box | Laden. VRAM aus sizeGB (>=12 GB gelb markiert). - "Von HuggingFace aktualisieren" sitzt jetzt direkt neben der Ueberschrift (statt space-between ans rechte Ende); Card breiter (720→1100px), Tabelle horizontal scrollbar. - loadLlmCatalog() zieht die Worker-Flotte aktiv nach (requestWorkers) — falls ein worker_update-Push waehrend RVS-Flappens verpasst wurde, erscheint die Box beim Oeffnen trotzdem. Co-Authored-By: Claude Opus 4.8 --- diagnostic/index.html | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/diagnostic/index.html b/diagnostic/index.html index b9ce70b..8b4613d 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -650,18 +650,18 @@
-
+

Modell-Katalog

-
+

Gaengige lokale GGUF-Modelle. „Laden" schickt das Modell an die gewaehlte LLM-Box — llama-swap zieht das GGUF beim ersten Mal (mehrere GB) und meldet den Fortschritt. Danach ist es im Modell-Dropdown oben waehlbar. - Achte auf den VRAM der Box (Groesse je Modell). + Achte auf den VRAM der Box (Spalte VRAM).

-
(lade Katalog…)
+
(lade Katalog…)
@@ -7085,6 +7085,7 @@ // ── Modell-Katalog (Stage D) ──────────────────────────── let _llmCatalog = []; async function loadLlmCatalog() { + if (typeof requestWorkers === 'function') requestWorkers(); // Flotte aktiv nachziehen try { const r = await fetch('/api/llm-catalog'); const j = await r.json(); @@ -7111,21 +7112,30 @@ if (!box) return; if (!_llmCatalog.length) { box.innerHTML = 'Katalog leer.'; return; } const boxes = onlineLlmBoxes(); - box.innerHTML = _llmCatalog.map((m, i) => { + const th = 'style="padding:6px 8px;text-align:left;position:sticky;top:0;background:#12122A;"'; + const td = 'style="padding:6px 8px;vertical-align:top;"'; + const rows = _llmCatalog.map((m, i) => { const have = boxesServing(m.id); - const haveTxt = have.length ? `✓ auf ${have.map(b => escapeHtml(b.node)).join(', ')}` : 'nicht geladen'; - const sizeTxt = m.sizeGB ? ` · ~${m.sizeGB} GB` : ''; + const haveTxt = have.length ? `✓ ${have.map(b => escapeHtml(b.node)).join(', ')}` : 'nicht geladen'; + const vram = m.sizeGB ? '~' + m.sizeGB + ' GB' : '—'; + const vramStyle = m.sizeGB >= 12 ? 'color:#FFB020;' : 'color:#AAB;'; const opts = boxes.length ? boxes.map(b => ``).join('') : ''; - return '
' + - '' + escapeHtml(m.id) + '' + sizeTxt + '' + - '' + escapeHtml(m.description || m.hfRepo || '') + '' + - haveTxt + - '' + - '' + - '
'; + return '' + + '' + escapeHtml(m.id) + '' + + '' + escapeHtml(m.description || m.hfRepo || '') + '' + + '' + vram + '' + + '' + haveTxt + '' + + '' + + '' + + ''; }).join(''); + box.innerHTML = '' + + '' + + '' + + '' + + '' + rows + '
ModellKann gut / BeschreibungVRAMStatusZiel-Box
'; } function provisionModel(i) { const m = _llmCatalog[i];