Прочитайте сырой ответ поставщика
В JSON ошибки кроме message есть блок с именем поставщика и его исходным ответом. Там написано: перегрузка, таймаут, контекст или параметр.
Ваш запрос дошёл до OpenRouter, а сломалось дальше — у поставщика модели. Разбираем, что лежит внутри ответа и как переключить маршрут.
Коротко: Provider returned error — ответ OpenRouter с кодом 502: агрегатор принял ваш запрос, передал его поставщику модели, а тот вернул ошибку. Ключ, баланс и формат запроса здесь обычно ни при чём — сбой на следующем звене. В теле ответа рядом с текстом лежит сырой ответ поставщика и его имя, и именно там написано, что случилось на самом деле.
Чаще всего внутри перегрузка или таймаут у поставщика, его модерация, превышение его лимита контекста или параметр, который этот конкретный поставщик не поддерживает. У одной модели на OpenRouter бывает несколько поставщиков, и ошибка может касаться только одного из них — остальные в этот момент работают.
Поэтому лечится двумя способами. Первый — повтор через несколько секунд: если сбой временный, следующий запрос уйдёт другому поставщику. Второй — управление маршрутом: поле provider с order и allow_fallbacks задаёт, кого пробовать первым и разрешено ли переключаться. Если ошибка повторяется на одной модели у всех поставщиков, меняйте модель, а не настройки.
Поставщика в запросе выбирать не нужно: маршрут до модели мы держим сами. Ошибки приходят с обычными кодами 502 и 503, повторы в SDK работают.
https://api.kosareva.cloud/v1, ключ из кабинетаfrom openai import OpenAI client = OpenAI( api_key="ВАШ_API_КЛЮЧ", base_url="https://api.kosareva.cloud/v1", ) response = client.chat.completions.create( model="gpt-5-6", messages=[{"role": "user", "content": "Привет!"}], stream=True, )
import OpenAI from "openai"; const client = new OpenAI({ apiKey: "ВАШ_API_КЛЮЧ", baseURL: "https://api.kosareva.cloud/v1", }); const response = await client.chat.completions.create({ model: "gpt-5-6", messages: [{ role: "user", content: "Привет!" }], stream: true, });
curl https://api.kosareva.cloud/v1/chat/completions \ -H "Authorization: Bearer ВАШ_API_КЛЮЧ" \ -H "Content-Type: application/json" \ -d '{"model":"gpt-5-6","messages":[{"role":"user","content":"Привет!"}],"stream":true}'
Внутри сырого ответа overloaded или 529: у поставщика нет мощности, через несколько секунд обычно проходит.
Длинный запрос без стриминга не уложился в его лимит времени; у OpenRouter это может прийти и как 408.
У одной и той же модели разные поставщики дают разный максимум контекста, и ваш запрос влез не ко всем.
Например, формат ответа или инструменты, которые у этого поставщика не реализованы; другой поставщик тот же запрос примет.
Запрос прошёл OpenRouter, но отклонён фильтром поставщика; смена маршрута иногда помогает, смягчение запроса — надёжнее.
| Текст ошибки | Причина | Что делать |
|---|---|---|
| 502 Provider returned error, внутри overloaded | Перегрузка у поставщика модели | Повтор с паузой 2–5 секунд, allow_fallbacks: true |
| 502 Provider returned error, внутри timeout | Поставщик не ответил в свой лимит времени | Включить стриминг, сократить запрос, другой поставщик через provider.order |
| 502 Provider returned error, внутри context length | Контекст больше лимита этого поставщика | Сократить историю или выбрать поставщика с большим контекстом |
| 502 Provider returned error, внутри unsupported | Параметр не поддержан у этого поставщика | Убрать параметр или задать order с поставщиком, который его умеет |
| 408 Request timeout | Ответ не пришёл в отведённое OpenRouter время | Стриминг, повтор, увеличить timeout в клиенте |
Имя поставщика и его сырой ответ есть в теле ошибки. Смотрите их, прежде чем менять код: половина случаев лечится повтором.
В JSON ошибки кроме message есть блок с именем поставщика и его исходным ответом. Там написано: перегрузка, таймаут, контекст или параметр.
Для перегрузки и таймаута хватает повтора через 2–5 секунд. В SDK OpenAI это max_retries: 502 повторяется автоматически, пауза растёт сама.
allow_fallbacks: true переключает запрос на другого поставщика той же модели, если первый вернул ошибку. Это поведение по умолчанию, но проверьте, что вы его не отключили.
Если ошибка стабильно у одного поставщика, поставьте другого первым через order. Имена поставщиков видны на странице модели у OpenRouter.
Если 502 идёт у всех поставщиков одной модели, дело в модели: у неё сегодня плохой день. Возьмите соседнюю из того же семейства и вернитесь позже.
Ошибка приходит в чат как есть, вместе с текстом поставщика. Повторите запрос; порядок поставщиков в редакторе не настраивается, только в настройках аккаунта OpenRouter.
502 ловится как InternalServerError и повторяется через max_retries. Поля provider передаются через extra_body.
Включите Retry On Fail с паузой 5 секунд и 3 попытками: этого хватает на большинство перегрузок.
Параметры маршрута идут через model_kwargs или extra_body у модели, повторы — with_retry().
Нет. Запрос не выполнен, кредиты за него не снимаются.
У каждой модели свой набор поставщиков. Если сбоит единственный поставщик модели, переключаться некуда, и помогает только повтор или другая модель.
Ни то ни другое: сломалось у поставщика модели. Ваша сторона — только повтор и выбор маршрута.
В теле ответа: рядом с message лежит блок с именем поставщика и его исходным ответом. Там и написано, что случилось — перегрузка, таймаут, контекст или неподдерживаемый параметр.
Настройка маршрута OpenRouter: если первый поставщик вернул ошибку, запрос уходит к другому поставщику той же модели. По умолчанию она включена — проверьте, что вы её не отключили.
OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.