hubris

Portkey Gateway

Подключение Hubris к Portkey AI Gateway — прокси с логами, кэшем и фолбэками. Hubris задаётся как OpenAI-совместимый апстрим.

Portkey AI Gateway — прокси перед моделями: единый вход, логи и трассировки, кэш ответов, повторы и фолбэк на другую модель, лимиты по бюджету. Ставится своим контейнером или используется как облачный сервис.

Hubris задаётся апстримом с указанием своего адреса — как OpenAI-совместимый провайдер.

Требования

  • Запущенный Portkey Gateway (npx @portkey-ai/gateway, Docker или облако)
  • Аккаунт на hubris.pw и API-ключ

Подключение

Portkey принимает настройки апстрима заголовками. Для Hubris — провайдер openai и наш адрес в x-portkey-custom-host:

curl http://localhost:8787/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "x-portkey-provider: openai" \
  -H "x-portkey-custom-host: https://api.hubris.pw/v1" \
  -H "Authorization: Bearer sk-gw-ваш-ключ" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "messages": [{"role": "user", "content": "Привет"}]
  }'

То же самое из клиента OpenAI: указываете base_url на шлюз и передаёте те же заголовки в default_headers.

В x-portkey-custom-host — именно https://api.hubris.pw/v1, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет: запросы к API он не обслуживает.

ID модели пишется полностью, вместе с вендором: anthropic/claude-sonnet-5, openai/gpt-5.6-luna.

В Portkey Gateway 1.15.2, запущенном как Node-процесс (npx @portkey-ai/gateway), запрос со "stream": true и GET /v1/models через шлюз возвращают 500 {"status":"failure","message":"Something went wrong"}. Это ошибка самого шлюза (TypeError: immutable при правке заголовков ответа апстрима), она воспроизводится с любым OpenAI-совместимым сервером, не только с Hubris. Обычные запросы без стриминга проходят. Нужен стриминг через шлюз — следите за выпусками Portkey или ходите за потоком в https://api.hubris.pw/v1 напрямую.

Что даёт шлюз поверх Hubris

Смысл связки — не в доступе к моделям (он у вас и так есть), а в том, что Portkey добавляет вокруг запроса:

  • Фолбэк и повторы. Если модель ответила ошибкой, шлюз сам сходит в запасную. Задаётся конфигом в заголовке x-portkey-config: {"strategy":{"mode":"fallback"},"targets":[…]}, у каждой цели свои provider: "openai", custom_host, api_key и override_params: {"model": "…"}. Какая цель ответила, видно в заголовке ответа x-portkey-last-used-option-index.
  • Логи. Запросы к локальному шлюзу видны в его веб-интерфейсе на http://localhost:8787/public/ — удобно при отладке промптов.
  • Кэш ответов и бюджеты по виртуальным ключам — только в облачном Portkey. У локального шлюза кэш выключен: на конфиг {"cache":{"mode":"simple"}} он отвечает x-portkey-cache-status: DISABLED. Наш собственный кэш промпта работает на другом уровне и от шлюза не зависит.

Выбор моделей

IDКогда подходит
google/gemini-3.7-flashдешёвый основной маршрут
anthropic/claude-sonnet-5сложные задачи, длинный контекст
openai/gpt-5.6-lunaуниверсальный выбор
deepseek/deepseek-v4-proнедорогое рассуждение и код

Каталог у нас открыт без ключа — список можно посмотреть прямо в браузере: api.hubris.pw/v1/models.

Встроенный провайдер «Hubris»

Мы отправили в Portkey отдельного провайдера — pull request на ревью. После приёма заголовок станет одним: x-portkey-provider: hubris, без x-portkey-custom-host. Пока PR не принят, работает описанный выше способ — это то же самое подключение.

Решение проблем

Шлюз отвечает 400 «Either x-portkey-config or x-portkey-provider header is required»

Не передан x-portkey-provider: openai (или конфиг в x-portkey-config) — без него шлюз не знает, каким протоколом говорить с апстримом.

Шлюз отвечает 404 «Not Found» в HTML

В x-portkey-custom-host нет /v1 на конце: шлюз стучится в https://api.hubris.pw/chat/completions, а такого пути нет. Адрес должен заканчиваться на /v1.

Стриминг или /v1/models возвращают 500 «Something went wrong»

Ошибка шлюза 1.15.2 при запуске Node-процессом, см. предупреждение выше. Без "stream": true запрос проходит.

Ошибка авторизации от Hubris

Шлюз возвращает 401 {"error":{"message":"openai error: Неверный API-ключ","code":"invalid_api_key"}} — ключ передаётся обычным заголовком Authorization: Bearer sk-gw-…, шлюз пробрасывает его как есть. Проверьте, что ключ начинается на sk-gw- и не отозван; новый — в разделе «Ключи».

Ошибка про модель

Шлюз возвращает 404 {"error":{"message":"openai error: Модель не найдена: …","code":"model_not_found"}}. ID должен совпадать с каталожным символ в символ, вместе с вендором перед косой чертой. Короткие имена без вендора и имена с датой на конце мы не принимаем.

Ошибка про недостаточный баланс

Пополните баланс в кабинете — от 300 ₽, через СБП, банковской картой или по счёту для юридических лиц.

Проверено на Portkey Gateway 1.15.2 (npx @portkey-ai/gateway, Node 24 и Node 22), 9 сентября 2026.

Что дальше

Обновлено: