ПЛАТФОРМА

Надёжность

Что мы делаем, чтобы сбой одного провайдера не стал вашим сбоем, - и где проходит граница, за которой ошибка всё-таки доходит до вас.

Failover до того, как вы увидите ошибку

У большинства моделей есть несколько провайдеров. Запрос идёт к ним по очереди, от дешёвого к дорогому. Если провайдер отвечает 429, таймаутом или 5xx, мы молча переходим к следующему - в вашем ответе это никак не отражается, кроме поля provider в логе.

Провайдер, который упал несколько раз подряд, временно исключается из выдачи (circuit breaker) и не мешает следующим запросам, пока не восстановится. Ошибку 503 вы получите, только если перебрали все маршруты и все они отказали.

i
Поэтому 5xx от нас безопасно повторять: к моменту, когда ошибка дошла до вас, резервные маршруты уже перебраны. Повтор имеет смысл с задержкой - скорее всего, лежит сама модель, а не конкретный провайдер.

Что не переигрывается

Если провайдер уже принял запрос и начал биллить его на своей стороне - например, создал асинхронную задачу генерации, - мы не отправляем запрос второму провайдеру, даже если первый затем отвалился. Иначе вы заплатили бы дважды за одну картинку. В таком случае ошибка возвращается вам как есть.

Отказ модерации тоже не переигрывается: если провайдер отклонил промпт, другой провайдер той же модели отклонит его так же. Такой запрос сразу возвращает 400 content_policy_violation и не тратит кредиты.

Таймауты и отмена

  • Запрос, не уложившийся в отведённое время, завершается 504 timeout. Зарезервированные под него кредиты возвращаются на баланс.
  • Если соединение разорвали вы (например, отменили стрим), запрос помечается в логе как 499 client_closed. Это не сбой сервиса.
  • Резерв под запрос, чей процесс умер, освобождается автоматически - деньги не зависают.

Честные ожидания

Мы даём доступ к моделям по цене ниже официальных API, и часть этой разницы - работа с провайдерами, у каждого из которых своя стабильность. Failover сглаживает их сбои, но не отменяет: наша доступность складывается из нашей собственной и доступности хотя бы одного маршрута к вашей модели. Для моделей с единственным провайдером резерва нет по определению.

В продакшене стоит закладываться на это: ретраить 5xx с backoff, уважать retry-after при 429 и держать запасную модель для критичного пути. Разбор кодов - в разделе Ошибки.

ДалееAPI-референс →