Problem
For speculative-decoding servers the acceptance rate is the whole story (structured vs prose on GLM differs 3x because of DFlash2 accept length), but the client cannot see it. Nightshift already scrapes vllm:spec_decode_num_draft_tokens_total / _accepted_tokens_total and the running/waiting gauges around each measurement.
Proposal
--metrics-url URL (loopback/HTTPS rules as for the endpoint): snapshot a fixed allowlist of counters before and after each wave into wave.json as provider_metrics: {before, after}; never used for eligibility; absence stays null. The running/waiting gauges also give a quiescence check before dispatch.
Problem
For speculative-decoding servers the acceptance rate is the whole story (structured vs prose on GLM differs 3x because of DFlash2 accept length), but the client cannot see it. Nightshift already scrapes
vllm:spec_decode_num_draft_tokens_total/_accepted_tokens_totaland the running/waiting gauges around each measurement.Proposal
--metrics-url URL(loopback/HTTPS rules as for the endpoint): snapshot a fixed allowlist of counters before and after each wave intowave.jsonasprovider_metrics: {before, after}; never used for eligibility; absence stays null. The running/waiting gauges also give a quiescence check before dispatch.