SOPHIA XT
Research · position paper · 18 September 2026

Data composition, not parameter count

One model at one size, trained fifteen times, each run missing a single grammatical construction from its supervised data. Accuracy on the withheld construction ran from one hundred percent down to eight. Nothing about the model changed between runs.

What a model can generalise to is set by what its training data contains. Five lines of work here point that way, two of them nulls where more data along an axis the corpus already covered bought nothing. Every number below links to a public endpoint, a raw result file, a repository or a DOI.

01 · Coverage

Held-out accuracy moved with the corpus, not with the model

Figure 01 Fifteen runs of one model, each missing one construction family Measured
Held-out accuracy on the one construction family each run never sawaccuracy on the withheld family0255075100passive100 / 100existential100 / 100possession100 / 100negated correction100 / 97need statement92interrogative86imperative83tag question79subordinate77conditional63oblique request61cleft53elliptical53reported speech47 / 65fronted adverbial8 / 8one model at one size, fifteen runs, 1,942 probes. Second value where a second seed was run.
A 17.5M-parameter tool-calling model trained fifteen times, each run missing one grammatical construction family from its data and evaluated on exactly the family it never saw. 1,942 probes, entities procedural so nothing is answerable from memory. Four families cost nothing, because the intent sits in the verb and the entities. Fronted adverbials cost ninety-two points. The second value is a rerun under a different seed sharing no probe string: both extremes replicated, the middle did not. Card of 18 September 2026 on the sophia-xe4 feed thread. Tool-choice figures only.

The same line's first held-out probe set was twenty-four constructions, each verified disjoint from every training frame at the content-bigram level. The baseline answered five. Widening the frame bank to generate across fifteen families, against the two it had covered, took it to ten with the model unchanged.

The per-family breakdown, and what the ranking will not bear
Construction family withheldAccuracy on itSecond seed
passive100%100%
existential100%100%
possession100%100%
negated correction100%97%
need statement92%not rerun
interrogative86%not rerun
imperative83%not rerun
tag question79%not rerun
subordinate77%not rerun
conditional63%not rerun
oblique request61%not rerun
cleft53%not rerun
elliptical53%not rerun
reported speech47%65%
fronted adverbial8%8%
The middle of the ranking is a band rather than a rank: reported speech scored 47% on one seed and 65% on the other, so anything between 40 and 90 should be read as roughly there and not as ordered. Withholding families in pairs did not show a clean compounding effect, one pair came out worse than its parts predicted and one better, so that question is open rather than answered.

Volume along a covered axis bought almost nothing

Figure 02 Three interventions on one model, two of them null Measured
The hand-written frame bank grew from 237 frames to 2,611MORE OF THE SAME GRAMMARThe hand-written frame bank grew from 237 frames to 2,611held-out tool choiceunchangedbeforeunchangedafterno movement257 held-out probesEleven times the frames, drawn from the families the bank already covered. Held-out tool choice did not move.
The same model under three changes to its data. Eleven times the frames, within families already covered, did nothing. Eighty-two million tokens of construction-selected human text did one point. Generating frames across new families doubled the constructions answered. The third panel uses a different and smaller probe set than the first two, which is why each panel names its own. Cards of 17 September 2026 on the sophia-xe4 feed thread.

A later run raised the frame bank to 5,343 and the model to 64.8M at the same time, taking held-out accuracy from 75% to 83% on 248 shared probes with twenty fixed and none broken, and because both moved together that run attributes nothing to either. No comparison against any published function-calling model has been run.

The confounded run, in full
Card of 18 September 2026 · sophia-xe4 thread
What changedBeforeAfter
corpus143M tokens310M tokens
syntactic frame bank2,611 frames5,343 frames
model17.5M parameters64.8M parameters
held-out accuracy, all probes75%83%
held-out accuracy, one family excluded83%93%
reported speech85%100%
Both models saw the same 248 probes, so the comparison is paired and McNemar gives a p of two in one hundred thousand. Zero regressions is the part that carries. Which of the two changes did the work is unresolved, and the experiment that separates them has not been run.
02 · Weights against retrieval

The weights beat the prompt on five categories, and lost the sixth

The same claim runs the other way. One base model held frozen, six categories cut semantically out of a 22,211-record corpus, every arm scored as mean negative log likelihood on the answer tokens of held-out records. Pasting the nearest training record's answer into the prompt took the base from 1.1183 to 1.0292. One adapter trained across the whole corpus took it to 0.9238, and a routed set of six specialist adapters to 0.9258, with no vector store and no retrieval step at inference.

Figure 03 Retrieval against weight-resident knowledge, one row per category Measured
Retrieval against weight-resident knowledge, one row per categorybaseretrievalrouted specialists, in the weightsmean answer NLL, lower is better0.50.7511.251.51.7522.25code, functions−0.208SQL−0.476arithmetic words−0.188symbolic maths−0.118code, general−0.197open-domain facts+0.566retrieval wins hereone run, one seed, six categories, twenty-five held-out records each. No confidence intervals.
Mean answer negative log likelihood by category, the retrieval arm against the routed specialist adapters, with the untouched base drawn as a tick. Five rows point towards the weights. The sixth points the other way, and that row is the finding. Raw result at lora-vs-rag.json, the script that wrote it at lora-vs-rag.py.

The control is what makes the rest of it readable. Adding retrieved context changes the prompt format as well as the content, and the adapter arms are scored in the format they trained on, so a comparison without a control silently charges retrieval for the format change. The same format carrying an irrelevant answer scored 1.1440, worse than the plain base at 1.1183. Format alone costs 0.0257. Relevance is worth 0.1147 on top of that. What retrieval buys here is what was retrieved and not the extra tokens.

The one category retrieval wins is the most important number here. Routed specialists beat it on five categories by between 0.118 and 0.476, and lose on this one by 0.566. Its records are open-domain factual questions: what a balance sheet is, what a sandworm is, why an exploration company drills directionally. The other five are procedures: SQL, Python and JavaScript functions, arithmetic word problems, symbolic maths worked in prose. Retrieval wins where the answer is a fact somebody already wrote down and loses where the answer has to be worked out. It is also the only category where retrieval earns anything at all. Drop it and the retrieval arm sits at 0.9218 against 0.8864 for the untouched base, so on the five procedural categories pasting a neighbour's answer into the prompt was worse than leaving the model alone.

This is one run, one seed, six categories and no confidence intervals anywhere in it. Nothing above is a significance claim, and intervals are the next thing to fix. The two trained arms also finished level, at 0.9258 for the routed set against 0.9238 for the single adapter. Routing is ahead on four categories and behind on two, and the two it loses are the wider gaps, so the single adapter finishes 0.0020 in front. Routing bought nothing over one adapter trained on everything, on this corpus.

Every arm on every category, and what the result file does not record
One run of lora_vs_rag.py · 17 September 2026
CategoryBaseControlRetrievalOne adapterRouted
JavaScript and Python functions0.81980.80710.82860.63530.6204
SQL queries against a named table0.72510.81050.95050.49220.4749
arithmetic word problems0.98860.97580.89030.71920.7021
symbolic maths worked in prose1.03291.06301.01470.85510.8971
programming across languages0.86570.88870.92500.70620.7276
open-domain factual questions2.27772.31871.56622.13462.1326
Categories are numbered clusters from a semantic cut of the corpus rather than labels anybody wrote, and the names here were read back off the records each cluster holds. The result file carries the five means and the six per-category means and nothing else: the base checkpoint, the seed, the adapter rank, the held-out record count and the routing accuracy the script prints are all defaults of the script rather than values the file records, so read them there. Adapters target the value and output projections only, which is the section below carried into this one.

The last row is the one that matters and it is the least coherent category of the six by the silhouette score that selected them, the largest, and the one every arm finds hardest. The base scores 2.2777 on it against 0.73 to 1.03 everywhere else. A category that loose is exactly where a nearest-neighbour lookup has something to add and a specialist has the least shared structure to learn, so the loss is legible rather than mysterious. Whether it survives intervals, a second seed and more than six categories is not something this run can say.

03 · Masking

Three masks, one model, one parameter budget

Figure 04 Pooled held-out overlap by masking arm, with the ratio and its interval Measured
Four arms of one model, separated only by which positions the training mask coveredpooled held-out corpus overlap, forced anchorbaseno fine-tuning0.0045reversemask everything except the anchors0.1760randommask random positions0.2137anchormask the anchor positions0.35711.001.251.501.752.00anchor over random, with its 95 percent interval1.67x [1.51, 1.85]same base checkpoint, same corpora, same 7.0M trainable parameters in every fine-tuned arm
Pooled held-out forced-anchor corpus overlap across forty-eight queries in four domains the model was not fine-tuned on. Anchor masking gives 1.67 times random-position masking, ninety-five percent interval [1.51, 1.85]. The reverse arm sitting below the random arm is the control that matters: what orders these is the objective, not the data volume. Deposited under DOI 10.5281/zenodo.20496783 and partially reproducible from /reproduce.

Composition is not only which examples a corpus holds. It is also which part of each one the training signal falls on. The three fine-tuned arms share a base checkpoint, a corpus, an adapter rank and seven million trainable parameters, and only the mask differs.

Where the effect lives, and the interval arithmetic
Section 5.7 of the study
ArmHeld-out overlapTrainableWhat it shows
random-mask LoRA, all projections0.2147.0Mthe control
anchor LoRA, all projections0.3377.0Mthe reference arm
anchor LoRA, value and output only0.4162.98Mfewer trainable parameters, better result
anchor LoRA, query and key only0.1362.98Mbelow the control
Two arms with the same 2.98M trainable parameters land at 0.416 and 0.136, a factor of three apart, because of where the parameters sit rather than how many there are.

In domain the same procedure gives 1.26 times with an interval of [1.18, 1.34], and the two intervals do not overlap, which is the finding that the advantage is larger out of distribution than in it. Both come from ten thousand bootstrap resamples of the corpus overlap ratio, over 48 held-out queries, with P(anchor greater than random) of 1.000.

This is a fine-tuning result on one 1.3B base checkpoint at one adapter rank, on seven corpora in one retrieval format, and nobody outside this lab has replicated it. The published experiment log carries the runs that failed alongside the ones that worked, which is the only reason the 504-generation figure is quotable at all.

04 · Routing

A ceiling that a nine-fold parameter range did not move

Figure 05 Seven categories, one of them an administrative label Measured
Category-level routing accuracy, and what one corpus edit did to it0.40.50.60.70.80.91.0six categories, 0.80 to 0.980.52the same conversational space as another, under a different name0.850seven categories as filedone category covers the same conversational space as another under a different name
Category-level routing under three states of the corpus. The six well-behaved categories are drawn as the published band from 0.80 to 0.98 rather than as six points, because the individual six are not published and drawing them would be inventing data. The seventh is at 0.52. Step it to watch the aggregate move as the overlapping pair is collapsed and then removed, with nothing retrained. Cards of 17 September 2026 on the cassandra-foundation-design feed thread.

Training-free routing held in a 1.7-point band across a nine-fold base size range and three model families, so a bigger base was ruled out before anything else was tried. The card reporting the fix put it in one line: corpus construction is the lever, not model size and not routing math.

The six candidates ruled out first, each with its measurement
Cards of 17 September 2026 · cassandra-foundation-design thread
CandidateMeasurement
A bigger base modelTraining-free routing held in a 1.7-point band across a nine-fold size range and three model families
A lexical router instead of embedding cosine0.44 against 0.87 at the largest specialist count tested, and the gap widens as the count grows
Hierarchical routing, coarse then fineA coarse first hop lands at 0.725 and its errors are unrecoverable, so the chain finishes below flat routing
Soft or top-k mixturesThe margin between best and runner-up is 0.004, so weight spreads onto wrong units and accuracy falls as the decision softens
Centering and whitening the embeddingsMargins 23 times larger, accuracy worse
Nearest-member, top-m and kNN scoringAll below the plain centroid, some by twenty points
A fourth line points the same way. In small models trained from random initialisation with matched body parameters against a monolith of the same inference depth, held-out negative log likelihood against that monolith went from minus 0.377 with a shared language layer ahead of the specialist to plus 0.507 with the specialist ahead of it. Same budget, same data, opposite sign.
05 · A published null

A hypothesis we tested and published against

LTMi-XT is our retrieval format and it is in production use here, running crystallisation and retrieval behind live endpoints, an API and a public specification. A separate exploratory experiment asked whether one of its components, the lattice coordinate carried on every record, could additionally serve as a conditioning signal fed into attention. A three-way ablation found that channel empirically content-free: all three arms landed at the same training loss of 0.2834, unforced inference came out byte-identical between the random and hash arms with a zero-width bootstrap interval, and the PCA arm's large win on coordinate-space geometry did not transfer downstream.

A hypothesis about a speculative extra use failed, and we published it. The format itself is not what the experiment tested, so the null says nothing for or against it, and the retrieval format has not been benchmarked against alternative retrieval approaches. That gap is open. What the experiment settled is narrow: the lattice is an address rather than a semantic geometry, and we stopped saying otherwise.

The four comparisons, and the review of our own null
LTMi-XT empirical findings, 12 May 2026
ComparisonMetricPoint95% intervalSignificant
PCA-3D against BLAKE2bforced corpus overlap-0.002[-0.034, +0.029]no
PCA-3D against BLAKE2bunforced corpus overlapexactly 0[0.000, 0.000]no
random against BLAKE2bforced corpus overlap-0.016[-0.054, +0.022]no
random against BLAKE2bunforced corpus overlapexactly 0[0.000, 0.000]no
The three arms are the BLAKE2b hash, a PCA projection of frozen-encoder embeddings, and uniform-random assignment, with architecture, data, warm start, optimizer and the 500-step schedule all identical. Paired-by-query bootstrap with 2,000 resamples on 36 held-out corpus and query pairs across three domains. The PCA scheme reaches 96.7 percent one-nearest-neighbour topic accuracy in coordinate space against 21.7 percent for the hash, and that geometric advantage does not transfer to any downstream metric.

The same document publishes the adversarial review of the null, including the criticism that thirty-six is too small against a noise floor of about 0.02 and that two hundred would be needed for the interval we want. The next round moved to 172. It also records that we missed relevant prior art and names the papers.

06 · Surfaces

The evidence that costs something to publish

A research claim is worth what it costs to check, which for a lab this size is a statement about surfaces rather than intentions. Four of ours. /ask puts a question to six lanes and withholds the answer when they do not agree enough, with the margin printed and the floors published in advance at /api/arbiter/lanes. /reproduce gives five claims the artifact, the commands, the expected output and the tolerance, then lists the claims that could not be made reproducible with the reason, our own headline routing figure among them. /live and /board carry the nulls and the killed mechanisms in the same stream as the wins. And Cassandra T1, 1.33 billion parameters under Apache 2.0, shipped with no benchmark numbers because none were measured.

Figure 06 A round crossing its floor, and the decision flipping Illustrative
The release decision, against floors published before the question is askedagreement among the lanes that took a position0.440.60shallow, at least three lanes0.70deeper, five lanes0.85deepest, all six lanes and a named human reviewerwithheldmargin against the deeper floor: -0.26
The floors here are the published ones: 0.60 with at least three lanes, 0.70 with five, and 0.85 with all six plus a named human reviewer. The score sweeping across them is invented so the decision can be watched flipping, and it is not a recorded round. Nothing on the refusal page is computed in the browser, because a score the client could compute is a score the client could fake.
How the Cassandra parameter count is derived, two ways

Multiplying out the published configuration of 28 layers, hidden size 2,048, 16 query and 4 key-value heads, SwiGLU at intermediate 5,632 and a tied 32,768 vocabulary gives 1,329,711,104 parameters. Halving the byte size of the published fp16 checkpoint gives 1,329,750,332. The two agree to three thousandths of a percent and the difference is the serialization header. The checkpoint ships with its SHA-256, and the reproduction page walks a reader through verifying it without downloading the weights.

The published training loss curve, cross-entropy 3.78 to 2.26 over five epochs, is a property of the run rather than a capability claim. The model was built as a research substrate for the masking study above, so a benchmark table would have implied a comparison nobody ran.

07 · Scope

How much weight this evidence carries

All of it comes off one consumer GPU in a one-person research operation and every sample is small: fifteen runs over 1,942 probes with only the two extremes reseeded, 150 held-out records across six categories on one seed in the retrieval comparison, forty-eight held-out queries in the masking study, seven categories in the routing result, and thirty-six pairs in the lattice ablation, whose own document says that is too few. The construction ablation is strong evidence at the scale it was run, because the model is genuinely held fixed across the fifteen runs. The rest is suggestive rather than established.

A leave-one-out construction ablation at a scale where the withheld family is recovered by capacity alone would put a ceiling on the claim, and we would publish it. So would a clean separation of the confounded run above that attributed the gain to capacity. The corpus and the probe generator are ours and the experiment is cheap; what it is waiting on is time.