Taksonomi error LLM gateway adalah pembeda antara insiden yang terkendali dan badai retry yang mahal. Sebuah gateway tidak seharusnya memperlakukan setiap panggilan model yang gagal sebagai jenis error provider yang sama. Kredensial yang tidak valid, kuota yang habis, overload provider, request yang salah format, penolakan safety, timeout, dan cancel dari client semuanya memerlukan jalur pemulihan yang berbeda.
Kesalahan umum adalah mengirim setiap kegagalan ke dalam loop retry dan fallback yang sama. Itu bisa menyembunyikan key yang dicabut, menghabiskan batas belanja, merutekan konten yang tidak aman ke provider lain, atau menggandakan pekerjaan setelah respons streaming sudah mulai. Taksonomi error LLM gateway yang praktis memberi tim engineering, product, dan finance satu bahasa bersama untuk menjelaskan apa yang terjadi dan apa yang harus dilakukan gateway selanjutnya.
Flatkey cocok dengan model operasional ini karena situs publiknya saat ini memposisikan produk sebagai satu permukaan gateway untuk akses model, routing, billing, analitik penggunaan, dan kontrol operasional. Gunakan permukaan bersama itu untuk mengklasifikasikan kegagalan sebelum memilih perilaku retry, antre, fallback, atau fail-closed.
Taksonomi error LLM gateway dalam satu tabel
Mulailah dari kelasnya, bukan hanya status HTTP. Keluarga status yang sama bisa berarti hal yang berbeda di berbagai provider, SDK, dan bentuk endpoint.
| Kelas error | Sinyal umum | Retry? | Fallback? | Tindakan pemilik |
|---|---|---|---|---|
| Auth dan permission | 401, 403, key tidak valid, key dicabut, project salah, IP tidak diotorisasi, permission ditolak |
Tidak ada retry otomatis | Tidak | Rotasi atau perbaiki kredensial, project, allowlist, atau permission |
| Kuota dan rate limit | 429, rate limit, kuota habis, batas spend, batas token/request, RESOURCE_EXHAUSTED |
Terkadang, dengan backoff terbatas atau antrean | Hanya di dalam aturan biaya dan kualitas yang disetujui | Kurangi concurrency, cek penggunaan, tingkatkan limit, atau hentikan spend |
| Provider dan transport | 500, 503, 529, overload, timeout, connection reset, error koneksi SDK |
Terkadang, jika idempotent dan masih dalam deadline | Terkadang, sebelum output parsial dan dalam kontrak | Cek status provider, kesehatan routing, anggaran timeout, dan amplifikasi retry |
| Request dan validasi | 400, 422, JSON salah format, model tidak valid, parameter tidak didukung, context terlalu panjang |
Tidak, kecuali request diubah | Jarang | Perbaiki schema, ukuran prompt, bentuk endpoint, atau kapabilitas model |
| Safety dan policy | refusal, block moderation, prompt block, finishReason: SAFETY, error content policy |
Tidak ada retry otomatis | Tidak ada fallback untuk bypass | Tampilkan pesan aman kepada user, log konteks safety, minta input revisi bila sesuai |
| Cancel client dan deadline | abort user, timeout client, deadline server, stream terputus | Jangan blind retry | Hanya jika belum ada output atau efek samping yang dikomit | Hentikan pekerjaan, tandai pembatalan, pertahankan state output parsial |
Taksonomi error LLM gateway ini sengaja berorientasi pada tindakan. Ini bukan hanya memberi label error untuk dashboard. Ini memutuskan kapan sistem boleh menghabiskan lebih banyak token, kapan harus meminta pemilik untuk memperbaiki state, dan kapan harus berhenti.
Klasifikasikan sebelum melakukan retry
Dokumentasi resmi provider mendukung pemisahan kelas-kelas ini. Panduan error OpenAI membedakan autentikasi tidak valid, API key yang salah, kegagalan allowlist IP, rate limit, kuota atau billing yang habis, error server, overload, error koneksi SDK, timeout SDK, request yang salah format, penolakan permission, dan pengecualian rate-limit. Panduan rate limit-nya merekomendasikan exponential backoff acak tetapi juga mencatat bahwa request yang gagal tetap dihitung terhadap batas per menit.
Dokumentasi error Anthropic memisahkan invalid_request_error, authentication_error, permission_error, not_found_error, request_too_large, rate_limit_error, api_error, dan overloaded_error. Anthropic juga mendokumentasikan rate limit 429 dengan panduan retry-after, dan panduan stop-reason mereka mencantumkan refusal sebagai kondisi berhenti di level model.
Troubleshooting Gemini memetakan kegagalan autentikasi dan permission secara terpisah dari 429 RESOURCE_EXHAUSTED, error internal 500, dan ketidaktersediaan 503. Dokumentasi rate limit Gemini menjelaskan dimensi request, token, request harian, dan spend. Pengaturan safety Gemini juga menampilkan prompt block, finishReason kandidat, dan safetyRatings, termasuk finishReason SAFETY saat konten respons diblokir.
Bukti itu mengarah pada aturan sederhana: taksonomi error LLM gateway harus menormalisasi sinyal spesifik provider menjadi field keputusan sebelum gateway memilih tindakan.
Kegagalan Auth dan permission
Kegagalan auth dan permission harus segera dihentikan. Mencoba ulang key yang salah atau project yang dilarang biasanya hanya menambah noise tanpa mengubah hasil.
Normalisasikan sinyal-sinyal ini ke dalam kelas auth:
| Sinyal | Makna yang mungkin | Perilaku gateway |
|---|---|---|
401 authentication tidak valid |
Key salah, kedaluwarsa, dicabut, formatnya salah, atau berasal dari project yang salah | Jangan retry; beri peringatan kepada pemilik key |
401 isu keanggotaan organisasi atau project |
Pemanggil tidak berada di organisasi atau project yang diperlukan | Jangan retry; arahkan ke pemilik akun |
401 atau 403 IP allowlist atau masalah permission |
Request berasal dari jaringan yang salah atau tidak memiliki akses endpoint | Jangan retry; tampilkan bukti permission |
Provider authentication_error atau permission_error |
Auth atau penolakan akses spesifik provider | Jangan fallback; perbaiki kredensial atau grant |
Dalam gateway, error auth harus mencakup owner_key, credential_id, project_id, provider, endpoint_family, requested_model, dan route_id. Hindari mencatat secret mentah. Insiden harus menjawab key mana yang gagal, route mana yang mencoba memanggil, dan siapa yang bisa memperbaikinya.
Fallback biasanya salah untuk kegagalan auth. Jika sebuah tim belum menyetujui satu provider, berpindah diam-diam ke provider lain dapat melewati procurement, batas data, atau kebijakan model. Respons yang terkendali adalah kegagalan yang jelas, peringatan ke pemilik, dan jalur perbaikan.
Kegagalan kuota dan rate-limit
Kegagalan kuota dan rate-limit adalah kelas yang paling sering dirugikan oleh logika retry yang samar. Sebuah 429 bisa berarti burst pacing, limit request-per-minute, limit token-per-minute, limit request harian, habisnya anggaran bulanan, habisnya kredit prabayar, atau limit berbasis spend. Kasus-kasus tersebut tidak memiliki satu jalur pemulihan yang sama.
Gunakan taksonomi error LLM gateway ini untuk keputusan kuota:
| Sinyal kuota | Jalur retry | Jalur antre | Jalur berhenti |
|---|---|---|---|
429 dengan Retry-After |
Patuhi header jika sesuai dengan deadline alur kerja | Antrekan job non-interaktif sampai waktu retry | Hentikan jika waktu tunggu melebihi deadline |
| 429 tanpa petunjuk waktu tunggu | Gunakan backoff jitter yang dibatasi untuk budget percobaan kecil | Kurangi concurrency untuk owner, route, atau endpoint family | Hentikan jika percobaan berulang meningkatkan penggunaan per menit |
| Dimensi limit token | Kurangi prompt, output, ukuran batch, atau concurrency | Antrekan job besar dan jalankan ulang dengan batch yang lebih kecil | Hentikan jika request tidak bisa muat ke model atau kontrak konteks |
| Habisnya spend atau kredit | Jangan retry otomatis | Antre hanya jika pemilik finance telah menyetujui isi ulang atau kenaikan anggaran | Fail closed dan pertahankan bukti biaya |
| Kuota harian/project habis | Jangan retry loop pendek | Tunda job batch sampai reset hanya jika diizinkan | Fail closed untuk request yang menghadap pengguna |
Kuncinya adalah membedakan pacing sementara dari anggaran yang habis. Backoff membantu ketika provider meminta Anda memperlambat. Backoff tidak membantu ketika akun tidak memiliki kredit atau job tidak bisa muat ke budget token yang tersedia.
Pasangkan bagian ini dengan strategi retry AI API Flatkey ketika Anda membutuhkan checklist retry yang lebih mendalam. Buat percobaan retry tetap terlihat di log agar finance dan operations dapat melihat token spend duplikat.
Kegagalan provider dan transport
Kegagalan provider dan transport berbeda dari kegagalan kuota. Artinya request mungkin valid, key mungkin valid, dan budget mungkin tersedia, tetapi route tidak dapat menyelesaikan panggilan.
Sinyal umum meliputi:
| Sinyal | Makna | Keputusan gateway |
|---|---|---|
500 atau provider api_error |
Error internal di sisi provider | Retry sebentar jika idempotent; periksa status jika berulang |
503 unavailable atau overloaded |
Kondisi kapasitas, maintenance, atau outage provider | Backoff atau fallback sebelum output parsial |
Anthropic overloaded_error atau HTTP 529 |
Overload spesifik provider | Anggap sebagai kapasitas provider, bukan kuota pelanggan |
| SDK connection error | Jalur network, proxy, TLS, DNS, atau firewall gagal | Retry hanya ketika jalur transport kemungkinan bersifat sementara |
| SDK timeout | Request melampaui budget timeout | Retry hanya jika deadline alur kerja dan idempotency mengizinkannya |
| Streaming disconnect | Output parsial mungkin sudah ada | Lanjutkan hanya dengan kebijakan stream yang eksplisit |
Provider fallback bisa berguna di sini, tetapi memerlukan kontrak. Route fallback harus mempertahankan bentuk endpoint, tools, kebutuhan output terstruktur, context window, batas data, persetujuan model, dan batas biaya. Jika streaming sudah menghasilkan token yang terlihat, perilaku yang lebih aman sering kali adalah berhenti dan menampilkan kegagalan yang terkendali alih-alih menyambung output dari route lain.
Gunakan keandalan API AI streaming untuk pemulihan yang spesifik untuk streaming, dan gunakan evaluasi fallback model sebelum mengubah error provider menjadi perubahan rute otomatis.
Request and validation failures
Kegagalan request dan validasi biasanya bukan insiden provider. Ini berarti pemanggil mengirim sesuatu yang tidak dapat diproses oleh endpoint.
Contohnya meliputi field wajib yang hilang, JSON yang tidak valid, parameter yang tidak didukung, keluarga endpoint yang salah, ID model tidak valid, konteks terlalu panjang, skema tool yang tidak didukung, modality yang tidak kompatibel, atau input file/gambar/video yang tidak memenuhi kontrak endpoint.
Gateway harus mencatat field berikut:
| Field | Mengapa penting |
|---|---|
endpoint_family |
Membedakan bentuk OpenAI-compatible chat, responses, messages, Gemini, image, dan video |
requested_model |
Mengidentifikasi nama model yang tidak valid atau tidak didukung |
request_schema_version |
Menunjukkan apakah client dan gateway tidak sepakat |
parameter_name |
Menunjukkan field yang bermasalah kepada engineer |
input_token_estimate |
Membedakan input yang salah format dari kelebihan konteks |
client_sdk dan sdk_version |
Menemukan masalah migrasi dan kompatibilitas |
Jangan lakukan retry untuk kegagalan validasi yang tidak berubah. Ubah request menjadi bentuk yang valid atau kembalikan error yang dapat dibaca developer yang menyebutkan field yang perlu diperbaiki. Saat gateway mendukung beberapa keluarga endpoint, error validasi menjadi sangat penting karena sebuah request bisa valid untuk satu provider tetapi tidak valid untuk provider lain.
Safety and policy failures
Kegagalan safety dan policy perlu kelas sendiri karena retry dan fallback bisa secara tidak sengaja melemahkan guardrail. Penolakan safety bukan berarti downtime provider. Blok moderasi bukan berarti kuota habis. Output yang diblokir bukan alasan untuk terus melakukan sampling sampai gateway menemukan rute yang mengeluarkan konten terlarang.
Normalisasikan sinyal-sinyal ini ke dalam kelas safety:
| Signal | Bukti bergaya provider | Perilaku gateway |
|---|---|---|
| Model refusal | Structured outputs OpenAI mengekspos refusal; alasan penghentian Anthropic mencakup refusal |
Tampilkan respons yang aman dan jangan melewatinya dengan fallback |
| Moderation block | Dokumentasi safety OpenAI merekomendasikan moderasi; error gambar dapat mengekspos moderation_blocked |
Catat konteks kategori aman dan minta input yang direvisi bila sesuai |
| Prompt block | Pengaturan safety Gemini mengekspos promptFeedback.blockReason |
Kembalikan pesan yang terkontrol sebelum mengirim pekerjaan downstream |
| Output block | Gemini dapat mengembalikan finishReason: SAFETY dan safety ratings; konten yang diblokir tidak dikembalikan |
Jangan retry secara buta; catat bahwa output diblokir |
| Policy or compliance rule | Kebijakan khusus aplikasi, pengadaan, batas data, usia, atau aturan workflow teregulasi | Gagal tertutup atau arahkan ke review manusia |
Aturan praktisnya sederhana: taksonomi error LLM gateway tidak boleh memperlakukan safety sebagai outage provider yang bisa dipulihkan. Fallback mungkin dapat diterima hanya ketika rute fallback mempertahankan kebijakan safety yang sama atau lebih ketat dan tujuannya adalah menyelesaikan versi aman dari tugas, bukan untuk melewati blok.
The normalized error record
Taksonomi error LLM gateway yang berguna mengubah kegagalan spesifik provider menjadi satu record yang tahan lama.
| Bidang yang dinormalisasi | Contoh nilai | Penggunaan |
|---|---|---|
error_class |
auth, quota, provider, request, safety, cancelled |
Menggerakkan pengelompokan runbook dan dashboard |
http_status |
401, 403, 429, 500, 503, 529 |
Mempertahankan sinyal protokol |
provider_error_type |
rate_limit_error, overloaded_error, RESOURCE_EXHAUSTED, moderation_blocked |
Mempertahankan makna khusus provider |
provider_error_code |
insufficient_quota, invalid_api_key, SAFETY |
Mendukung percabangan yang tepat |
retry_after_ms |
Delay yang berasal dari header atau null | Mencegah perkiraan waktu retry |
retryable |
true atau false |
Memisahkan kebijakan kode dari wording UI |
fallback_allowed |
true atau false |
Menegakkan kontrak rute |
fail_closed_reason |
quota_exhausted, safety_block, contract_mismatch |
Menjelaskan mengapa gateway berhenti |
requested_model dan served_model |
ID model atau alias | Menunjukkan apakah routing mengubah perilaku |
endpoint_family |
openai, anthropic, gemini, image-generation |
Membuat isu migrasi terlihat |
partial_output_committed |
true atau false |
Mencegah output yang terlihat pengguna menjadi duplikat |
usage_units and estimated_cost |
token, gambar, detik, dolar | Membuat biaya retry terlihat |
request_id and provider_request_id |
ID gateway dan provider | Mendukung tiket dukungan dan peninjauan insiden |
Jangan reduksi rekaman ini menjadi satu string seperti "Panggilan LLM gagal." String itu tidak cukup untuk memutuskan apakah harus memutar kunci, menunggu, mengisi ulang, fallback, merevisi prompt, atau berhenti.
Klasifikator TypeScript sederhana
Klasifikator tidak perlu mengetahui setiap detail provider pada hari pertama. Mulailah dengan bucket yang eksplisit dan default yang gagal secara konservatif.
type ErrorClass =
| "auth"
| "quota"
| "provider"
| "request"
| "safety"
| "cancelled"
| "unknown";
type GatewayErrorInput = {
httpStatus?: number;
providerErrorType?: string;
providerErrorCode?: string;
finishReason?: string;
stopReason?: string;
clientCancelled?: boolean;
timeout?: boolean;
};
function classifyGatewayError(error: GatewayErrorInput): ErrorClass {
const type = (error.providerErrorType || "").toLowerCase();
const code = (error.providerErrorCode || "").toLowerCase();
const stop = (error.stopReason || "").toLowerCase();
const finish = (error.finishReason || "").toLowerCase();
if (error.clientCancelled) return "cancelled";
if (error.httpStatus === 401 || error.httpStatus === 403) return "auth";
if (type.includes("auth") || type.includes("permission")) return "auth";
if (code.includes("invalid_api_key") || code.includes("ip_not_authorized")) {
return "auth";
}
if (error.httpStatus === 429) return "quota";
if (type.includes("rate_limit") || code.includes("quota")) return "quota";
if (code.includes("resource_exhausted")) return "quota";
if (stop === "refusal" || finish === "safety") return "safety";
if (code.includes("moderation") || code.includes("blocked")) return "safety";
if (error.httpStatus === 400 || error.httpStatus === 422) return "request";
if (type.includes("invalid_request") || type.includes("bad_request")) {
return "request";
}
if (error.timeout) return "provider";
if ([500, 502, 503, 504, 529].includes(error.httpStatus || 0)) {
return "provider";
}
if (type.includes("overloaded") || type.includes("api_error")) {
return "provider";
}
return "unknown";
}
Gunakan ini hanya sebagai titik awal. Klasifikator produksi harus menyimpan pemetaan khusus provider di konfigurasi, fixture pengujian, dan peninjauan insiden, bukan hanya tersembunyi di kode aplikasi.
Runbook: retry, queue, fallback, atau fail closed
Setelah kelas diketahui, gateway dapat memilih tindakan.
| Class | Default action | Retry condition | Fallback condition | Fail-closed condition |
|---|---|---|---|---|
| Auth | Berhenti dan beri tahu pemilik | Tidak ada, kecuali baru saja terjadi refresh kredensial | Tidak ada | Selalu sampai kunci atau izin diperbaiki |
| Quota | Backoff, antre, atau berhenti לפי dimensi limit | Rate limit sementara sesuai dengan deadline dan anggaran percobaan | Rute yang disetujui menjaga biaya, kualitas, dan batas data | Pengeluaran, kredit, kuota harian, atau deadline terlampaui |
| Provider | Backoff atau alihkan sekitar kegagalan provider sementara | Panggilan idempoten, tidak ada output parsial, deadline masih ada | Ada rute setara yang disetujui | Kegagalan berulang, output parsial, atau alur kerja berisiko tinggi |
| Request | Kembalikan error validasi yang terlihat oleh developer | Hanya setelah mutasi request | Hanya ketika endpoint/model yang kompatibel dipilih secara eksplisit | Skema tidak valid, overflow konteks, kemampuan tidak didukung |
| Safety | Kembalikan respons aman atau minta revisi | Tidak ada untuk konten yang tidak berubah | Hanya dengan policy yang sama atau lebih ketat, jangan pernah untuk bypass | Prompt/output diblokir, penolakan, aturan kepatuhan |
| Cancelled | Hentikan pekerjaan dan pertahankan state | Tidak ada | Hanya jika pengguna secara eksplisit memulai ulang | Pengguna membatalkan, deadline, client terputus |
Tabel ini adalah pusat operasional dari taksonomi error LLM gateway. Tabel ini memberi tahu gateway kapan pekerjaan tambahan masih aman dan kapan pekerjaan tambahan berubah menjadi risiko.
How to apply this in Flatkey
Gunakan taksonomi ini sebagai checklist rollout, bukan proyek dashboard sekali jadi.
- Pilih satu alur kerja, seperti chat dukungan, ekstraksi batch, job evaluasi, atau traffic code assistant.
- Tentukan keluarga endpoint yang diizinkan, model, rute fallback, dan batas biaya untuk alur kerja tersebut.
- Normalisasikan error provider ke field-field di atas.
- Buat kegagalan auth dan permission terlihat oleh owner serta tidak dapat di-retry.
- Pisahkan rate limit sementara dari kuota, pengeluaran, dan habisnya limit harian.
- Wajibkan kontrak fallback sebelum mengganti provider atau model.
- Perlakukan penolakan safety dan moderasi sebagai hasil policy, bukan outage provider.
- Catat state output parsial sebelum retry atau fallback apa pun.
- Tinjau penggunaan dan bukti rute di Flatkey sebelum memperluas ke lebih banyak alur kerja.
- Tautkan runbook ke harga Flatkey sehingga operator dapat memverifikasi katalog dan permukaan biaya saat ini.
Snapshot API pricing publik Flatkey pada 3 Juli 2026 mengembalikan 45 baris model, enam vendor ID, dan keluarga endpoint yang didukung termasuk openai, anthropic, gemini, dan image-generation. Perlakukan itu hanya sebagai fakta sumber yang bertanggal. Ketersediaan model, harga, dan perilaku rute harus diperiksa ulang sebelum rollout produksi.
FAQ
What is an LLM gateway error taxonomy?
Taksonomi error LLM gateway adalah kumpulan kelas kegagalan yang dinormalisasi untuk traffic model-provider. Ini memisahkan kegagalan auth, quota, provider, request, safety, dan cancellation sehingga gateway dapat memilih perilaku retry, antre, fallback, atau fail-closed.
Why not retry every LLM API error?
Retry semua error dapat memperburuk insiden. Ini dapat memperbesar rate limit, menghabiskan lebih banyak token setelah kuota habis, menyembunyikan kegagalan kredensial, menggandakan output parsial, atau melewati blok safety. Taksonomi menentukan kapan retry benar-benar diizinkan.
Should safety refusals trigger fallback?
Tidak secara default. Penolakan safety, blok moderasi, blok prompt, dan finishReason: SAFETY harus diperlakukan sebagai hasil policy. Fallback tidak boleh digunakan untuk mencari rute safety yang lebih lemah.
How should an LLM gateway classify quota failures?
Pisahkan pacing rate sementara dari pengeluaran yang habis, kredit prabayar, limit harian, limit token, dan limit project. Pacing sementara dapat menggunakan backoff terbatas atau antrean. Anggaran yang habis biasanya fail closed sampai pemilik menyetujui kapasitas tambahan.
How does Flatkey help with an LLM gateway error taxonomy?
Flatkey memberi tim satu permukaan gateway untuk akses model, routing, billing, analitik penggunaan, dan kontrol operasional. Gunakan ini untuk menjaga kelas error yang dinormalisasi tetap terikat pada owner key, keluarga endpoint, model yang diminta, model yang dilayani, dan bukti penggunaan.
Mulailah dengan satu alur kerja, definisikan taksonomi error LLM gateway Anda, lalu dapatkan kunci dan uji kasus auth, quota, provider, request, safety, dan cancellation sebelum traffic produksi bergantung pada recovery otomatis.



