Błędy

Każdy kod błędu, którym to API może odpowiedzieć, status HTTP, który go przenosi, i co z tym zrobić. Koperta ma kształt OpenAI z jednym dodatkiem w przestrzeni nazw.

Koperta

error.message jest napisane dla osoby czytającej dziennik, error.type nazywa klasę błędu, a error.code to stabilny identyfikator, według którego można się rozgałęziać — tekst komunikatu nie jest kontraktem. Gdzie API ma ustrukturyzowany szczegół (która polityka, który punkt końcowy, który model), trafia on do error.llmeu i nigdy nie zastępuje trzech standardowych pól.

{
  "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 zależy od statusu

Poniższe mapowanie jest tym, które stosuje API, renderowane z tej samej tabeli, która buduje jego odpowiedzi.

HTTP type
400invalid_request_error
401authentication_error
402insufficient_quota
403permission_error
404not_found_error
409conflict_error
413invalid_request_error
422invalid_request_error
429rate_limit_error
500api_error
501api_error
502api_error
503api_error

Kody

Każdy kod, który może dotrzeć do klienta. Test przechodzi przez źródło API i kończy się niepowodzeniem, gdy ta tabela i kod są niezgodne w którąkolwiek stronę, więc kod nie może zostać wymyślony tutaj ani dodany tam bez udokumentowania.

HTTP code Co oznacza i co zrobić
400 invalid_request Treść żądania nie przeszła walidacji.
400 invalid_json Treść nie była prawidłowym JSON-em.
400 invalid_llmeu Obiekt llmeu nie był obiektem lub zawierał nieznane pole.
400 invalid_residency Żądana rezydencja nie jest jedną z czterech klas hostingu.
400 invalid_data_class Żądana data_class nie jest jedną z czterech klas.
400 invalid_retention Żądany okres przechowywania nie jest równy zero, 24h, 7d ani 30d.
400 invalid_max_tokens max_tokens nie było dodatnią liczbą całkowitą.
400 invalid_stream stream nie było wartością logiczną.
400 invalid_stop stop nie było ani ciągiem, ani tablicą ciągów.
400 invalid_role Wiadomość zawierała rolę spoza system, user, assistant i tool.
400 invalid_tools tools lub tool_choice miały nieprawidłowy format.
400 missing_model Pole model jest wymagane.
400 missing_messages Pole messages jest wymagane i nie może być puste.
400 missing_input Pole input jest wymagane dla embeddingów.
400 missing_name Pole name jest wymagane.
401 invalid_api_key Klucz jest nieobecny, nieznany, unieważniony lub wygasł.
402 budget_exceeded Dzienny budżet organizacji został wykorzystany. Zwiększ max_usd_per_day lub poczekaj na odnowienie okna.
403 api_key_required Żądanie korzystało z sesji konsoli. Utwórz klucz API i wyślij go zamiast tego.
403 insufficient_scope Klucz jest ważny, ale nie ma zakresu wymaganego przez ten punkt końcowy.
403 no_organization Poświadczenie nie jest przypisane do organizacji.
403 model_denied Polityka organizacji nie zezwala na ten model ani jego dostawcę.
403 policy_violation Żądanie narusza regułę polityki organizacji.
403 retention_exceeds_policy Żądana retencja jest dłuższa niż pozwala polityka. Jest to sprawdzane przed czymkolwiek innym w żądaniu.
403 data_class_not_allowed data_class żądania nie należy do dozwolonych przez politykę.
404 model_not_found Nie ma takiego modelu dla tej organizacji.
404 hosted_unavailable Model jest w katalogu, ale nie jest hostowany w LLM EU, więc nie można go wywołać.
404 not_found Trasa istnieje, ale obiektu nie ma.
404 unknown_route Pod tą ścieżką nie ma zamontowanej trasy. Każdy punkt końcowy OpenAI, którego nie ma na liście w sekcji Punkty końcowe, zwraca tę odpowiedź.
404 policy_not_found policy_id w llmeu nie należy do tej organizacji.
409 no_endpoint_for_policy Nic nie spełnia jednocześnie polityki i rezydencji, a żadne z nich nie jest po cichu łagodzone.
409 not_a_text_model Nazwany model nie może generować tekstu: jest modelem rozpoznawania mowy, embeddingów lub rerankingu.
409 conflict Żądanie jest sprzeczne z bieżącym stanem obiektu.
413 request_too_large Treść żądania przekroczyła limit rozmiaru punktu końcowego.
429 rate_limit_exceeded Osiągnięto limit z tabeli limitów szybkości. Komunikat podaje czas resetowania okna.
500 internal_error Nieoczekiwany błąd po naszej stronie.
501 not_implemented Punkt końcowy celowo nie jest oferowany lub żądana funkcja nie istnieje w tym wdrożeniu.
501 retention_not_implemented Polityka dopuszcza retencję inną niż zero, a zaimplementowano tylko zero, więc żądanie jest odrzucane zamiast być przechowywane.
501 unsupported_n n większe niż 1 nie jest obsługiwane.
502 upstream_error Żaden punkt końcowy nie mógł obsłużyć żądania po przełączeniu awaryjnym. Ślad rejestruje każdą próbę.
502 stream_failed Strumień zakończył się niepowodzeniem po tym, jak już się rozpoczął.

no_endpoint_for_policy oznacza, że produkt działa

409 z tym kodem oznacza, że polityka i żądanie razem nie dopuszczają żadnego punktu końcowego, a router odmówił cichego złagodzenia któregokolwiek z nich. To nie jest przejściowe: ponowna próba bez zmiany żądania, polityki lub rezydencji kończy się tak samo. Błąd przenosi żądaną rezydencję, a ślad rejestruje, dlaczego każdy punkt końcowy został odrzucony.

Błędy w strumieniu

Żądanie strumieniowe, które nie powiedzie się po wysłaniu nagłówków, zapisuje błąd jako końcową ramkę SSE, a następnie terminator, więc klient przestrzegający formatu widzi niepowodzenie zamiast obciętego sukcesu.

data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}

data: [DONE]