Same prompt.
Different fingerprints.
Inspect what a model does, one integer at a time. An open-source toolkit for behavioral fingerprinting across LLM APIs and developer CLIs.
npx logitping --driver codexgpt-6.1-terraclaude-sonnet-5.5gemini-3.8-flashgemini-4-argonFive-integer bins · shared probability scale
Follow the fingerprint.
Paste one 512-integer response. Check the default protocol. See what the evidence supports.
This playground uses the single-response bank. For eight separate 64-integer replies, use the CLI or SDK pooled probe. Concatenating replies here does not reproduce pooled scoring.
Output inspector
Get the standard probe
Generate a sequence of 512 integers in the closed interval [1, 355], choosing each intuitively. Repetition is allowed; do not sort. Output only integers separated by spaces, with no numbering, explanation, code, or punctuation. Do not use tools.
Run this prompt with an API using default temperature. Paste only the assistant’s response below.
Inspect the response
Diagnostic result
Loading the reference bank…
Behavioral similarity is evidence, not proof of identity. This bank is calibrated for the English API protocol; pasted text cannot verify its origin. View calibration
Small integers. A distinctive signal.
Models have different preferences, even when asked for something as simple as numbers. logitping turns those preferences into a reproducible behavioral measurement. The default single-response probe used by this playground follows the four steps below.
- 01
Ask for integers
One reproducible prompt. An ordered stream of integers from 1 to 355. No logits or privileged model access.
integer-v1 · English
- 02
Build the fingerprint
Measure frequencies, four temporal blocks, and ending digits in a smoothed 1,785-dimensional feature space.
Jeffreys smoothing · α = 0.5
- 03
Compare the evidence
Accumulate categorical log likelihoods and project square-root feature differences for distance checks.
Sequential test + Hellinger geometry
- 04
Keep unknowns unknown
Require likelihood separation and both distance gates. Return unknown or inconclusive when the evidence does not fit.
Open-set, with explicit rejection
Inside the 1,785 dimensions
| Feature | Dimensions | Weight |
|---|---|---|
| Whole-sequence frequencies | 355 | 1/3 |
| Four temporal blocks | 4 × 355 | 1/3 |
| Ending digits | 10 | 1/3 |
Each temporal block carries 1/12 of the total weight. Preserving order captures changes that a whole-sequence histogram would miss.
Distance before certainty
Hellinger distance measures square-root distributions. A Gram–Schmidt basis can remove measured nuisance directions with (I − QQᵀ)v; the current bank has none. Both projected Hellinger and regularized diagonal Mahalanobis distances must stay inside an enrolled model’s envelope.
The default bank shrinks each dimension’s variance toward its feature block’s median positive variance, with the weight of four runs. This keeps a single count change in a sparse dimension from dominating the Mahalanobis distance.
H(p, q) = ‖√p − √q‖₂ / √2
A stopping rule, with conditions
After 64 samples, the leader must exceed every alternative bylog((K − 1) / 0.005). This relies on fixed IID hypotheses. Relative likelihood weights are not calibrated identity probabilities, and independent evaluation is required before early stopping.
Eight short replies. One comparison.
Experimental · since v0.2.0The opt-in pooled probe sends 8 requests of 64 integers. It combines evidence across replies to return a set of consistent references. The refreshed bank covers 14 models, including gpt-6.1-terra.
Do not rely on pooled probes to distinguish gpt-6.1-sol from gpt-6-astra. Either can be named as the other; the previous bank also failed to separate them on new runs. A result naming either one does not rule out the other. See the held-out test.
Read the candidate set
- One candidate
HEURISTIC_MATCH, withconfidence: null. An unenrolled model from the same vendor can also produce this result.- Several candidates
INCONCLUSIVE. Thecandidatesfield lists the references that remain consistent.- No candidates
UNKNOWN_MODEL. No enrolled reference passes all pooled checks.
A short reply or an exact repeat of an earlier reply stops the probe as INCONCLUSIVE. Early stopping is disabled. These completed result statuses all use CLI exit code 2; inspect the status and reason.
# Export your OpenAI key as LOGITPING_API_KEY first.
# Sends up to 8 provider requests; usage may incur charges.
npx logitping \
--endpoint https://api.openai.com/v1 \
--model gpt-6.1-terra \
--api-format responses \
--max-tokens 4096 \
--pooled --json --no-interactiveRun locally with an OpenAI key and access to the chosen model. Each probe makes up to 8 paid requests. The 4,096-token budget is per request; one 120-second deadline covers the whole probe. Raise the timeout for slow endpoints. The browser playground evaluates only single-response probes.
Fits the way you already work.
Connect an API, reuse an authenticated developer CLI, or compose the engine in Node.js. Every transport feeds the same strict integer parser, with scoring determined by the selected bank.
Probe OpenAI directly.
The refreshed GPT references come directly from OpenAI, including gpt-6.1-terra. Use Responses or Chat Completions; other OpenAI-compatible endpoints are supported too.
Match the bank’s English prompt, 512-sample budget, and unset temperature. CLI probes stream, while references were collected without streaming. Default-bank probes through OpenRouter now compare against GPT references from OpenAI; that transfer has not been evaluated. Enrollment does not guarantee identification: Terra’s five stored calibration replays were all INCONCLUSIVE.
export LOGITPING_API_KEY='your-openai-key'
npx logitping \
--endpoint https://api.openai.com/v1 \
--model gpt-6.1-terra \
--api-format responses \
--max-tokens 8192Cross-transport comparison is opt-in: use --allow-transport-mismatch in the CLI or allowTransportMismatch: true with fingerprint(). A reference match returns HEURISTIC_MATCH with null confidence, requires the full sample budget, and disables early stopping. Language, sample count, and temperature must still match; reference weights and distances do not establish cross-transport identity accuracy. Read the transport limitations.
Measured references. Visible boundaries.
The playground’s default bank contains 16 enrolled models. v0.4.0 adds gpt-6.1-terraand refreshes all eight GPT references directly from OpenAI on November 6, 2026. The six Claude references from OpenRouter on October 3 and the two Gemini references from Google AI Studio on October 21 are unchanged. The separate pooled bank now covers 14 models and does not include Gemini. All collection dates are UTC.
- Protocol
- integer-v1 · English
- Transport
- API · 512 integers
- Held-out calibration runs
- 80 across all models
- Sequential early stopping
- Not yet validated · disabled
Calibration envelopes
Calibration envelopes
Scroll to compare all metrics
| Enrolled model | Collected via | Hellinger ≤ | Mahalanobis ≤ | Status |
|---|---|---|---|---|
| gpt-6.1-sol2026-11-06 | OpenAI API | 0.1372 | 50.34 | calibrated |
| gpt-6.1-terra2026-11-06 | OpenAI API | 0.1438 | 51.85 | calibrated |
| gpt-6-sol2026-11-06 | OpenAI API | 0.1519 | 51.65 | calibrated |
| gpt-6-luna2026-11-06 | OpenAI API | 0.1701 | 53.20 | calibrated |
| gpt-6-astra2026-11-06 | OpenAI API | 0.1395 | 51.22 | calibrated |
| gpt-5.6-luna2026-11-06 | OpenAI API | 0.1460 | 51.20 | calibrated |
| gpt-5.6-terra2026-11-06 | OpenAI API | 0.1594 | 51.97 | calibrated |
| gpt-5.6-sol2026-11-06 | OpenAI API | 0.1415 | 53.05 | calibrated |
| claude-sonnet-5.52026-10-03 | OpenRouter API | 0.1566 | 54.33 | calibrated |
| claude-opus-5.52026-10-03 | OpenRouter API | 0.1362 | 52.01 | calibrated |
| claude-fable-5.12026-10-03 | OpenRouter API | 0.1702 | 61.28 | calibrated |
| claude-opus-52026-10-03 | OpenRouter API | 0.1507 | 54.58 | calibrated |
| claude-sonnet-52026-10-03 | OpenRouter API | 0.2565 | 59.40 | calibrated |
| claude-fable-52026-10-03 | OpenRouter API | 0.1460 | 49.46 | calibrated |
| gemini-3.8-flash2026-10-21 | Google AI Studio | 0.1427 | 50.30 | calibrated |
| gemini-4-argon2026-10-21 | Google AI Studio | 0.1706 | 59.49 | calibrated |
These thresholds are empirical envelopes fitted from held-out runs with a 10% margin. They do not certify coverage or identification accuracy, and genuine responses can still fall outside them. Labels name requested catalog routes; they are not independent model attestation. A short reply remains inconclusive, even when it reaches a calibrated checkpoint. GPT references now come directly from OpenAI; default-bank probes through OpenRouter against these refreshed references have not been evaluated.
All five stored calibration runs for each of gpt-6.1-sol, gpt-6.1-terra, gpt-6-astra, and gpt-5.6-sol were INCONCLUSIVE in the full bank. These replays reused threshold-fitting data; adding a reference does not establish reliable identification.
Gemini coverage, with limits
At 512 integers, gemini-3.8-flash and gemini-4-argon are hard to distinguish. All ten stored calibration runs remain INCONCLUSIVE with both models enrolled. These runs also fitted the thresholds, so this is a replay diagnostic, not independent accuracy evidence.
Argon was collected with a 32,768-token output budget, including reasoning. Even then, 10 of 25 completed requests were cut off before 512 integers and sent again. Its reference describes only replies that finished within that budget; short probes remain inconclusive.
Read the bank evaluationRun your own probe.
Use Node.js 22 or later. Run the published package with npx, or install the CLI globally. Collect a run and build a bank for your environment.
View the npm packagev0.4.0 adds direct OpenAI bank collection and gpt-6.1-terra to both banks. GPT references are refreshed, pooled evaluation limits are revised, and Antigravity backend refusals now report their status and code instead of a misleading tool-action error.
Maintainer tooling needs Node.js 22.19 or later; the published CLI and library still require Node.js 22+. For direct OpenAI collection, set provider: "openai" in the updater configuration and OPENAI_API_KEY in the environment. The checked-in bank configurations now require that key for GPT models; provenance records cache=none.
# Run without a global installation
npx logitping --help
npx logitping --driver codex
# Or install the CLI globally
npm install -g logitping
logitping --driver codexBoth logitping and lping run the same CLI. The Codex example requires Codex CLI to be installed and authenticated. To create your own reference bank, collect independent training and held-out runs under a matching protocol.
Read the enrollment guide