Your files stay on your device

Fine-tuning JSONL formatter and validator

Paste training data, validate it against the target's schema, and format it to one clean record per line. Every deviation named, nothing uploaded.

Target preset
Shape per OpenAI's fine-tuning documentation for chat-format training data.
JSONL input
Result

Paste data or open a file, then press Validate & format.

Seeded train / validation split

Format and validate the data first: the split runs on the valid lines.

deterministic. The same seed and input give the same split, forever
Rules, stated before you run
  • openai-chat: each line one object with a non-empty "messages" array; roles limited to system, developer, user, assistant, tool; content a string or an array of text parts; optional numeric weight.
  • openai-completions: each line one object with string (or string-array) "prompt" and "completion"; optional "suffix" and weight.
  • Duplicate keys keep JSON.parse semantics, last value wins. And the loss ledger says so. Number spellings normalize (1.0 → 1) and that is reported too, with counts and the first line it happened on.
  • Unknown top-level keys are preserved verbatim, named in the ledger: the formatter never drops your data, and never invents fields a target expects.
Samples
  • Two valid records; one with a training weight.

  • Line 2 has an unknown role; line 3 is not JSON; both are named, not dropped silently.

  • Prompt/completion pairs: the legacy fine-tuning shape.

  • A pretty JSON array becomes one record per line; the wrapper removal is reported.

Paste, drop, or type to begin. Everything stays on this device.