3B GGUF vaati ~5 GB muistia parsinnassa → SIGILL WASM:n 4 GB rajalla.
1.5B Q4_K_M on ~1 GB ja mahtuu turvallisesti selaimeen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Safetensors-muotoinen 3B (~6.2 GB) aiheutti WASM capacity overflow.
Nyt käytetään candle quantized_qwen2 -moduulia GGUF-tiedoston lataamiseen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Jokainen selain tarvitsee 2 WebSocket-yhteyttä (UI + coder-node).
Vanha raja 4 esti toisen koneen yhdistämisen samasta IP:stä (esim. kotiverkko).
Uusi raja 10 riittää 5 samanaikaiselle selaimelle / laitteelle.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lisätty konkreettiset esimerkit Qwen2.5-Coder -tokenisaattorilla:
- Koodi-esimerkki: print vs. tulosta
- Kolme lauseparia taulukossa (The cat sat / Kissa istui jne.)
- Merkkejä/token -sarake näyttää tehokkuuseron
- Selitys miksi englanti on 30-50% tehokkaampaa
- Miksi tämä merkitsee: nopeus, konteksti, ymmärrys
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GUIDE.md:n ASCII-kaaviot korvattu Mermaid-kaavioilla:
- Projekti-pipeline: flowchart TD värikoodatuilla vaiheilla
- Prompttirakenne: system → agent → user → prefill ketju
Mermaid ladataan CDN:stä ja renderöidään automaattisesti dark-teemalla.
Fallback: kaavion lähdekoodi näkyy tekstinä jos Mermaid ei lataudu.
Agents-sivun compute-status näyttää nyt tarkan mallitiedon:
- "Qwen2.5-Coder-0.5B" tai "Qwen2.5-Coder-3B"
- Tooltip: parametrimäärä, runtime, max tokenit
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kattaa:
- Kielimallit ja parametrimäärät (135M → 1800B vertailu)
- Tokenit: mitä ne ovat, miksi kieli vaikuttaa, token-budjetti
- Prompttirakenne: system/agent/user/prefill + miksi englanniksi
- Prefill-tekniikka: miten se toimii ja miksi se säästää tokeneita
- Sampling: temperature, top-k, repetition penalty selitettyinä
- Stop-sekvenssit: milloin generointi loppuu
- Projekti-pipeline: agenttitiimin työnkulku kaaviona
- Laadun parantaminen 10 eri keinolla:
1. Isompi malli
2. Paremmat promptit
3. Kontekstin hallinta
4. Iterointi (review-luuppi)
5. Erikoistetut system promptit
6. Few-shot esimerkit
7. Temperature-säätö tehtävän mukaan
8. Ensemble (sama prompti usealle mallille)
9. Post-processing
10. Fine-tuning (LoRA)
- Välimuistiarkkitehtuuri: miksi toinen lataus on nopea
- Käytännön lukuja: token-määrät, ajat, kustannukset
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Jokaisen kpnRun-tuloksen status-rivillä on [>]-nappi joka avaa inspektor-paneelin:
- system: inferenssin system prompt
- shared: kaikille agenteille yhteinen prompti (jos asetettu)
- agent: valitun agentin system prompt
- user: käyttäjän/pipelinen prompti (kokonaisuudessaan, scrollattava)
- prefill: ``` (ChatML prefill-tekniikka)
- Token-estimaatti: ~N tok in → M tok out
Paneeli avautuu/sulkeutuu klikkaamalla. Näyttää eksaktisti saman
mitä malli saa syötteeksi — hyödyllinen debuggaukseen ja promptien
kehittämiseen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Managerin prompti ohjaa käyttämään pyproject.toml:ia (.toml sallittu).
Koodari saa pyproject.toml-tiedostolle eksplisiittisen esimerkkiformaatin
jossa [project] + dependencies + [project.scripts] start-komennolla.
requirements.txt toimii edelleen fallbackina jos malli tuottaa sen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lisätty sääntö: "List dependencies first, then main app" jotta
koodari saa kirjoitettua riippuvuudet (models, schemas) ensin
ja pääsovelluksen (main.py) saa kontekstiksi oikeat importit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Manageri tuottaa toisinaan pelkän listan (app.py, requirements.txt)
ilman "filename: description" -formaattia. Parsija hyväksyy nyt molemmat.
Koodarin prompti vahvistettu: "Use the exact libraries mentioned in the
project description" estää Flaskiin vaihtamisen kun tehtävä sanoo FastAPI.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Managerin prompti:
- Selkeämpi formaatti: "filename.py: what this file contains"
- Eksplisiittiset säännöt: max 4 tiedostoa, ei polkuja, vain tiedostonimet
- Sallitut tiedostopäätteet: .py, .txt, .json, .html
Tiedostoparsinta tiukennettu:
- Hylkää polut (chucknorris/fastapi/...) — vaatii ettei sisällä /
- Vaatii tiedostopäätteen (.xyz)
- Ei välilyöntejä nimessä
Koodarin prompti:
- "Project:" konteksti ensin, sitten tarkka tiedostokohtainen ohje
- "Write correct, working code. No explanations."
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Terminaalin yläpuolelle ilmestyy pipeline-progress-palkki:
✓ Suunnittelu → ✓ models.py → ◷ main.py → ◯ Review
Jokainen vaihe on hover-tooltip joka näyttää:
- Vaiheen nimi ja agentti (värikoodattu)
- Input: mitä agentti sai syötteeksi
- Output: mitä agentti tuotti (esikatselu 150 merkkiä)
Myös agenttien avatar-korttien tooltip päivittyy reaaliaikaisesti
näyttämään viimeisimmän vaiheen input/output.
Palkki tyhjenee automaattisesti uuden pipelinen alkaessa.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Uusi kpn project -komento rakentaa ohjelmistoprojektin tiedosto kerrallaan:
1. Manageri pilkkoo projektin tiedostoiksi (max 5)
→ parsii "FILENAME: description" -rivit
2. Koodari generoi jokaisen tiedoston erikseen
→ saa kontekstina aiemmin generoidut tiedostot
3. Testaaja arvioi koko projektin
→ etsii bugeja ja puutteita
4. Korjausluuppi: jos testaaja löytää ongelmia
→ koodari saa review-palautteen ja korjaa
→ testaaja arvioi uudelleen
Fallback: jos manageri ei tuota tiedostolistaa, generoidaan yhtenä kokonaisuutena.
kpn pipeline säilyy yksinkertaisena 3-vaiheisena (manageri → koodari → testaaja).
Esimerkkejä:
kpn project "FastAPI + SQLite REST API for users"
kpn project "Flask todo app with database"
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Malli tuottaa toisinaan esimerkkikoodia funktioiden jälkeen joka ei ole osa
varsinaista vastausta. Nyt generointi katkeaa ennen näitä.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- 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>
Agenttiavatarit vilkkuivat itsestään koska llm_prompt-handler reagoi kaikkiin
broadcastattuihin viesteihin (hubin automaattiset 10s-tehtävät, warmup jne.).
Nyt avatar-logiikka laukeaa VAIN jos viestissä on task_id joka löytyy
activeStreams:stä — eli kyseessä on käyttäjän oma agents-pipelinen tehtävä.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Edelliset heuristiikat olivat hauraita:
- Kielitunniste tunnistettiin "lyhyt alphanumeerinen rivi" → osui koodiin (i, 42)
- rfind("```") poisti koodin sisäisiä backtickejä
Korjaukset:
- Kielitunniste poistetaan VAIN jos se on tunnettu (LANG_TAGS whitelist, 50+ kieltä)
- Sulkeva ``` poistetaan VAIN jos se on omalla rivillään tiedoston lopussa
(ends_with tarkistus + edeltävä rivinvaihto)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prefill lisää ``` prompttiin jolloin malli tuottaa: "rust\nfn main()...\n```"
Vanha stripperi etsi aloittavaa ```-blokkia ja palautti tyhjän.
Uusi logiikka:
1. Poistaa kielitunnisteen ensimmäiseltä riviltä (rust, python jne.)
2. Poistaa sulkevan ``` lopusta (rfind, varmistaa ettei ole koodin sisällä)
3. Poistaa johdantolauseet ja selityskommentit kuten ennenkin
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
TAB avaa dropdown-valikon käytettävissä olevista vaihtoehdoista:
- Nuolilla (ylös/alas) navigointi
- Enter tai TAB valitsee korostetun vaihtoehdon
- Esc sulkee valikon
- Klikkaus valitsee suoraan
- Yksi vaihtoehto → täydennetään suoraan ilman valikkoa
Valikko näyttää kontekstin mukaan: alikomennot, mallit/agentit
tai esimerkkiprompteja. Sulkeutuu automaattisesti kun klikataan muualle.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Poistaa viimeisen sanan tai lainausmerkeissä olevan kokonaisuuden:
- "kpn run coder " → Shift-TAB → "kpn run "
- 'kpn run coder "hello world"' → Shift-TAB → "kpn run coder "
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
TAB täydentää kontekstin mukaan:
- tyhjä → "kpn "
- "kpn " → "kpn help", "kpn run", "kpn pipeline" jne.
- "kpn run " → agentit ja mallit (coder, manager, qwen-coder...)
- "kpn run coder " → esimerkkiprompteja ("hello world in python")
- "kpn pi" → "kpn pipeline "
- osittainen sana → yhteinen etuliite tai ainoa vaihtoehto
Tukee myös kpn pipeline -esimerkkiprompteja.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Status-palkissa "Alusta laskentasolmu" -nappi joka:
- Klikkaa → käynnistää kielimallin latauksen omalle koneelle
- Latauksen aikana muuttuu "Peruuta"-napiksi (punainen)
- Valmis → vihreä "✓ Valmis" -tila
Myös kpn load -komento terminaalissa tekee saman.
Agents-sivulla ei enää automaattista käynnistystä — käyttäjä valitsee itse.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
Kun käyttäjä avaa #agents-sivun, käynnistetään automaattisesti Wasm coder-node
jotta tehtävät reitittyvät omalle koneelle eikä ulkoisille solmuille.
Sama logiikka kuin codelabissa (ensureCoderNode + warmup).
Toimii sekä suoralla #agents-navigoinnilla että tab-vaihdolla.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Kun coder-node yhdistyy hubiin, lähetetään automaattisesti 1 tokenin
warmup-prompt joka triggeröi mallin latauksen (painot + rakennus).
Pipeline-tilakone merkkaa kaikki vaiheet valmiiksi logiviestien perusteella
ilman että käyttäjän tarvitsee odottaa ensimmäiseen prompttiin asti.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Highlight.js:n automaattinen kielentunnistus nyt myös agents-terminaalin
koodivastauksissa ja network-näkymän chatBoxissa (aiemmin vain codelabissa).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Assistantin vastauksen alkuun syötetään valmiiksi backtick-koodiblokki,
jolloin malli jatkaa suoraan koodilla eikä tuota "Sure! Here is..."
-johdantotekstejä. Säästää tokeneita ja vastausaikaa.
strip_markdown_wrapper poistaa ``` -merkit jälkikäteen.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Malli tuottaa toisinaan selityskommentin koodin alkuun ilman markdown-wrapperia.
Stripperi tunnistaa ja poistaa nämä avainsanojen perusteella (this is, simple,
program that, jne.) mutta säilyttää oikeat koodikommentit ja shebangin.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Näyttää "Reititetty solmulle #N" tai "Kaikki N solmua varattuja — odotetaan..."
sekä agents-terminaalissa että koodilaboratorion lataustekstissä.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hub broadcastaa task_routed-viestin joka kertoo reitityksen tilan:
- "routed": vapaa solmu löytyi, tehtävä reititetty suoraan
- "queued": kaikki solmut varattuja, odotetaan vapautumista (max 30s poll)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>