Timeout при chat completions в Heli API: причины и настройки

Таймаут — одна из самых частых проблем при переходе от тестов к продакшену. Короткий запрос отвечает за секунды, а длинный ответ, большой RAG-контекст или reasoning-модель могут генерировать минуту и дольше. Обрыв может произойти в одном из трёх мест: в вашем HTTP-клиенте, в прокси между клиентом и сервером или на стороне Heli. Важно понять, где именно.

Где обрывается запрос

  • Клиент: openai.APITimeoutError в Python или ошибка таймаута в Node.js. Официальные SDK по умолчанию ждут до 10 минут и повторяют запрос после таймаута ещё два раза — итоговое ожидание может быть втрое дольше.
  • Ваш reverse proxy: nginx по умолчанию ждёт ответа upstream 60 секунд (proxy_read_timeout), Cloudflare обрывает проксируемый запрос примерно через 100 секунд с ошибкой 524.
  • Heli: если модель не ответила за отведённое время в запросе без стриминга, Heli вернёт 504 с сообщением «The model did not respond in time. Модель не ответила вовремя.»

Настройка таймаута в SDK

Подбирайте таймаут под сценарий: для чата с короткими ответами хватает десятков секунд, для генерации длинных документов — несколько минут. Слишком большой таймаут в синхронном API держит соединения и воркеры занятыми.

code
# Python
from openai import OpenAI
client = OpenAI(
    base_url="https://getheli.ru/v1",
    api_key=os.environ["HELI_API_KEY"],
    timeout=90.0,      # секунды на запрос
    max_retries=1,
)
# отдельный таймаут для одного запроса
client.with_options(timeout=300.0).chat.completions.create(...)

// Node.js
const client = new OpenAI({
  baseURL: "https://getheli.ru/v1",
  apiKey: process.env.HELI_API_KEY,
  timeout: 90 * 1000, // миллисекунды
  maxRetries: 1,
});

Streaming вместо долгого ожидания

Для длинных ответов включайте stream: true. Первые токены приходят через секунды, соединение не простаивает, и пользователь видит прогресс. В режиме стриминга Heli допускает гораздо более долгие ответы, чем в обычном запросе. Если между клиентом и сервером есть nginx, отключите буферизацию (proxy_buffering off) и увеличьте proxy_read_timeout для маршрута со стримингом.

Streaming в Heli API

Как сократить время ответа

  • Задайте max_tokens: модель не будет генерировать больше нужного.
  • Сократите контекст: в RAG передавайте несколько релевантных фрагментов, а не весь документ.
  • Reasoning-модели долго думают перед первым токеном; для простых задач берите быструю модель.
  • Длинные задачи выносите в фоновые задачи с очередью и отдавайте результат асинхронно.

Gemini 3.5 Flash — быстрые ответы.

GPT-5.4 mini

max_tokens и обрезка ответа

Ошибки 500, 502 и 504

Как отличить источник таймаута

  • APITimeoutError или ETIMEDOUT без HTTP-статуса — сработал таймаут вашего клиента.
  • 504 с JSON-ошибкой type server_error — ответ Heli: модель не успела ответить.
  • HTML-страница 504 Gateway Time-out или 524 — оборвал ваш nginx, балансировщик или Cloudflare.

Попробуйте Heli

Ключ sk-heli- появляется после подтверждения почты. Через Google и Яндекс — сразу в кабинете.

Документация API · Модели и цены

Читайте также