Errori
Ogni codice di errore con cui questa API può rispondere, lo stato HTTP che lo trasporta e cosa fare al riguardo. L'involucro è nel formato OpenAI con un'aggiunta in namespace.
L'involucro
error.message è scritto per una persona che legge un log, error.type indica la classe di errore, e error.code è l'identificatore stabile su cui diramare — il testo del messaggio non è un contratto. Dove l'API ha dettagli strutturati (quale policy, quale endpoint, quale modello), questi arrivano in error.llmeu e non sostituiscono mai i tre campi 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 segue lo status
La mappatura seguente è quella applicata dall'API, generata dalla stessa tabella che costruisce le sue risposte.
| 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 |
Codici
Ogni codice che può raggiungere un client. Un test percorre il codice sorgente dell'API e fallisce quando questa tabella e il codice non concordano in nessuna delle due direzioni, quindi un codice non può essere inventato qui o aggiunto lì senza essere documentato.
| HTTP | code | Cosa significa e cosa fare |
|---|---|---|
| 400 | invalid_request | Il corpo della richiesta non ha superato la validazione. |
| 400 | invalid_json | Il corpo non era JSON valido. |
| 400 | invalid_llmeu | L'oggetto llmeu non era un oggetto, o conteneva un campo sconosciuto. |
| 400 | invalid_residency | La residenza richiesta non è una delle quattro classi di hosting. |
| 400 | invalid_data_class | Il data_class richiesto non è una delle quattro classi. |
| 400 | invalid_retention | La retention richiesta non è zero, 24h, 7d o 30d. |
| 400 | invalid_max_tokens | max_tokens non era un intero positivo. |
| 400 | invalid_stream | stream non era un booleano. |
| 400 | invalid_stop | stop non era né una stringa né un array di stringhe. |
| 400 | invalid_role | Un messaggio conteneva un ruolo al di fuori di system, user, assistant e tool. |
| 400 | invalid_tools | tools o tool_choice erano malformati. |
| 400 | missing_model | Il campo model è obbligatorio. |
| 400 | missing_messages | messages è obbligatorio e non deve essere vuoto. |
| 400 | missing_input | input è obbligatorio per gli embeddings. |
| 400 | missing_name | name è obbligatorio. |
| 401 | invalid_api_key | La chiave è mancante, sconosciuta, revocata o scaduta. |
| 402 | budget_exceeded | Il budget giornaliero dell'organizzazione è esaurito. Aumenta max_usd_per_day o attendi il rinnovo della finestra. |
| 403 | api_key_required | La richiesta ha usato una sessione console. Crea una API key e invia quella invece. |
| 403 | insufficient_scope | La chiave è valida ma non ha lo scope richiesto da questo endpoint. |
| 403 | no_organization | La credenziale non è associata a un'organizzazione. |
| 403 | model_denied | La policy dell'organizzazione nega questo modello o il suo provider. |
| 403 | policy_violation | La richiesta viola una regola della policy dell'organizzazione. |
| 403 | retention_exceeds_policy | La retention richiesta è più lunga di quanto la policy consenta. Questo viene verificato prima di qualsiasi altra cosa sulla richiesta. |
| 403 | data_class_not_allowed | Il data_class della richiesta non è tra quelli consentiti dalla policy. |
| 404 | model_not_found | Nessun modello di questo tipo per questa organizzazione. |
| 404 | hosted_unavailable | Il modello è nel catalogo ma non è ospitato su LLM EU, quindi non può essere chiamato. |
| 404 | not_found | La route esiste ma l'oggetto no. |
| 404 | unknown_route | Nessuna route è montata su questo percorso. Ogni endpoint OpenAI non elencato in Endpoints risponde così. |
| 404 | policy_not_found | Il policy_id in llmeu non appartiene a questa organizzazione. |
| 409 | no_endpoint_for_policy | Niente soddisfa contemporaneamente la policy e la residenza, e nessuna delle due viene allentata silenziosamente. |
| 409 | not_a_text_model | Il modello indicato non può generare testo: è un modello di riconoscimento vocale, embedding o reranker. |
| 409 | conflict | La richiesta è in conflitto con lo stato attuale dell'oggetto. |
| 413 | request_too_large | Il corpo ha superato il limite di dimensione dell'endpoint. |
| 429 | rate_limit_exceeded | È stato raggiunto un limite della tabella dei limiti di frequenza. Il messaggio indica l'orario di reset della finestra. |
| 500 | internal_error | Un errore imprevisto da parte nostra. |
| 501 | not_implemented | L'endpoint non è offerto intenzionalmente, oppure la funzionalità richiesta non esiste in questa distribuzione. |
| 501 | retention_not_implemented | La policy consente una retention diversa da zero e solo zero è implementata, quindi la richiesta viene rifiutata invece di essere memorizzata. |
| 501 | unsupported_n | n maggiore di 1 non è supportato. |
| 502 | upstream_error | Nessun endpoint ha potuto servire la richiesta dopo il failover. La traccia registra ogni tentativo. |
| 502 | stream_failed | Lo stream è fallito dopo che era già iniziato. |
no_endpoint_for_policy è il prodotto che funziona
Un 409 con questo codice significa che la policy e la richiesta insieme non ammettono alcun endpoint, e il router ha rifiutato di allentare silenziosamente l'una o l'altra. Non è transitorio: riprovare senza modificare la richiesta, la policy o la residenza fallisce allo stesso modo. L'errore porta la residenza richiesta, e la traccia registra perché ogni endpoint è stato rifiutato.
Errori all'interno di uno stream
Una richiesta in streaming che fallisce dopo l'invio degli header scrive l'errore come frame SSE finale e poi il terminatore, quindi un client che segue il formato vede un fallimento invece di un successo troncato.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]