Erori
Fiecare cod de eroare cu care poate răspunde acest API, statusul HTTP care îl transportă și ce să faceți în privința lui. Anvelopa are forma OpenAI, cu o singură adăugare într-un spațiu de nume.
Anvelopa
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 baza căruia să ramificați — textul mesajului nu este un contract. Acolo unde API-ul are detalii structurate (ce politică, ce endpoint, ce 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" }
}
}
type urmează status
Maparea de mai jos este cea pe care o aplică API-ul, generată din același tabel care îi construiește răspunsurile.
| HTTP | type |
|---|---|
| 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 codul sursă al API-ului și eșuează atunci când acest tabel și codul nu concordă în nicio direcție, așa că un cod nu poate fi inventat aici sau adăugat acolo fără a fi documentat.
| HTTP | code | Ce înseamnă și ce să faceți |
|---|---|---|
| 400 | invalid_request | Corpul cererii nu a trecut validarea. |
| 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 de caractere, nici un tablou de șiruri de caractere. |
| 400 | invalid_role | Un mesaj conținea un rol din 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. Măreș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 acea cheie în schimb. |
| 403 | insufficient_scope | Cheia este validă, dar nu are scope-ul 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 | Perioada de retenție cerută este mai lungă decât permite politica. Acest lucru este verificat înainte de orice altceva legat de cerere. |
| 403 | data_class_not_allowed | data_class al cererii nu este unul permis de politică. |
| 404 | model_not_found | Nu există acest 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 la Endpoints răspunde cu aceasta. |
| 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 mod silențios. |
| 409 | not_a_text_model | Modelul numit nu poate genera text: este un model de recunoaștere a vorbirii, de embedding sau de reranking. |
| 409 | conflict | Cererea intră în conflict cu starea actuală a obiectului. |
| 413 | request_too_large | Corpul a depășit limita de dimensiune a endpoint-ului. |
| 429 | rate_limit_exceeded | S-a atins o limită din tabelul de rate-limit. Mesajul indică ora 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 cerută nu există în această implementare. |
| 501 | retention_not_implemented | Politica permite o perioadă de 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. Trace-ul înregistrează fiecare încercare. |
| 502 | stream_failed | Fluxul a eșuat după ce deja începuse. |
no_endpoint_for_policy înseamnă că produsul funcționează
Un 409 cu acest cod înseamnă că politica și cererea împreună nu admit niciun endpoint, iar routerul a refuzat să relaxeze tacit oricare dintre ele. Nu este tranzitoriu: reîncercarea fără a schimba cererea, politica sau rezidența eșuează la fel. Eroarea poartă rezidența solicitată, iar urma înregistrează de ce a fost respins fiecare endpoint.
Erori în interiorul unui flux
O cerere în streaming care eșuează după trimiterea antetelor scrie eroarea ca ultim cadru SSE ș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]