Грешки
Всеки код за грешка, с който този API може да отговори, HTTP статусът, който го носи, и какво да правите с него. Обвивката е с формата на OpenAI с едно допълнение в пространство от имена.
Обвивката
error.message е написано за човек, който чете лог, error.type посочва класа на неизправността, а error.code е стабилният идентификатор, по който да се разклонявате — текстът на съобщението не е договор. Когато API има структурирани подробности (коя политика, коя крайна точка, кой модел), те пристигат в error.llmeu и никога не заместват трите стандартни полета.
{
"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" }
}
}
Типът следва статуса
Съпоставянето по-долу е това, което API прилага, изведено от същата таблица, която изгражда отговорите му.
| HTTP | тип |
|---|---|
| 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 |
Кодове
Всеки код, който може да достигне до клиент. Тест обхожда изходния код на API и се проваля, когато тази таблица и кодът се разминават в едната или другата посока, така че код не може да бъде измислен тук или добавен там, без да бъде документиран.
| HTTP | code | Какво означава и какво да правите |
|---|---|---|
| 400 | invalid_request | Тялото на заявката не премина валидация. |
| 400 | invalid_json | Тялото не беше валиден JSON. |
| 400 | invalid_llmeu | Обектът llmeu не беше обект или съдържаше непознато поле. |
| 400 | invalid_residency | Заявената резидентност не е един от четирите класа за хостване. |
| 400 | invalid_data_class | Заявеният data_class не е един от четирите класа. |
| 400 | invalid_retention | Заявеният retention не е zero, 24h, 7d или 30d. |
| 400 | invalid_max_tokens | max_tokens не беше положително цяло число. |
| 400 | invalid_stream | stream не беше булева стойност. |
| 400 | invalid_stop | stop не беше нито низ, нито масив от низове. |
| 400 | invalid_role | Съобщение съдържаше роля извън system, user, assistant и tool. |
| 400 | invalid_tools | tools или tool_choice бяха с неправилен формат. |
| 400 | missing_model | Полето model е задължително. |
| 400 | missing_messages | messages е задължително и не трябва да бъде празно. |
| 400 | missing_input | input е задължително за ембeдинги. |
| 400 | missing_name | name е задължително. |
| 401 | invalid_api_key | Ключът липсва, е неизвестен, отменен или изтекъл. |
| 402 | budget_exceeded | Дневният бюджет на организацията е изразходван. Увеличете max_usd_per_day или изчакайте прозорецът да се презареди. |
| 403 | api_key_required | Заявката използва сесия от конзолата. Създайте API ключ и изпратете него вместо това. |
| 403 | insufficient_scope | Ключът е валиден, но му липсва обхватът, който изисква тази крайна точка. |
| 403 | no_organization | Удостоверението не е свързано с организация. |
| 403 | model_denied | Политиката на организацията забранява този модел или неговия доставчик. |
| 403 | policy_violation | Заявката нарушава правило от политиката на организацията. |
| 403 | retention_exceeds_policy | Заявеното задържане е по-дълго от разрешеното от политиката. Това се проверява преди всичко останало за заявката. |
| 403 | data_class_not_allowed | data_class на заявката не е от разрешените от политиката. |
| 404 | model_not_found | Няма такъв модел за тази организация. |
| 404 | hosted_unavailable | Моделът е в каталога, но не е хостван на LLM EU, така че не може да бъде извикан. |
| 404 | not_found | Маршрутът съществува, но обектът не. |
| 404 | unknown_route | На този път не е монтиран маршрут. Всяка крайна точка на OpenAI, която не е посочена в Endpoints, отговаря с това. |
| 404 | policy_not_found | policy_id в llmeu не принадлежи на тази организация. |
| 409 | no_endpoint_for_policy | Нищо не удовлетворява едновременно политиката и резидентността и нито едно от двете не се отпуска безшумно. |
| 409 | not_a_text_model | Посоченият модел не може да генерира текст: той е модел за разпознаване на реч, за ембeдинги или за преподреждане. |
| 409 | conflict | Заявката е в конфликт с текущото състояние на обекта. |
| 413 | request_too_large | Тялото надвиши ограничението за размер на крайната точка. |
| 429 | rate_limit_exceeded | Достигнат е лимит от таблицата с ограничения на скоростта. Съобщението посочва времето за нулиране на прозореца. |
| 500 | internal_error | Неочакван провал от наша страна. |
| 501 | not_implemented | Крайната точка умишлено не се предлага или заявената възможност не съществува в тази инсталация. |
| 501 | retention_not_implemented | Политиката позволява задържане, различно от нула, а е реализирано само нулево, така че заявката се отказва, вместо да бъде съхранена. |
| 501 | unsupported_n | n по-голямо от 1 не се поддържа. |
| 502 | upstream_error | Никоя крайна точка не можа да обслужи заявката след превключване при отказ. Проследяването записва всеки опит. |
| 502 | stream_failed | Потокът се провали, след като вече беше започнал. |
no_endpoint_for_policy означава, че продуктът работи
409 с този код означава, че политиката и заявката заедно не допускат никаква крайна точка и маршрутизаторът отказа да разхлаби което и да е от двете тихо. Това не е преходно: повторението без промяна на заявката, политиката или резидентността се проваля по същия начин. Грешката носи заявената резидентност, а проследяването записва защо всяка крайна точка е била отхвърлена.
Грешки в поток
Заявка за поток, която се провали след изпращането на заглавките, записва грешката като последен SSE кадър и след това терминатора, така че клиент, който следва формата, вижда провал вместо отрязан успех.
data: {"error":{"message":"No endpoint could start the stream.","type":"api_error","code":"upstream_error"}}
data: [DONE]