Konvertor OpenAI ⇄ Anthropic
Konvertuj polia messages medzi OpenAI Chat Completions a Anthropic Messages API. Rieši system správy, tool cally, image bloky, multi-turn. V prehliadači, žiadne API kľúče.
Načo to slúži?
Chat Completions API od OpenAI a Messages API od Anthropicu obe umožňujú multi-turn konverzácie, ale formujú JSON dostatočne odlišne, aby prompty a tool-call trace nepasovali čisto pri prechode medzi providermi. Rozdiely sú malé (umiestnenie system správy, tool-call vs tool-use, tvar blokov obrázkov, role: 'tool' vs tool_result v content) ale každý je 10-minútová králičia diera, keď máš deadline. Tento konvertor robí preklad: vlož OpenAI konverzáciu a dostaneš Anthropic verziu (alebo naopak).
Čo sa prekladá
- System správy. OpenAI: bežná správa s
role: "system". Anthropic: top-level polesystemna requeste. Presúvame a konkatenujeme ak ich je viac. - Tool-cally (strana assistanta). OpenAI:
tool_calls: [{id, type:'function', function:{name, arguments:'JSON-string'}}]. Anthropic: bloktool_usevnútricontents{id, name, input}(sparsovaný objekt, nie string). Parsujeme escapované argumenty OpenAI do štruktúrovanéhoinputpre Anthropic; opačný smer reserializuje. - Tool výsledky. OpenAI: samostatná správa s
role: "tool",tool_call_id,content. Anthropic: bloktool_resultv content nasledujúcej user správy stool_use_id. Po sebe idúce OpenAItoolsprávy sa zlučujú do jednej Anthropic user správy s viacerýmitool_resultblokmi. - Obrázky. OpenAI:
{type:'image_url', image_url:{url}}. Anthropic:{type:'image', source:{type:'base64',media_type,data}}alebo URL-source. Detegujemedata:URL a konvertujeme; čisté URL prechádzajú ako URL-source. - Čistý text. OpenAI používa string; Anthropic akceptuje string aj jednoprvkové pole
[{type:'text', text}]. Používame jednoduchšiu formu.
Čo sa neprekladá
- Streamingové eventy. Riešime JSON request/response, nie SSE streamy. Pri dumpe streamu najprv zrekonštruuj finálnu správu.
- Provider-špecifické polia.
logprobsOpenAI,stop_sequencesAnthropicu, sampling parametre — žijú na top-level requestu, nie v messages. - Cache-control hinty.
cache_control: {type:'ephemeral'}Anthropicu nemá OpenAI ekvivalent. Prežíva OpenAI → Anthropic (žiadny zdroj), ale je odhodené pri Anthropic → OpenAI. - Definície toolov. Schéma tvojich toolov (pole
toolsna requeste) žije mimo poľa messages. Formát rôzny medzi providermi — konvertuj samostatne.
Časté pasce
- Escapovanie argumentov OpenAI.
argumentsOpenAI je JSON-encoded string, nie sparsovaný objekt. Ak je pokazený (zriedka, stáva sa pri malých modeloch), namiesto hodenia chyby ho ukladáme do_rawv Anthropicinput. - Anthropic top-level system. Pri OpenAI → Anthropic je výsledok
{system, messages}. Ak chceš len pole, použi.messages— ale pamätaj pridaťsystemk API requestu samostatne. - Striktná alternácia. Anthropic vyžaduje striktnú alternáciu user/assistant (po voliteľnom system). Konvertor to zvyčajne zachová; ak má tvoj OpenAI zdroj dve user správy za sebou, Anthropic výstup tiež — a API to odmietne. Najprv ich zlúč.
- Multi-modal v OpenAI. OpenAI user správa s obrázkami používa content array namiesto stringu. Riešime to; len zabezpeč, že tvoj vstup sa parsuje ako JSON.
- Súkromie. Nič neopustí stránku. Konverzia v čistom JS; žiadne API kľúče, žiadne sieťové volania.