metrale_telemetry/progress.rs
1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! 2026-09-26: Structured startup-progress events for the TUI.
4//!
5//! Each function emits one `debug!` event under [`TARGET`]. The TUI's
6//! progress layer accepts that target whatever `RUST_LOG` says
7//! (`crates/server/src/tui/init.rs`) and decodes the fields.
8//!
9//! Discriminated by the `ev` field:
10//! `phase` — `phase` (0..=11), `name`
11//! `preflight` — `disk_gb`, `free_gb`
12//! `shard_start` — `shard` (1-based), `total`, `name`
13//! `shard_done` — `shard`, `total`, `used_gb`, `free_gb`
14//! `layer` — `layer` (layers loaded so far), `total`
15//! `ready` — `port`
16//!
17//! Owner: telemetry.
18//! Invariants: every event here is emitted under [`TARGET`].
19
20/// 2026-09-26: The target of every event here, which the TUI's progress layer
21/// filters on. The `debug!` calls below repeat it as a literal.
22pub const TARGET: &str = "metrale::tui::progress";
23
24/// 2026-09-26: A named startup phase has begun; `phase` is its index.
25pub fn phase(phase: u8, name: &str) {
26 tracing::debug!(target: "metrale::tui::progress", ev = "phase", phase, name);
27}
28
29/// 2026-09-26: Weight-load preflight: estimated on-disk weight GB and free GPU GB.
30pub fn preflight(disk_gb: f64, free_gb: f64) {
31 tracing::debug!(target: "metrale::tui::progress", ev = "preflight", disk_gb, free_gb);
32}
33
34/// 2026-09-26: A safetensors shard load has started.
35pub fn shard_start(shard: usize, total: usize, name: &str) {
36 tracing::debug!(target: "metrale::tui::progress", ev = "shard_start", shard, total, name);
37}
38
39/// 2026-09-26: A shard finished, with GPU memory used and free in GB.
40pub fn shard_done(shard: usize, total: usize, used_gb: f64, free_gb: f64) {
41 tracing::debug!(
42 target: "metrale::tui::progress",
43 ev = "shard_done",
44 shard,
45 total,
46 used_gb,
47 free_gb
48 );
49}
50
51/// 2026-09-26: Layer-build progress, sampled by the weight loaders.
52pub fn layer(layer: usize, total: usize) {
53 tracing::debug!(target: "metrale::tui::progress", ev = "layer", layer, total);
54}
55
56/// 2026-09-26: The server is listening.
57pub fn ready(port: u16) {
58 tracing::debug!(target: "metrale::tui::progress", ev = "ready", port);
59}