Skip to main content

neuronbox_runtime/
protocol.rs

1use std::collections::HashMap;
2
3use serde::{Deserialize, Serialize};
4
5/// Version of `~/.neuronbox/swap_signal.json` (see `specs/swap-signal.schema.json`).
6pub const SWAP_SIGNAL_FILE_VERSION: u32 = 1;
7
8/// JSON messages over the Unix socket (newline-delimited JSON, one object per line).
9#[derive(Debug, Serialize, Deserialize)]
10#[serde(tag = "method", rename_all = "snake_case")]
11pub enum DaemonRequest {
12    Ping,
13    RegisterSession {
14        name: String,
15        estimated_vram_mb: u64,
16        pid: u32,
17        #[serde(default)]
18        tokens_per_sec: Option<f64>,
19    },
20    UnregisterSession {
21        pid: u32,
22    },
23    ListSessions,
24    Stats,
25    SwapModel {
26        model_ref: String,
27        #[serde(default)]
28        quantization: Option<String>,
29    },
30    Version {
31        v: u32,
32    },
33}
34
35/// Logical active model on the daemon (`neuron swap`), for dashboard / stats display.
36#[derive(Debug, Clone, Serialize, Deserialize)]
37pub struct ActiveModelInfo {
38    pub model_ref: String,
39    #[serde(default)]
40    pub quantization: Option<String>,
41}
42
43#[derive(Debug, Serialize, Deserialize)]
44#[serde(tag = "response", rename_all = "snake_case")]
45pub enum DaemonResponse {
46    Pong,
47    Registered {
48        pid: u32,
49    },
50    Unregistered,
51    Sessions {
52        sessions: Vec<SessionInfo>,
53    },
54    Stats {
55        sessions: Vec<SessionInfo>,
56        #[serde(default)]
57        gpu_lines: Vec<String>,
58        #[serde(default)]
59        note: Option<String>,
60        /// Logical state after `neuron swap` (hot-swap), for the dashboard.
61        #[serde(default)]
62        active_model: Option<ActiveModelInfo>,
63        /// Real GPU MiB per PID (NVIDIA `nvidia-smi` / NVML compute apps), for dashboard display.
64        #[serde(default)]
65        vram_used_by_pid: HashMap<u32, u64>,
66    },
67    Swapped {
68        model_ref: String,
69        #[serde(default)]
70        quantization: Option<String>,
71    },
72    VersionInfo {
73        v: u32,
74    },
75    Error {
76        message: String,
77    },
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize)]
81pub struct SessionInfo {
82    pub name: String,
83    pub pid: u32,
84    pub estimated_vram_mb: u64,
85    #[serde(default)]
86    pub tokens_per_sec: Option<f64>,
87}