Erori
Fiecare cod de eroare cu care poate răspunde acest API, statusul HTTP care îl transportă și ce să faceți în legătură cu el. Plicul are forma OpenAI, cu o singură adăugare namespaced.
Plicul
error.message este scris pentru o persoană care citește un jurnal, error.type numește clasa de eșec, iar error.code este identificatorul stabil pe care să ramificați — textul mesajului nu este un contract. Acolo unde API-ul are detalii structurate (care politică, care endpoint, care model), acestea sosesc în error.llmeu și nu înlocuiesc niciodată cele trei câmpuri standard.
{
"error": {
"message": "No endpoint satisfies residency eu-owned. Residency is never relaxed silently.",
"type": "conflict_error",
"code": "no_endpoint_for_policy",
"llmeu": { "requested": "llmeu-auto" }
}
}
tipul urmează statusul
Maparea de mai jos este cea pe care o aplică API-ul, redată din același tabel care îi construiește răspunsurile.
| HTTP | tip |
|---|---|
| 400 | invalid_request_error |
| 401 | authentication_error |
| 402 | insufficient_quota |
| 403 | permission_error |
| 404 | not_found_error |
| 409 | conflict_error |
| 413 | invalid_request_error |
| 422 | invalid_request_error |
| 429 | rate_limit_error |
| 500 | api_error |
| 501 | api_error |
| 502 | api_error |
| 503 | api_error |
Coduri
Fiecare cod care poate ajunge la un client. Un test parcurge sursa API-ului și eșuează când acest tabel și codul nu sunt de acord în oricare direcție, astfel încât un cod nu poate fi inventat aici sau adăugat acolo fără a fi documentat.
| HTTP | code | Ce înseamnă și ce să faci |
|---|---|---|
| 400 | invalid_request | Validarea corpului cererii a eșuat. |
| 400 | invalid_json | Corpul nu a fost JSON valid. |
| 400 | invalid_llmeu | Obiectul llmeu nu a fost un obiect sau conținea un câmp necunoscut. |
| 400 | invalid_residency | Rezidența solicitată nu este una dintre cele patru clase de găzduire. |
| 400 | invalid_data_class | data_class solicitat nu este una dintre cele patru clase. |
| 400 | invalid_retention | Retenția solicitată nu este zero, 24h, 7d sau 30d. |
| 400 | invalid_max_tokens | max_tokens nu a fost un întreg pozitiv. |
| 400 | invalid_stream | stream nu a fost un boolean. |
| 400 | invalid_stop | stop nu a fost nici un șir, nici o matrice de șiruri. |
| 400 | invalid_role | Un mesaj avea un rol în afara system, user, assistant și tool. |
| 400 | invalid_tools | tools sau tool_choice a fost malformat. |
| 400 | missing_model | Câmpul model este obligatoriu. |
| 400 | missing_messages | messages este obligatoriu și nu trebuie să fie gol. |
| 400 | missing_input | input este obligatoriu pentru embeddings. |
| 400 | missing_name | name este obligatoriu. |
| 401 | invalid_api_key | Cheia lipsește, este necunoscută, revocată sau expirată. |
| 402 | budget_exceeded | Bugetul zilnic al organizației este epuizat. Crește max_usd_per_day sau așteaptă să se reseteze fereastra. |
| 403 | api_key_required | Cererea a folosit o sesiune de consolă. Creează o cheie API și trimite-o în schimb. |
| 403 | insufficient_scope | Cheia este validă, dar nu are domeniul de aplicare cerut de acest endpoint. |
| 403 | no_organization | Acreditarea nu este atașată unei organizații. |
| 403 | model_denied | Politica organizației interzice acest model sau furnizorul său. |
| 403 | policy_violation | Cererea încalcă o regulă a politicii organizației. |
| 403 | retention_exceeds_policy | Retenția solicitată este mai lungă decât permite politica. Acest lucru este verificat înainte de orice altceva despre cerere. |
| 403 | data_class_not_allowed | data_class al cererii nu este unul permis de politică. |
| 404 | model_not_found | Nu există un astfel de model pentru această organizație. |
| 404 | hosted_unavailable | Modelul este în catalog, dar nu este găzduit pe LLM EU, așa că nu poate fi apelat. |
| 404 | not_found | Ruta există, dar obiectul nu. |
| 404 | unknown_route | Nu este montată nicio rută la această cale. Fiecare endpoint OpenAI care nu este listat sub Endpoints răspunde astfel. |
| 404 | policy_not_found | policy_id din llmeu nu aparține acestei organizații. |
| 409 | no_endpoint_for_policy | Nimic nu satisface politica și rezidența împreună, iar niciuna nu este relaxată în silențiu. |
| 409 | not_a_text_model | Modelul numit nu poate genera text: este un model de recunoaștere vocală, de embedding sau de reranking. |
| 409 | conflict | Cererea intră în conflict cu starea actuală a obiectului. |
| 413 | request_too_large | Corpul cererii a depășit limita de dimensiune a endpoint-ului. |
| 429 | rate_limit_exceeded | O limită din tabelul de limite de rată a fost atinsă. Mesajul indică momentul de resetare a ferestrei. |
| 500 | internal_error | O eroare neașteptată de partea noastră. |
| 501 | not_implemented | Endpoint-ul nu este oferit intenționat sau capabilitatea solicitată nu există în această implementare. |
| 501 | retention_not_implemented | Politica permite o retenție diferită de zero, iar doar zero este implementată, așa că cererea este refuzată în loc să fie stocată. |
| 501 | unsupported_n | n mai mare decât 1 nu este acceptat. |
| 502 | upstream_error | Niciun endpoint nu a putut servi cererea după failover. Urmărirea înregistrează fiecare încercare. |
| 502 | stream_failed | Fluxul a eșuat după ce deja începuse. |
no_endpoint_for_policy este produsul care funcționează
Un 409 cu acest cod înseamnă că politica și cererea împreună nu admit niciun endpoint, iar routerul a refuzat să relaxeze oricare dintre ele în silențiu. Nu este tranzitoriu: reîncercarea fără a schimba cererea, politica sau rezidența eșuează la fel. Eroarea conține rezidența solicitată, iar trace-ul înregistrează de ce a fost respins fiecare endpoint.
Erori în interiorul unui flux
O cerere de streaming care eșuează după trimiterea antetelor scrie eroarea ca un cadru SSE final și apoi terminatorul, astfel încât un client care respectă formatul vede un eșec în loc de un succes trunchiat.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]