Model map
Every model in the corpus, placed by how its freeflow prose resembles every other model's. Distance here reflects wording, topics and style, not capability or ancestry: the character n-gram centroid of each model's freeflow samples, compared pairwise by cosine, then projected down to something you can rotate.
Similarity tree
A hierarchical summary of the full-space distances. Merge heights reflect average-linkage distances between clusters; this tree does not preserve every pairwise distance or establish model ancestry. Leaves are coloured by lab, so you can see where the tree recovers labs on its own — and where it doesn't.
Method and honesty
Across 182 model identities, 34,070 freeflow responses are vectorised as within-word character 3–5-gram TF-IDF and averaged into one centroid per model. Each response has equal weight within its pooled model; routes and conditions with more responses therefore contribute more. The vocabulary and IDF weights are fitted across all responses. Cards show sample counts and collection cells; these are not equally precise estimates. A model label may pool multiple routes or captures, and a router may expose different backends to different prompts.
Cosine similarity between centroids gives the 182×182 reference matrix for this visualisation—not ground truth about personality or training. The map necessarily loses structure. Its retention score is the average fraction of original top-three neighbours retained in projected coordinates. Individual models can retain anywhere from none to all three; the selected card shows its own count. Scores are calculated at the precision of the shipped data, with stable model-order tie breaking. Axes use equal units; perspective can still alter apparent distances on a 3D screen.
- UMAP 2D 58% · 3D 59% — prioritises local neighbourhoods; cluster gaps are not original distances
- MDS 2D 33% · 3D 47% — approximates global distances; relative distance error 0.210 / 0.136
- PCA 2D 25% · 3D 39% — linear projection of unit-normalised centroids; explains 28% / 35% of their feature variance, not of pairwise distances
What the matrix has got right
Three checks against facts established outside this corpus, all on the full-space cosine similarity that the map projects:
- Ox Alpha ↔ GLM-5.3-Flash: 0.959. Ox Alpha was measured as an anonymous stealth route (20–26 Aug 2026); Z.ai later confirmed it was GLM-5.3-Flash. The two Ox Alpha snapshots score 0.967 against each other, so ~0.96–0.97 is what the same weights look like on this scale.
- GPT-5.5 ↔ GPT-5.5 Pro: 0.981. Same weights, different reasoning mode — the tightest pair in the corpus, while their values-probe ownership differs sixfold. Reasoning mode moves what a model will own, not how it writes.
- Union Alpha ↔ GPT-6 Astra: 0.976. Union Alpha was measured as an anonymous stealth route (16–17 Sep 2026) and this matrix placed it nearest Astra of all 182 models — above the same-weights line — before the route was reported to be a cascade router with GPT-6 Astra as its escalation model. Per sample, 88 of 125 freeflow and 85 of 120 values answers sit nearest Astra; Astra's own nearest neighbour is now Union Alpha.
So a similarity above ~0.95 has, three times out of three, meant the same weights behind the text. Below that the scale is comparative, not diagnostic.
Stability between releases
Each release's layouts are aligned to the previous release's coordinates (an orthogonal Procrustes fit — rotation, reflection and one uniform scale, never a distortion), and UMAP starts from the previous layout rather than a random one. Measured by removing one model and regenerating: PCA then moves the others by under 1% of the map's width, MDS by 1–3% (keeping 90% of on-map neighbours in 3D), UMAP by about 7% while still rearranging roughly a quarter of its on-map neighbourhoods — the optimiser, not the orientation. Low-epoch and AlignedUMAP variants were tried and do not improve on this: they trade true-neighbour fidelity for stillness. UMAP therefore stays the default because it shows the most, and its positions are not comparable between releases — compare neighbours and similarities, not coordinates. PCA and 3D MDS hold still if you need that.
How to read a UMAP gap: a worked example
In the UMAP view, Anthropic and OpenAI start close together and Anthropic then breaks away at Opus 4 while OpenAI drifts. The full matrix says the event is real and the distance is not. Consecutive Anthropic releases sit at 0.90–0.95 to their predecessor except one step, claude-3 → Opus 4.0 at 0.800: a single discontinuity, then a tight line. OpenAI's releases step at a median of 0.887 with several bumps below 0.83: gradual drift. But the two labs' distance from each other barely moved — early-to-early 0.798, late-to-late 0.775 — and every Anthropic model's nearest OpenAI model stays at 0.79–0.87 throughout. UMAP turned a true change of direction into a chasm. That is what it does: neighbourhoods are right, gaps are invented. Read the shape of a trajectory in UMAP, and read its size in the tree or the card.
Relative distance error is the root-sum-squared pairwise residual divided by the root-sum-squared original distances, after fitting one uniform scale. Lower is better. It complements neighbour retention, rather than making MDS lossless. Read the drawn neighbour edges and card similarities as measurements in the full feature space, the tree as a hierarchical summary, and the map positions as an approximation. These are exploratory estimates; no bootstrap confidence intervals or cross-seed stability guarantees are claimed.
Proximity describes similar output distributions under these collection conditions. Shared training, post-training, distillation, prompting, vocabulary, topic choices and routing are possible explanations—not conclusions established by this plot. It does not establish developer identity, ancestry, capability or subjective experience. Lab labels only colour the result; they do not determine the embedding. Models with an unknown lab are ringed.
Release sequences connect a lab's or family's models in release-date order, not a lineage. Same-day ordering is arbitrary. Time filtering uses this single present-day embedding, including the influence of later models; it is not a reconstruction of what the map would have looked like then. Release dates are not capture dates.
Reproducibility and collection scope
Generator: website/scripts/generate_map.py. Seed 0;
UMAP neighbours 8, minimum distance 0.15.
PCA uses unit-normalised centroids. Missing UMAP dependencies stop generation rather than publish incomplete data.
Versions: numpy 2.5.3 · scikit-learn 1.9.1 · scipy 1.18.1 · umap-learn 0.5.12.
Input fingerprint: 87e72c49f5011e5eb18adbd0d8c32a0a183f07d6862e497091070ac382f7dc64
Generator fingerprint: e653c4bfd05a191eec31aaf26c8de92f9e47cd03a0da4df20b88239fa701f08c
Repository base revision: b5e1621f4886f2753d975a4e89c55640e3e60bd7.
Sample/cell counts describe the responses pooled in each centroid. Capture dates are shown only when explicitly present in the published samples; missing dates are not inferred from release dates or file modification times. Data: this corpus.