metrale_bench/benchmarks/serve_matrix/
schema.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! 2026-09-26: The serve matrix's parameter schema.
4//!
5//! Owner: bench, serve matrix.
6//! Invariants:
7//! - The parameter defaults are the `ParamSpec` defaults here;
8//!   `ParamValues::defaults` derives a run's starting values from them.
9
10use crate::params::{ParamKind, ParamSpec, ParamValue};
11
12/// 2026-09-26: Every serve-matrix parameter.
13pub fn specs() -> Vec<ParamSpec> {
14    vec![
15        ParamSpec::new(
16            "include",
17            "Model filter",
18            "Case-insensitive substring of the HF id. `all` runs every checkpoint the box can serve.",
19            ParamKind::Text,
20            ParamValue::Text("all".into()),
21        ),
22        ParamSpec::new(
23            "max_seq_len",
24            "Max sequence length",
25            "Context each round is served with. Must fit the long-context probe plus its output.",
26            ParamKind::Int {
27                min: 2048,
28                max: 262_144,
29            },
30            ParamValue::Int(32_768),
31        ),
32        ParamSpec::new(
33            "long_ctx_tokens",
34            "Long-context probe",
35            "Prompt size for the needle-in-a-haystack recall probe. 0 turns it off.",
36            ParamKind::Int {
37                min: 0,
38                max: 131_072,
39            },
40            ParamValue::Int(16_384),
41        ),
42        ParamSpec::new(
43            "tps_tokens",
44            "Throughput budget",
45            "Output tokens the throughput probe asks for. Too few and the reply arrives in one SSE delta, leaving decode unmeasurable.",
46            ParamKind::Int { min: 16, max: 4096 },
47            ParamValue::Int(256),
48        ),
49        ParamSpec::new(
50            "probe_budget",
51            "Probe output tokens",
52            "Output budget for the codegen and tool-call probes.",
53            ParamKind::Int { min: 32, max: 4096 },
54            ParamValue::Int(512),
55        ),
56        ParamSpec::new(
57            "speculative",
58            "Speculative decoding",
59            "Serve each round with MTP on. Off by default: a checkpoint with no MTP head falls back to single-token decode and reports the baseline's numbers under a +MTP label.",
60            ParamKind::Bool,
61            ParamValue::Bool(false),
62        ),
63        ParamSpec::new(
64            "request_timeout_s",
65            "Request timeout",
66            "Seconds before a single probe request is abandoned.",
67            ParamKind::Int { min: 10, max: 3600 },
68            ParamValue::Int(300),
69        ),
70        ParamSpec::new(
71            "update_baselines",
72            "Update baselines",
73            "Record this run's tok/s as the new bar instead of gating against it. Deliberate refresh only — review the numbers first.",
74            ParamKind::Bool,
75            ParamValue::Bool(false),
76        ),
77    ]
78}