LLM request converter
Convert a whole LLM request between OpenAI Chat, Responses, Anthropic Messages and Gemini — tools, images, JSON schemas — and see what does not carry over.
What it does
Paste a whole request body and choose the format to write it in. The converter reads it in OpenAI Chat Completions, OpenAI Responses, Anthropic Messages or Gemini generateContent form, and writes the same request in another of the four, side by side. Messages, system prompt, tool definitions and calls and their results, images, a JSON schema for the answer and the sampling parameters all carry over.
Every change is listed with the output:
- No equivalent (a warning): a field the target has no place for, which is left out. For example,
seedin Anthropic Messages, or a schema'snamein Gemini. - Carried in a different form (a note): the same meaning, written the target's way. For example, a
data:URL image becomes a base64 source, and Chat's tool messages becometool_resultblocks. - Required and missing (an error): something the target needs and the source did not have. For example, a Gemini request converted to Messages has no
modelin the body, so there is nothing to put in it.
Everything runs in your browser. The request is never sent anywhere.
Try it: Chat Completions to Messages, with tools, an image and a schema, or Messages to Gemini.
Salyro as the target
Salyro takes requests in OpenAI's own forms, Chat Completions and Responses. So a request already in one of them needs no conversion: only its model becomes a Salyro model id, such as openai/gpt-4o-mini for gpt-4o-mini. When that is all that changes, the converter keeps your request exactly as written and says so. See an OpenAI request sent to Salyro.
When something does differ, the same writer that knows Salyro's form reports it. For example, Salyro's Chat Completions has no developer role, so the message is sent as system. Salyro also refuses fields it does not name, seed among them, rather than ignore them. An Anthropic or Gemini request is written as Chat Completions for Salyro, with the Salyro id of the same model: see an Anthropic request sent to Salyro.
Migrating from OpenAI walks through the other two changes, the base URL and the key.
Sharing
A share link holds the request after the # of the address. Your browser never sends that part to a server, but anyone you give the link to can read it, so Share warns before including it. A request body holds no API key: that travels in a header, which this tool never sees.
What it does not know
- It converts one request, not the conversation's state on a server. A Responses request that continues an earlier one (
previous_response_id) cannot be converted to a format that has no such thing. - It does not check whether the target model accepts the result. The LLM request linter does that.
- Gemini's function response is an object, and Chat's tool result is text. A result converted from Gemini keeps its object, written as JSON text.
- It does not translate SDK code or send the request.
Sources
The four formats are the provider-format core's, read from each provider's API reference. The parameter mapping shows, setting by setting, what this converter writes. Salyro model ids come from Salyro's model catalogue.
Where the numbers come from
- Model and pricing data is a snapshot of the catalogue Salyro itself uses, taken when this site was built.
