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 codex
Install from npmNode.js 22+ / TypeScript · MIT
Integer preference signaturesBundled references
gpt-6.1-terra
claude-sonnet-5.5
gemini-3.8-flash
gemini-4-argon
1Integer value →355
Same integer protocol. Measured reference distributions.
Five-integer bins · shared probability scale

Follow the fingerprint.

Paste one 512-integer response. Check the default protocol. See what the evidence supports.

Runs in your browser

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

integer-v1
1

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.

2

Inspect the response

Try a sample
Integers 1–355 · whitespace separated · 512 requested

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.

Read the methodology

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.

  1. 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

  2. 02

    Build the fingerprint

    Measure frequencies, four temporal blocks, and ending digits in a smoothed 1,785-dimensional feature space.

    Jeffreys smoothing · α = 0.5

  3. 03

    Compare the evidence

    Accumulate categorical log likelihoods and project square-root feature differences for distance checks.

    Sequential test + Hellinger geometry

  4. 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

FeatureDimensionsWeight
Whole-sequence frequencies3551/3
Four temporal blocks4 × 3551/3
Ending digits101/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.0

The 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, with confidence: null. An unenrolled model from the same vendor can also produce this result.
Several candidates
INCONCLUSIVE. The candidates field 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.

Read the pooled methodology
# 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-interactive

Run 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.

CLI + library

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 8192

Cross-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.

View snapshot metadata

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

Scroll to compare all metrics

Enrolled modelCollected viaHellinger ≤Mahalanobis ≤Status
gpt-6.1-sol2026-11-06OpenAI API0.137250.34calibrated
gpt-6.1-terra2026-11-06OpenAI API0.143851.85calibrated
gpt-6-sol2026-11-06OpenAI API0.151951.65calibrated
gpt-6-luna2026-11-06OpenAI API0.170153.20calibrated
gpt-6-astra2026-11-06OpenAI API0.139551.22calibrated
gpt-5.6-luna2026-11-06OpenAI API0.146051.20calibrated
gpt-5.6-terra2026-11-06OpenAI API0.159451.97calibrated
gpt-5.6-sol2026-11-06OpenAI API0.141553.05calibrated
claude-sonnet-5.52026-10-03OpenRouter API0.156654.33calibrated
claude-opus-5.52026-10-03OpenRouter API0.136252.01calibrated
claude-fable-5.12026-10-03OpenRouter API0.170261.28calibrated
claude-opus-52026-10-03OpenRouter API0.150754.58calibrated
claude-sonnet-52026-10-03OpenRouter API0.256559.40calibrated
claude-fable-52026-10-03OpenRouter API0.146049.46calibrated
gemini-3.8-flash2026-10-21Google AI Studio0.142750.30calibrated
gemini-4-argon2026-10-21Google AI Studio0.170659.49calibrated

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 evaluation

Run 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 package

v0.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.

Read the changelog
# Run without a global installation
npx logitping --help
npx logitping --driver codex

# Or install the CLI globally
npm install -g logitping
logitping --driver codex

Both 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