Malli säilyy refreshin yli: automaattinen uudelleenlataus IndexedDB-cachesta

- coderSize tallennetaan localStorageen (valinta säilyy)
- Kun malli on kerran ladattu, 'kpn-coder-loaded' lippu asetetaan
- Sivulatauksessa: jos lippu on asetettu, ensureCoderNode() käynnistyy
  automaattisesti — painot tulevat IndexedDB-cachesta, ei verkosta
- Radio-napit asetetaan oikeaan tilaan localStoragesta

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-05 18:13:33 +03:00
parent 27135a8f14
commit 7a15cacebf

View File

@@ -1491,12 +1491,19 @@
let detectedWebGPU = false; let detectedWebGPU = false;
let detectedGpuInfo = null; let detectedGpuInfo = null;
let wasmInitialized = false; let wasmInitialized = false;
let coderSize = '05b'; // '05b' tai '3b' let coderSize = localStorage.getItem('kpn-coder-size') || '05b';
// Mallivalinnan radio-napit // Mallivalinnan radio-napit — asetetaan oikea valinta localStoragesta
const savedRadio = document.querySelector(`input[name="coder-size"][value="${coderSize}"]`);
if (savedRadio) savedRadio.checked = true;
if (coderSize === '3b') {
document.getElementById('coder-opt-05b')?.style && (document.getElementById('coder-opt-05b').style.borderColor = 'var(--border-color)');
document.getElementById('coder-opt-3b')?.style && (document.getElementById('coder-opt-3b').style.borderColor = 'var(--accent-color)');
}
document.querySelectorAll('input[name="coder-size"]').forEach(radio => { document.querySelectorAll('input[name="coder-size"]').forEach(radio => {
radio.addEventListener('change', (e) => { radio.addEventListener('change', (e) => {
coderSize = e.target.value; coderSize = e.target.value;
localStorage.setItem('kpn-coder-size', coderSize);
// Visuaalinen korostus // Visuaalinen korostus
document.getElementById('coder-opt-05b').style.borderColor = coderSize === '05b' ? 'var(--accent-color)' : 'var(--border-color)'; document.getElementById('coder-opt-05b').style.borderColor = coderSize === '05b' ? 'var(--accent-color)' : 'var(--border-color)';
document.getElementById('coder-opt-3b').style.borderColor = coderSize === '3b' ? 'var(--accent-color)' : 'var(--border-color)'; document.getElementById('coder-opt-3b').style.borderColor = coderSize === '3b' ? 'var(--accent-color)' : 'var(--border-color)';
@@ -1876,6 +1883,7 @@
return; return;
} }
coderSize = selected.coderSize; coderSize = selected.coderSize;
localStorage.setItem('kpn-coder-size', coderSize);
termLog(` Alustetaan ${selected.name} (${selected.size})...`, '#d29922'); termLog(` Alustetaan ${selected.name} (${selected.size})...`, '#d29922');
if (btn) btn.click(); if (btn) btn.click();
else ensureCoderNode(); else ensureCoderNode();
@@ -2776,6 +2784,7 @@
if (cd) cd.style.background = '#3fb950'; if (cd) cd.style.background = '#3fb950';
if (cl) { cl.textContent = 'Qwen2.5-Coder'; cl.style.color = '#3fb950'; } if (cl) { cl.textContent = 'Qwen2.5-Coder'; cl.style.color = '#3fb950'; }
if (btn) { btn.dataset.state = 'ready'; btn.textContent = '✓ Valmis'; btn.style.borderColor = '#3fb950'; btn.style.color = '#3fb950'; btn.style.cursor = 'default'; btn.title = 'Kielimalli ladattu — oma kone on valmis laskentaan'; } if (btn) { btn.dataset.state = 'ready'; btn.textContent = '✓ Valmis'; btn.style.borderColor = '#3fb950'; btn.style.color = '#3fb950'; btn.style.cursor = 'default'; btn.title = 'Kielimalli ladattu — oma kone on valmis laskentaan'; }
localStorage.setItem('kpn-coder-loaded', 'true');
} }
if (msg.includes('[Coder]') && msg.includes('Syöte:')) { if (msg.includes('[Coder]') && msg.includes('Syöte:')) {
// Pipeline piiloon kun generointi alkaa // Pipeline piiloon kun generointi alkaa
@@ -2862,7 +2871,11 @@
} }
} }
// Agents-sivun coder-node käynnistetään "Alusta laskentasolmu" -napista tai kpn load -komennolla // Automaattinen uudelleenkäynnistys: jos malli oli ladattu ennen refreshiä, ladataan se uudelleen cachesta
if (localStorage.getItem('kpn-coder-loaded') === 'true') {
// Pieni viive jotta UI ehtii piirtyä
setTimeout(() => ensureCoderNode(), 500);
}
// Laskentasolmun käynnistys/pysäytys -nappi // Laskentasolmun käynnistys/pysäytys -nappi
let computeAbortController = null; let computeAbortController = null;