Skip to content

Conversation Format Converter

Move a transcript between OpenAI messages, Anthropic messages, ShareGPT, JSONL, a plain transcript and Alpaca, in any direction.

Turns converted
5

Converted back from the output and compared: every turn survived unchanged.

system / user / assistant / tool
1 / 2 / 2 / 0
Characters of message text
343
Estimated tokens of message text
≈ 86
Output characters
637
Format overhead vs the text itself
294 chars
What this assumes: a conversation is a list of turns, each with one role and one string of text. That is what all six formats agree on and it is all this tool carries: images, audio and tool-call arguments are named in the list above rather than moved, because moving them means answering questions (which media type? which tool_use id?) that a transcript converter cannot answer. Token figures are characters ÷ 4 and are estimates. Everything on this page runs in your browser. Nothing you paste is uploaded, logged or sent anywhere.

Six formats, all describing the same thing, none of them quite compatible. It is the tax you pay for using more than one training library: a dataset scraped in ShareGPT shape will not load into a fine-tuning job that wants JSONL of OpenAI message lists, an evaluation harness wants a plain transcript, and the Alpaca corpus everyone starts from is single-turn in a world that is not.

Why the round trip is the headline

Any converter can produce output that looks right. The question is what it quietly changed, and the only honest way to answer it is to convert the output back with the same rules and compare. That is what the top line reports. When it says every turn survived, the two formats really are interchangeable for your conversation. When it lists differences, you are looking at a genuine limit — most often Alpaca, which has one instruction and one output and therefore cannot hold a five-turn exchange no matter how the fields are stretched.

The joins that cannot be undone

Two conversions lose information in a way that survives a naive eyeball check. Several system turns become one system string for Anthropic, and the blank line between them is not a boundary you can recover. Alpaca's instruction and input become one user turn for the same reason. Both are reported every time they happen, because a dataset built on a conversion that lost the split is a dataset that trains on subtly wrong prompts — and that is the kind of error that shows up only as a model that is mysteriously worse than the last one.

What it deliberately does not do

It does not carry tool calls. A tool call is a request-shaped object with an id, a name and JSON arguments, and its counterpart is a result that has to point back at that id; converting those is a different job with different failure modes, and it has its own tool. It also converts one conversation at a time, and says how many records in your file it left alone rather than silently taking the first.

Conversation Format Converter · Multigrid