Errori
Tutti i codici di stato restituiti dal gateway, le loro cause effettive e come risolverle.
Gli errori restituiscono JSON con un type e un messaggio leggibile message. I codici di stato seguono le convenzioni di Anthropic e OpenAI.
{"type": "error", "error": {"type": "authentication_error", "message": "invalid api key"}}
Codici di stato
| Codice | Significato | Causa effettiva più comune | Soluzione |
|---|---|---|---|
400 | Richiesta non valida | Manca max_tokens in Messages, oppure un elemento non valido: messages array | Verifica il corpo rispetto a Messages |
401 | Non autenticato | Chiave inviata nell'header errato per il formato | x-api-key per Messages, Bearer per Chat Completions |
402 | Pagamento richiesto | Saldo esaurito o piano scaduto | Ricarica o acquista un piano |
403 | Accesso negato | Chiave revocata o modello non abilitato per l'account | Crea una nuova chiave; controlla /v1/models |
404 | Non trovato | Errore nell'URL di base: in genere un elemento duplicato o mancante: /v1 | Vedi URL di base |
429 | Limite di richieste raggiunto | Troppe richieste simultanee | Riprova con attese crescenti in modo esponenziale; vedi Limiti di frequenza |
500 | Errore del gateway | Errore interno imprevisto | Riprova una volta; se il problema persiste, contatta l'assistenza indicando l'ID della richiesta |
529 | Servizio a monte sovraccarico | Capacità del provider, non del tuo account | Riprova con attese crescenti: in genere il problema si risolve in pochi secondi |
Tipi di errore
| tipo | Significato |
|---|---|
invalid_request_error | Il corpo non è valido o manca un campo obbligatorio |
authentication_error | Chiave mancante, non valida o revocata |
permission_error | La chiave è valida ma non è autorizzata a usare quel modello |
not_found_error | Percorso sconosciuto o ID del modello sconosciuto |
rate_limit_error | Richieste limitate |
api_error | Errore interno |
overloaded_error | Capacità del servizio a monte esaurita |
Come riprovare correttamente
Nuovo tentativo 429, 500, 502, 503 e 529. Non riprovare mai alla cieca 400, 401, 402 o 403 : la stessa richiesta fallisce nello stesso modo e, per le risposte generate parzialmente, potresti pagare due volte.
import time, httpx
def call(body, key, tries=4):
for i in range(tries):
r = httpx.post(class="s">"https://aiprimetech.io/v1/messages", json=body, timeout=120,
headers={class="s">"x-api-key": key,
class="s">"anthropic-version": class="s">"2023-06-01"})
if r.status_code in (429, 500, 502, 503, 529):
time.sleep(2 ** i) class=class="s">"c"># 1s, 2s, 4s, 8s
continue
r.raise_for_status()
return r.json()
raise RuntimeError(class="s">"upstream unavailable after retries")
In produzione, aggiungi una variazione casuale al tempo di attesa. I tentativi sincronizzati di molti worker trasformano un breve disservizio in un'ondata di richieste verso lo stesso servizio a monte.