hubris

LlamaIndex

Подключение Hubris к LlamaIndex — фреймворку для RAG и агентов на Python. Штатным классом OpenAILike, без своего пакета.

LlamaIndex — фреймворк для RAG и агентов на Python: индексирует документы, ищет по ним и строит агентов поверх любой языковой модели. Hubris подключается штатным классом OpenAILike — отдельный пакет ставить не нужно.

Требования

Установка

pip install -U llama-index-llms-openai-like
export HUBRIS_API_KEY="sk-gw-ваш-ключ"

Подключение

import os
from llama_index.llms.openai_like import OpenAILike

llm = OpenAILike(
    model="anthropic/claude-sonnet-5",
    api_base="https://api.hubris.pw/v1",
    api_key=os.environ["HUBRIS_API_KEY"],
    context_window=1_000_000,
    is_chat_model=True,
    is_function_calling_model=True,
)

print(llm.complete("Столица Франции —"))

Три параметра OpenAILike задаются вручную и по умолчанию неверны для наших моделей.

is_chat_model=True — иначе запрос уйдёт на устаревший /v1/completions вместо чата. is_function_calling_model=True — иначе агент не увидит инструменты, даже если модель их поддерживает. context_window — по умолчанию 3900 токенов, и длинный контекст обрежется на подходе; ставьте значение из карточки модели в каталоге.

Адрес — именно api.hubris.pw, с api. в начале и /v1 в конце. Домен hubris.pw — это сайт и личный кабинет, запросы к API он не обслуживает.

Стриминг

for chunk in llm.stream_complete("Посчитай от 1 до 5"):
    print(chunk.delta, end="", flush=True)

Агент с инструментами

import asyncio

from llama_index.core.agent.workflow import FunctionAgent
from llama_index.core.tools import FunctionTool


def get_weather(city: str) -> str:
    """Вернуть погоду в городе."""
    return f"В городе {city} +12 и дождь"


agent = FunctionAgent(
    tools=[FunctionTool.from_defaults(fn=get_weather)],
    llm=llm,
    system_prompt="Ты помощник. Пользуйся инструментами, когда это уместно.",
)


async def main():
    response = await agent.run("Какая погода в Казани?")
    print(response)


asyncio.run(main())

agent.run() — асинхронный: его нужно await-ить внутри запущенного цикла событий, как выше. Вызов asyncio.run(agent.run(...)) напрямую упадёт с RuntimeError: no running event loop.

Берите модель, у которой в карточке каталога есть tools — например anthropic/claude-sonnet-5, openai/gpt-5.6-luna или google/gemini-3.8-flash.

Эмбеддинги для индекса

Для поиска по документам нужен эмбеддер. Он подключается тем же ключом и адресом:

from llama_index.embeddings.openai import OpenAIEmbedding

embed_model = OpenAIEmbedding(
    model_name="openai/text-embedding-3-small",
    api_base="https://api.hubris.pw/v1",
    api_key=os.environ["HUBRIS_API_KEY"],
)
pip install -U llama-index-embeddings-openai

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

IDКогда подходит
anthropic/claude-sonnet-5основной выбор для агентов и сложного RAG
openai/gpt-6-astraсамые трудные задачи
google/gemini-3.8-flashбыстрые и дешёвые ответы на большом объёме
deepseek/deepseek-v4-proнедорогая альтернатива
openai/text-embedding-3-smallэмбеддинги для индекса

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

Почему без отдельного пакета

Разработчики LlamaIndex больше не принимают новые пакеты интеграций в свой репозиторий — PR с новым pyproject.toml закрывается автоматически. Для сервисов с OpenAI-совместимым API у них для этого и есть OpenAILike.

То есть описанный выше способ — не обходной путь, а тот, который они предусмотрели. Ставить что-то дополнительное не нужно.

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

Ответ обрывается на середине длинного контекста

Не задан context_window. По умолчанию у OpenAILike он равен 3900 токенам, и всё, что длиннее, обрезается до отправки. Поставьте значение из карточки модели.

Агент не вызывает инструменты

Не задан is_function_calling_model=True — без него LlamaIndex считает модель неспособной к вызовам и не передаёт их. Проверьте заодно, что у модели в каталоге есть tools.

NotFoundError: 404 Not Found без текста про модель

Не задан is_chat_model=True — запрос ушёл на /v1/completions, которого у Hubris нет. Наши модели работают через чат. Если в ответе есть model_not_found и ID модели — дело в ID, см. ниже.

Модель не найдена

404, code: model_not_found. ID должен совпадать с каталогом символ в символ, вместе с вендором перед косой чертой: claude-sonnet-5 без anthropic/ не примется.

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

401, code: invalid_api_key. Ключ неверный или отозван. Он начинается на sk-gw-, без пробелов по краям; целиком виден только при создании. Новый — в разделе «Ключи».

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

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

Проверено на LlamaIndex (llama-index-core 0.14.24, llama-index-llms-openai-like 0.8.0), 9 сентября 2026.

Что дальше

Обновлено: