-- What one replica of a model can actually serve, measured rather than guessed. -- -- `llmgw ctl bench` has always been able to work this out — it ramps -- concurrency until the SLO breaks and reports the last level that held. Until -- now it printed that to a terminal and nothing kept it, so the one number that -- says what a replica is worth lived in somebody's scrollback. Every decision -- downstream then had to guess: admission uses a single global default for -- healthy queue depth, and anything that wanted to size a model against real -- demand had nothing to size against. -- -- Keyed by model and profile, not by model alone. Capacity is a property of the -- hardware and the engine arguments as much as of the weights: the same model -- on a CPU profile and on an H100 profile are two different numbers, and -- storing one would overwrite the other every time somebody benchmarked the -- other kind of node. -- -- The measurement is JSON for the same reason a model definition is: it is a -- nested shape that is still growing, and as columns every field added to it -- would be a migration. -- -- Nothing here is authoritative about what a model may do — it is an -- observation, with the time and the target it was taken from, so a reader can -- decide whether it is still true. Hardware changes and engine builds change; -- a capacity profile from six months ago is a hypothesis, not a fact. CREATE TABLE capacity ( model TEXT NOT NULL, profile TEXT NOT NULL, measurement TEXT NOT NULL, measured_at TIMESTAMP NOT NULL, measured_by TEXT NOT NULL DEFAULT '', PRIMARY KEY (model, profile) );