Błędy

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

Koperta

error.message jest napisany dla osoby czytającej log, error.type nazywa klasę błędu, a error.code to stabilny identyfikator do rozgałęziania — tekst komunikatu nie jest kontraktem. Gdzie API ma ustrukturyzowany szczegół (która polityka, który endpoint, 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" }
  }
}

typ wynika ze statusu

Poniższe mapowanie jest stosowane przez API i renderowane z tej samej tabeli, która buduje jego odpowiedzi.

HTTP typ
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 trafić do klienta. Test przechodzi przez źródło API i zawodzi, gdy ta tabela i kod nie zgadzają się w obie strony, więc kod nie może być wymyślony tutaj ani dodany tam bez udokumentowania.

HTTP code Co to znaczy 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 należy do jednej z czterech klas hostingu.
400 invalid_data_class Żądana data_class nie należy do jednej z czterech klas.
400 invalid_retention Żądana retencja nie wynosi zero, 24h, 7d lub 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 znaków, ani tablicą ciągów znaków.
400 invalid_role Wiadomość zawierała rolę spoza zestawu system, user, assistant i tool.
400 invalid_tools tools lub tool_choice było nieprawidłowe.
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ł wyczerpany. Zwiększ max_usd_per_day lub poczekaj na odnowienie okna.
403 api_key_required Żądanie użyło 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 pozwala na ten model lub 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 Wartość data_class w żądaniu nie jest dozwolona przez politykę.
404 model_not_found Nie ma takiego modelu dla tej organizacji.
404 hosted_unavailable Model jest w katalogu, ale nie jest hostowany na LLM EU, więc nie można go wywołać.
404 not_found Trasa istnieje, ale obiekt nie.
404 unknown_route Żadna trasa nie jest zamontowana pod tą ścieżką. Każdy punkt końcowy OpenAI, który nie jest wymieniony w Endpoints, odpowiada w ten sposób.
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: to model rozpoznawania mowy, embeddingu lub rerankingu.
409 conflict Żądanie jest sprzeczne z bieżącym stanem obiektu.
413 request_too_large Treść przekroczyła limit rozmiaru punktu końcowego.
429 rate_limit_exceeded Osiągnięto limit z tabeli limitów szybkości. Komunikat podaje czas resetu 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 Zasady zezwalają na przechowywanie inne 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ń zawiódł 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. Nie jest to błąd przejściowy: ponowna próba bez zmiany żądania, polityki lub rezydencji kończy się tym samym błędem. Błąd zawiera żądaną rezydencję, a ślad rejestruje, dlaczego każdy punkt końcowy został odrzucony.

Błędy w strumieniu

Żądanie strumieniowe, które zawodzi po wysłaniu nagłówków, zapisuje błąd jako końcową ramkę SSE, a następnie terminator, więc klient, który przestrzega formatu, widzi niepowodzenie zamiast uciętego sukcesu.

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

data: [DONE]