Skip to content
Salyro
Tool

Conversation timeline viewer

See a long conversation as a timeline — roles, tool calls joined to their results, images, thinking, linter findings and a running token count.

What it does

Paste a request body — or just its list of messages — in OpenAI Chat Completions, OpenAI Responses, Anthropic Messages or Gemini format. The viewer lays it out as a vertical timeline, one entry per message:

  • The role of every message, written out and coloured: system, developer, user, assistant or tool.
  • Tool calls joined to their results. A line runs from each call to the result that answers it, and every call and result carries a link to the other half. On a phone the lines are left out and the links remain.
  • Images, named but never loaded. An image sent by URL is shown as its address; an inline image as its type and size. The viewer never fetches or displays an image.
  • Thinking blocks, and whether each one carries its signature.
  • The Conversation Linter's findings, on the message they are about, each linked to the rule it breaks.
  • A running token count beside every message.

Long messages are folded to their opening lines; unfold any of them to read it whole. Everything runs in your browser, and nothing you paste is sent anywhere.

Long conversations, and finding text in them

A conversation of up to 149 messages is drawn whole. From 150 messages on, the page draws only the messages on screen, so a conversation of hundreds of messages scrolls smoothly — and your browser's own Find (Ctrl+F or ⌘F) reaches only the messages on screen. To search all of them, use Find in timeline: it searches every message, folded text included, and Enter goes to the next match, unfolds it and moves the focus there (Shift+Enter goes back).

How it reads a conversation

The conversation is read by the same formats core every format tool on this site uses, so a message holds the same text, calls and results here as it does in the request converter. The format is detected from what the document holds, or you choose it.

A call is joined to its result by id, and only by id. A call without an id — the formats core reads a Gemini call with or without one — is shown as "no id, so not linked" rather than paired with a result by guesswork. A result whose id matches no call in the conversation says so.

A message the formats core cannot read is still shown, as "Not read", with the findings that say why. The timeline never gets shorter than the document.

The findings are the Conversation Linter's own: the same rules, the same sources, and the same rule that no finding is an error unless the provider's documentation states the requirement. Each finding sits on the message its path points to; findings about the request as a whole are listed in the summary.

How it counts tokens

The running total is the conversation's content: the text of every message, and the name and arguments of every call, up to and including that message. It is counted with the tokens layer every tool on this site shares:

  • Exact for the OpenAI models whose tokenizer runs in the browser (o200k_base and cl100k_base), mapped by their exact catalogue id.
  • An estimate for every other model — about four characters per token, which is the rule Salyro's own engine estimates with — and labelled as one.

Choose the model to count with. By default it is the request's own model, when the catalogue has that exact id. Images and thinking are not included, so a running total after one is marked "at least". The summary also shows the whole request's count, which adds the tokens a provider places around each message and for the tool definitions where the provider documents them.

Sharing

A share link holds what you pasted, after the # of the address. Your browser never sends that part to a server, but anyone you give the link to can read it. To share the shape of a conversation without its content, choose Structure only: every text is replaced, and ids and names are renamed consistently, exactly as the Conversation Linter shares one. The timeline of the shared copy has the same entries, links and findings.

What it does not know

  • It does not run the conversation, call a model or call a tool.
  • It pairs calls with results only by id, and only function calls and their results; other call types a provider supports are shown as parts it does not model.
  • Token counts for Anthropic, Google and xAI models are estimates: their tokenizers do not run in the browser.
  • The running total counts content only. The tokens a provider adds around each message are not spread over the messages; the summary's whole-request count includes them only where they are documented.
  • It shows what an image is, not what it contains.

FAQ

Why is a tool call not joined to its result?

Either the call has no id, or no result in the conversation carries its id. The call says which. When the result is there but in the wrong place, the Conversation Linter's finding on that message says where it should be.

Why does the running total say "at least"?

A message before it holds an image, a thinking block or a part the formats core does not model. Those cost tokens this count does not include.

Why does my browser's Find not find a message I know is there?

From 150 messages on, only the messages on screen are drawn. Use Find in timeline, above the timeline: it searches every message.

Does it send my conversation anywhere?

No. It is read, linted and counted in your browser. The only files the page loads are its own code and, for an exact count, the tokenizer's vocabulary from this site.

Sources

The rules and their sources are the Conversation Linter's, recorded as Reference Data with the provider page, the date it was read and the sentence quoted. The exact tokenizers are OpenAI's o200k_base and cl100k_base, held to OpenAI's own tiktoken library; which model uses which is Reference Data too. All of it is listed in the public tools' data freshness report.

Where the numbers come from

  • Model and pricing data is a snapshot of the catalogue Salyro itself uses, taken when this site was built.
  • Facts about models and providers that are not in that catalogue carry their own source and the date they were checked, and are shown as unknown where no reliable source exists.