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}