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