diff --git a/network-poc/static/index.html b/network-poc/static/index.html index 5c54da9..61f6ddc 100644 --- a/network-poc/static/index.html +++ b/network-poc/static/index.html @@ -1089,10 +1089,18 @@ -
- - Hub: - Yhdistetään... +
+ + + Hub: + Yhdistetään... + + + + + Laskenta: + Ei käynnissä ⟩ +
@@ -1826,6 +1834,7 @@ termLog(' kpn hello — iloinen tervehdys verkosta', '#a5d6ff'); termLog(' kpn run <malli> "<prompti>" — aja tehtävä verkossa', '#a5d6ff'); termLog(' kpn pipeline "<tehtävä>" — 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,20 +2520,37 @@ 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'); setStep('step-tokenizer', 'done'); - + const pctSpan = document.getElementById('step-model-pct'); if (pctSpan && pctSpan.textContent.includes('100%')) { setStep('step-model', 'done', '100%'); } else { setStep('step-model', 'done', 'cache'); } - + 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');