jsonlkit.com
JSONL (JSON Lines) utilities, in the browser
Say hi →

Train / Eval Leakage Detector

updated 28 July 2026

Find evaluation records that also appear in training. Contaminated eval sets produce scores that look great and mean nothing. Compare on whole records, one field, the first user prompt, or the whole conversation — with case and whitespace normalisation so near-duplicates are caught too.

Compare

Drop the training .jsonl file here, or Up to 1 GB · in your browser
Drop the second .jsonl file here, or

Which comparison mode to use

The normalisation toggles matter more than they look. With Ignore case on and whitespace collapsed, "What is 2+2?" and "what is 2+2? " match — and they should. Turn on Ignore punctuation for prose datasets where the same item was re-typed rather than copied.

What to do when you find leakage

Remove the contaminated records — but think about which side to remove from.

The root cause is almost always duplicates in the source. Deduplicate before splitting and this problem mostly stops happening.

Privacy

Nothing is uploaded. The whole thing runs in this tab, in your own browser. That matters here more than on most tool sites — training data is usually the most sensitive file a team owns.

Frequently asked questions

It reports no leakage but I know there are duplicates.

You are probably comparing too strictly. Whole-record mode needs byte-identical data after canonicalisation; switch to First user prompt or Full conversation text, and turn on Ignore punctuation.

How large a file can it handle?

The comparison builds an index of the training set in memory, so it is fast — hundreds of thousands of records are fine. Very large files are limited by browser memory rather than by the algorithm.

Does it find near-duplicates, like paraphrases?

No. It compares normalised text, not meaning, so a paraphrased question will not match. Semantic deduplication needs embeddings and a similarity threshold, which is not something to do in a browser tab.

Can I compare three sets?

Two at a time. Run train↔val, then train↔test, then val↔test — all three pairs matter, and val↔test overlap is the one people forget.

Related tools