Prompt tokens restored from the prompt cache at admission (stats).
OptionalcacheOptionalcloseOptionaldecodeA method that computes its whole result before publishing reports that work span; finish() then reports it as decode time, excluding admission wait and output delivery. Denoising sets it.
Generated tokens whose KV actually entered the cache (fed as a step
input) — serial generate()'s forwarded list. promptIds+fed is the
exact token coverage of the row's caches, the put() entry key.
PER-ROW EXACT for every row: pushes are gated on the pending
register's per-slot real/placeholder flags (#pendingReal), so a
doomed slot's placeholder is never recorded — and if one ever DID
feed a forward, fedTainted flips instead (see #step's read).
A placeholder slot value fed this row's KV (junk token in the cache):
the coverage key is no longer derivable — extraction refuses.
Structurally unreachable today (a doomed row always evicts at the
emit that follows its placeholder, filtering the slot before the
next forward; cold steps never contain doomed rows because a flush
emits every in-flight token) — this flag makes fed provably exact
instead of resting on that timing chain.
OptionalfillEver merged into a multi-row batch (or poisoned by a reject): its KV is interleaved in batched buffers — a finish put() must EXTRACT the row (#extractRowCaches) rather than adopt the inners.
OptionalspecOptionalacceptanceLengths?: number[]OptionalacceptedByPos?: number[]OptionaldraftedByPos?: number[]OptionalforwardsSaved?: numberOptionalphaseMs?: SpecPhaseMsRound phase wall time, summed over the request's rounds. Present only
under MLX_BUN_SPEC_PHASE_TIMING=1, which forces an evaluation at each
phase boundary (diagnostic: it removes the overlap production decode
relies on, so the sum is not production round time).
Optionalrejected?: numberOptionalrounds?: numberOptionaltokensPerForward?: number
performance.now() marks for BatchStats timing (0 = not reached).