// overview.js — Dashboard: Quick Actions, Modelle & Recent Jobs
import { $, esc, icon } from "../core/ui.js";
let S = null; // letzter Status
let J = []; // letzte Job-Liste
let SYS = null;
const RUNNING = new Set(["running", "ready", "loading", "starting"]);
function counts() {
const models = S?.models || [];
return {
total: models.length,
running: models.filter(m => RUNNING.has(m.state)).length,
};
}
function renderHero() {
$("#hero").innerHTML = `
Dashboard
Mission Control
Steuerzentrale für deinen lokalen llama-swap-Stack. Hier verwaltest du Modelle, Downloads und Server-Wartung.
`;
}
function renderQuickActions() {
// 3 Kacheln (Cookbook, Server-Status, Aktivität/Guides)
$("#ov-quick").innerHTML = `
`;
}
function modelRow(m) {
const on = RUNNING.has(m.state);
const dot = m.state === "loading" || m.state === "starting" ? "load" : on ? "on" : "";
const state = on ? (m.state === "loading" ? "lädt…" : "geladen") : "bereit";
let caps = "";
if (m.meta && m.meta.caps) {
caps = m.meta.caps.map(c => {
if (c === "Code") return `{ }`;
if (c === "Bild") return `👁`;
return "";
}).join("");
}
const filename = m.meta?.filename ? `${esc(m.meta.filename)}
` : '';
return `
${esc(m.name)}${caps}
${filename}
`;
}
function renderModels() {
const models = S?.models || [];
$("#ov-models").innerHTML = `
Aktuelle Modelle im Stack
${models.length || ""}
${models.length
? `${models.map(modelRow).join("")}
`
: `Keine Modelle konfiguriert
Hol dir unter „Cookbook“ eins von HuggingFace.
`}`;
}
function renderRecentJobs() {
const latest = J.slice(0, 4);
const statusBadge = (s) => {
if (s === "done") return 'fertig';
if (s === "failed") return 'fehler';
return 'lädt…';
};
$("#ov-recent-jobs").innerHTML = `
Letzte Aktivitäten
Alle ansehen →
${latest.length
? `
${latest.map(j => `
`).join("")}
`
: `Keine Aktivitäten
Alles läuft ruhig.
`
}
`;
}
function renderAll() {
renderHero();
renderQuickActions();
renderModels();
renderRecentJobs();
}
function mount() { renderAll(); }
function onStatus(s) { S = s; renderModels(); }
function onJobs(jobs) { J = jobs || []; renderRecentJobs(); }
function onSystem(sys) { SYS = sys; renderQuickActions(); }
export default { id: "overview", mount, onStatus, onJobs, onSystem };