OpenAI ⇄ Anthropic Converter
OpenAI Chat Completions और Anthropic Messages API formats के बीच message arrays convert करें। System messages, tool calls, image content blocks, multi-turn handle करता है। In-browser, कोई API keys नहीं।
यह किसके लिए है?
OpenAI की Chat Completions API और Anthropic की Messages API दोनों आपको multi-turn conversation भेजने देती हैं, लेकिन JSON को इतना अलग shape करती हैं कि provider switch करने पर prompts और tool-call traces cleanly drop in नहीं होते। Differences छोटे हैं (system message placement, tool-call vs tool-use, image block shape, role: 'tool' vs content में tool_result) लेकिन हर एक deadline के नीचे होने पर 10-minute rabbit hole है। यह converter translation handle करता है ताकि आप OpenAI conversation paste करें और Anthropic-shaped version back मिले (या उल्टा)।
क्या translate होता है
- System messages। OpenAI
role: "system"के साथ regular message रखता है। Anthropic इसे top-levelsystemfield के रूप में request पर रखता है। हम move करते हैं और concatenate करते हैं अगर एक से ज़्यादा हों। - Tool calls (assistant side)। OpenAI:
tool_calls: [{id, type:'function', function:{name, arguments:'JSON-string'}}]। Anthropic: assistant केcontentarray के अंदरtool_useblock{id, name, input}के साथ (parsed object, string नहीं)। हम OpenAI के escaped JSON arguments को structuredinputमें parse करते हैं; reverse direction फिर से stringify करता है। - Tool results। OpenAI: separate message
role: "tool",tool_call_id, औरcontentके साथ। Anthropic: next user message के content array के अंदरtool_resultblocktool_use_idके साथ। Consecutive OpenAItoolmessages एक Anthropic user message में coalesce होते हैं जिसमें multipletool_resultblocks होते हैं। - Images। OpenAI:
{type:'image_url', image_url:{url}}। Anthropic:{type:'image', source:{type:'base64',media_type,data}}या URL-source। हमdata:URLs detect करते हैं और convert करते हैं; bare URLs URL-source images के रूप में pass through होते हैं। - Plain text content। OpenAI string use करता है; Anthropic string और one-element
[{type:'text', text}]array दोनों accept करता है। हम जो simpler है वो use करते हैं।
क्या translate नहीं होता
- Streaming events। यह converter request/response JSON handle करता है, SSE event streams नहीं। अगर आपके पास stream dump है, पहले full final message reconstruct करें।
- Provider-specific fields। OpenAI के
logprobs, Anthropic केstop_sequences, sampling parameters — ये request top-level पर रहते हैं, messages के अंदर नहीं। - Cache control hints। Anthropic के
cache_control: {type:'ephemeral'}hints का कोई OpenAI equivalent नहीं है। OpenAI → Anthropic में survive करते हैं (कोई source attach करने को नहीं), लेकिन Anthropic → OpenAI में drop होते हैं। - Tool definitions। आपके tools का schema (request पर
toolsfield) messages array के बाहर रहता है। हर provider का tool-definition shape अलग है — उन्हें अलग से convert करें।
Common gotchas
- OpenAI argument escaping। OpenAI का
argumentsJSON-encoded string है, parsed object नहीं। अगर malformed है (rare, छोटे models के साथ होता है), हम इसे throw करने के बजाय Anthropicinputमें_rawके नीचे डालते हैं। - Anthropic top-level system। OpenAI → Anthropic convert करते समय result
{system, messages}है। अगर आप सिर्फ messages array चाहते हैं,.messagesfield use करें — लेकिन याद रखेंsystemको अपने API request के साथ separately attach करना है। - Strict alternation। Anthropic strict alternation में user/assistant/user/assistant की मांग करता है (optional system के बाद)। Converter generally preserve करता है; अगर आपके OpenAI source में दो consecutive user messages हैं, तो Anthropic output में भी होंगे — और API reject करेगी। पहले merge करें।
- OpenAI में multi-modal। Images के साथ OpenAI user message string के बजाय content array use करता है। हम handle करते हैं; बस make sure करें कि आपका input JSON parse करे।
- Privacy। कुछ भी page से बाहर नहीं जाता। Conversion pure JavaScript है; कोई API keys नहीं, कोई network calls नहीं।