Konvertor OpenAI ⇄ Anthropic
Konvertuj pole messages mezi OpenAI Chat Completions a Anthropic Messages API. Řeší system zprávy, tool cally, image bloky, multi-turn. V prohlížeči, žádné API klíče.
K čemu to slouží?
Chat Completions API od OpenAI a Messages API od Anthropicu obě umožňují multi-turn konverzace, ale formují JSON dostatečně odlišně, aby prompty a tool-call trace nepasovaly čistě při přechodu mezi providery. Rozdíly jsou malé (umístění system zprávy, tool-call vs tool-use, tvar bloků obrázků, role: 'tool' vs tool_result v content) ale každý je 10-minutová králičí nora, když máš deadline. Tenhle konvertor dělá překlad: vlož OpenAI konverzaci a dostaneš Anthropic verzi (nebo naopak).
Co se překládá
- System zprávy. OpenAI: běžná zpráva s
role: "system". Anthropic: top-level polesystemna requestu. Přesouváme a konkatenujeme, pokud jich je víc. - Tool-cally (strana assistanta). OpenAI:
tool_calls: [{id, type:'function', function:{name, arguments:'JSON-string'}}]. Anthropic: bloktool_useuvnitřcontents{id, name, input}(sparsovaný objekt, ne string). Parsujeme escapované argumenty OpenAI do strukturovanéhoinputpro Anthropic; opačný směr reserializuje. - Tool výsledky. OpenAI: samostatná zpráva s
role: "tool",tool_call_id,content. Anthropic: bloktool_resultv content následující user zprávy stool_use_id. Po sobě jdoucí OpenAItoolzprávy se slučují do jedné Anthropic user zprávy s vícetool_resultbloky. - Obrázky. OpenAI:
{type:'image_url', image_url:{url}}. Anthropic:{type:'image', source:{type:'base64',media_type,data}}nebo URL-source. Detekujemedata:URL a konvertujeme; čisté URL procházejí jako URL-source. - Čistý text. OpenAI používá string; Anthropic akceptuje string i jednoprvkové pole
[{type:'text', text}]. Používáme jednodušší formu.
Co se nepřekládá
- Streamingové eventy. Řešíme JSON request/response, ne SSE streamy. U dumpu streamu nejprve zrekonstruuj finální zprávu.
- Provider-specifická pole.
logprobsOpenAI,stop_sequencesAnthropicu, sampling parametry — žijí na top-level requestu, ne v messages. - Cache-control hinty.
cache_control: {type:'ephemeral'}Anthropicu nemá OpenAI ekvivalent. Přežívá OpenAI → Anthropic (žádný zdroj), ale je odhozeno při Anthropic → OpenAI. - Definice toolů. Schéma tvých toolů (pole
toolsna requestu) žije mimo pole messages. Formát různý mezi providery — konvertuj samostatně.
Časté pasti
- Escapování argumentů OpenAI.
argumentsOpenAI je JSON-encoded string, ne sparsovaný objekt. Pokud je rozbitý (zřídka, stává se u malých modelů), místo házení chyby ho ukládáme do_rawv Anthropicinput. - Anthropic top-level system. Při OpenAI → Anthropic je výsledek
{system, messages}. Pokud chceš jen pole, použij.messages— ale nezapomeň přidatsystemk API requestu samostatně. - Striktní alternace. Anthropic vyžaduje striktní alternaci user/assistant (po volitelném system). Konvertor to obvykle zachová; pokud má tvůj OpenAI zdroj dvě user zprávy po sobě, Anthropic výstup taky — a API to odmítne. Nejprve je sluč.
- Multi-modal v OpenAI. OpenAI user zpráva s obrázky používá content array místo stringu. Řešíme to; jen zajisti, že tvůj vstup parsuje jako JSON.
- Soukromí. Nic neopustí stránku. Konverze v čistém JS; žádné API klíče, žádná síťová volání.