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        #[serde(default)]
20        model_dir: Option<String>,
21    },
22    UnregisterSession {
23        pid: u32,
24    },
25    ListSessions,
26    Stats,
27    SwapModel {
28        model_ref: String,
29        #[serde(default)]
30        quantization: Option<String>,
31    },
32    Version {
33        v: u32,
34    },
35}
36
37/// Logical active model on the daemon (`neuron swap`), for dashboard / stats display.
38#[derive(Debug, Clone, Serialize, Deserialize)]
39pub struct ActiveModelInfo {
40    pub model_ref: String,
41    #[serde(default)]
42    pub quantization: Option<String>,
43}
44
45#[derive(Debug, Serialize, Deserialize)]
46#[serde(tag = "response", rename_all = "snake_case")]
47pub enum DaemonResponse {
48    Pong,
49    Registered {
50        pid: u32,
51    },
52    Unregistered,
53    Sessions {
54        sessions: Vec<SessionInfo>,
55    },
56    Stats {
57        sessions: Vec<SessionInfo>,
58        #[serde(default)]
59        gpu_lines: Vec<String>,
60        #[serde(default)]
61        note: Option<String>,
62        /// Logical state after `neuron swap` (hot-swap), for the dashboard.
63        #[serde(default)]
64        active_model: Option<ActiveModelInfo>,
65        /// Real GPU MiB per PID (NVIDIA `nvidia-smi` / NVML compute apps), for dashboard display.
66        #[serde(default)]
67        vram_used_by_pid: HashMap<u32, u64>,
68    },
69    Swapped {
70        model_ref: String,
71        #[serde(default)]
72        quantization: Option<String>,
73    },
74    VersionInfo {
75        v: u32,
76    },
77    Error {
78        message: String,
79    },
80}
81
82#[derive(Debug, Clone, Serialize, Deserialize)]
83pub struct SessionInfo {
84    pub name: String,
85    pub pid: u32,
86    pub estimated_vram_mb: u64,
87    #[serde(default)]
88    pub tokens_per_sec: Option<f64>,
89    #[serde(default)]
90    pub model_dir: Option<String>,
91}