Running the Ensemble
Status: demonstrated — the full grid: every example x every model, no errors.
The 2026 synthetic prototype's evaluation was one large, deliberately boring operation: fire every phenotype example at every model in a five-node fleet, force each model to keep writing, and record everything it wrote. This article covers the machinery of that run; the results cover what it showed.
Five nodes, one pool each
The inference fleet mirrors the training architecture exactly. Five nodes, each a single 16 GB consumer GPU, each serving one pool's fully trained model at full context — feasible on so small a card because of the base model's linear-attention architecture, at a measured rate of roughly 200 examples per hour per node on this round's card class (hardware notes have the details). Nothing crosses nodes: no shared weights, no shared adapter, no routing. A patient's history goes to all five, and each answers alone — the independence that makes consensus meaningful is preserved all the way down to the hardware.
Each node loads its pool's steering adapter alongside the base weights but applies it per request, at whatever strength the request names. That one detail is what made the comparison batches cheap: the same fleet, untouched, ran the steered evaluation at operating strength and the unsteered baseline at strength zero, differing in nothing but a number in the request.
Forced continuation, binary read
Every request bans the end-of-sequence token. The model is not permitted to stop; it must emit roughly 1,536 tokens — ten or more complete table rows — whether or not it has anything to say. That is a design principle, not a measurement convenience: a model allowed to stop would be readable as predicting "no need," and PRISM is a recall instrument, never a predictor.
Scoring a single run is then trivial by construction. A model has fired if the string CPT-82197 — PVE's screening TEST code — appears anywhere in its continuation. Because every PVE code was fabricated to sit outside all real codesets and appears in zero base patients, the check is a grep, not a judgment call: no classifier, no threshold, no human reviewer. The read is binary — fired or silent — and a silence is stored as exactly that, never as a negative finding.
A content-blind runner
The batch runner (prism-ensemble) exists to make responses exist and to keep them. Given a batch definition — which examples, which nodes, what adapter strength — it pulls each prompt straight from the database views that own the training material (the fixed two-line header included, served from a view rather than hard-coded anywhere), fires every example at every node, and writes every complete emitted row back to the database. It parses rows only far enough to store their six columns; it attaches no meaning to any of them. Interpretation belongs entirely to the evaluation layer downstream.
Its success criterion is completeness, not throughput: every required example-model cell must yield a stored response. Batches are resumable — re-running one fills only the missing cells — so a transient node failure costs a retry, never a restart.
| record | one row per | holds |
|---|---|---|
| batch | run definition | the plan: examples, nodes, adapter strength, a note |
| completion | example × model cell | run metadata plus the binary fired read |
| response | complete emitted table row | the raw line and its six parsed columns |
The full grid
The canonical evaluation batch was the full population: all 3,250 phenotype examples across the five pools × all 5 models = 16,250 runs, zero errors — every cell filled, none skipped, none hand-excluded. The grid's shape is the point: each example trained exactly one pool's model, so every run is in-distribution for one model and out-of-distribution for the other four, and only the four count as evidence. One grid yields both reads at once.
The comparison batches
The headline grid alone would prove little; the claims in the results rest on re-running it with one variable moved at a time:
| batch | what changes | what it isolates |
|---|---|---|
| full grid | nothing — adapter at operating strength | sensitivity, specificity, earliness, consensus |
| adapter off | adapter strength set to zero | steering vs. base-model fluency |
| strip ablation | injected phenotype rows removed from the histories | pattern vs. patient — the win-condition mirror |
| dose-response | 0, 1, 2, 3, or all of a patient's signal rows kept | the minimal sufficient signal |
The runner executed all of them identically, blind to which was which. That blindness is worth stating plainly: nothing in the execution path knows what a fire means, which batch is the control, or which outcome would be convenient. It runs, it records, and the numbers are whatever they are.