From 28f620f90128f2dfffdf8b371139c57531b83fd2 Mon Sep 17 00:00:00 2001 From: Jaakko Vanhala Date: Thu, 9 Apr 2026 21:09:26 +0300 Subject: [PATCH] =?UTF-8?q?kpnRun=20l=C3=A4hett=C3=A4=C3=A4=20suoraan=20hu?= =?UTF-8?q?bille,=20Wasm-fallback=20vain=20503:lla?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ei enää odoteta Wasm-latausta ennen API-kutsua. Jos natiivisolmu on hubissa, vastaus tulee suoraan. Jos hub palauttaa 503 (ei solmua), käynnistetään Wasm-fallback ja yritetään uudelleen. Tämä korjaa tilanteen jossa native-node on jo käynnissä mutta selain yritti silti ladata Wasmia ensin. Co-Authored-By: Claude Opus 4.6 (1M context) --- network-poc/frontend/src/pages/index.astro | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/network-poc/frontend/src/pages/index.astro b/network-poc/frontend/src/pages/index.astro index 8ff9bfe..3e9ebfd 100644 --- a/network-poc/frontend/src/pages/index.astro +++ b/network-poc/frontend/src/pages/index.astro @@ -207,17 +207,9 @@ import AgentBar from "../components/AgentBar.astro"; termPanel.scrollTop = termPanel.scrollHeight; try { - // Varmistetaan solmu - if (!wasmNodeStarted) { - statusDiv.innerHTML = ' → Käynnistetään laskentasolmua...'; - await ensureNode(); - // Odotetaan kunnes malli on latautunut tai 60s - for (let i = 0; i < 120 && !llmReady; i++) await new Promise(r => setTimeout(r, 500)); - if (!llmReady) { - statusDiv.innerHTML = ' ✗ Mallin lataus aikakatkaistiin'; - return null; - } - } + // Ei odotetaan Wasmia — lähetetään suoraan hubille. + // Jos hub löytää natiivisolmun, vastaus tulee nopeasti. + // Jos 503, käynnistetään Wasm-fallback. if (!silent) { const streamDiv = document.createElement('div'); @@ -236,6 +228,15 @@ import AgentBar from "../components/AgentBar.astro"; body: JSON.stringify({ model, prompt, task_id: taskId }), }); + if (res.status === 503 && !wasmNodeStarted) { + // Ei natiivisolmua — käynnistetään Wasm-fallback + statusDiv.innerHTML = ' → Ei natiivisolmua — käynnistetään selainlaskenta...'; + await ensureNode(); + for (let i = 0; i < 120 && !llmReady; i++) await new Promise(r => setTimeout(r, 500)); + if (!llmReady) { statusDiv.innerHTML = ' ✗ Mallin lataus aikakatkaistiin'; return null; } + // Yritetään uudelleen + return kpnRun(model, prompt, silent); + } if (!res.ok) { const err = await res.text().catch(() => res.statusText); statusDiv.innerHTML = ` ✗ ${esc(err)}`;