LiteLLM
Подключение Hubris к LiteLLM — единый интерфейс к сотне провайдеров, через который работают DSPy, OpenAI Agents SDK и Open Interpreter.
LiteLLM — Python-библиотека и прокси с единым вызовом completion() для сотни провайдеров. Поверх неё построены DSPy, OpenAI Agents SDK, Open Interpreter и необязательный режим CrewAI, поэтому подключение Hubris к LiteLLM открывает его сразу во всех этих инструментах.
Требования
Установка
pip install -U litellm
export HUBRIS_API_KEY="sk-gw-ваш-ключ"Подключение
Hubris говорит на протоколе OpenAI, поэтому LiteLLM нужно сказать «это OpenAI-совместимая точка» и дать адрес:
import os
import litellm
response = litellm.completion(
model="openai/anthropic/claude-sonnet-5",
api_base="https://api.hubris.pw/v1",
api_key=os.environ["HUBRIS_API_KEY"],
messages=[{"role": "user", "content": "Привет!"}],
)
print(response.choices[0].message.content)Имя модели пишется с двойным префиксом: сначала openai/ — это указание LiteLLM «говори по протоколу OpenAI», затем наш полный ID вместе с вендором. То есть openai/anthropic/claude-sonnet-5 и openai/openai/gpt-5.6-luna, а не anthropic/claude-sonnet-5 и не openai/gpt-5.6-luna.
Первый openai/ LiteLLM снимает и отправляет на Hubris ровно то, что осталось. Без него LiteLLM разберёт ID по вендору сам: anthropic/… уйдёт в Anthropic мимо api_base, а openai/gpt-5.6-luna превратится в gpt-5.6-luna — и Hubris ответит «модель не найдена».
Адрес — именно api.hubris.pw, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет, запросы к API он не обслуживает.
Стриминг и инструменты
Работают штатными средствами LiteLLM, ничего специального для Hubris не нужно:
for chunk in litellm.completion(
model="openai/anthropic/claude-sonnet-5",
api_base="https://api.hubris.pw/v1",
api_key=os.environ["HUBRIS_API_KEY"],
messages=[{"role": "user", "content": "Посчитай до пяти."}],
stream=True,
):
print(chunk.choices[0].delta.content or "", end="", flush=True)Вызов инструментов передаётся параметром tools в формате OpenAI, структурированный вывод — response_format. Какие параметры поддерживает конкретная модель, видно в поле supported_parameters ответа GET /v1/models.
Прокси LiteLLM
В config.yaml прокси-сервера модель Hubris описывается той же строкой с двойным префиксом:
model_list:
- model_name: claude-sonnet
litellm_params:
model: openai/anthropic/claude-sonnet-5
api_base: https://api.hubris.pw/v1
api_key: os.environ/HUBRIS_API_KEYЗапускается как обычно — litellm --config config.yaml (нужен pip install "litellm[proxy]"); клиенты обращаются к прокси по короткому model_name.
Рекомендуемые модели
| ID | Когда подходит |
|---|---|
anthropic/claude-sonnet-5 | агенты, сложные многошаговые задачи |
anthropic/claude-haiku-4.5 | быстрые и дешёвые цепочки |
google/gemini-3.7-flash | длинный контекст, мультимодальность |
deepseek/deepseek-v4-flash-0731 | массовая обработка текста по минимальной цене |
В LiteLLM каждый из них пишется с openai/ впереди: openai/google/gemini-3.7-flash.
Встроенный провайдер «Hubris»
Мы отправили в LiteLLM отдельный провайдер — pull request на ревью. После приёма модели можно будет писать как hubris/anthropic/claude-sonnet-5, с ключом из переменной HUBRIS_API_KEY и без api_base. Пока PR не принят, работает описанный выше способ — это то же самое подключение.
Решение проблем
NotFoundError: … Модель не найдена: gpt-5.6-luna или AnthropicException - 404 Not Found
Забыт первый префикс openai/. LiteLLM разобрал ID по вендору сам: у OpenAI-моделей отрезал openai/ и отправил на Hubris короткое имя, а anthropic/… попытался отправить напрямую в Anthropic. Пишите openai/ + полный ID из каталога.
BadRequestError: … Неверный API-ключ (код 401)
Ключ отозван или скопирован с ошибкой; LiteLLM показывает нашу ошибку 401 под своим типом BadRequestError. Проверьте, что api_key передан явно или что переменная HUBRIS_API_KEY видна процессу; ключ начинается с sk-gw-.
Модель не найдена при правильном префиксе
ID после openai/ должен совпадать с каталогом символ в символ, включая вендора. Короткие имена без вендора Hubris не принимает.
Что дальше
- Каталог моделей — ID для подключения
- GET /v1/models — поле
supported_parameters, чтобы включать инструменты и размышление только там, где они поддерживаются - Управление ключами — отдельный ключ под каждое приложение
- CrewAI — там имя модели пишется тем же двойным префиксом
Обновлено: