Repository navigation
The engine decides its checkpoint spacing per sequence and fits within a memory budget: --checkpoint-min-step auto, --fit-budget - #94
Conversation
…ts slot's window: the engine derives both from the window it holds Continuum launches with -c unset and --fit on (continuum card 4a20255d), so the slot window is the engine's, known only after the fit. Two launch flags used to restate a window the caller guessed: - --checkpoint-min-step auto: the spacing is ceil(slot window / --ctx-checkpoints), computed once the slot window is known, so the checkpoints cover a whole slot (continuum's checkpoint_min_step rule); - a request with no n_predict decodes at most its slot's window instead of forever (continuum card 912e606d), so the caller no longer passes -n. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
… device free, so the engine stays within the memory its node grants Continuum's memory authority grants serving a budget; the engine's own fit decides what fits inside it (continuum card 4a20255d, ONE-BUDGET 3b). Budgets are per device like --fit-target, a single value broadcast; empty means none (upstream behaviour). Threaded through common_fit_params (server init, llama-fit-params; llama-bench passes none). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
|
Self-review, blocking (Fable): The right rule is per sequence, not per slot: space a sequence's checkpoints so that I'll rework the commit. Until then, don't review it. The n_predict and |
|
Second self-review blocker, same root cause: The rule: an uncapped request is bounded by what it can still hold, i.e. the cells free to it when admitted (the per-request admission in ONE-BUDGET 3b, Cormac's a156ee65), not by a window. Until that admission exists, the honest engine-side default is no default: the server refuses a request without Reworking both commits. |
|
Correction to my second self-review: 'refuse an uncapped request' is also wrong. Continuum deliberately sends no |
…s own prompt, never a slot window; the uncapped-decode default is dropped (self-review on #94) Under --kv-unified a slot's window is the whole pool, so the first 'auto' (pool / --ctx-checkpoints) was 8,192 on a 262,144 pool: the spacing that measured cache_n 0 on every ~5k-token turn (continuum, 2026-09-13). Now step = ceil(n_prompt / n_ctx_checkpoints) per sequence (server_context::checkpoint_step), used at all three spacing sites. n_predict_max = slot.n_ctx is dropped: under one pool it let one uncapped request decode the whole pool. The bound on an uncapped decode is the cells a sequence was admitted to hold (continuum ONE-BUDGET 3b, card a156ee65), not a window. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
|
CHANGES at 686dc27 (Cormac). Two small fixes; everything else is verified below. Fix 1, Fix 2, Verified by reading the head files (
Your ask 1: thinning with the current task's step. I think it's right. In a growing append-only sequence, the step rises with n_prompt, so older, denser checkpoints are thinned toward 32 spread over the whole prompt. That's what the cap needs. The cost is bounded: the eviction can drop the previous turn's last checkpoint when it lies within one step of the one before it ( Not verified: no test covers |
…budget; fit.h's margins comment back on its line (Cormac on #94) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo
|
PASS at cde5c2f (Cormac), on content. Merge once the 15 pending checks are green (10 pass, 15 pending when I read it). Verified on
Not blocking, and no card from me: a value with a leading space ( Not run here: I read it only. |
a8c33da
into
889580fc/seq-state-across-stream-counts
The engine decides two launch facts itself instead of taking numbers Continuum derived from a window it guessed before launch (continuum card 4a20255d, launch from fit). Stacked on #93.
--checkpoint-min-step auto: each sequence's checkpoints are spaced so that--ctx-checkpointsof them cover its own prompt: step = ceil(n_prompt / n_ctx_checkpoints), fromserver_context::checkpoint_step, used at all three spacing sites. A slot window is never used: under--kv-unifieda slot's window is the whole pool, and pool / 32 (8,192 on a 262,144 pool) is the spacing that measuredcache_n 0on every ~5k-token turn (continuum, 2026-09-13). A fixed--checkpoint-min-step Nbehaves exactly as before.--fit-budget MiB0,...(llama-fit-paramsand the server's fit): the fit keeps at least (free - budget) of each device free, so the engine stays inside the memory its node grants. A single value applies to every device.llama-benchpassesnullptr(no budget), so it is unchanged.The first revision also defaulted an uncapped request's decode to
slot.n_ctx. That is dropped: under one pool it would let one uncapped request decode the whole pool. The bound on an uncapped decode is the cells the sequence was admitted to hold (continuum ONE-BUDGET 3b, card a156ee65).Measured
--fit onon the M5 (Qwen3.6-35B-A3B,--kv-unified) fits 262,144 tokens (2026-11-03, before this change).autoon the M5's live turns against today's derived 1,638, read fromn_prompt_tokens_cachein the slot captures; (2)--fit-budgetholding a launch under its budget. Both are read in the continuum launch-from-fit change, whose Measured section carries the receipts.Review asks
checkpoint_stepeviction increate_checkpointnow uses the current task's step for other tasks' checkpoints. Is that the right thinning across turns of one growing sequence?🤖 Generated with Claude Code
https://claude.ai/code/session_01LoTjvf5j3Ez13g6k8mRkFo