Laskentavalmiuden indikaattori agents-sivulle + kpn load -komento

Status-palkissa näkyy nyt Hub-yhteyden lisäksi laskentasolmun tila:
- Harmaa "Ei käynnissä ⟩" — klikkaa käynnistääksesi
- Keltainen "Ladataan mallia..." — malli latautuu
- Vihreä "Valmis (Qwen2.5-Coder)" — valmis laskentaan

Kaksi tapaa käynnistää:
1. Klikkaa compute-statusta status-palkissa
2. Kirjoita terminaaliin: kpn load

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-05 09:48:50 +03:00
parent 950cae9d96
commit a2e7ed53ff

View File

@@ -1089,10 +1089,18 @@
</div>
</div>
<div id="agent-hub-status" title="WebSocket-yhteys Kipinä Hubiin — hallitsee tehtävien jakelun ja solmujen koordinoinnin" style="margin-top:20px;padding:8px 14px;background:#0d1117;border:1px solid var(--border-color);border-radius:6px 6px 0 0;font-family:'Courier New',monospace;font-size:13px;display:flex;align-items:center;gap:8px;cursor:help">
<div id="agent-hub-status" style="margin-top:20px;padding:8px 14px;background:#0d1117;border:1px solid var(--border-color);border-radius:6px 6px 0 0;font-family:'Courier New',monospace;font-size:13px;display:flex;align-items:center;gap:12px;cursor:help" title="WebSocket-yhteys Kipinä Hubiin — hallitsee tehtävien jakelun ja solmujen koordinoinnin">
<span style="display:flex;align-items:center;gap:6px" title="Hub-yhteyden tila">
<span id="agent-hub-dot" style="width:8px;height:8px;border-radius:50%;background:#d29922;display:inline-block"></span>
<span style="color:#8b949e">Hub:</span>
<span id="agent-hub-label" style="color:#d29922">Yhdistetään...</span>
</span>
<span style="color:#30363d"></span>
<span style="display:flex;align-items:center;gap:6px;cursor:pointer" id="agent-compute-status" title="Klikkaa käynnistääksesi oman koneen laskentasolmu">
<span id="agent-compute-dot" style="width:8px;height:8px;border-radius:50%;background:#30363d;display:inline-block"></span>
<span style="color:#8b949e">Laskenta:</span>
<span id="agent-compute-label" style="color:#8b949e">Ei käynnissä ⟩</span>
</span>
</div>
<div class="terminal-panel" id="agent-terminal" style="margin-top:0;border-top:none;border-radius:0">
</div>
@@ -1826,6 +1834,7 @@
termLog(' kpn hello — iloinen tervehdys verkosta', '#a5d6ff');
termLog(' kpn run &lt;malli&gt; "&lt;prompti&gt;" — aja tehtävä verkossa', '#a5d6ff');
termLog(' kpn pipeline "&lt;tehtävä&gt;" — manageri → koodari → testaaja', '#a5d6ff');
termLog(' kpn load — lataa kielimalli omalle koneelle', '#a5d6ff');
termLog(' kpn status — verkon tila', '#a5d6ff');
termLog(' kpn models — käytettävissä olevat mallit', '#a5d6ff');
termLog(' kpn clear — tyhjennä terminaali', '#a5d6ff');
@@ -1837,6 +1846,17 @@
return;
}
if (sub === 'load') {
const cl = document.getElementById('agent-compute-label');
if (cl && cl.style.color === 'rgb(63, 185, 80)') {
termLog(' ✓ Kielimalli on jo ladattu ja valmis', '#3fb950');
} else {
termLog(' Ladataan kielimallia...', '#d29922');
ensureCoderNode();
}
return;
}
if (sub === 'status') {
const nodes = statNodes.textContent || '0';
const vram = statVram.textContent || '?';
@@ -2500,6 +2520,15 @@
if (msg.includes('[Coder]') && msg.includes('model') && msg.includes('löytyi')) { setStep('step-model', 'done', 'cache'); }
if (msg.includes('[Coder]') && msg.includes('model') && msg.includes('tallennettu')) { setStep('step-model', 'done', '100%'); }
if (msg.includes('[Coder]') && msg.includes('Rakennetaan')) { setStep('step-build', 'active'); }
if (msg.includes('Agent Node käynnistyy') || msg.includes('Rakennetaan')) {
// Laskenta käynnistymässä
const cd = document.getElementById('agent-compute-dot');
const cl = document.getElementById('agent-compute-label');
const cs = document.getElementById('agent-compute-status');
if (cd) cd.style.background = '#d29922';
if (cl) { cl.textContent = 'Ladataan mallia...'; cl.style.color = '#d29922'; }
if (cs) cs.title = 'Kielimallia ladataan — tämä kestää ensimmäisellä kerralla pidempään';
}
if (msg.includes('[Coder]') && msg.includes('Malli ladattu')) {
// Malli on valmis — merkataan kaikki vaiheet valmiiksi
setStep('step-wasm', 'done');
@@ -2514,6 +2543,14 @@
setStep('step-build', 'done');
setStep('step-ready', 'done');
// Agents-sivun compute-status: valmis
const cd = document.getElementById('agent-compute-dot');
const cl = document.getElementById('agent-compute-label');
const cs = document.getElementById('agent-compute-status');
if (cd) cd.style.background = '#3fb950';
if (cl) { cl.textContent = 'Valmis (Qwen2.5-Coder)'; cl.style.color = '#3fb950'; }
if (cs) { cs.title = 'Kielimalli ladattu — oma kone on valmis suorittamaan tehtäviä'; cs.style.cursor = 'default'; }
}
if (msg.includes('[Coder]') && msg.includes('Syöte:')) {
// Pipeline piiloon kun generointi alkaa
@@ -2605,6 +2642,13 @@
ensureCoderNode();
}
// Klikkaa compute-statusta käynnistääksesi laskentasolmu
document.getElementById('agent-compute-status')?.addEventListener('click', () => {
const cl = document.getElementById('agent-compute-label');
if (cl && cl.style.color === 'rgb(63, 185, 80)') return; // Jo valmis
ensureCoderNode();
});
// JSON mode toggle
const jsonToggle = document.getElementById('json-mode-toggle');
const jsonHelp = document.getElementById('json-help');