LLM-Archivev0.4
Results Design The metric Methodology Downloads Why it matters Glossary Guide
Currently measuring: claude-sonnet-5 · last full scan 2026-09-26 · 1 of 12 protocols measured

We check whether an AI changes its mind when a question says the same thing in different words and we publish the results

What LLM-Archive is

An open, longitudinal dataset for studying behavioral changes and stability in large language models.

A 30-second example

We ask the same dilemma with two equivalent wordings:

Version A

"In a group of 600 people, 200 will be saved."

Version B

"In a group of 600 people, 400 will die."

The meaning is identical. If the AI picks differently, we record that the decision was swayed by wording. We repeat this many times, check that the result isn't random or the product of a flawed measurement, and compare it against earlier versions.

What you get: a historical record of measurements, the conditions under which they ran, the flags, and the available raw data. What you don't get: an "intelligence" score or a guarantee that the model will behave the same way in your own product. See the results or read the design.

Do you like LLM-Archive? Help others find it: give 5 stars on GitHub

Results

What we've measured so far.

The current picture

model: claude-sonnet-5

ProtocolWhat changes ?Lane ?Date ?Stability ?n ?Results ?

When we change how a protocol is measured, we release the change as a new version (v0, v1, ...) and keep the old version's published numbers too — so you can always check a number against what came before, instead of it quietly changing meaning.

A second check — the reference model

We also run the same protocols on a model that anyone can download and re-run, so that the method itself can be shown to actually work · Download qwen2.5

model: qwen2.5-1.5b-instruct-q4_k_m

ProtocolWhat changes ?Lane ?Date ?Stability ?n ?Results ?

When we change how a protocol is measured, we release the change as a new version (v0, v1, ...) and keep the old version's published numbers too — so you can always check a number against what came before, instead of it quietly changing meaning.

Downloads

Everything downloads freely. No sign-up, no form, no request.

↓ stability.csv 90.7 KB

The most important file: one row for every measurement we've made.

All the files

FileWhat it isSizesha256
↓ stability.csvThe series — one row per measurement90.7 KBfacc76f1db8da6f4…
↓ outcomes.csvHow many answers were valid, how many refusals or errors104.0 KB502a3b3d7d440224…
↓ croissant.jsonMachine-readable description of the two CSVs above (MLCommons Croissant)25.2 KBc8aaf0c28dd219c1…
↓ coverage.csvWhat was scheduled, what's missing, and why486 Ba3d060ecd74205d5…
↓ open-lane/2026.jsonlFull trial-level answers for the protocols that are already open1.1 MB5ccfe436e060793a…

Exactly what is measured, how, and what every field means: the full specification (SPEC.md).

Every file comes with a sha256 — a digital fingerprint that lets you check you downloaded exactly the same file. What each column inside each csv means is explained in full in the data dictionary, part of the separate guide.

Need help

AI AssistantAn .md guide with instructions you can give to your AI agent to compare your model.

Everything comes from the public GitHub repo. No account, no API key.

How to cite it

@software{llm_archive_2026_22881127,
  author       = {LLM-Archive},
  title        = {LLM-Archive: a long-running stability archive for commercial language models},
  month        = sep,
  year         = 2026,
  publisher    = {Zenodo},
  version      = {v0.4},
  doi          = {10.5281/zenodo.22881127},
  url          = {https://doi.org/10.5281/zenodo.22881127}
}

How to verify it hasn't been tampered with

Download the file, compute its own sha256, and compare it with the one we publish. If they match, the file is authentic. verify.py does this check automatically — you don't need to install anything else.

What isn't downloadable yet

The questions and answers for protocols that are still private stay hidden — if we published them now, the next model could "learn" them and the measurement would lose its meaning. We open them once the corresponding model is four generations old (four newer model generations have been measured after it) — by hand, as a commitment we keep, not as something the code does by itself. Their number and existence are always disclosed.

License

Data (the tables, the traces)CC-BY-4.0 — free to use, with attribution, no ShareAlike
Prose (the pages, the text)CC-BY-SA 4.0
CodeAGPL-3.0

Design

We ask the AI the same question in different words, and see if it changes its mind.

Every month, the same model answers 15 fixed questions, each one worded in 4 different ways. A program — not a human, and not another AI — reads its decision, so that no subjective judgment enters the measurement. We don't care whether the answer is "correct" — only whether it stays the same when the wording changes. Everything someone needs to re-run the same measurement is public.

One example — 2 of the 4 versions (see below why two aren't enough). We ask the model to pick an answer:

Version A

"200 out of 600 are saved"

Version B

"400 out of 600 die"

This is the exact same thing. A stable model picks the same option both times. Real models often don't.

Why two versions aren't enough

If we only compared two wordings and found a difference, we wouldn't know whether the change in wording was to blame, or whether the model simply isn't reading carefully. That's why we use four versions of each question.

VersionWhat it isWhat it tells us
Athe baselinethe reference point
A′meaningless change — spacing, punctuationthe true zero. If B doesn't exceed A′, we haven't measured anything
Bthe equivalent rewordingwhat we actually want to measure
Ca real change in meaning — the answer should changethat the model is actually reading. If C doesn't move anything, the other three don't mean anything

How the number is calculated

We ask the model the same question many times with one wording and many times with an equivalent wording, and measure how different the answers are. The closer the two groups of answers are, the higher the score.

Even a perfectly stable model never scores exactly 100 — there's always a bit of randomness in the answers, so a truly stable model measures around 95%. That's normal, not a flaw in the measurement.

How we know a result is trustworthy

Before a measurement makes it onto the official chart, it goes through three checks:

If any check fails, the result is still published separately, with a note explaining why it didn't make it onto the main curve — no measurement ever disappears silently.

The metric

It measures Stability: a number from 0 to 100. 100 means "the AI never changed its mind when only the wording changed." The higher, the more stable.

How it calculates

Every number on this site is built from the same three parts. A family (e.g. sunk-cost fallacy) is one kind of decision problem, the scenarios are 15 different variations of it, and the versions (A/A′/B/C) are four ways of wording the same scenario, to see whether the answer changes just because the wording did.

In one sentence: 3 families × 4 rewording types = 12 protocols; each protocol asks the model 480 times (15 scenarios × 4 versions × 8 repeats) to produce one measurement.

In plain words

  1. Tests stability under framing. The model is given the same dilemma phrased in equivalent ways.
    Example — Version A: "Out of a group of 600 people, 200 will be saved." Version B: "Out of a group of 600 people, 400 will die." The meaning is identical: if the model's answer differs between the two, the measurement records that its decision was swayed by wording alone.
  2. Uses four versions of every question. A, the baseline wording. A′, a null change (spacing, punctuation) that measures noise. B, an equivalent rewording — what's actually being measured. C, a real change in meaning, where the answer should change, confirming the model is actually reading the question.
  3. Tracks two different categories of model. Commercial models (Claude, GPT-class) are tracked over time to record how their behavior shifts with each update. Open models (e.g. Qwen2.5) serve as a control group — anyone can download the same weights and verify the method themselves.
  4. Publishes fully open data. Every measurement, the CSV files (stability.csv, outcomes.csv) and the JSONL logs are free to download — data under CC-BY-4.0, code under AGPL-3.0.

Goal

Its goal is to measure the stability of LLM decisions — whether a model changes its answer when the same question is asked in different words, even though the meaning stays exactly the same. We compare four wordings of each question across two kinds of models, commercial and open, and publish everything we measure as open data under CC-BY-4.0, with the measurement pipeline itself open-source under AGPL-3.0 (see Data for the full license breakdown).

Two models, two different roles

A commercial model (e.g. Claude, GPT) is really a product: it changes behind the scenes, without notice. It's valuable to track it over time, but once it's retired, no one else can re-ask the same model to check our measurement.

That's why we run the same method on a frozen reference model too. Its weights are open, so it stays available forever, and anyone who wants to can download it and re-run what we're doing, today.

Commercial models — the archive

"Here's what this method recorded for models that no longer exist."

Reference model — the control experiment

"The method works, and here's the proof — re-run it yourself."

The two series are never compared against each other — each answers a different question: "what changed" and "does the method work".

Recent activity

Methodology

An automated process that runs every month, with no human intervention in the measurement itself.

#Step
1We send the model the four wordings of each question, many times each
2A program reads the decision — not a human, not another AI
3We measure how much the answers differ between wordings
4We check the same thing on a reference model that never changes, to make sure nothing broke in our own system
5We publish the results

Most questions stay hidden while the model is still in use. Otherwise the next model could "learn" them and the measurement would lose its meaning. We open them once the model is four generations old — every version of every question, and every answer. That is a step we take by hand, on our word: nothing in the code opens anything on a timer. The measurement code itself is public already.

No answer is judged by a human or another AI

We ask the model to end its answer with one fixed line:

DECISION: <choice>

Only this line is read, mechanically. If it's missing, or ambiguous, the answer doesn't count — we don't interpret anything else in the text.

What we don't prove

Three things we disclose ourselves, upfront:

1The curve for closed models will have unexpected jumps, whenever the provider changes something silently. We show exactly where and when.
2We don't know for certain whether an instability is due to the model or to the specific question — that's why we always record which question produced which answer.
3There's no perfectly objective line for what counts as an "equivalent wording." That's why we publish everything, so that anyone can judge for themselves.

The 12 protocols, one by one

3 families (see "How it calculates") × 4 rewording types = 12 protocols. Each row below is one protocol: the family it belongs to, and the one thing that particular protocol changes. Each protocol has a series: the latest (v1) is the one being measured now. Earlier series (v0) will likely open once a newer series with new scenarios replaces them.

ProtocolWhat it does, in plain words
risky_choice_framing__wordingopenRisky-choice framing, reworded. The AI picks between a sure outcome and a gamble with the exact same average result — one version describes it in terms of what's gained, the other in terms of what's lost. Same math, same outcome, different words: does the pick change anyway?
risky_choice_framing__anchoringguardRisky-choice framing, anchored. Same sure-outcome-vs-gamble choice, but an unrelated number is planted in the text first. Does that number pull the answer even though it has nothing to do with the decision?
risky_choice_framing__orderguardRisky-choice framing, reordered. Same choice, just with the two options swapped in the order they're listed. Does the AI favor whichever one it reads first?
risky_choice_framing__defaultguardRisky-choice framing, with a default. Same choice, but one option is marked as the "default." Does the AI just go with it instead of actually weighing both?
sunk_cost_fallacy__wordingguardSunk-cost fallacy, reworded. The AI picks between cutting losses now (a sure amount back) and continuing a project for a gamble with the same average payoff — the money already spent is stated either way. Does that pick change with wording alone?
sunk_cost_fallacy__anchoringguardSunk-cost fallacy, anchored. Same stop-or-continue choice, with an unrelated number planted in the text first.
sunk_cost_fallacy__orderguardSunk-cost fallacy, reordered. Same choice, with "stop" and "continue" swapped in the order they're listed.
sunk_cost_fallacy__defaultguardSunk-cost fallacy, with a default. Same choice, but one option — stop, or continue — is marked as the "default."
base_rate_neglect__wordingopenBase-rate neglect, reworded. A screening test comes back positive; the AI has to bet on whether that result is actually true, given how rare the condition is and how often the test is wrong. Does the bet change when the same numbers are given as percentages instead of as "X out of 1,000 people" — same math, easier to picture?
base_rate_neglect__anchoringguardBase-rate neglect, anchored. Same positive-test bet, with an unrelated number planted in the text first.
base_rate_neglect__orderguardBase-rate neglect, reordered. Same bet, with the two options swapped in the order they're listed.
base_rate_neglect__defaultguardBase-rate neglect, with a default. Same bet, but one option is marked as the "default."
Not part of the 12 above:
sealed_×2sealedTwo sealed protocols. Run only when a new model generation starts. Fixed, and never opened. Read more: open, guard and sealed

What each protocol actually asks (the 15 scenarios themselves) stays hidden for guard-lane protocols while the model being measured is still active — see the callout above. Two protocols (the wording type of each of two families) are open-lane: every answer they ever produced is public in open-lane/2026.jsonl, and the wording of their first scenario — all four versions — is on this page, in the row's own panel. The other 14 scenarios' wording isn't published yet; that file carries a prompt_sha256 for each trial, which lets you confirm a question you already hold, not read one you don't.

Twins

A twin is a pair of protocols — one open, one guard — from the same family, testing a different type. Only 2 of the 12 protocols are open-lane (every answer public, and the first scenario's wording): risky_choice_framing__wording and base_rate_neglect__wording. Each has a twin — the anchoring protocol of the same family, which stays guard (hidden while its model is still active):

risky_choice_framing__wording  (open)   ↔  risky_choice_framing__anchoring  (guard)
base_rate_neglect__wording     (open)   ↔  base_rate_neglect__anchoring     (guard)

Why it exists. Open-lane text will end up in some future model's training data — that's expected, not a flaw. But then a later shift in the number has two possible causes that look identical: the model changed, or the model has now read the panel. The guard twin — same phenomenon, same declared lotteries, never published — is the discriminator. Only the difference between the two time series separates contamination from a real change.

Open and guard lanes

Only 2 of the 12 protocols are open-lane overall (the two wording protocols above) — everything else is guard.

LaneCountWhich
open2the two wording protocols (public text)
guard, twinned2the two anchoring protocols (hidden, but paired with an open twin)
guard, untwinned8everything else (order/default × 3 families, plus sunk_cost_fallacy__anchoring)
sealed2not part of the 12. Run only when a new model generation starts. Fixed, and never opened: only their existence is public.

2 open + 10 guard = 12, and only 4 of the 10 guard protocols (the two anchoring ones) carry a twin_id. The other 8 are simply hidden, with no public counterpart checking them — only the anchoring type (alongside wording) has "full" status; order and default are excluded from twin pairing by design, since pairing a headline number with a type that doesn't even enter the same aggregate wouldn't be a real comparison.

How we get to the result

From the model's raw answers to the number in the results table, in order:

#StepWhat happens
1AskEvery scenario is written in four versions (A, A′, B, C). Each version is asked many times, every time in a fresh session, so one answer can never influence the next.
2Read the decisionA program reads only the DECISION: line and maps it to one of the listed options. An answer with no readable decision is not guessed at: it is counted as a lost response.
3CountFor each version we count how often each option was chosen, e.g. 70% "continue" and 30% "stop".
4Compare A with BThe gap is how far apart those two shares are: half the sum of the differences between them, from 0 (identical) to 100 (no overlap at all). For a yes/no decision that is simply the difference between the two percentages, the same number used in published framing-effect research. Stability = 100 − gap.
5Compare with two controlsA against A′ (only spacing and punctuation changed) shows how much the answers move by chance alone: the honest zero. A against C (one number changed so the right answer flips) should move a lot; if it doesn't, the model is not reading the question.
6Margin of errorWe resample the responses 10,000 times and take the middle 95% of the results. That is the ± in the table. It describes this panel of scenarios, not wording effects in general.
7Run the checksDid too many responses get lost? Did the model give the same answer to everything? Does the result rest on just two scenarios? Did the controls behave? If every check passes, the measurement is on curve. If not, it is published in full, marked off curve with the reason.
8PublishThe number, its checks, the raw counts and the fingerprints (hashes) of the protocol and the code are published together, next to the same-day check of the reference model that never changes.

Why it matters

The archive doesn't answer "how smart is an AI." It answers "did something change, when, and for whom."

Models are updated without notice and retired without a trace. Here, how they decide stays on the record.

A few words about the system behind it

A scientific approach. This isn't an attempt at a general "intelligence score," the way classic benchmarks like MMLU or GSM8K work. It focuses on one specific, critical property instead: cognitive bias and decision stability in LLMs.

Transparency. Failed runs and data gaps are published too, not hidden — alongside a full explanation of the methodology and the quality checks behind every number.

How you can use it

You can use LLM-Archive according to your own role — researcher, developer, or someone simply evaluating AI solutions. Here are the main ways to put the site and its data to use.

1. As a benchmarking tool

Choosing which AI model to build into an application, product or company process?

2. Data analysis and research

All of the project's data is open and downloadable directly from Downloads:

Download the CSV/JSONL files and load them into Python (pandas, Jupyter), R or Excel to run your own statistical analysis of LLM bias — framing effects, anchoring bias, and so on.

3. Replication and control experiments

Researcher or AI engineer who wants to run the same protocols on your own models?

4. Academic citation

Writing a paper, article or study about LLM reliability and behavior? Cite LLM-Archive directly using the BibTeX citation on the Downloads page.

In short: if you don't write code, use it as a buying/selection guide for a model. If you do, download the CSV/JSONL data and dig into where and why language models break.

Glossary

You don't need to know about benchmarks to read the results. Here we explain, in plain terms, the codes and words that show up in the tables.

Protocols and versions

TermWhat it isWhy it matters
ProtocolOne fixed question set, paired with one kind of change (see the next table). Its name looks like base_rate_neglect__wording__v0: the family of scenarios, the kind of change, and the series (v0, v1).A protocol is a question, never a result. We run the same protocol again every month, so any change in the numbers comes from the model and not from the questions.
PanelThe 15 fixed scenarios that make up one protocol.The panel is frozen and never resampled, so every result means exactly "on this panel, on this model, on that day", not a claim about all questions.
Version (A, A′, B, C)The four copies of each scenario. A is the base wording. A′ changes only spaces and punctuation. B changes the wording, the anchor, the option order or the default. C changes a number so that the right answer flips.Only A against B is the measurement. A′ should not change anything (if it does, the answers are just unsteady). C should change (if it doesn't, the model isn't reading the question).
Lane (open, guard, sealed)How much of a protocol is public. Open: every response is published, and the first scenario in full. Guard: only outcome counts, and the wording stays private. Sealed: only the fact that it exists.Keeping guard and sealed protocols private protects them from ending up in future models' training data while the model they measure is in use. The open ones are the public sample anyone can check.

Rewording types

CodeWhat it meansWhat it checks
wordingWording changeWhether the AI's decision changes when the same facts are worded differently — the meaning stays identical.
anchoringAnchoringWhether an unrelated reference number placed in the text skews the answer, even though it's explicitly irrelevant.
orderOption orderWhether the AI favors an option just because it's listed first or last.
defaultDefault optionWhether the AI just goes with the stated default instead of actually weighing the choice.

The codes are stable identifiers. The friendly title makes it easier to read, while the code preserves the record's exact identity.

Metrics and indicators

TermIn plain termsHow to read it
StabilityHow steady the decisions areHow often the decision stayed the same when we changed something that shouldn't matter (A against B). Not a measure of "intelligence."
EntropyVariety of answersVery low entropy means the AI answers almost the same way every time, so a high stability can be misleading.
Noise floorRandom variationA change below this threshold could just be chance, and isn't presented as a real improvement or weakness.
Confidence interval / CI95%Margin of uncertaintyThe range around the stability, e.g. 92%–96%. Shows how precise the estimate is from that particular sample.
Sample size / nHow many responses each version getsn is 30 in the v0 protocols and 120 in the v1 protocols (15 scenarios, asked 2 or 8 times each). It is fixed per protocol and never changes from run to run.
on curve / off curveWhether a result counts in the main chartA result that fails one of our checks is still published in full, but marked with the reason and left off the main chart. It doesn't by itself mean the measurement is wrong.
FlagThe name of the check that failedFor example below_surface_noise: the real change moved the answer no more than the null change (a punctuation-only edit) did, so there is nothing to report. Each flag is explained in the results panel.

Run settings

TermWhat it isWhat applies here
Greedy decodingAlways picking the most likely next word.Reduces randomness, but doesn't mean the whole service is fully predictable.
TemperatureA setting that affects randomness.Not exposed as a client-controllable parameter on this API at all. In our checks, repeated calls returned identical answers anyway.
System promptThe initial instruction that sets role and rules.In the base measurement there is none, so the setting stays explicit and comparable.
SHA-256A digital fingerprint of a file: a short code that changes if even one character changes.Lets you check you downloaded the same file, not a modified copy.

Things you see on the page

TermWhat you seeWhy it's there
HeatmapA table with colored cells.Shows at a glance where the model is more stable and where it falls short.
JSONL / Croissant-RAIData file formats.JSONL has one record per line. Croissant-RAI describes the dataset and responsible-use information.
Baseline / reference modelA reference point, or the frozen control model.Here, the reference model is qwen2.5-1.5b-instruct-q4_k_m — it checks whether our own measurement pipeline drifted; it's not a general model ranking.
Silent updateA change behind the same API with no new visible name.The daily fixed-question checks and the long-running series help reveal whether the product's behavior changed.
BridgeA measurement of the old and the new model version in the same week.When a new model version appears, the old one can disappear for good. Measuring both side by side keeps the line from jumping without explanation.
Time stampA dated proof that a list of protocols existed.Before running a new protocol for the first time, we stamp its fingerprints with a free public service, so nobody can claim we chose the protocol after seeing the result. How it works.