UI:n system prompt ja sampling-parametrit välittyvät inferenssiin asti

Frontend lähettää agentin asetukset (system_prompt, temperature, top_k,
max_tokens, repeat_penalty, stop) API:lle. Hub välittää ne solmulle.
Native-node ja Wasm-coder käyttävät välitettyjä arvoja hardkoodattujen
sijaan.
This commit is contained in:
Jaakko Vanhala
2026-04-12 07:39:41 +03:00
parent e272b0d124
commit 5f00582053
5 changed files with 88 additions and 30 deletions

View File

@@ -1141,6 +1141,16 @@ struct ChatCompletionRequest {
task_id: String,
#[serde(default)]
max_tokens: Option<u64>,
#[serde(default)]
system_prompt: Option<String>,
#[serde(default)]
temperature: Option<f64>,
#[serde(default)]
top_k: Option<u64>,
#[serde(default)]
repeat_penalty: Option<f64>,
#[serde(default)]
stop: Option<Vec<String>>,
}
#[derive(serde::Serialize)]
@@ -1308,9 +1318,13 @@ async fn api_chat_completions(
"model": payload.model,
"task_id": payload.task_id,
});
if let Some(mt) = payload.max_tokens {
msg.as_object_mut().unwrap().insert("max_tokens".to_string(), serde_json::json!(mt));
}
let obj = msg.as_object_mut().unwrap();
if let Some(mt) = payload.max_tokens { obj.insert("max_tokens".to_string(), serde_json::json!(mt)); }
if let Some(ref sp) = payload.system_prompt { obj.insert("system_prompt".to_string(), serde_json::json!(sp)); }
if let Some(t) = payload.temperature { obj.insert("temperature".to_string(), serde_json::json!(t)); }
if let Some(k) = payload.top_k { obj.insert("top_k".to_string(), serde_json::json!(k)); }
if let Some(rp) = payload.repeat_penalty { obj.insert("repeat_penalty".to_string(), serde_json::json!(rp)); }
if let Some(ref s) = payload.stop { obj.insert("stop".to_string(), serde_json::json!(s)); }
// Oneshot-kanava: solmu palauttaa tuloksen suoraan tälle pyynnölle
let (resp_tx, resp_rx) = tokio::sync::oneshot::channel::<serde_json::Value>();