Отличите таймаут от ошибки соединения
Timeout: запрос ушёл, ответа нет. Connection error: запрос не ушёл. В SDK это разные исключения, в логах разные тексты. От этого зависит, чинить сеть или лимит ожидания.
Две разные ошибки с похожими симптомами. Таймаут значит, что сервер долго думал; connection error значит, что до сервера вы не дошли вовсе.
Коротко: API timeout значит, что соединение установилось, запрос ушёл, но ответ не пришёл за отведённое время, и клиент его бросил. Connection error значит другое: соединение вообще не установилось, до сервера запрос не дошёл. Первое чаще всего про длинную генерацию и слишком короткий лимит ожидания, второе про сеть: прокси, VPN, DNS, закрытый порт или неверный адрес.
У OpenAI SDK лимит ожидания по умолчанию 10 минут, и это относится ко всему запросу целиком. Таймаут ловится как APITimeoutError, ошибка соединения как APIConnectionError. Если вы задали timeout=30 и просите модель написать длинный текст без стриминга, таймаут почти гарантирован: ответ приходит одним куском только после полной генерации. Со стримингом первый токен приходит быстро, а соединение остаётся живым.
Connection error из России часто связан с VPN и прокси: общий IP, обрыв туннеля, DNS, который отдаёт заблокированный адрес. Проверяется одним curl без прокси. Обе ошибки безопасно повторять с растущей паузой, и SDK умеет это через max_retries.
Наш адрес открывается из России напрямую, без VPN и прокси, на которых чаще всего рвётся соединение. Таймауты и повторы настраиваются в вашем 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}'
лимит в клиенте 30–60 секунд, а модель пишет ответ на несколько тысяч токенов.
без stream=true ответ приходит одним куском в конце, и все промежуточные узлы ждут его целиком.
туннель оборвался, прокси не отвечает, переменные HTTP_PROXY указывают на мёртвый адрес.
имя сервера не резолвится или резолвится в адрес, который из вашей сети недоступен.
порт, протокол или домен с опечаткой дают connection error, а не 404.
перегруженный узел отвечает медленно, и таймаут срабатывает у вас раньше, чем 504 у него.
| Текст ошибки | Причина | Что делать |
|---|---|---|
| APITimeoutError / Request timed out | Ответ не пришёл за лимит клиента | Поднять timeout, включить стриминг, укоротить запрос |
| APIConnectionError / Connection error | Соединение не установилось | Проверить прокси, VPN, DNS и адрес одним curl |
| getaddrinfo ENOTFOUND / Name or service not known | DNS не нашёл имя сервера | Проверить base URL и DNS-сервер сети |
| ECONNRESET / Connection reset by peer | Соединение оборвано по дороге | Отключить туннель и повторить; проверить прокси |
| ETIMEDOUT на этапе connect | Порт или адрес недоступен из сети | Проверить порт 443 и правила файрвола |
Тексты приведены по исключениям OpenAI SDK и типичным ошибкам Node.js и Python; в других библиотеках формулировки отличаются.
Timeout: запрос ушёл, ответа нет. Connection error: запрос не ушёл. В SDK это разные исключения, в логах разные тексты. От этого зависит, чинить сеть или лимит ожидания.
Если команда отвечает за секунды, сеть в порядке и дело в лимите. Если висит или падает, проблема между вами и сервером.
Лимит ожидания подбирайте под задачу: для чата 60 секунд, для длинных документов несколько минут. Повторы SDK сделает сам с растущей паузой.
stream=True в SDK или "stream": true в теле запроса. Первые токены приходят через секунды, и ни клиент, ни промежуточные узлы не обрывают соединение по таймауту.
Проверьте переменные HTTP_PROXY и HTTPS_PROXY, отключите VPN, если адрес доступен напрямую, замените DNS на публичный. Каждое звено добавляет задержку и свою точку отказа.
Исключения APITimeoutError и APIConnectionError. Оба покрываются max_retries; timeout задаётся в клиенте или на уровне одного запроса через with_options.
Таймаут в настройках провайдера или в конфиге; для агентных задач с длинным выводом ставьте не меньше 2–3 минут.
У HTTP-ноды свой лимит ожидания, по умолчанию небольшой. Поднимите его в настройках ноды и включите Retry On Fail.
Параметры request_timeout и max_retries у модели; стриминг через .stream() вместо .invoke().
Connection error здесь почти всегда про сеть или неверный base URL: проверьте переменные окружения и прокси в той же оболочке, где запускаете инструмент.
Под задачу: 60 секунд для короткого чата, 3–5 минут для длинных документов без стриминга. По умолчанию у OpenAI SDK 10 минут, и это слишком много для интерактивных сценариев.
Сервер мог успеть выполнить запрос и сгенерировать ответ, который вы не получили. Поэтому для длинных задач включайте стриминг: полученная часть не теряется.
Туннель добавляет своё звено: общий IP, свой DNS, обрывы при переподключении. Если адрес доступен напрямую, VPN для него не нужен.
Соединение установилось, но его закрыли по дороге: чаще всего это делает прокси, VPN или балансировщик с коротким лимитом простоя, пока модель долго молчит перед очередным фрагментом. Автоповторы SDK тут не спасут, они срабатывают до начала ответа, поэтому оборванный поток запускайте заново или уберите лишнее звено из сети.
Они сначала думают и только потом отвечают: на сложной задаче рассуждение может идти минутами, а без стриминга клиент всё это время не получает ни байта. Поднимите timeout с запасом на рассуждение, включите стриминг или уменьшите глубину рассуждения: у моделей OpenAI за неё отвечает параметр reasoning_effort.
OpenAI-совместимый адрес, оплата в рублях, ключ сразу после регистрации. Пополнение картой от 50 ₽.