Repository navigation
server: a saved page's adapter identity is its active adapters; one carried at 0.0 never refuses a restore - #90
Merged
joelteply merged 1 commit intoNov 3, 2026
Conversation
…arried at 0.0 never refuses a restore A page's .lora sidecar records every adapter its slot carried. The restore required the loaded list to equal it entry for entry, so an engine that had a training adapter attached at runtime (scale 0.0) saved pages a relaunched engine, without that adapter, refused on every turn. On the IntelMac (2026-11-03) every page recorded [gene @0.0, dream adapter @0.0]; each refusal re-prefilled ~10k tokens cold at ~13 tok/s. An adapter at scale 0 adds nothing to the KV. The decision moves to server-page-adapters.h: each ACTIVE page adapter claims a loaded adapter at the same path and the same file revision and keeps the page's scale; every other loaded adapter restores at 0.0. An active adapter that is missing, changed, unreadable or non-finite still refuses. test-server-page-adapters is model-free (runs in milliseconds); each rule was proven by a mutant the test kills. continuum card 4f00d4ec Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE
joelteply
changed the base branch from
master
to
889580fc/seq-state-across-stream-counts
November 3, 2026 07:59
Author
|
PASS at f8b128d (Fable), merge on green CI. Verified claim: a page's identity is its ACTIVE adapters, so the IntelMac case restores, and nothing that changed the KV is let through. Read in
Non-blocking (no card needed unless it bites): a path loaded twice where the FIRST copy's revision differs refuses even if a later copy matches. Two loads of one path don't happen today. |
joelteply
merged commit Nov 3, 2026
0d7dda6
into
889580fc/seq-state-across-stream-counts
30 of 53 checks passed
joelteply
added a commit
to CambrianTech/continuum
that referenced
this pull request
Nov 3, 2026
… were at 0.0, and CLAMP has a backward (#5724) Both pin records move (the gitlink and core/vendor/LLAMA_CPP_PIN), 6606d1aad -> 0d7dda6ae: - CambrianTech/llama.cpp#90: a saved page's adapter identity is its active adapters (scale != 0) at their file revision. The IntelMac refused every page after each relaunch because the dream stage had attached a second adapter at 0.0; each act then re-prefilled cold (task 519 on 2026-11-03: 1,139 s for 13,144 tokens). - CambrianTech/llama.cpp#84: CLAMP has a backward; a training graph the gradient cannot pass through refuses by name instead of aborting the server. continuum card 3d747266 Claude-Session: https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A page's
.lorasidecar records every adapter its slot carried. The restore required the loaded list to equal it entry for entry. So when an engine had a training adapter attached at runtime at scale 0.0, a relaunched engine without that adapter refused every page it had saved.An adapter at scale 0 adds nothing to the KV. The decision moves to
server-page-adapters.h:The sidecar format is unchanged (v2), and so is the writer.
Measured
IntelMac, continuum canary 068540278, engine started 2026-11-03 07:32Z (
llama-serveron port 58057, Qwen2.5-Coder-1.5B,--kv-unified -c 65536 --parallel 2):llama-server-58057.log: task 515Unable to restore slot: the page's adapter identity is missing or does not match. Task 519 then resumes withlcp after reuse = 2of 3303 and re-prefills 10242 tokens cold. Progress went 2048 → 8192 tokens over 543 s, about 13 tok/s.The same refusal follows each of the 6 relaunches in that log since the dream adapter appeared.
Decoded sidecars in
kv-pages/continuum-ai_qwen2.5-coder-1.5b-instruct-GGUF:[gene @0.0, engine-train/gene-adapter-b758e295 @0.0][gene @0.0]The live engine loads only the gene, so every page that carries an adapter is refused today, and every adapter they record is at 0.0.
Validation
tests/test-server-page-adapters.cppis model-free. It covers the IntelMac case (all at 0.0, fewer loaded), an active adapter keeping its scale, an extra loaded adapter at 0.0 in load order, and an adapter-free page. It also covers the refusals: missing, changed revision, unreadable file (including two unreadable revisions), duplicate active entries against one loaded copy, and a NaN scale. Built withc++ -std=c++17 -Wall -Wextra -Werrorand passing on the IntelMac.server-context.cpp:-fsyntax-onlywith the server's include paths exits 0, and a planted bad identifier in a copy fails, so the check really ran. The full server build is CI's job; this node keeps its CPU for serving.For review (Fable's two points, room 4fb8c352)
page_lora[i].scale = scales[i]), the scale its KV was computed under. A later request asking for another scale differs fromslot->lora, and the existing request-vs-slot adapter comparison handles that as it does for any loaded slot. Refusing on the engine's default scale would discard pages that are valid for the slot. Please check that reading.continuum card 4f00d4ec
🤖 Generated with Claude Code
https://claude.ai/code/session_01FRQWzgSfo79JtnwZywHKrE