Model Fingerprint Lab

Every language model is bad at picking random numbers, each in its own characteristic way. Send a model three short number prompts, paste its replies, and this page draws its statistical fingerprint and ranks the closest matches among 59 reference models. It’s free, there’s no signup, and everything runs in your browser. Your replies are never uploaded.

Fingerprint a model

The trick, in one paragraph

"Be random" is one of the few tasks with a mathematically correct answer: a uniform distribution. Language models can't do it. Their tokenizers chunk digits differently, their training data is full of humans failing at randomness, and post-training reshapes what "random" means to them. The result: each model deviates from uniform in a repeatable, measurable way. That deviation pattern is the fingerprint.

From that pattern the page draws a portrait: how far the numbers stray from uniform, and where. It also compares your replies with a reference bank of fingerprints sampled from 59 known models, using the open-source detector and bank from lm-detector (MIT). The comparison only ranks models that are in the bank. A model outside it still gets a closest match, so check the top result against other evidence before you rely on it.

The lab

Step 1: Send three prompts to the model

Each prompt asks for about 300 integers from 1 to 355. Send each one in a new chat, exactly as written, with tools turned off if the app has them. Languages are mixed at random (English, Chinese, Japanese, Korean, French) because the reference bank was sampled that way; leave them as they are.

Prompt 1
Loading prompts…
Prompt 2
Loading prompts…
Prompt 3
Loading prompts…
Only want the portrait? Use one plain probe instead

A single reply is enough for the statistics, but not for identification. Paste the reply into box 1.

Pick 300 integers from 1 to 355, inclusive. Choose each one independently. Do not count up from 1, do not use arithmetic sequences, cycles, or repeating blocks. Do this yourself: do not call Python, a code runner, a calculator, or any tool. Repeats are fine. Separate numbers with commas or spaces. Start directly with the first number. No preamble.
从 1 到 355(含)中独立挑选 300 个整数。每个独立选择,不要从 1 开始数,不要用等差数列、循环或重复块。必须自己完成:不许调用 Python、代码执行器、计算器或任何工具。重复值可以保留。用逗号或空格分隔。直接从第一个数字开始输出,不要写前言。

Step 2: Paste the three replies

One reply per box, in the same order as the prompts. Commas, spaces, or newlines all work.

The range only affects the portrait. Identification always reads 1 to 355, the range the prompts ask for. The first click downloads a 3.5 MB reference file from this site; matching then runs on your device.

Step 3: Read the results

How to read the results

Closest models. The detector turns each reply into features (which values come up, in which part of the list, which last digits, how numbers follow each other) and scores them against every model in the bank. Confidence is calibrated within the bank: 90% means that, among these 59 models, this one fits far better than the rest. It is not a measured hit rate, and it cannot tell you whether the real model is missing from the bank. In our held-out checks some wrong answers scored above 95%. A top match under 75% means no model in the bank is a clear winner; sometimes two close versions of one model split the score.

Chi-square / p-value. The null hypothesis is "these numbers are uniform." A p-value under 0.05 means the model is measurably non-uniform, which is the normal case. The shape of the deviation is the fingerprint, not the p-value alone.

Edge share. Share of picks in the outer 5% at each end of the range. Uniform expects about 10% (the card shows the exact figure for your range). Models are often edge-shy.

Repeat rate. Adjacent equal numbers divided by pairs. Uniform over a range of size R expects about 1/R. Humans under-repeat, and so do models trained on them.

Most / least picked. The model's favorite numbers and its blind spots. Compare two models' lists and the family resemblance (or lack of it) jumps out.

Limits, stated plainly

Fingerprints drift when models update silently, and the reference bank was sampled at fixed dates and settings. Close versions of one model look alike. We ran 24 held-out reply sets (replies not in the bank) from five DeepSeek models through the detector. The exact model came first in 15 and was in the top three in all 24. Eight of the nine misses put another DeepSeek version first, sometimes at over 95% confidence; one put a Qwen model first, at 79%. All 24 sets came from one family, so these numbers say little about how well other families separate. Temperature, system prompts, and reasoning effort shift the numbers. A wrapper that post-processes the output breaks attribution entirely. A model outside the bank is still matched to its nearest neighbour. And fingerprinting only speaks to "which model?". It says nothing about "AI or human?" on ordinary prose.

If you are checking whether an API serves the model it claims, run the three prompts more than once with fixed settings and look for a consistent answer, then weigh it with other evidence.

Further reading: Pasquini et al., LLMmap (2024): fingerprinting via discrepancy-maximizing queries; Tong et al., SeedPrints (2025): initialization biases as persistent fingerprints; lm-detector, the detector and reference bank used here.

Updates

  • 2026-10-16: added model identification, with three generated prompts and the lm-detector reference bank (59 models). Results of our held-out check are under Limits.
  • 2026-10-16: first version, with the fingerprint portrait.

FAQ

Can this tell me which model wrote a text?

Only for replies to its own three number prompts, and only as a ranking. The detector compares those replies with a reference bank of 59 models and lists the five closest, each with a confidence. It is a closed set: a model that isn't in the bank still gets a closest match, and a high score is not proof. It cannot identify the model behind ordinary prose.

Why does the probe ban tools and calculators?

With Python, every model would output true uniform randomness and all fingerprints would vanish. The fingerprint lives in unaided generation: the model's own biased idea of random.

How many numbers do I need?

For identification, each of the three replies needs at least 80 valid numbers and at least 55% of the count its prompt asked for, so roughly 160 to 185. For the portrait alone, about 200 or more in total gives a stable reading; below 100 the chi-square test has little power and the histogram is mostly noise.

Does my text leave my browser?

It never leaves. Parsing, statistics, and model matching run in JavaScript on this page. The only download is the reference file, fetched from this site the first time you click Analyze. Nothing you paste is uploaded.