hubris

gptel

Подключение Hubris к gptel — клиенту языковых моделей для Emacs. Один бэкенд на весь каталог, ключ из переменной окружения.

gptel — клиент языковых моделей для Emacs: чат в отдельном буфере или прямо в том, где вы работаете, переписывание выделенного текста, инструменты, контекст из файлов и регионов. Работает с любым OpenAI-совместимым API через gptel-make-openai.

Hubris подключается одним бэкендом — отдельного пакета не нужно.

Требования

  • Emacs 27.1+ и пакет gptel из MELPA или NonGNU ELPA: M-x package-install RET gptel RET
  • Аккаунт на hubris.pw и API-ключ в переменной окружения HUBRIS_API_KEY

Подключение

В init.el:

(gptel-make-openai "Hubris"                    ; имя в меню gptel
  :host "api.hubris.pw"
  :endpoint "/v1/chat/completions"
  :key (lambda () (getenv "HUBRIS_API_KEY"))   ; или строка с ключом
  :stream t
  :models '(anthropic/claude-sonnet-5           ; полный каталог — hubris.pw/models
            anthropic/claude-haiku-4.5
            openai/gpt-5.6-luna
            google/gemini-3.7-flash
            deepseek/deepseek-v4-flash))

После этого бэкенд «Hubris» появляется в меню M-x gptel-menu — там выбирается и модель. Чтобы он был бэкендом по умолчанию, присвойте его gptel-backend и задайте модель:

(setq gptel-model 'anthropic/claude-sonnet-5
      gptel-backend (gptel-make-openai "Hubris"
                      :host "api.hubris.pw"
                      :endpoint "/v1/chat/completions"
                      :key (lambda () (getenv "HUBRIS_API_KEY"))
                      :stream t
                      :models '(anthropic/claude-sonnet-5
                                anthropic/claude-haiku-4.5
                                openai/gpt-5.6-luna
                                google/gemini-3.7-flash
                                deepseek/deepseek-v4-flash)))

:host — только имя хоста, без https:// и без пути: api.hubris.pw. Путь идёт отдельно в :endpoint, протокол https gptel подставляет сам. Домен hubris.pw без api. — это сайт и личный кабинет: запросы к API он не обслуживает.

:key принимает строку, имя переменной или функцию без аргументов, которая возвращает ключ, — функция с getenv удобна тем, что ключ не попадает в init.el.

Использование

  • M-x gptel — открыть буфер чата, C-c RET — отправить.
  • M-x gptel-send — отправить текст до курсора из любого буфера, ответ придёт в него же.
  • M-x gptel-menu — сменить бэкенд, модель, системную инструкцию, добавить контекст.

Ответ приходит по частям — за это отвечает :stream t в определении бэкенда.

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

В :models перечисляются ID, которые вы хотите видеть в меню; любой ID из каталога можно добавить в список. ID пишутся полностью, вместе с вендором и без даты в конце — как символ: anthropic/claude-sonnet-5, а не claude-sonnet-5.

Модель, которой нет в :models, gptel не отправит: при запросе он покажет предупреждение Preferred gptel-model "…" not supported in "Hubris", using "…" instead и подставит первую модель из списка. Поэтому, если задаёте gptel-model руками, добавьте этот ID в :models — иначе запрос уйдёт не туда, куда вы думаете.

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

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

Hubris в документации gptel

Мы отправили в gptel раздел о Hubris для README и списка поддерживаемых сервисов — pull request на ревью. Блок подключения в нём тот же, что выше: gptel-make-openai "Hubris" :host "api.hubris.pw". Ждать приёма не нужно — всё уже работает в текущем релизе gptel.

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

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

В echo-области: Hubris error: ((HTTP/1.1 401 Unauthorized) invalid_request_error) Неверный API-ключ — ключ неверный или отозван. Он начинается на sk-gw-, без пробелов по краям; целиком виден только при создании. Новый — в разделе «Ключи».

Если HUBRIS_API_KEY не задана, getenv вернёт nil, и gptel упадёт ещё до запроса с ошибкой wrong-type-argument (stringp nil) из gptel--get-api-key. Проверьте, что переменная видна процессу Emacs: графический Emacs, запущенный из меню, не всегда наследует окружение оболочки — тогда задайте её через (setenv "HUBRIS_API_KEY" "...") до определения бэкенда или подключите exec-path-from-shell.

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

Hubris error: ((HTTP/1.1 404 Not Found) invalid_request_error) Модель не найдена: … — ID должен совпадать с каталожным символ в символ, вместе с вендором перед косой чертой. Короткие имена без вендора и имена с датой на конце мы не принимаем. Если же ошибки нет, а отвечает не та модель, — смотрите предупреждение про :models выше: gptel подменил модель на первую из списка.

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

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

Проверено на gptel 0.9.9.6 (MELPA 20260906.334), Emacs 31.1, 9 сентября 2026.

Что дальше

Обновлено: