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.
Что дальше
- Каталог моделей — ID для запросов через шлюз.
- Управление ключами — отдельный ключ под шлюз, чтобы расход был виден отдельно.
- Расходы — детализация по запросам и моделям.
- Кэш промпта — как наш кэш соотносится с кэшем шлюза.
Обновлено: