Przewodniki
Błędy, limity i ponawianie
Odczytuj odpowiedzi błędów i nagłówki limitów zapytań, ponawiaj bezpiecznie i diagnozuj typowe problemy.
Każde API Felo zwraca treść błędu JSON ze stabilnym kodem błędu i identyfikatorem żądania. Najpierw odczytaj status HTTP, potem kod, a na końcu komunikat.
Koperta błędów
Obecne odpowiedzi produkcyjne używają statusu HTTP jako status:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "Invalid API Key",
"request_id": "202610221444486982113280416060637185"
}| Pole | Znaczenie |
|---|---|
status | Kod statusu HTTP, powtórzony w treści |
code | Kod błędu czytelny dla maszyn |
message | Wyjaśnienie czytelne dla człowieka |
request_id | Nieprzejrzysty identyfikator tego żądania; dołącz go do zgłoszeń do pomocy technicznej |
Niektóre starsze przykłady endpointów używają status: "error" i innego ciągu kodu. Rozgałęziaj logikę na podstawie statusu HTTP i pola code, a nie dokładnego brzmienia message.
Typowe kody
| HTTP | Kod | Co oznacza | Co zrobić |
|---|---|---|---|
| 400 | kod walidacji specyficzny dla endpointu | Brakuje parametru lub jest nieprawidłowy | Popraw żądanie; nie ponawiaj bez zmian |
| 401 | UNAUTHORIZED | Brakujący, nieprawidłowy, wygasły lub unieważniony klucz API | Wyślij Authorization: Bearer $FELO_API_KEY; zrotuj klucz, jeśli został unieważniony |
| 402 | INSUFFICIENT_CREDITS | Niewystarczająca liczba kredytów usługowych | Doładuj w Console Billing, a następnie ponów próbę |
| 404 | specyficzny dla endpointu | Nieznany model, zadanie lub trasa | Sprawdź identyfikator modelu lub zadania oraz ścieżkę endpointu |
| 429 | RATE_LIMITED | Przekroczono limit szybkości | Poczekaj na Retry-After, a następnie ponów próbę |
| 5xx | CHAT_FAILED, *_FAILED, SERVICE_UNAVAILABLE | Niepowodzenie upstream lub usługi | Ponów z wykładniczym opóźnieniem; skontaktuj się z pomocą, jeśli problem się utrzymuje |
Dokumentacja endpointów wymienia kody specyficzne dla danego endpointu. Zacznij od błędów API Chat lub dokumentacji endpointu, który wywołujesz.
Endpointy generowania modeli
POST /api/v1/images/generations i POST /api/v1/videos/generations zwracają błędy na poziomie endpointu w kopercie OpenAI zamiast koperty opisanej powyżej:
{
"error": {
"message": "Model kind does not match this generation endpoint",
"type": "invalid_request_error",
"param": null,
"code": "model_kind_mismatch"
}
}Identyfikator żądania znajduje się w nagłówku odpowiedzi X-Request-Id, a nie w treści. Odrzucone żądanie nie tworzy zadania. Gdy zadanie już istnieje, większość niepowodzeń przychodzi jako terminalny stan zadania w odpowiedzi 200, a nie jako błąd HTTP: sprawdź, czy status ma wartość failed lub interrupted, a następnie odczytaj error.message. Zobacz Generowanie obrazów i Zadania asynchroniczne.
Identyfikatory żądań
Treści błędów Felo zawierają request_id. Zapisuj go w logach wraz z endpointem, statusem HTTP, kodem błędu, identyfikatorem modelu i identyfikatorem zadania. Nigdy nie zapisuj w logach pełnego klucza API.
Model API przyjmuje też opcjonalny nagłówek żądania X-Request-Id. Gdy go wyślesz, jest odsyłany z powrotem do celów diagnostycznych, co pozwala skorelować własne logi z żądaniem. Jeśli go nie wyślesz, użyj zwróconego request_id.
Limity szybkości
/v2/chat to jedyny endpoint Felo z udokumentowanymi, egzekwowanymi limitami szybkości:
- na klucz API, okno 1 minuty.
- na użytkownika, okno 1 minuty.
- na użytkownika, okno 1 godziny.
Użytkownicy z aktywną płatną subskrypcją Felo, w tym subskrypcją enterprise, są zwolnieni i nie otrzymują nagłówków X-RateLimit-*. Jeśli nie można zweryfikować statusu subskrypcji, limity nadal obowiązują.
| Nagłówek | Znaczenie |
|---|---|
X-RateLimit-Limit | Limit najciaśniejszego aktualnie obowiązującego wymiaru |
X-RateLimit-Remaining | Minimalny pozostały limit spośród trzech wymiarów |
X-RateLimit-Reset | Znacznik czasu Unix w sekundach, kiedy resetuje się bieżące okno |
Retry-After | Przy odpowiedzi 429 zalecane opóźnienie w sekundach |
Inne endpointy /v2/** nie mają obecnie egzekwowanych limitów szybkości. Żądania do Model API nadal mogą być ograniczane przez dostawcę upstream, co może pojawić się jako 429.
Nie wpisuj w kodzie na stałe wartości liczbowych limitów. Odczytuj nagłówki każdej odpowiedzi.
Zasady ponawiania
| Sytuacja | Ponowić? |
|---|---|
| 400, 401, 402, 404 | Nie. Najpierw popraw żądanie, klucz lub saldo. |
| 429 | Tak, po Retry-After lub X-RateLimit-Reset. |
| 5xx, limity czasu, resetowanie połączeń | Tak, z wykładniczym opóźnieniem i losowym odchyleniem. |
| Połączenie strumieniowe przerwane w trakcie odpowiedzi | Ponawiaj tylko wtedy, gdy aplikacja toleruje zduplikowane generowanie. |
Zalecana pętla:
- Ponawiaj tylko żądania idempotentne lub bezpieczne do powtórzenia.
- Stosuj wykładnicze opóźnienie: zacznij od około 1 sekundy, podwajaj je, ogranicz do 30 sekund.
- Dodaj losowe odchylenie, aby klienci nie ponawiali równocześnie.
- Zatrzymaj się po niewielkiej liczbie prób i zgłoś błąd.
- Przy 429 przestrzegaj
Retry-Afterzamiast własnego harmonogramu.
Sekwencja debugowania
- Sprawdź, czy klucz istnieje i nie został unieważniony.
- Wywołaj
GET /api/v1/modelsz tym samym kluczem, aby potwierdzić uwierzytelnianie. - Wyślij najmniejsze prawidłowe żądanie do docelowego endpointu.
- Dodawaj przesyłanie strumieniowe, narzędzia lub duże dane wejściowe pojedynczo.
- W przypadku pracy asynchronicznej sprawdź stan zadania przed ponownym wysłaniem.