+
+
+
- {t("models.connHost")}
+ - {status.host}
+
+
+
- {t("nodes.version")}
+ - {status.version ?? "—"}
+
+
+
- {t("nodes.latency")}
+ - {status.latencyMs === null ? "—" : `${status.latencyMs} ms`}
+
+
+
- {t("nodes.diskModels", { n: status.models.length })}
+ - {status.running.length} running
+
+
+
+ {status.running.length > 0 && (
+
+
{t("nodes.running")}
+
+ {status.running.map((m) => (
+ -
+ {m.name}
+ {t("nodes.vram")}: {fmtSize(m.sizeVram)}
+
+ ))}
+
+
+ )}
+
+
+
+
{t("nodes.stats")}
+
+ setWindow(v as StatsWindowId)}
+ align="right"
+ options={WINDOWS.map((w) => ({ value: w, label: w }))}
+ />
+
+
+ {stats && (
+ <>
+
+ {stats.totals.req} {t("nodes.req")}
+ 0 ? "text-red-500" : undefined}>{stats.totals.err} {t("nodes.err")}
+ {t("nodes.avg")}: {stats.totals.avgMs === null ? "—" : `${Math.round(stats.totals.avgMs)} ms`}
+ {t("nodes.tps")}: {stats.totals.tokPerSec === null ? "—" : stats.totals.tokPerSec.toFixed(1)}
+ {stats.totals.promptTok + stats.totals.evalTok} {t("nodes.tok")}
+
+ {stats.totals.req === 0 ? (
+
+ {t("nodes.emptyStats")}
+
+ ) : (
+
+ {stats.buckets.map((b, i) => {
+ const h = Math.max(2, Math.round((b.req / maxReq) * 100));
+ const errH = b.req > 0 ? Math.round(h * (b.err / b.req)) : 0;
+ return (
+
+ );
+ })}
+
+ )}
+ >
+ )}
+
+
+ {status.models.length > 0 && (
+
+
{t("nodes.diskModels", { n: status.models.length })}
+
+ {status.models.map((m) => (
+ -
+ {m.name}
+ {fmtSize(m.size)}
+
+ ))}
+
+
+ )}
+
+
{t("nodes.cpuNote")}
+
+ )}
+