on tämä työmaa

This commit is contained in:
2026-04-02 00:50:29 +03:00
parent e55ff64565
commit b693542116
11 changed files with 648 additions and 70 deletions

View File

@@ -4,6 +4,8 @@ use sysinfo::System;
use tokio_tungstenite::connect_async;
use tokio_tungstenite::tungstenite::Message;
mod inference;
/// GPU-tietorakenne — yhtenäinen kaikille valmistajille
struct GpuInfo {
name: String,
@@ -282,7 +284,20 @@ async fn main() {
}
}
// Yhdistetään hubiin — yritetään uudelleen katkon sattuessa
// Ladataan LLM-malli
tracing::info!("Ladataan LLM-mallia...");
let mut llm = match inference::LlmEngine::load() {
Ok(engine) => {
tracing::info!("LLM valmis inferenssiin!");
Some(engine)
}
Err(e) => {
tracing::warn!("LLM-lataus epäonnistui: {} — toimitaan ilman inferenssiä", e);
None
}
};
// Yhdistetään hubiin
loop {
match connect_async(&hub_url).await {
Ok((ws_stream, _)) => {
@@ -295,17 +310,51 @@ async fn main() {
continue;
}
let mut busy = false;
while let Some(Ok(msg)) = read.next().await {
if let Message::Text(text) = msg {
if text.contains("pair_task") || text.contains("ai_task") {
tracing::debug!("Tehtävä vastaanotettu: {}", &text[..text.len().min(80)]);
let reply = json!({
"type": "result",
"status": "success",
"data": "native-node: ei vielä laskentaa"
});
let _ = write.send(Message::Text(reply.to_string())).await;
// LLM-promptit
if text.contains("llm_prompt") && !busy {
if let Ok(task) = serde_json::from_str::<serde_json::Value>(&text) {
let prompt = task.get("prompt").and_then(|v| v.as_str()).unwrap_or("");
if !prompt.is_empty() {
if let Some(ref mut engine) = llm {
busy = true;
tracing::info!("Generoidaan: \"{}\"", prompt);
match engine.generate(prompt, 64) {
Ok(result) => {
tracing::info!(
"Tulos: {} tokenia | {:.0}ms | {:.1} tok/s | \"{}\"",
result.tokens_generated,
result.duration_ms,
result.tokens_per_sec,
&result.text[..result.text.len().min(80)]
);
let done = json!({
"type": "llm_done",
"prompt": prompt,
"model": "Qwen2.5-0.5B-Instruct (native/GPU)",
"response": result.text,
"tokens_generated": result.tokens_generated,
"duration_ms": result.duration_ms,
"tokens_per_sec": (result.tokens_per_sec * 10.0).round() / 10.0,
"load_time_ms": 0,
});
let _ = write.send(Message::Text(done.to_string())).await;
}
Err(e) => {
tracing::error!("Inferenssivirhe: {}", e);
}
}
busy = false;
}
}
}
}
// Ohitetaan pair_task, stats jne.
}
}
tracing::warn!("Yhteys hubiin katkesi — yritetään uudelleen 5s...");