Konverter OpenAI ⇄ Anthropic
Konversi array messages antara OpenAI Chat Completions dan Anthropic Messages API. Menangani system messages, tool calls, blok gambar, multi-turn. Di browser, tanpa API keys.
Buat apa ini?
API Chat Completions OpenAI dan Messages API Anthropic sama-sama membiarkanmu mengirim percakapan multi-turn, tapi membentuk JSON cukup berbeda sehingga prompt dan trace tool-call tidak masuk dengan rapi saat kamu ganti provider. Perbedaannya kecil (penempatan system message, tool-call vs tool-use, bentuk blok gambar, role: 'tool' vs tool_result di content) tapi setiap satunya adalah lubang kelinci 10 menit saat kamu di bawah deadline. Konverter ini menangani terjemahannya: tempel percakapan OpenAI dan dapatkan versi Anthropic kembali (atau sebaliknya).
Apa yang diterjemahkan
- System messages. OpenAI: pesan biasa dengan
role: "system". Anthropic: fieldsystemtop-level di request. Kami pindahkan dan gabungkan kalau ada beberapa. - Tool-call (sisi assistant). OpenAI:
tool_calls: [{id, type:'function', function:{name, arguments:'JSON-string'}}]. Anthropic: bloktool_usedi dalamcontentdengan{id, name, input}(objek di-parse, bukan string). Kami parse arguments yang di-escape dari OpenAI keinputterstruktur yang Anthropic harapkan; arah sebaliknya men-stringify lagi. - Tool results. OpenAI: pesan terpisah dengan
role: "tool",tool_call_id,content. Anthropic: bloktool_resultdi dalam content pesan user berikutnya dengantool_use_id. PesantoolOpenAI berurutan digabung jadi satu user Anthropic dengan beberapatool_result. - Gambar. OpenAI:
{type:'image_url', image_url:{url}}. Anthropic:{type:'image', source:{type:'base64',media_type,data}}atau URL-source. Kami deteksi URLdata:dan konversi; URL biasa lewat sebagai URL-source. - Teks polos. OpenAI pakai string; Anthropic terima string atau array satu elemen
[{type:'text', text}]. Kami pakai yang lebih sederhana.
Apa yang tidak diterjemahkan
- Event streaming. Kami menangani JSON request/response, bukan stream SSE. Kalau punya dump stream, rekonstruksi pesan final dulu.
- Field spesifik provider.
logprobsOpenAI,stop_sequencesAnthropic, parameter sampling — tinggal di top-level request, bukan di messages. - Hint cache-control.
cache_control: {type:'ephemeral'}Anthropic tidak ada padanan OpenAI. Selamat di OpenAI → Anthropic (tidak ada sumber), tapi dibuang di Anthropic → OpenAI. - Definisi tool. Schema tool-mu (field
toolsdi request) tinggal di luar array messages. Format beda antar provider — konversi terpisah.
Jebakan umum
- Escaping arguments OpenAI.
argumentsOpenAI adalah string JSON-encoded, bukan objek di-parse. Kalau rusak (jarang, terjadi dengan model kecil), kami taruh di_rawdiinputAnthropic alih-alih melempar error. - System top-level Anthropic. Di OpenAI → Anthropic hasilnya
{system, messages}. Kalau cuma mau array, pakai.messages— tapi ingat lampirkansystemke request API secara terpisah. - Alternasi ketat. Anthropic mengharuskan alternasi user/assistant yang ketat (setelah system opsional). Konverter umumnya menjaganya; kalau sumber OpenAI-mu punya dua user berturut-turut, output Anthropic juga — dan API akan menolak. Merge dulu.
- Multi-modal di OpenAI. Pesan user OpenAI dengan gambar pakai content array alih-alih string. Kami tangani; pastikan saja input-mu parse sebagai JSON.
- Privasi. Tidak ada yang keluar dari halaman. Konversi JS murni; tanpa API key, tanpa panggilan network.