Max tokens 128→256 + coder-3b malli agents-terminaaliin

- Oletustokenimäärä nostettu 256:een (monimutkaisemmat vastaukset mahtuvat)
- kpn run coder-3b "..." käynnistää 3B-mallin (parempi koodinlaatu)
- kpn load 3b lataa 3B-mallin (~6.2 GB)
- Tab-completion tukee coder-3b + esimerkkipromptit

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jaakko Vanhala
2026-04-05 17:56:56 +03:00
parent 24d29d9ba9
commit e28a715f32
2 changed files with 18 additions and 8 deletions

View File

@@ -258,13 +258,13 @@ pub async fn run_coder_inference(prompt: String, ws: Rc<RefCell<WebSocket>>, use
if let Ok(json) = serde_json::from_str::<serde_json::Value>(&prompt) { if let Ok(json) = serde_json::from_str::<serde_json::Value>(&prompt) {
let p = json.get("prompt").and_then(|v| v.as_str()).unwrap_or(&prompt).to_string(); let p = json.get("prompt").and_then(|v| v.as_str()).unwrap_or(&prompt).to_string();
let s = json.get("system").and_then(|v| v.as_str()).unwrap_or(default_system).to_string(); let s = json.get("system").and_then(|v| v.as_str()).unwrap_or(default_system).to_string();
let m = json.get("max_tokens").and_then(|v| v.as_u64()).unwrap_or(128) as usize; let m = json.get("max_tokens").and_then(|v| v.as_u64()).unwrap_or(256) as usize;
(p, s, m) (p, s, m)
} else { } else {
(prompt.clone(), default_system.to_string(), 128) (prompt.clone(), default_system.to_string(), 256)
} }
} else { } else {
(prompt.clone(), default_system.to_string(), 128) (prompt.clone(), default_system.to_string(), 256)
}; };
// Prefill: aloitetaan vastaus ```-koodiblokkilla, jolloin malli jatkaa suoraan koodilla // Prefill: aloitetaan vastaus ```-koodiblokkilla, jolloin malli jatkaa suoraan koodilla

View File

@@ -1849,14 +1849,20 @@
} }
if (sub === 'load') { if (sub === 'load') {
const size = parts[2]; // "3b" tai tyhjä (oletus 0.5B)
const btn = document.getElementById('agent-compute-btn'); const btn = document.getElementById('agent-compute-btn');
if (btn && btn.dataset.state === 'ready') { if (size === '3b') {
coderSize = '3b';
termLog(' Alustetaan 3B-laskentasolmua (~6.2 GB)...', '#d29922');
} else if (btn && btn.dataset.state === 'ready') {
termLog(' ✓ Kielimalli on jo ladattu ja valmis', '#3fb950'); termLog(' ✓ Kielimalli on jo ladattu ja valmis', '#3fb950');
termLog(' Vinkki: kpn load 3b — lataa isompi 3B-malli', '#8b949e');
return;
} else { } else {
termLog(' Alustetaan laskentasolmua...', '#d29922'); termLog(' Alustetaan laskentasolmua...', '#d29922');
if (btn) btn.click(); // Käytetään samaa logiikkaa kuin napissa
else ensureCoderNode();
} }
if (btn) btn.click();
else ensureCoderNode();
return; return;
} }
@@ -1905,7 +1911,9 @@
} }
// Jos käyttäjä syötti agentin nimen (esim. "coder"), vaihdetaan se oikeaksi tekoälymalliksi ("qwen-coder") // Jos käyttäjä syötti agentin nimen (esim. "coder"), vaihdetaan se oikeaksi tekoälymalliksi ("qwen-coder")
if (agentPrompts[model]) { if (model === 'coder-3b') {
model = 'qwen-coder-3b';
} else if (agentPrompts[model]) {
model = agentPrompts[model].model; model = agentPrompts[model].model;
} }
@@ -1919,12 +1927,14 @@
// Tab-completion: ennustava komennonsyöttö sana kerrallaan // Tab-completion: ennustava komennonsyöttö sana kerrallaan
const kpnCommands = { const kpnCommands = {
'kpn': ['help', 'run', 'pipeline', 'load', 'status', 'models', 'hello', 'clear'], 'kpn': ['help', 'run', 'pipeline', 'load', 'status', 'models', 'hello', 'clear'],
'kpn run': ['coder', 'manager', 'tester', 'qa', 'data', 'observer', 'qwen-coder', 'smollm-135m', 'qwen-05b', 'phi3-mini'], 'kpn run': ['coder', 'coder-3b', 'manager', 'tester', 'qa', 'data', 'observer', 'qwen-coder', 'qwen-coder-3b', 'smollm-135m', 'qwen-05b', 'phi3-mini'],
'kpn load': ['3b'],
'kpn pipeline': ['"'], 'kpn pipeline': ['"'],
}; };
// Esimerkkipromptit malleittain // Esimerkkipromptit malleittain
const kpnExamples = { const kpnExamples = {
'kpn run coder': ['"hello world in python"', '"fibonacci in rust"', '"quicksort in javascript"'], 'kpn run coder': ['"hello world in python"', '"fibonacci in rust"', '"quicksort in javascript"'],
'kpn run coder-3b': ['"binary search tree in rust"', '"REST API with Flask"', '"async web scraper in python"'],
'kpn run manager': ['"suunnittele REST API"', '"priorisoi tiimin tehtävät"'], 'kpn run manager': ['"suunnittele REST API"', '"priorisoi tiimin tehtävät"'],
'kpn run tester': ['"testaa login-toiminto"'], 'kpn run tester': ['"testaa login-toiminto"'],
'kpn pipeline': ['"rakenna todo-sovellus"', '"tee laskin pythonilla"'], 'kpn pipeline': ['"rakenna todo-sovellus"', '"tee laskin pythonilla"'],