Провайдеры LLM и моделей

На этой странице собрано всё о настройке провайдеров инференса для Hermes Agent — от облачных API вроде OpenRouter и Anthropic до self-hosted-эндпоинтов вроде Ollama и vLLM, а также продвинутая маршрутизация и резервные конфигурации. Чтобы пользоваться Hermes, вам нужен хотя бы один настроенный провайдер.

Провайдеры инференса

Вам понадобится как минимум один способ подключения к LLM. Используйте hermes model для интерактивного переключения провайдеров и моделей, либо настройте всё напрямую:

ПровайдерНастройка
Nous Portalhermes model (OAuth, по подписке)
OpenAI Codexhermes model → ChatGPT or Codex Subscription (OAuth через ChatGPT, использует модели Codex)
GitHub Copilothermes model (OAuth device code flow, COPILOT_GITHUB_TOKEN, GH_TOKEN или gh auth token)
GitHub Copilot ACPhermes model (запускает локальный copilot --acp --stdio)
Anthropichermes model (Claude Max + дополнительные кредиты использования через OAuth; также поддерживается ключ Anthropic API или ручной setup-token — см. примечание ниже)
OpenRouterOPENROUTER_API_KEY в ~/.hermes/.env либо hermes auth add openrouter --type oauth (вход через браузер по PKCE-флоу OpenRouter; ключ сохраняется в пул учётных данных)
Ramp RouterRAMP_ROUTER_API_KEY в ~/.hermes/.env (провайдер: router; псевдонимы: ramp-router, ramp, router.com; нативный для Responses API шлюз, живой каталог моделей по вашему аккаунту)
Fireworks AIFIREWORKS_API_KEY в ~/.hermes/.env (провайдер: fireworks; псевдонимы: fireworks-ai, fw)
NovitaAINOVITA_API_KEY в ~/.hermes/.env (провайдер: novita, 200+ моделей, Model API, Agent Sandbox, GPU Cloud)
AI GatewayAI_GATEWAY_API_KEY в ~/.hermes/.env (провайдер: ai-gateway)
z.ai / GLMGLM_API_KEY в ~/.hermes/.env (провайдер: zai)
Kimi / MoonshotKIMI_API_KEY в ~/.hermes/.env (провайдер: kimi-coding)
Kimi / Moonshot (Китай)KIMI_CN_API_KEY в ~/.hermes/.env (провайдер: kimi-coding-cn; псевдонимы: kimi-cn, moonshot-cn)
Arcee AIARCEEAI_API_KEY в ~/.hermes/.env (провайдер: arcee; псевдонимы: arcee-ai, arceeai)
GMI CloudGMI_API_KEY в ~/.hermes/.env (провайдер: gmi; псевдонимы: gmi-cloud, gmicloud)
Nebius Token FactoryNEBIUS_API_KEY в ~/.hermes/.env (провайдер: nebius-token-factory; псевдонимы: nebius, nebius-tf, tokenfactory)
Actual ComputerACTUAL_API_KEY в ~/.hermes/.env для хостируемого релея; для локального демона задайте model.base_url в config.yaml (на loopback ключ не нужен). Провайдер: actual; псевдонимы: actual-computer, actualcomputer, aci.
MiniMaxMINIMAX_API_KEY в ~/.hermes/.env (провайдер: minimax)
MiniMax ChinaMINIMAX_CN_API_KEY в ~/.hermes/.env (провайдер: minimax-cn)
xAI (Grok) — Responses APIXAI_API_KEY в ~/.hermes/.env (провайдер: xai)
xAI Grok OAuth (SuperGrok)hermes model → «xAI Grok OAuth (SuperGrok / Premium+)» — вход через браузер, без API-ключа. См. руководство
Qwen Cloud (Alibaba DashScope)DASHSCOPE_API_KEY в ~/.hermes/.env (провайдер: alibaba; эндпоинт для материкового Китая: alibaba-cn)
Alibaba Cloud (Coding Plan)ALIBABA_CODING_PLAN_API_KEY (резервный вариант — DASHSCOPE_API_KEY) (провайдер: alibaba-coding-plan, псевдоним: alibaba_coding; эндпоинт для материкового Китая: alibaba-coding-plan-cn с ALIBABA_CODING_PLAN_CN_API_KEY и откатом на общие ключи) — отдельный тарифный SKU, другой эндпоинт
Alibaba Cloud (Token Plan)ALIBABA_TOKEN_PLAN_API_KEY в ~/.hermes/.env (провайдер: alibaba-token-plan; эндпоинт для материкового Китая: alibaba-token-plan-cn с ALIBABA_TOKEN_PLAN_CN_API_KEY и откатом на общий ключ) — тариф Model Studio с плоской ценой за токен
Kilo CodeKILOCODE_API_KEY в ~/.hermes/.env (провайдер: kilocode)
Xiaomi MiMoXIAOMI_API_KEY в ~/.hermes/.env (провайдер: xiaomi, псевдонимы: mimo, xiaomi-mimo)
Tencent TokenHubTOKENHUB_API_KEY в ~/.hermes/.env (провайдер: tencent-tokenhub, псевдонимы: tencent, tokenhub, tencentmaas)
Tencent TokenPlanTOKENPLAN_API_KEY в ~/.hermes/.env (провайдер: tencent-tokenplan, псевдонимы: tokenplan, tencent-lkeap; эндпоинт Anthropic Messages)
OpenCode ZenOPENCODE_ZEN_API_KEY в ~/.hermes/.env (провайдер: opencode-zen)
CommandCodeCOMMANDCODE_API_KEY в ~/.hermes/.env (провайдер: commandcode, псевдоним: commandcode-chat; модели Claude — через commandcode-anthropic, псевдоним: commandcode-claude). Работает с планами GOAT/Pro/Max/Provider (кроме тарифа Go за $1 — у него нет доступа к API).
OpenCode GoOPENCODE_GO_API_KEY в ~/.hermes/.env (провайдер: opencode-go)
DeepSeekDEEPSEEK_API_KEY в ~/.hermes/.env (провайдер: deepseek)
Hugging FaceHF_TOKEN в ~/.hermes/.env (провайдер: huggingface, псевдоним: hf)
Google / GeminiGOOGLE_API_KEY (или GEMINI_API_KEY) в ~/.hermes/.env (провайдер: gemini)
Google Vertex AIhermes model → «Google Vertex AI» (провайдер: vertex; OAuth2 через JSON сервис-аккаунта или ADC, биллинг GCP)
OpenAI API (напрямую)OPENAI_API_KEY в ~/.hermes/.env (провайдер: openai-api, опционально OPENAI_BASE_URL)
Azure AI Foundryhermes model → «Azure AI Foundry» (провайдер: azure-foundry; использует эндпоинт и ключ Azure OpenAI / Foundry)
AWS Bedrockhermes model → «AWS Bedrock» (провайдер: bedrock; стандартная цепочка учётных данных AWS через boto3)
NVIDIA BuildNVIDIA_API_KEY в ~/.hermes/.env (провайдер: nvidia; модели на NIM-хостинге build.nvidia.com)
Ollama Cloudhermes model → «Ollama Cloud» (провайдер: ollama-cloud; облачный API Ollama)
Qwen OAuthhermes model → «Qwen OAuth» (провайдер: qwen-oauth; вход через браузер по PKCE)
MiniMax OAuthhermes model → «MiniMax (OAuth)» (провайдер: minimax-oauth; вход через браузер по PKCE)
StepFunSTEPFUN_API_KEY в ~/.hermes/.env (провайдер: stepfun)
LM Studiohermes model → «LM Studio» (провайдер: lmstudio, опционально LM_API_KEY)
Custom Endpointhermes model → выберите «Custom endpoint» (сохраняется в config.yaml)

Оба встроенных провайдера OpenCode отправляют с каждым запросом непрозрачный заголовок x-opencode-session, свой на каждую беседу (основные ходы по любому транспорту плюс вспомогательные вызовы — сжатие, заголовки сессий, проверки подтверждений, запросы к Skills Hub и побочные вопросы /btw, включая те, что выполняются в фоне уже после завершения хода; headless-вызовы Kanban specify/decompose и оценки с дашборда используют ключ на задачу; одноразовые вызовы вообще без живой сессии, например генерация сообщения коммита в десктопе из панели ревью, отправляют свежий эфемерный ключ). OpenCode по нему закрепляет беседу за одним бэкендом, чтобы кэш промптов оставался тёплым; значение выводится из идентификатора сессии Hermes (или идентификатора задачи Kanban) и никаких персональных данных не несёт.

Каждый из двух встроенных провайдеров OpenCode закреплён за собственным relay на opencode.ai (opencode-zen → /zen/v1, opencode-go → /zen/go/v1). model.base_url, оставшийся от другого relay, автоматически исправляется на relay выбранного провайдера, а какой relay использовать, решает выбранная модель (-m, /model, запись fallback или переопределение для канала) — так что переход с модели Zen на модель только для Go никогда не отправит запрос в Zen. Та же маршрутизация по моделям применяется заново при возобновлении сессии (hermes --resume, /resume, пути возобновления в TUI и десктопе): формат запросов или URL relay, записанные, пока сессия работала на другой модели OpenCode, не переносятся на модель, с которой сессию открыли снова. Модели OpenCode, в id которых есть маркер -vision (например, deepseek-v4-flash-vision-exp), считаются поддерживающими зрение ещё до того, как их внесёт models.dev, так что agent.image_input_mode: auto прикладывает изображения нативно без переопределения supports_vision. Пользовательский провайдер, объявленный в providers:, чьё имя продолжает слаг семейства (например, opencode-go-bridge), по-прежнему получает семейную маршрутизацию по API-режиму для каждой модели и обработку /v1, но его base_url берётся как объявлен: называйте его по тому relay, на который он действительно указывает. Вспомогательные задачи (auxiliary.compression, заголовки, зрение, MoA), направленные на провайдера OpenCode, следуют той же таблице по моделям, так что модель только для Responses вроде gpt-5.6-luna или модель с протоколом Anthropic вроде minimax-m2.5 работает там ровно так же, как в основном разговоре.

Официальный способ подключения через API-ключ описан в отдельном руководстве по Google Gemini.

совет
Псевдоним ключа модели

В секции конфигурации model: можно использовать как default:, так и model: в качестве имени ключа для ID вашей модели. Обе записи — model: { default: my-model } и model: { model: my-model } — работают одинаково.

Nous Portal

Nous Portal — единый подписочный шлюз Nous Research и рекомендованный способ запуска Hermes Agent. Один вход через OAuth открывает доступ к 300+ передовым агентным моделям (Claude, GPT, Gemini, DeepSeek, Qwen, Kimi, GLM, MiniMax, Grok и другим), плюс Tool Gateway (веб-поиск, генерация изображений, TTS, автоматизация браузера) — всё это списывается с вашей подписки Nous вместо отдельных аккаунтов у каждого провайдера.

hermes setup --portal     # чистая установка — OAuth + провайдер + шлюз одной командой
hermes model              # уже есть установка — выберите «Nous Portal» из списка
hermes portal info        # в любой момент проверить вход и маршрутизацию

Ещё нет подписки? Оформите её на portal.nousresearch.com/manage-subscription.

Подробности: см. отдельную страницу интеграции с Nous Portal (что входит в подписку, каталог моделей, устранение неполадок) и пошаговое руководство по запуску Hermes Agent с Nous Portal.

Идентификация клиента. Каждый запрос от Hermes Agent к Portal несёт тег client=hermes-client-v<версия> (например, client=hermes-client-v0.13.0), автоматически синхронизированный с установленным релизом. Он отправляется по всем каналам взаимодействия с Portal — основной цикл чата, вспомогательные вызовы, суммаризатор сжатия, веб-извлечение — и позволяет телеметрии на стороне Portal отличать трафик Hermes от других клиентов. Настройка не требуется — тег обновляется автоматически при hermes update.

JWT-аутентификация (автоматическая). Для запросов к Portal Hermes предпочитает скоуп-ограниченные JWT inference:invoke, а устаревший путь с непрозрачным session-key используется как резервный. Настройка не требуется — учётные данные управляются через OAuth-флоу и обновляются прозрачно. Отозванные refresh-токены помещаются в карантин, чтобы избежать циклов повторного использования.

инфо
Примечание по Codex

Провайдер OpenAI Codex по умолчанию аутентифицируется через device code (открываете URL, вводите код). Организации, в которых грант device code отключён, могут вместо него включить браузерный поток authorization code + PKCE: hermes auth add openai-codex --browser (на один вход) или auth.codex_login_flow: browser в config.yaml (для каждого входа в Codex, включая hermes model). Этот поток слушает http://localhost:1455/auth/callback — redirect URI, зарегистрированный для клиента Codex, поэтому порт фиксирован; если он уже занят (идёт вход в Codex CLI), Hermes так и скажет и откатится к device code. По SSH слушателю нужен туннель (ssh -N -L 1455:127.0.0.1:1455 user@host, см. OAuth через SSH). Hermes хранит полученные учётные данные в собственном хранилище авторизации по пути ~/.hermes/auth.json и может импортировать существующие данные Codex CLI из ~/.codex/auth.json, если они есть. Установка Codex CLI не требуется. Автоматическое заимствование логина Codex CLI (когда собственное обновление Hermes не удалось) управляется auth.adopt_external_logins — см. Заимствованные логины CLI.

Если обновление токена завершается терминальной ошибкой (HTTP 4xx, invalid_grant, отозванный грант и т. п.), Hermes помечает refresh-токен как «мёртвый» и перестаёт повторно его использовать — чтобы вы не видели поток одинаковых ошибок авторизации. Следующий запрос покажет типизированное сообщение о необходимости повторной авторизации. Запустите hermes auth add openai-codex (или hermes model → ChatGPT or Codex Subscription), чтобы начать новый вход (через device code или с --browser — через loopback-поток PKCE); карантин снимается после следующего успешного обмена.

Вход по коду устройства иногда падает с [SSL: UNEXPECTED_EOF_WHILE_READING] или таймаутом TLS-рукопожатия на Python/OpenSSL 3.5+ — когда промежуточное сетевое устройство отвергает постквантовые группы вроде X25519MLKEM768 (curl при этом может работать). Разовый обрыв соединения не смертелен: пока ждёт вашего подтверждения в браузере, Hermes продолжает опрос сквозь до шести подряд транспортных ошибок (а запрос device code и обмен токена повторяет дважды), прежде чем сдаться, так что эту ошибку вы увидите только при устойчиво сломанной сети. Политику TLS по умолчанию Hermes не меняет. Перед запуском hermes model направьте OPENSSL_CONF на конфиг, ограничивающий Groups классическими кривыми, — или диагностируйте на TLS 1.2:

openssl_conf = openssl_init

[openssl_init]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
Groups = x25519:secp256r1:secp384r1:x448
внимание

Даже при использовании Nous Portal, Codex или кастомного эндпоинта некоторые инструменты (обработка изображений, суммаризация веб-страниц, MoA) используют отдельную «вспомогательную» модель. По умолчанию (auxiliary.*.provider: "auto") Hermes направляет эти задачи на вашу основную модель чата — ту же, что вы выбрали в hermes model. Каждую задачу можно переопределить индивидуально и направить на более дешёвую/быструю модель (например, Gemini Flash на OpenRouter) — см. Вспомогательные модели.

совет
Nous Tool Gateway

Платные подписчики Nous Portal также получают доступ к Tool Gateway — веб-поиск, генерация изображений, TTS и автоматизация браузера, работающие через вашу подписку. Дополнительные API-ключи не нужны. При чистой установке hermes setup --portal выполняет вход, устанавливает Nous как вашего провайдера и включает шлюз одной командой. Существующие пользователи могут включить его из hermes model или для отдельного инструмента — из hermes tools. Проверить маршрутизацию в любой момент можно командой hermes portal info.

Две команды для управления моделями

В Hermes есть две команды для работы с моделями, и у них разное назначение:

КомандаГде запускатьЧто делает
hermes modelВ терминале (вне какой-либо сессии)Полноценный мастер настройки — добавление провайдеров, OAuth, ввод API-ключей, настройка эндпоинтов
/modelВнутри сессии чата HermesБыстрое переключение между уже настроенными провайдерами и моделями

Если вы хотите переключиться на провайдера, который ещё не настроен (например, у вас настроен только OpenRouter, а нужен Anthropic), используйте hermes model, а не /model. Сначала завершите сессию (Ctrl+C или /quit), запустите hermes model, пройдите настройку провайдера, а затем начните новую сессию.

Подписочные тарифы: за что платит ваш план

Некоторые провайдеры позволяют войти в Hermes через потребительскую подписку (Claude Max, ChatGPT, SuperGrok / X Premium+ и т. п.) вместо API-ключа. За что именно платит такая подписка — и за что не платит — у каждого провайдера своё, и это самый частый источник сюрпризов в биллинге. Таблица ниже — краткая версия, подробности смотрите в разделе конкретного провайдера.

Пометка не задокументировано означает именно это: документация Hermes пока не описывает такое поведение. Не полагайтесь на предположения — проверяйте биллинг-дашборд своего провайдера и считайте эти пункты открытыми вопросами.

План / способ входаРаботает с Hermes?Что расходуетсяЧто НЕ расходуетсяЧастый сюрприз
Anthropic — Claude Max + OAuth✅ Да — hermes model → Anthropic OAuth. Нужен план Max и докупленные дополнительные кредиты использованияДополнительные/сверхлимитные кредиты, докупленные сверх плана MaxБазовая квота плана Max (та, что по умолчанию входит в Claude Code)Весь трафик Hermes списывается как «дополнительное использование», даже пока базовая квота Max не тронута
Anthropic — Claude Pro❌ Нет — подписчикам Pro OAuth-путь недоступенНичего (путь недоступен)Ваша подписка ProКажется, что Pro должен работать — но нет. Используйте вместо этого ANTHROPIC_API_KEY (оплата за токены, независимо от подписки Claude)
OpenAI Codex — OAuth по плану ChatGPT✅ Да — hermes model → ChatGPT or Codex Subscription (вход через ChatGPT по device-code OAuth, использует модели Codex)не задокументированоне задокументированоДокументация описывает только аутентификацию и обновление токена; как расход засчитывается в лимиты плана — не задокументировано
xAI — OAuth по SuperGrok / X Premium+✅ Да — браузерный OAuth, API-ключ не нуженВаша квота подписки (явно задокументировано для X Search: OAuth предпочтительнее API-ключа и «расходует квоту вашей подписки вместо оплаты по API»). Семантика расхода квоты для инференса за пределами этого — не задокументированаXAI_API_KEY / оплата по API за токены — если настроены и используются учётные данные OAuthHTTP 403 после успешного входа: xAI ограничивает доступ к API через OAuth определёнными тарифами SuperGrok, несмотря на активную подписку в приложении
Google — потребительский план Gemini (Google AI Pro / Ultra)❌ Задокументированного пути нет — провайдер gemini работает только по API-ключу (GOOGLE_API_KEY / GEMINI_API_KEY); Vertex AI тарифицируется через биллинг GCPКвота вашего API-ключа (бесплатный тариф либо проект Google Cloud с включённым биллингом) — расход по потребительскому плану не задокументированне задокументированоКлючи бесплатного тарифа могут исчерпаться после нескольких ходов агента — Hermes способен делать несколько вызовов модели за один ход пользователя

Anthropic. OAuth-путь маршрутизирует запросы как Claude Code через ваш аккаунт Anthropic и работает только на плане Claude Max с докупленными дополнительными кредитами использования — базовая квота Max Hermes-ом никогда не расходуется, тратятся только докупленные сверх неё кредиты. Подписчикам Claude Pro этот путь недоступен; поддерживаемая альтернатива — ANTHROPIC_API_KEY, тарифицируемый по модели pay-per-token в организации этого ключа по стандартным ценам API. См. Anthropic (нативно) ниже.

OpenAI Codex. Hermes аутентифицируется через device-code OAuth от ChatGPT, хранит учётные данные в ~/.hermes/auth.json и умеет импортировать существующие учётные данные Codex CLI из ~/.codex/auth.json. Какие тарифы ChatGPT подходят и как расход Hermes засчитывается в лимиты Codex вашего плана — пока не задокументировано: примечание по Codex в разделе Nous Portal описывает только аутентификацию и обновление токена.

xAI (SuperGrok / X Premium+). Браузерный OAuth работает как с активной подпиской SuperGrok, так и с подпиской X Premium+ на привязанном аккаунте X, а тот же bearer-токен переиспользуют инструменты, обращающиеся к xAI напрямую (TTS, генерация изображений, генерация видео, транскрипция, X Search). Если инференс возвращает HTTP 403 после успешного входа — это ограничение тарифа/прав доступа на стороне xAI, а не протухший токен; обходной путь — переключиться на XAI_API_KEY. См. xAI (Grok) ниже и руководство по xAI Grok OAuth.

Google Gemini. Сейчас нет способа войти в Hermes через потребительскую подписку Gemini — провайдер gemini принимает только API-ключ, а Google Vertex AI тарифицируется через ваш проект GCP. Для агентной работы рекомендуется проект Google Cloud с включённым биллингом — бесплатных квот не хватает для долгих агентных сессий. См. руководство по Google Gemini.

совет
Одна подписка вместо пяти

Если не хочется отслеживать особенности биллинга у каждого провайдера по отдельности, Nous Portal даёт доступ к 300+ моделям по единой подписке с одним входом через OAuth.

Anthropic (нативно)

Используйте модели Claude напрямую через API Anthropic — без прокси через OpenRouter. Поддерживаются три способа аутентификации:

Когда явные учётные данные из окружения не выбраны, собственные OAuth-гранты Hermes из пула учётных данных идут раньше заимствованного логина Claude Code. Заимствованный логин остаётся подстраховкой, если своего OAuth-гранта нет, — если только не задано auth.adopt_external_logins: false: тогда Hermes учётные данные Claude Code никогда не читает и не обновляет (см. Заимствованные логины CLI). Восстановление вспомогательной аутентификации обновляет именно те учётные данные, на которых сорвался запрос, а не посторонний внешний логин: иначе ротация заимствованного логина отзовёт refresh-токен у его владельца.

осторожно
Требуются дополнительные кредиты использования Claude Max

Когда вы аутентифицируетесь через hermes model → Anthropic OAuth (или через hermes auth add anthropic --type oauth), Hermes маршрутизирует запросы как Claude Code через ваш аккаунт Anthropic. Это работает только если у вас план Claude Max и вы приобрели дополнительные кредиты использования. Базовая квота плана Max (та, что по умолчанию входит в Claude Code) Hermes-ом не расходуется — тратятся только докупленные сверх неё кредиты. Подписчикам Claude Pro этот путь недоступен.

Если у вас нет Max и дополнительных кредитов, используйте вместо этого ANTHROPIC_API_KEY — запросы будут тарифицироваться по модели pay-per-token в организации, к которой привязан этот ключ (стандартные цены API, независимо от подписки Claude).

# С API-ключом (оплата за токены)
export ANTHROPIC_API_KEY=***
hermes chat --provider anthropic --model claude-sonnet-4-6

# Предпочтительный способ: аутентификация через `hermes model`
# Hermes будет напрямую использовать хранилище учётных данных Claude Code, если оно доступно
hermes model

# Ручное переопределение через setup-token (запасной / устаревший вариант)
export ANTHROPIC_TOKEN=***  # setup-token или ручной OAuth-токен
hermes chat --provider anthropic

# Автоопределение учётных данных Claude Code (если вы уже используете Claude Code)
hermes chat --provider anthropic  # автоматически читает файлы учётных данных Claude Code

Когда вы выбираете Anthropic OAuth через hermes model, Hermes предпочитает собственное хранилище учётных данных Claude Code, а не копирование токена в ~/.hermes/.env. Так обновляемые учётные данные Claude остаются обновляемыми.

Либо задайте это постоянно:

model:
  provider: "anthropic"
  default: "claude-sonnet-4-6"
совет
Псевдонимы

--provider claude и --provider claude-code также работают как сокращения для --provider anthropic.

GitHub Copilot

Hermes поддерживает GitHub Copilot как полноценного провайдера в двух режимах:

copilot — прямой API Copilot (рекомендуется). Использует вашу подписку GitHub Copilot для доступа к GPT-5.x, Claude, Gemini и другим моделям через API Copilot.

hermes chat --provider copilot --model gpt-5.4

Варианты аутентификации (проверяются в этом порядке):

  1. Переменная окружения COPILOT_GITHUB_TOKEN
  2. Переменная окружения GH_TOKEN
  3. Переменная окружения GITHUB_TOKEN
  4. Резервный вариант — CLI gh auth token

Если токен не найден, hermes model предложит вход через device code OAuth — тот же флоу, что использует Copilot CLI и opencode.

внимание
Типы токенов

API Copilot не поддерживает классические Personal Access Token (ghp_*). Поддерживаемые типы токенов:

ТипПрефиксКак получить
OAuth-токенgho_hermes model → GitHub Copilot → Login with GitHub
Fine-grained PATgithub_pat_GitHub Settings → Developer settings → Fine-grained tokens (нужно разрешение Copilot Requests)
Токен GitHub Appghu_Через установку GitHub App

Если gh auth token возвращает токен ghp_*, используйте hermes model для аутентификации через OAuth.

инфо
Поведение аутентификации Copilot в Hermes

Hermes отправляет поддерживаемый токен GitHub (gho_*, github_pat_* или ghu_*) напрямую на api.githubcopilot.com и добавляет специфичные для Copilot заголовки (Editor-Version, Copilot-Integration-Id, Openai-Intent, x-initiator).

При HTTP 401 Hermes теперь выполняет однократное восстановление учётных данных перед откатом на резервный вариант:

  1. Повторно определяет токен по обычной цепочке приоритетов (COPILOT_GITHUB_TOKEN → GH_TOKEN → GITHUB_TOKEN → gh auth token)
  2. Пересобирает общий клиент OpenAI с обновлёнными заголовками
  3. Повторяет запрос один раз

Некоторые старые прокси сообщества используют флоу обмена через api.github.com/copilot_internal/v2/token. Этот эндпоинт может быть недоступен для некоторых типов аккаунтов (возвращает 404). Поэтому Hermes использует аутентификацию по прямому токену как основной путь и полагается на обновление учётных данных и повтор запроса в рантайме для надёжности.

Маршрутизация API: модели GPT-5+ (кроме gpt-5-mini) автоматически используют Responses API. Все остальные модели (GPT-4o, Claude, Gemini и т. д.) используют Chat Completions. Модели определяются автоматически из актуального каталога Copilot.

copilot-acp — бэкенд агента Copilot ACP. Запускает локальный CLI Copilot как подпроцесс:

hermes chat --provider copilot-acp --model copilot-acp
# Требуется GitHub Copilot CLI в PATH и активная сессия `copilot login`

Постоянная настройка:

model:
  provider: "copilot"
  default: "gpt-5.4"
Переменная окруженияОписание
COPILOT_GITHUB_TOKENТокен GitHub для API Copilot (первый приоритет)
HERMES_COPILOT_ACP_COMMANDПереопределяет путь к бинарнику Copilot CLI (по умолчанию: copilot)
HERMES_COPILOT_ACP_ARGSПереопределяет аргументы ACP (по умолчанию: --acp --stdio)

Провайдеры с полноценной поддержкой по API-ключу

У этих провайдеров есть встроенная поддержка с выделенными идентификаторами. Задайте API-ключ и выберите провайдера через --provider:

# Fireworks AI
hermes chat --provider fireworks --model accounts/fireworks/models/kimi-k2p6
# Требуется: FIREWORKS_API_KEY в ~/.hermes/.env

# NovitaAI Model API
hermes chat --provider novita --model moonshotai/kimi-k2.5
# Требуется: NOVITA_API_KEY в ~/.hermes/.env

# Ramp Router (ID моделей берутся из живого каталога вашего аккаунта)
hermes chat --provider router --model gpt-5.4-mini
# Требуется: RAMP_ROUTER_API_KEY в ~/.hermes/.env

# z.ai / ZhipuAI GLM
hermes chat --provider zai --model glm-5
# Требуется: GLM_API_KEY в ~/.hermes/.env

# Kimi / Moonshot AI (международный: api.moonshot.ai)
hermes chat --provider kimi-coding --model kimi-for-coding
# Требуется: KIMI_API_KEY в ~/.hermes/.env

# Kimi / Moonshot AI (Китай: api.moonshot.cn)
hermes chat --provider kimi-coding-cn --model kimi-k2.5
# Требуется: KIMI_CN_API_KEY в ~/.hermes/.env

# MiniMax (глобальный эндпоинт)
hermes chat --provider minimax --model MiniMax-M2.7
# Требуется: MINIMAX_API_KEY в ~/.hermes/.env

# MiniMax (эндпоинт для Китая)
hermes chat --provider minimax-cn --model MiniMax-M2.7
# Требуется: MINIMAX_CN_API_KEY в ~/.hermes/.env

# Qwen Cloud / DashScope (модели Qwen)
hermes chat --provider alibaba --model qwen3.5-plus
# Требуется: DASHSCOPE_API_KEY в ~/.hermes/.env

# Xiaomi MiMo
hermes chat --provider xiaomi --model mimo-v2-pro
# Требуется: XIAOMI_API_KEY в ~/.hermes/.env

# Tencent TokenHub (превью Hy4)
hermes chat --provider tencent-tokenhub --model hy4-preview
# Требуется: TOKENHUB_API_KEY в ~/.hermes/.env

# Tencent TokenPlan (превью Hy4 через эндпоинт Anthropic Messages)
hermes chat --provider tencent-tokenplan --model hy4-preview
# Требуется: TOKENPLAN_API_KEY в ~/.hermes/.env

# Arcee AI (модели Trinity)
hermes chat --provider arcee --model trinity-large-thinking
# Требуется: ARCEEAI_API_KEY в ~/.hermes/.env

# Meta Model API (семейство Muse Spark)
hermes chat --provider meta-ai --model muse-spark-1.2
# Требуется: MODEL_API_KEY в ~/.hermes/.env

# GMI Cloud
# Используйте точный ID модели, возвращаемый эндпоинтом /v1/models GMI.
hermes chat --provider gmi --model zai-org/GLM-5.1-FP8
# Требуется: GMI_API_KEY в ~/.hermes/.env

# Nebius Token Factory
hermes chat --provider nebius --model deepseek-ai/DeepSeek-V4-Pro
# Требуется: NEBIUS_API_KEY в ~/.hermes/.env

Fireworks использует собственный каталог ID в формате со слэшами, например accounts/fireworks/models/kimi-k2p6. Запустите hermes model, выберите Fireworks AI и укажите модель из актуального каталога либо введите другой ID модели Fireworks. Эндпоинт по умолчанию — https://api.fireworks.ai/inference/v1; другой эндпоинт настраивается через model.base_url в config.yaml, а не в .env.

Либо задайте провайдера постоянно в config.yaml:

model:
  provider: "gmi"
  default: "zai-org/GLM-5.1-FP8"

Базовые URL можно переопределить переменными окружения NOVITA_BASE_URL, GLM_BASE_URL, KIMI_BASE_URL, MINIMAX_BASE_URL, MINIMAX_CN_BASE_URL, DASHSCOPE_BASE_URL, XIAOMI_BASE_URL, GMI_BASE_URL, META_BASE_URL или TOKENHUB_BASE_URL.

заметка
Уровень Meta contributor

muse-spark-1.2-contributor и muse-spark-1.3-contributor — это тарифы Meta для контрибьюторов: Meta может обучаться на ваших промптах и ответах, поэтому интерактивный выбор модели запрашивает подтверждение перед использованием любого из них. Актуальные цены и лимиты — в прайсе и лимитах Meta Model API. Для конфиденциальной работы берите обычные muse-spark-1.2 / muse-spark-1.3 (без обучения).

заметка
Автоопределение эндпоинта Z.AI

При использовании провайдера Z.AI / GLM Hermes автоматически прощупывает несколько эндпоинтов (глобальный, китайский, coding-варианты), чтобы найти тот, который принимает ваш API-ключ. Задавать GLM_BASE_URL вручную не нужно — рабочий эндпоинт определяется и кэшируется автоматически.

xAI (Grok) — Responses API + кэширование промптов

xAI подключён через Responses API (транспорт codex_responses) для автоматической поддержки рассуждений на моделях Grok 4 — параметр reasoning_effort не нужен, сервер рассуждает по умолчанию. Задайте XAI_API_KEY в ~/.hermes/.env и выберите xAI в hermes model, либо используйте сокращение grok в /model grok-4-fast-reasoning.

Подписчики SuperGrok и X Premium+ могут войти через браузерный OAuth вместо API-ключа — выберите xAI Grok OAuth (SuperGrok / Premium+) в hermes model или запустите hermes auth add xai-oauth. Тот же OAuth bearer-токен автоматически используется инструментами, обращающимися к xAI напрямую (TTS, генерация изображений, генерация видео, транскрипция). Полный флоу описан в руководстве по xAI Grok OAuth — а если Hermes работает на удалённом хосте, см. также OAuth через SSH / удалённые хосты о необходимом туннеле ssh -L.

При использовании xAI как провайдера (любой базовый URL, содержащий x.ai) Hermes автоматически включает кэширование промптов, добавляя заголовок x-grok-conv-id к каждому запросу API. Это направляет запросы на один и тот же сервер в рамках сессии разговора, позволяя инфраструктуре xAI переиспользовать кэшированные системные промпты и историю диалога.

Настройка не требуется — кэширование активируется автоматически при обнаружении эндпоинта xAI и наличии ID сессии. Это снижает задержку и стоимость для многоходовых диалогов.

У xAI также есть выделенный эндпоинт TTS (/v1/tts). Выберите xAI TTS в hermes tools → Voice & TTS, либо см. настройку на странице Голос и TTS.

Миграция устаревших моделей xAI (15 мая 2026): xAI прекращает поддержку grok-4*, grok-3, grok-code-fast-1 и grok-imagine-image-pro с 2026-05-15. И hermes doctor, и запуск hermes chat обнаруживают в конфиге любую ссылку на устаревшую модель и выводят рекомендуемую замену. Используйте hermes migrate xai для одномоментного переписывания конфига — по умолчанию это dry-run, добавьте --apply, чтобы записать изменения (копия прежнего конфига с меткой времени сначала уезжает в backups/config/).

hermes migrate xai          # предпросмотр замен
hermes migrate xai --apply  # переписать ~/.hermes/config.yaml на месте

Бэкенд веб-поиска xAI. Когда включён набор инструментов Веб-поиск, web.backend: xai направляет поиск через хостируемый эндпоинт поиска xAI, используя те же учётные данные XAI_API_KEY / OAuth. Дополнительная настройка не требуется, если xAI уже настроен как провайдер.

NovitaAI

NovitaAI — облако, изначально созданное для разработчиков и агентов на базе ИИ. Три продуктовые линии: Model API с 200+ моделями, Agent Sandbox для сборки и запуска ИИ-агентов и GPU Cloud для масштабируемых вычислений — всё доступно с одной платформы.

# Использовать любую доступную модель
hermes chat --provider novita --model moonshotai/kimi-k2.5
# Требуется: NOVITA_API_KEY в ~/.hermes/.env

# Короткий псевдоним
hermes chat --provider novita-ai --model deepseek/deepseek-v3-0324

Либо задайте это постоянно в config.yaml:

model:
  provider: "novita"
  default: "moonshotai/kimi-k2.5"
  base_url: "https://api.novita.ai/openai/v1"

Получите API-ключ на novita.ai/settings/key-management. Базовый URL можно переопределить через NOVITA_BASE_URL.

Ollama Cloud — управляемые модели Ollama, OAuth + API-ключ

Ollama Cloud размещает тот же каталог открытых моделей, что и локальная Ollama, но без требований к GPU. Выберите его в hermes model как Ollama Cloud, вставьте API-ключ с ollama.com/settings/keys, и Hermes автоматически найдёт доступные модели.

hermes model
# → выберите «Ollama Cloud»
# → вставьте ваш OLLAMA_API_KEY
# → выберите модель из обнаруженных (gpt-oss:120b, glm-4.6:cloud, qwen3-coder:480b-cloud и т. д.)

Либо напрямую в config.yaml:

model:
  provider: "ollama-cloud"
  default: "gpt-oss:120b"

Каталог моделей загружается динамически с ollama.com/v1/models и кэшируется на один час. Нотация model:tag (например, qwen3-coder:480b-cloud) сохраняется при нормализации — не используйте дефисы.

совет
Ollama Cloud против локальной Ollama

Обе используют один и тот же OpenAI-совместимый API. Cloud — полноценный провайдер (--provider ollama-cloud, OLLAMA_API_KEY); локальная Ollama подключается через флоу Custom Endpoint (базовый URL http://localhost:11434/v1, без ключа). Используйте облако для крупных моделей, которые не запустить локально; локальный вариант — для приватности или офлайн-работы.

DeepInfra

DeepInfra (--provider deepinfra, DEEPINFRA_API_KEY) обнаруживается вживую по его каталогу. Рассуждения управляются через поле верхнего уровня reasoning_effort у DeepInfra, поэтому agent.reasoning_effort, /reasoning <level>, --reasoning и agent.reasoning_overrides для отдельных моделей работают в обе стороны: уровень усилий включает размышления у моделей, где они по умолчанию выключены (DeepSeek-V4.x), а /reasoning none выключает их у моделей, где они включены по умолчанию (GLM-4.6, Qwen3-Thinking). Если рассуждения не заданы, сохраняется значение DeepInfra по умолчанию для каждой модели; xhigh поддерживается нативно, а ultra отправляется как max.

AWS Bedrock

Anthropic Claude, Amazon Nova, DeepSeek v3.2, Meta Llama 4 и другие модели через AWS Bedrock. Использует цепочку учётных данных AWS SDK (boto3) — без API-ключа, только стандартная аутентификация AWS.

# Проще всего — именованный профиль в ~/.aws/credentials
hermes chat --provider bedrock --model us.anthropic.claude-sonnet-4-6

# Либо с явными переменными окружения
AWS_PROFILE=myprofile AWS_REGION=us-east-1 hermes chat --provider bedrock --model us.anthropic.claude-sonnet-4-6

Либо постоянно в config.yaml:

model:
  provider: "bedrock"
  default: "us.anthropic.claude-sonnet-4-6"
bedrock:
  region: "us-east-1"          # либо задайте AWS_REGION
  # profile: "myprofile"       # либо задайте AWS_PROFILE
  # discovery: true            # автоопределение региона из IAM
  # guardrail:                 # опциональные Bedrock Guardrails
  #   guardrail_identifier: "your-guardrail-id"
  #   guardrail_version: "DRAFT"

Аутентификация использует стандартную цепочку boto3: явные AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY, AWS_PROFILE из ~/.aws/credentials, роль IAM на EC2/ECS/Lambda, IMDS или SSO. Переменная окружения не требуется, если вы уже аутентифицированы через AWS CLI.

Bedrock под капотом использует Converse API — запросы преобразуются в универсальную для моделей форму, поэтому один и тот же конфиг работает для моделей Claude, Nova, DeepSeek и Llama. Задавайте BEDROCK_BASE_URL только если обращаетесь к нестандартному региональному эндпоинту.

Пошаговое описание настройки IAM, выбора региона и межрегионального инференса — в руководстве по AWS Bedrock.

Google Vertex AI

Модели Gemini на Google Cloud Vertex AI через OpenAI-совместимый эндпоинт Vertex. Аутентификация — OAuth2: короткоживущий токен доступа (~1 час), выпускаемый из JSON сервис-аккаунта или Application Default Credentials (ADC). Статического API-ключа нет — Hermes сам выпускает и автоматически обновляет токен, включая перевыпуск при 401 посреди сессии.

# JSON сервис-аккаунта (рекомендуется для серверов / шлюзов)
echo "VERTEX_CREDENTIALS_PATH=/path/to/service-account.json" >> ~/.hermes/.env
# либо Application Default Credentials
gcloud auth application-default login

hermes model   # → «Google Vertex AI» → проект → регион → модель

Либо в config.yaml (проект/регион не являются секретами и хранятся здесь; путь к учётным данным остаётся в .env):

model:
  provider: "vertex"
  default: "google/gemini-3-flash-preview"   # Vertex требует префикс google/
vertex:
  project_id: "my-gcp-project"   # пусто → использовать проект, встроенный в учётные данные
  region: "global"               # обязательно для превью Gemini 3.x

Переменные окружения VERTEX_PROJECT_ID / VERTEX_REGION переопределяют значения из config.yaml. Hermes сам ставит google-auth при первом использовании; если управляемая установка требует починки, запустите hermes setup. Полное пошаговое описание — в руководстве по Google Vertex AI, а способ со статическим API-ключом через AI Studio — в руководстве по Google Gemini.

Qwen Portal (OAuth)

Qwen Portal от Alibaba с браузерным OAuth-входом. Выберите Qwen OAuth (Portal) в hermes model, войдите через браузер — Hermes сохранит refresh-токен.

hermes model
# → выберите «Qwen OAuth (Portal)»
# → откроется браузер; войдите под учётной записью Alibaba
# → подтвердите — учётные данные сохранятся в ~/.hermes/auth.json

hermes chat   # использует эндпоинт portal.qwen.ai/v1

Либо настройте config.yaml:

model:
  provider: "qwen-oauth"
  default: "qwen3-coder-plus"

Задавайте HERMES_QWEN_BASE_URL только если эндпоинт портала переедет (по умолчанию: https://portal.qwen.ai/v1).

совет
Qwen OAuth против Qwen Cloud (Alibaba DashScope)

qwen-oauth использует потребительский Qwen Portal с OAuth-входом — идеально для индивидуальных пользователей. Провайдер alibaba использует Qwen Cloud (Alibaba DashScope) с DASHSCOPE_API_KEY — идеально для программных / продакшен-нагрузок. Оба маршрутизируют на модели семейства Qwen, но работают через разные эндпоинты.

Alibaba Cloud (Coding Plan)

Если у вас оформлена подписка на Coding Plan от Alibaba (тарифный SKU, отдельный от стандартного доступа к API DashScope), Hermes предоставляет для неё собственного полноценного провайдера: alibaba-coding-plan. Эндпоинт: https://coding-intl.dashscope.aliyuncs.com/v1. Он OpenAI-совместим так же, как обычный провайдер alibaba, но с другим базовым URL и другим биллинг-контуром.

model:
  provider: alibaba_coding     # псевдоним для alibaba-coding-plan
  model: qwen3-coder-plus

Либо из CLI:

hermes chat --provider alibaba_coding --model qwen3-coder-plus

alibaba_coding использует тот же DASHSCOPE_API_KEY, что уже применяется в вашей записи alibaba — отдельный ключ не нужен, меняется только цель маршрутизации. До того как этот провайдер был зарегистрирован, пользователи, установившие provider: alibaba_coding в config.yaml, незаметно попадали на маршрутизацию через OpenRouter.

Для эндпоинта материкового Китая (alibaba-coding-plan-cn, https://coding.dashscope.aliyuncs.com/v1) задайте ALIBABA_CODING_PLAN_CN_API_KEY. CN-провайдер по-прежнему откатывается на ALIBABA_CODING_PLAN_API_KEY / DASHSCOPE_API_KEY, но если задан только общий ключ, в выборе /model появится лишь международная строка — чтобы показать китайскую, задайте CN-ключ (либо пропишите provider: alibaba-coding-plan-cn в config.yaml). То же самое касается alibaba-token-plan-cn и ALIBABA_TOKEN_PLAN_CN_API_KEY.

MiniMax (OAuth)

MiniMax-M2.7 через браузерный OAuth-вход — API-ключ не нужен. Выберите MiniMax (OAuth) в hermes model, войдите через браузер — Hermes сохранит access- и refresh-токены. Под капотом использует эндпоинт, совместимый с Anthropic Messages (/anthropic).

hermes model
# → выберите «MiniMax (OAuth)»
# → откроется браузер; войдите под учётной записью MiniMax (глобальный регион или CN)
# → подтвердите — учётные данные сохранятся в ~/.hermes/auth.json

hermes chat   # использует эндпоинт api.minimax.io/anthropic

Либо настройте config.yaml:

model:
  provider: "minimax-oauth"
  default: "MiniMax-M2.7"

Поддерживаемые модели: MiniMax-M2.7 (основная) и MiniMax-M2.7-highspeed (подключена как вспомогательная модель по умолчанию). OAuth-путь игнорирует MINIMAX_API_KEY / MINIMAX_BASE_URL.

совет
MiniMax OAuth против API-ключа

minimax-oauth использует потребительский портал MiniMax с OAuth-входом — настройка биллинга не требуется. Провайдеры minimax и minimax-cn используют MINIMAX_API_KEY / MINIMAX_CN_API_KEY — для программного доступа. Полное описание — в руководстве по MiniMax OAuth.

NVIDIA NIM

Nemotron и другие модели с открытым исходным кодом через build.nvidia.com (бесплатный API-ключ) или локальный эндпоинт NIM.

# Облако (build.nvidia.com)
hermes chat --provider nvidia --model nvidia/nemotron-3-super-120b-a12b
# Требуется: NVIDIA_API_KEY в ~/.hermes/.env

# Локальный эндпоинт NIM — переопределение базового URL
NVIDIA_BASE_URL=http://localhost:8000/v1 hermes chat --provider nvidia --model nvidia/nemotron-3-super-120b-a12b

Либо задайте это постоянно в config.yaml:

model:
  provider: "nvidia"
  default: "nvidia/nemotron-3-super-120b-a12b"
совет
Локальный NIM

Для развёртываний on-prem (DGX Spark, локальный GPU) задайте NVIDIA_BASE_URL=http://localhost:8000/v1. NIM предоставляет тот же OpenAI-совместимый API chat completions, что и build.nvidia.com, поэтому переключение между облаком и локальным вариантом — это изменение одной переменной окружения.

Hermes автоматически прикрепляет заголовок biling-origin для NIM к каждому запросу к build.nvidia.com — настройка не требуется. Это направляет учёт расхода на правильный источник в биллинг-дашборде NVIDIA.

GMI Cloud

Открытые и рассуждающие модели через GMI Cloud — OpenAI-совместимый API, аутентификация по API-ключу.

# GMI Cloud
hermes chat --provider gmi --model deepseek-ai/DeepSeek-V3.2
# Требуется: GMI_API_KEY в ~/.hermes/.env

Либо задайте это постоянно в config.yaml:

model:
  provider: "gmi"
  default: "deepseek-ai/DeepSeek-V3.2"

Базовый URL можно переопределить через GMI_BASE_URL (по умолчанию: https://api.gmi-serving.com/v1).

Actual Computer

Собственное железо как приватный инференс-кластер через Actual Computer. Два режима обслуживания, оба через Chat Completions, так что рассуждения и итоговый ответ возвращаются вместе:

  • Хостируемый релей — https://api.actual.inc, сквозное шифрование, маршрутизирует на ваш кластер. Аутентификация — inference-ключ ac_ с actual.inc/user/keys.
  • Локальный демон — на устройстве, http://127.0.0.1:8080, полностью офлайн. API-ключ не нужен: Hermes распознаёт loopback-адрес и аутентифицируется автоматически через внутренний плейсхолдер.
# Хостируемый релей (ACTUAL_API_KEY в ~/.hermes/.env)
hermes chat --provider actual --model <id-модели-из-вашего-кластера>

# Локальный демон (model.base_url в ~/.hermes/config.yaml, без ключа)
hermes chat --provider actual --model <имя-установленной-модели>

Настройки провайдера храните в ~/.hermes/config.yaml; в .env место только API-ключу хостируемого релея:

model:
  provider: "actual"
  default: "<id-модели>"
  base_url: "http://127.0.0.1:8080/v1" # Для хостируемого релея не указывайте.

Примечания:

  • ID моделей приходят с GET /v1/models вашего кластера — обнаружить их можно через hermes model либо командой curl -s https://api.actual.inc/v1/models -H "Authorization: Bearer $ACTUAL_API_KEY".
  • Голые хосты в model.base_url нормализуются автоматически: http://127.0.0.1:8080 становится http://127.0.0.1:8080/v1. Устаревшая переменная окружения ACTUAL_BASE_URL остаётся запасным вариантом, когда URL Actual в YAML не задан.
  • Для чата, компактизации, генерации заголовков и любых других вспомогательных задач Actual использует /v1/chat/completions. Это касается и пользовательских провайдеров, нацеленных на api.actual.inc, переключений модели и fallback-записей. Устаревшие настройки Responses в конфигурации основной модели, пользовательского провайдера или вспомогательной задачи переопределяются автоматически.
  • Уровень усилий рассуждений (reasoning effort) обрезается до диапазона, который поддерживает Actual (none/low/medium/high/max) — глобальная настройка xhigh/ultra не приведёт к ошибке 400.
  • Маленькие локальные модели: полный набор инструментов Hermes по умолчанию плюс системный промпт могут превысить контекстное окно в 32k, что даёт пустой ответ от серверов семейства llama.cpp. Ограничьте набор инструментов (-t file,web) либо загрузите модель с более широким контекстом. Опциональный навык actual-setup (hermes skills install official/devops/actual-setup) подробно описывает настройку и устранение неполадок.
  • Псевдонимы: actual-computer, actualcomputer, aci.

StepFun

Модели серии Step через StepFun — OpenAI-совместимый API, аутентификация по API-ключу.

# StepFun
hermes chat --provider stepfun --model step-3.5-flash
# Требуется: STEPFUN_API_KEY в ~/.hermes/.env

Либо задайте это постоянно в config.yaml:

model:
  provider: "stepfun"
  default: "step-3.5-flash"

Базовый URL можно переопределить через STEPFUN_BASE_URL (по умолчанию: https://api.stepfun.com/v1).

Hugging Face Inference Providers

Hugging Face Inference Providers направляет запросы к 20+ открытым моделям через единый OpenAI-совместимый эндпоинт (router.huggingface.co/v1). Запросы автоматически маршрутизируются на самый быстрый доступный бэкенд (Groq, Together, SambaNova и т. д.) с автоматическим отказоустойчивым переключением.

# Использовать любую доступную модель
hermes chat --provider huggingface --model Qwen/Qwen3.5-397B-A17B
# Требуется: HF_TOKEN в ~/.hermes/.env

# Короткий псевдоним
hermes chat --provider hf --model deepseek-ai/DeepSeek-V3.2

Либо задайте это постоянно в config.yaml:

model:
  provider: "huggingface"
  default: "Qwen/Qwen3.5-397B-A17B"

Получите токен на huggingface.co/settings/tokens — не забудьте включить разрешение «Make calls to Inference Providers». Есть бесплатный тариф (кредит $0,10/месяц, без наценки поверх тарифов провайдера).

К именам моделей можно добавлять суффиксы маршрутизации: :fastest (по умолчанию), :cheapest или :provider_name для принудительного выбора конкретного бэкенда.

Базовый URL можно переопределить через HF_BASE_URL.

Кастомные и self-hosted провайдеры LLM

Hermes Agent работает с любым OpenAI-совместимым API-эндпоинтом. Если сервер реализует /v1/chat/completions, вы можете направить Hermes на него. Это значит, что можно использовать локальные модели, серверы GPU-инференса, мультипровайдерные роутеры или любой сторонний API.

Общая настройка

Три способа настроить кастомный эндпоинт:

Интерактивная настройка (рекомендуется):

hermes model
# Выберите «Custom endpoint (self-hosted / VLLM / etc.)»
# Введите: базовый URL API, API-ключ, имя модели

Ручная настройка (config.yaml):

# В ~/.hermes/config.yaml
model:
  default: your-model-name
  provider: custom
  base_url: http://localhost:8000/v1
  api_key: your-key-or-leave-empty-for-local
  # key_env: MY_PROVIDER_API_KEY  # env var holding the key (alternative to api_key)
внимание
Устаревшие переменные окружения

LLM_MODEL в .env удалена — config.yaml теперь единственный источник истины для настройки модели и эндпоинта. OPENAI_BASE_URL по-прежнему учитывается, но только для провайдера openai-api (переопределяет эндпоинт OpenAI при прямом доступе по API-ключу). Для остальных провайдеров и кастомных эндпоинтов используйте hermes model либо задавайте model.base_url напрямую в config.yaml. Если в вашем .env остались устаревшие записи, они автоматически очищаются при следующем hermes setup или миграции конфига.

Оба подхода сохраняются в config.yaml, который и служит источником истины для модели, провайдера и базового URL.

Переключение моделей через /model

внимание
hermes model против /model

hermes model (запускается из терминала, вне сессии чата) — это полноценный мастер настройки провайдера. Используйте его, чтобы добавлять новых провайдеров, проходить OAuth-флоу, вводить API-ключи и настраивать кастомные эндпоинты.

/model (вводится внутри активной сессии чата Hermes) может только переключаться между уже настроенными провайдерами и моделями. Он не может добавлять новых провайдеров, запускать OAuth или запрашивать API-ключи. Если у вас настроен только один провайдер (например, OpenRouter), /model покажет модели только для него.

Чтобы добавить нового провайдера: завершите сессию (Ctrl+C или /quit), запустите hermes model, настройте нового провайдера, затем начните новую сессию.

Когда настроен хотя бы один кастомный эндпоинт, модели можно переключать посреди сессии:

/model custom:qwen-2.5          # Переключиться на модель на вашем кастомном эндпоинте
/model custom                    # Автоопределение модели с эндпоинта
/model openrouter:claude-sonnet-4 # Переключиться обратно на облачного провайдера

Если у вас настроены именованные кастомные провайдеры (см. ниже), используйте тройной синтаксис:

/model custom:local:qwen-2.5    # Использовать кастомного провайдера «local» с моделью qwen-2.5
/model custom:work:llama3       # Использовать кастомного провайдера «work» с llama3

При переключении провайдеров Hermes сохраняет базовый URL и провайдера в конфиг, так что изменение сохраняется после перезапуска. При переключении с кастомного эндпоинта на встроенного провайдера устаревший базовый URL автоматически очищается.

совет

/model custom (без указания модели) опрашивает API /models вашего эндпоинта и автоматически выбирает модель, если загружена ровно одна. Полезно для локальных серверов с одной моделью.

Всё, что дальше, следует тому же шаблону — просто меняются URL, ключ и имя модели.


Ollama — локальные модели, без настройки

Ollama запускает открытые модели локально одной командой. Лучше всего подходит для: быстрых локальных экспериментов, приватных задач, офлайн-использования. Поддерживает вызов инструментов через OpenAI-совместимый API.

# Установить и запустить модель
ollama pull qwen2.5-coder:32b
ollama serve   # Запускается на порту 11434

Затем настройте Hermes:

hermes model
# Выберите «Custom endpoint (self-hosted / VLLM / etc.)»
# Введите URL: http://localhost:11434/v1
# Пропустите API-ключ (Ollama он не нужен)
# Введите имя модели (например, qwen2.5-coder:32b)

Либо настройте config.yaml напрямую:

model:
  default: qwen2.5-coder:32b
  provider: custom
  base_url: http://localhost:11434/v1
  context_length: 64000   # См. предупреждение ниже
осторожно
Ollama по умолчанию использует очень маленькую длину контекста

Ollama не использует полное контекстное окно модели по умолчанию. В зависимости от объёма VRAM значение по умолчанию таково:

Доступная VRAMКонтекст по умолчанию
Меньше 24 ГБ4096 токенов
24–48 ГБ32 768 токенов
48+ ГБ256 000 токенов

Hermes Agent требует как минимум 64 000 токенов контекста для агентной работы с инструментами. Более маленькие окна отклоняются при запуске, потому что системному промпту, схемам инструментов и рабочему состоянию диалога нужно достаточно места для надёжных многошаговых сценариев.

Как увеличить это значение (выберите один вариант):

# Вариант 1: задать общесерверно через переменную окружения (рекомендуется)
OLLAMA_CONTEXT_LENGTH=64000 ollama serve

# Вариант 2: для Ollama, управляемой через systemd
sudo systemctl edit ollama.service
# Добавьте: Environment="OLLAMA_CONTEXT_LENGTH=64000"
# Затем: sudo systemctl daemon-reload && sudo systemctl restart ollama

# Вариант 3: зашить в кастомную модель (сохраняется для конкретной модели)
echo -e "FROM qwen2.5-coder:32b\nPARAMETER num_ctx 64000" > Modelfile
ollama create qwen2.5-coder-64k -f Modelfile

Задать длину контекста через OpenAI-совместимый API нельзя (/v1/chat/completions). Это нужно настраивать на стороне сервера либо через Modelfile. Это источник путаницы номер один при интеграции Ollama с такими инструментами, как Hermes.

Проверьте, что контекст задан правильно:

ollama ps
# Посмотрите на колонку CONTEXT — там должно быть указанное вами значение
совет

Список доступных моделей — командой ollama list. Загрузить любую модель из библиотеки Ollama можно командой ollama pull <модель>. Ollama сама разбирается с выгрузкой на GPU — для большинства сценариев настройка не нужна.


vLLM — высокопроизводительный инференс на GPU

vLLM — стандарт для продакшен-обслуживания LLM. Лучше всего подходит для: максимальной пропускной способности на GPU, обслуживания крупных моделей, непрерывной пакетной обработки (continuous batching).

pip install vllm
vllm serve meta-llama/Llama-3.1-70B-Instruct \
  --port 8000 \
  --max-model-len 65536 \
  --tensor-parallel-size 2 \
  --enable-auto-tool-choice \
  --tool-call-parser hermes

Затем настройте Hermes:

hermes model
# Выберите «Custom endpoint (self-hosted / VLLM / etc.)»
# Введите URL: http://localhost:8000/v1
# Пропустите API-ключ (либо введите тот, что задали при запуске vLLM через --api-key)
# Введите имя модели: meta-llama/Llama-3.1-70B-Instruct

Длина контекста: по умолчанию vLLM читает max_position_embeddings модели. Если это значение превышает объём памяти GPU, произойдёт ошибка с просьбой уменьшить --max-model-len. Можно также использовать --max-model-len auto, чтобы автоматически найти максимум, который поместится. Задайте --gpu-memory-utilization 0.95 (по умолчанию 0.9), чтобы уместить в VRAM больше контекста.

Вызов инструментов требует явных флагов:

ФлагНазначение
--enable-auto-tool-choiceОбязателен для tool_choice: "auto" (значение по умолчанию в Hermes)
--tool-call-parser <имя>Парсер под формат вызова инструментов конкретной модели

Поддерживаемые парсеры: hermes (Qwen 2.5, Hermes 2/3), llama3_json (Llama 3.x), mistral, deepseek_v3, deepseek_v31, xlam, pythonic. Без этих флагов вызовы инструментов работать не будут — модель будет выводить их как обычный текст.

Парсеры рассуждений Qwen: Hermes сохраняет структурированные метаданные рассуждений — такие как reasoning, reasoning_content и потоковые дельты рассуждений — когда их возвращают OpenAI-совместимые серверы. Эти метаданные трактуются как след рассуждений/размышлений, а не как замена видимого ответа ассистента. Для рассуждающих моделей Qwen, обслуживаемых через vLLM, убедитесь, что финальный видимый пользователю ответ по-прежнему присутствует в content. Если --reasoning-parser qwen3 в вашем развёртывании оставляет content пустым, либо отключите этот парсер, либо передайте через extra_body поддерживаемую сервером опцию запроса, например chat_template_kwargs.enable_thinking: false.

совет

vLLM поддерживает удобочитаемые размеры: --max-model-len 64k (строчная k = 1000, заглавная K = 1024).


SGLang — быстрое обслуживание с RadixAttention

SGLang — альтернатива vLLM с RadixAttention для переиспользования KV-кэша. Лучше всего подходит для: многоходовых диалогов (кэширование префиксов), ограниченного декодирования, структурированного вывода.

pip install "sglang[all]"
python -m sglang.launch_server \
  --model meta-llama/Llama-3.1-70B-Instruct \
  --port 30000 \
  --context-length 65536 \
  --tp 2 \
  --tool-call-parser qwen

Затем настройте Hermes:

hermes model
# Выберите «Custom endpoint (self-hosted / VLLM / etc.)»
# Введите URL: http://localhost:30000/v1
# Введите имя модели: meta-llama/Llama-3.1-70B-Instruct

Длина контекста: SGLang по умолчанию читает её из конфига модели. Используйте --context-length для переопределения. Если нужно превысить заявленный моделью максимум, задайте SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1.

Вызов инструментов: используйте --tool-call-parser с подходящим парсером под семейство вашей модели: qwen (Qwen 2.5), llama3, llama4, deepseekv3, mistral, glm. Без этого флага вызовы инструментов будут возвращаться как обычный текст.

осторожно
По умолчанию у SGLang лимит в 128 токенов на выходе

Если ответы кажутся обрезанными, посмотрите, какой лимит генерации стоит на сервере, и настройте его там же (у SGLang это --default-max-tokens). Своей настройки для предела вывода Hermes не предоставляет.


llama.cpp / llama-server — инференс на CPU и Metal

llama.cpp запускает квантованные модели на CPU, Apple Silicon (Metal) и потребительских GPU. Лучше всего подходит для: запуска моделей без датацентрового GPU, пользователей Mac, edge-развёртываний.

# Собрать и запустить llama-server
cmake -B build && cmake --build build --config Release
./build/bin/llama-server \
  --jinja -fa \
  -c 64000 \
  -ngl 99 \
  -m models/qwen2.5-coder-32b-instruct-Q4_K_M.gguf \
  --port 8080 --host 0.0.0.0

Длина контекста (-c): в свежих сборках по умолчанию стоит 0, что означает чтение контекста обучения модели из метаданных GGUF. Для моделей со 128k+ обучающим контекстом это может привести к нехватке памяти при попытке выделить полный KV-кэш. Задайте -c явно, минимум 64 000 токенов для Hermes. При использовании параллельных слотов (-np) общий контекст делится между слотами — при -c 64000 -np 4 каждый слот получит всего 16k, что ниже минимума Hermes на активную сессию.

Затем настройте Hermes, чтобы он указывал на этот сервер:

hermes model
# Выберите «Custom endpoint (self-hosted / VLLM / etc.)»
# Введите URL: http://localhost:8080/v1
# Пропустите API-ключ (локальным серверам он не нужен)
# Введите имя модели — либо оставьте пустым для автоопределения, если загружена только одна модель

Это сохранит эндпоинт в config.yaml, так что он сохранится между сессиями.

осторожно
Для вызова инструментов требуется

--jinja Без --jinja llama-server полностью игнорирует параметр tools. Модель попытается вызывать инструменты, записывая JSON в тексте ответа, но Hermes не распознает это как вызов инструмента — вы увидите сырой JSON вроде {"name": "web_search", ...}, напечатанный как обычное сообщение, вместо реального поиска.

Нативная поддержка вызова инструментов (лучшая производительность): Llama 3.x, Qwen 2.5 (включая Coder), Hermes 2/3, Mistral, DeepSeek, Functionary. Все остальные модели используют общий обработчик, который работает, но может быть менее эффективным. Полный список — в документации llama.cpp по вызову функций.

Проверить, что поддержка инструментов активна, можно, обратившись к http://localhost:8080/props — поле chat_template должно присутствовать.

совет

Загружайте модели GGUF с Hugging Face. Квантование Q4_K_M даёт лучший баланс качества и потребления памяти.


LM Studio — десктопное приложение с локальными моделями

LM Studio — десктопное приложение для запуска локальных моделей с графическим интерфейсом. Лучше всего подходит для: пользователей, предпочитающих визуальный интерфейс, быстрого тестирования моделей, разработчиков на macOS/Windows/Linux.

Запустите сервер из приложения LM Studio (вкладка Developer → Start Server) либо через CLI:

lms server start                        # Запускается на порту 1234
lms load qwen2.5-coder --context-length 64000

Затем настройте Hermes:

hermes model
# Выберите «LM Studio»
# Нажмите Enter, чтобы использовать http://localhost:1234/v1
# Выберите одну из обнаруженных моделей
# Если на сервере LM Studio включена аутентификация, введите LM_API_KEY, когда попросят

Hermes сохраняет контекст уже загруженного экземпляра LM Studio. Для незагруженной модели в режиме явной загрузки (по умолчанию) Hermes не передаёт context_length, если вы не задали его в Hermes, — так LM Studio применяет собственную настройку модели. Дальше Hermes использует только ту длину контекста, о которой LM Studio сообщил после загрузки.

Чтобы изменить длину контекста в LM Studio:

  1. Нажмите на значок шестерёнки рядом с выбором модели
  2. Установите «Context Length» не меньше 64000 для комфортной работы
  3. Перезагрузите модель, чтобы изменение вступило в силу
  4. Если ваша машина не может вместить 64000, рассмотрите модель поменьше с более длинным контекстом.

Как альтернатива, используйте CLI: lms load model-name --context-length 64000

Оценить, поместится ли модель, можно через CLI: lms load model-name --context-length 64000 --estimate-only

Чтобы задать постоянные настройки по умолчанию для конкретной модели: вкладка My Models → значок шестерёнки у модели → задать размер контекста.

Если вы пользуетесь в LM Studio загрузкой Just-In-Time / автовыгрузкой и хотите, чтобы LM Studio сам управлял загрузкой и выгрузкой моделей по обычным запросам чата, пропустите шаг явной предзагрузки в Hermes:

hermes config set model.lmstudio_load_mode jit

Вернуть поведение по умолчанию с явной предзагрузкой:

hermes config set model.lmstudio_load_mode explicit

:::

Вызов инструментов: поддерживается начиная с LM Studio 0.3.6. Модели с нативным обучением на вызов инструментов (Qwen 2.5, Llama 3.x, Mistral, Hermes) определяются автоматически и помечаются значком инструмента. Остальные модели используют общий резервный механизм, который может быть менее надёжным.


Сетевые настройки WSL2 (для пользователей Windows)

Поскольку Hermes Agent требует Unix-окружение, пользователи Windows запускают его внутри WSL2. Если ваш сервер модели (Ollama, LM Studio и т. д.) работает на хосте Windows, нужно перекинуть мостик через сетевой разрыв — WSL2 использует виртуальный сетевой адаптер со своей подсетью, поэтому localhost внутри WSL2 указывает на Linux-виртуалку, а не на хост Windows.

совет
Оба в WSL2? Никаких проблем.

Если ваш сервер модели тоже работает внутри WSL2 (обычное дело для vLLM, SGLang и llama-server), localhost работает как ожидается — они используют одно сетевое пространство имён. Пропустите этот раздел.

Вариант 1: режим Mirrored Networking (рекомендуется)

Доступен на Windows 11 22H2+, режим mirrored заставляет localhost работать в обе стороны между Windows и WSL2 — самое простое решение.

  1. Создайте или отредактируйте %USERPROFILE%\.wslconfig (например, C:\Users\YourName\.wslconfig):

    [wsl2]
    networkingMode=mirrored
  2. Перезапустите WSL из PowerShell:

    wsl --shutdown
  3. Заново откройте терминал WSL2. Теперь localhost достигает сервисов Windows:

    curl http://localhost:11434/v1/models   # Ollama на Windows — работает
заметка
Брандмауэр Hyper-V

На некоторых сборках Windows 11 брандмауэр Hyper-V по умолчанию блокирует mirrored-соединения. Если после включения mirrored-режима localhost всё ещё не работает, выполните это в PowerShell от имени администратора:

Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow

Вариант 2: используйте IP хоста Windows (Windows 10 / старые сборки)

Если mirrored-режим недоступен, узнайте IP хоста Windows изнутри WSL2 и используйте его вместо localhost:

# Получить IP хоста Windows (шлюз по умолчанию виртуальной сети WSL2)
ip route show | grep -i default | awk '{ print $3 }'
# Пример вывода: 172.29.192.1

Используйте этот IP в конфиге Hermes:

model:
  default: qwen2.5-coder:32b
  provider: custom
  base_url: http://172.29.192.1:11434/v1   # IP хоста Windows, не localhost
совет
Динамический хелпер

IP хоста может меняться при перезапуске WSL2. Получить его динамически в оболочке можно так:

export WSL_HOST=$(ip route show | grep -i default | awk '{ print $3 }')
echo "Windows host at: $WSL_HOST"
curl http://$WSL_HOST:11434/v1/models   # Проверка Ollama

Либо используйте mDNS-имя вашей машины (требует libnss-mdns в WSL2):

sudo apt install libnss-mdns
curl http://$(hostname).local:11434/v1/models

Адрес привязки сервера (обязательно для режима NAT)

Если вы используете вариант 2 (режим NAT с IP хоста), сервер модели на Windows должен принимать соединения не только с 127.0.0.1. По умолчанию большинство серверов слушают только localhost — соединения WSL2 в режиме NAT приходят из другой виртуальной подсети и будут отклонены. В mirrored-режиме localhost отображается напрямую, поэтому стандартная привязка к 127.0.0.1 работает нормально.

СерверПривязка по умолчаниюКак исправить
Ollama127.0.0.1Задайте переменную окружения OLLAMA_HOST=0.0.0.0 перед запуском Ollama (System Settings → Environment Variables в Windows либо правка службы Ollama)
LM Studio127.0.0.1Включите «Serve on Network» на вкладке Developer → Server settings
llama-server127.0.0.1Добавьте --host 0.0.0.0 к команде запуска
vLLM0.0.0.0Уже слушает все интерфейсы по умолчанию
SGLang127.0.0.1Добавьте --host 0.0.0.0 к команде запуска

Ollama на Windows (подробно): Ollama работает как служба Windows. Чтобы задать OLLAMA_HOST:

  1. Откройте System Properties → Environment Variables
  2. Добавьте новую системную переменную: OLLAMA_HOST = 0.0.0.0
  3. Перезапустите службу Ollama (либо перезагрузите систему)

Брандмауэр Windows

Брандмауэр Windows считает WSL2 отдельной сетью (и в режиме NAT, и в mirrored-режиме). Если соединения всё ещё не проходят после описанных выше шагов, добавьте правило брандмауэра для порта вашего сервера модели:

# Выполните в PowerShell от имени администратора — замените PORT на порт вашего сервера
New-NetFirewallRule -DisplayName "Allow WSL2 to Model Server" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 11434

Типичные порты: Ollama 11434, vLLM 8000, SGLang 30000, llama-server 8080, LM Studio 1234.

Быстрая проверка

Изнутри WSL2 проверьте, что сервер модели доступен:

# Замените URL на адрес и порт вашего сервера
curl http://localhost:11434/v1/models          # Mirrored-режим
curl http://172.29.192.1:11434/v1/models       # Режим NAT (используйте реальный IP хоста)

Если приходит JSON-ответ со списком моделей — всё в порядке. Используйте этот же URL как base_url в конфиге Hermes.


Диагностика проблем с локальными моделями

Эти проблемы касаются всех локальных серверов инференса при использовании с Hermes.

«Connection refused» при обращении из WSL2 к серверу модели на хосте Windows

Если Hermes запущен внутри WSL2, а сервер модели — на хосте Windows, http://localhost:<порт> не будет работать при сетевом режиме WSL2 по умолчанию (NAT). Решение — раздел Сетевые настройки WSL2 выше.

Вызовы инструментов приходят как текст вместо выполнения

Модель выводит что-то вроде {"name": "web_search", "arguments": {...}} как обычное сообщение, вместо реального вызова инструмента.

Причина: на вашем сервере не включён вызов инструментов, либо модель не поддерживает его через реализацию сервера.

СерверРешение
llama.cppДобавьте --jinja к команде запуска
vLLMДобавьте --enable-auto-tool-choice --tool-call-parser hermes
SGLangДобавьте --tool-call-parser qwen (или подходящий парсер)
OllamaВызов инструментов включён по умолчанию — убедитесь, что модель его поддерживает (проверьте ollama show model-name)
LM StudioОбновитесь до 0.3.6+ и используйте модель с нативной поддержкой инструментов

Модель как будто забывает контекст или даёт бессвязные ответы

Причина: слишком маленькое контекстное окно. Когда диалог превышает лимит контекста, большинство серверов молча отбрасывают старые сообщения. Одни только системный промпт и схемы инструментов Hermes могут занимать 4–8 тыс. токенов.

Диагностика:

# Проверьте, каким Hermes считает контекст
# Посмотрите строку при запуске: "Context limit: X tokens"

# Проверьте реальный контекст вашего сервера
# Ollama: ollama ps (колонка CONTEXT)
# llama.cpp: curl http://localhost:8080/props | jq '.default_generation_settings.n_ctx'
# vLLM: проверьте --max-model-len в аргументах запуска

Решение: задайте контекст не меньше 64 000 токенов для агентной работы. Конкретный флаг — в разделе соответствующего сервера выше.

Отказ при запуске для локального эндпоинта (127.0.0.1, LAN, имена сервисов Docker) сообщает, какое окно отдаёт сервер, и называет способ исправления для любого OpenAI-совместимого сервера, а не только Ollama: увеличьте контекст на сервере (llama.cpp -c 64000, vLLM --max-model-len, Ollama OLLAMA_CONTEXT_LENGTH/num_ctx в Modelfile) или задайте в config.yaml model.ollama_num_ctx равным окну, которое сервер действительно отдаёт (не меньше 64K). model.ollama_num_ctx учитывается на любом локальном эндпоинте; только стоящее за ним автоопределение использует /api/show от Ollama.

«Context limit: 2048 tokens» при запуске

Hermes автоматически определяет длину контекста из эндпоинта /v1/models вашего сервера. Если сервер сообщает низкое значение (или не сообщает вообще), Hermes использует заявленный моделью лимит, который может оказаться неверным.

Решение: задайте значение явно в config.yaml:

model:
  default: your-model
  provider: custom
  base_url: http://localhost:11434/v1
  context_length: 64000

Ответы обрываются на середине фразы

Возможные причины:

  1. Низкий предел вывода на сервере — настройте значение генерации по умолчанию на самом сервере (у SGLang это --default-max-tokens). Своей настройки для предела вывода Hermes не предоставляет. Длина ответа и контекстное окно разговора (context_length) — разные вещи.
  2. Исчерпание контекста — модель заполнила своё контекстное окно. Увеличьте model.context_length либо включите сжатие контекста в Hermes.

LiteLLM Proxy — мультипровайдерный шлюз

LiteLLM — OpenAI-совместимый прокси, объединяющий 100+ провайдеров LLM за единым API. Лучше всего подходит для: переключения между провайдерами без изменения конфига, балансировки нагрузки, резервных цепочек, контроля бюджета.

# Установка и запуск
pip install "litellm[proxy]"
litellm --model anthropic/claude-sonnet-4 --port 4000

# Либо с файлом конфигурации для нескольких моделей:
litellm --config litellm_config.yaml --port 4000

Затем настройте Hermes через hermes model → Custom endpoint → http://localhost:4000/v1.

Пример litellm_config.yaml с резервным вариантом:

model_list:
  - model_name: "best"
    litellm_params:
      model: anthropic/claude-sonnet-4
      api_key: sk-ant-...
  - model_name: "best"
    litellm_params:
      model: openai/gpt-4o
      api_key: sk-...
router_settings:
  routing_strategy: "latency-based-routing"

ClawRouter — маршрутизация с оптимизацией по цене

ClawRouter от BlockRunAI — локальный прокси маршрутизации, который автоматически выбирает модели по сложности запроса. Он классифицирует запросы по 14 параметрам и направляет их на самую дешёвую модель, способную справиться с задачей. Оплата через криптовалюту USDC (без API-ключей).

# Установка и запуск
npx @blockrun/clawrouter    # Запускается на порту 8402

Затем настройте Hermes через hermes model → Custom endpoint → http://localhost:8402/v1 → имя модели blockrun/auto.

Профили маршрутизации:

ПрофильСтратегияЭкономия
blockrun/autoБаланс качества и цены74–100%
blockrun/ecoМаксимально дёшево95–100%
blockrun/premiumЛучшие по качеству модели0%
blockrun/freeТолько бесплатные модели100%
blockrun/agenticОптимизировано под работу с инструментамизависит от случая
заметка

Для ClawRouter требуется кошелёк, пополненный USDC, в сети Base или Solana для оплаты. Все запросы идут через бэкенд-API BlockRun. Запустите npx @blockrun/clawrouter doctor, чтобы проверить статус кошелька.


Другие совместимые провайдеры

Подойдёт любой сервис с OpenAI-совместимым API. Несколько популярных вариантов:

ПровайдерБазовый URLПримечания
Together AIhttps://api.together.xyz/v1Открытые модели в облаке
Groqhttps://api.groq.com/openai/v1Сверхбыстрый инференс
DeepSeekhttps://api.deepseek.com/v1Модели DeepSeek
Fireworks AIhttps://api.fireworks.ai/inference/v1Быстрый хостинг открытых моделей
GMI Cloudhttps://api.gmi-serving.com/v1Управляемый OpenAI-совместимый инференс
Actual Computerhttps://api.actual.inc/v1Приватный релей к вашему собственному кластеру; локальный демон — http://127.0.0.1:8080/v1
Cerebrashttps://api.cerebras.ai/v1Инференс на wafer-scale чипах
Mistral AIhttps://api.mistral.ai/v1Модели Mistral
OpenAIhttps://api.openai.com/v1Прямой доступ к OpenAI
Azure OpenAIhttps://YOUR.openai.azure.com/Корпоративный OpenAI
LocalAIhttp://localhost:8080/v1Self-hosted, мультимодельный
Janhttp://localhost:1337/v1Десктопное приложение с локальными моделями

Настройте любой из них через hermes model → Custom endpoint либо в config.yaml:

model:
  default: meta-llama/Llama-3.1-70B-Instruct-Turbo
  provider: custom
  base_url: https://api.together.xyz/v1
  api_key: your-together-key

Определение длины контекста

заметка
Контекстное окно и предел вывода — разные вещи

context_length — это всё контекстное окно целиком: общий бюджет и для входных, и для выходных токенов (например, 200 000 для Claude Opus 4.6). Hermes использует это значение, чтобы решить, когда сжимать историю, и чтобы валидировать запросы API.

Пределы вывода управляют одним сгенерированным ответом, а не историей разговора. Hermes больше не читает ни model.max_tokens, ни HERMES_MAX_TOKENS, ни настройки предела вывода у провайдеров, ни model_overrides.*.*.max_output_tokens. Эти устаревшие настройки стоит убрать. Своим OpenAI-совместимым эндпоинтам никакой автоматический предел вывода по размеру из каталога не выставляется: действуют их серверные значения по умолчанию, а они бывают ниже максимума модели. Ответ, который выродился в цикл повторов, всё равно останавливается: примерно через 130 000 символов после начала цикла (в видимом тексте или в рассуждениях) Hermes закрывает поток и завершает ход уведомлением «Repetition Detected», так что эндпоинт без предела не даст зациклившейся модели работать бесконечно.

Нативному Anthropic Messages (включая нативный путь Anthropic через Bedrock) параметр max_tokens обязателен, поэтому Hermes подставляет своё внутреннее значение. Bedrock Converse — отдельный протокол: его необязательный inferenceConfig.maxTokens по умолчанию не отправляется, что в документации AWS означает максимум модели. Внутренние ограниченные задачи и требования протоколов конкретных провайдеров остаются деталями реализации. Отсутствие параметра не выбирает максимальный вывод модели повсеместно.

Задавайте context_length, когда автоопределение неверно определяет размер окна.

Hermes использует цепочку из нескольких источников, чтобы определить корректное контекстное окно для вашей модели и провайдера:

  1. Переопределение в конфиге — model.context_length в config.yaml (наивысший приоритет). Это явное закрепление: оно всегда побеждает метаданные провайдера, поэтому Hermes помечает его как (pinned) везде, где показывается окно (приветственный баннер, /model, /usage, строка статуса), и один раз пишет предупреждение при запуске, если закрепление расходится с окном, которое, как известно, объявляет провайдер. При смене модели, провайдера или base URL закрепление сбрасывается автоматически.
  2. Кастомный провайдер по модели — providers.<name>.models.<id>.context_length
  3. Постоянный кэш — ранее обнаруженные значения (сохраняется между перезапусками)
  4. Эндпоинт /models — запрос к API вашего сервера (локальные/кастомные эндпоинты)
  5. Anthropic /v1/models — запрос к API Anthropic за max_input_tokens (только для пользователей с API-ключом)
  6. API OpenRouter — актуальные метаданные моделей от OpenRouter
  7. Nous Portal — сопоставление суффиксов ID моделей Nous с метаданными OpenRouter
  8. models.dev — реестр, поддерживаемый сообществом, с длинами контекста по провайдерам для 3800+ моделей у 100+ провайдеров
  9. Значения по умолчанию — широкие шаблоны по семействам моделей (по умолчанию 128K)

Для большинства конфигураций это работает «из коробки». Система учитывает провайдера — одна и та же модель может иметь разные лимиты контекста в зависимости от того, кто её обслуживает (например, claude-opus-4.6 — это 1M напрямую у Anthropic, но 128K на GitHub Copilot).

Чтобы задать длину контекста явно, добавьте context_length в конфиг модели:

model:
  default: "qwen3.5:9b"
  base_url: "http://localhost:8080/v1"
  context_length: 131072  # токенов

Для кастомных эндпоинтов длину контекста можно также задать по модели:

providers:
  my-local-llm:
    api: "http://localhost:11434/v1"
    models:
      qwen3.5:27b:
        context_length: 64000
      deepseek-r1:70b:
        context_length: 65536

hermes model запросит длину контекста при настройке кастомного эндпоинта. Оставьте поле пустым для автоопределения.

совет
Когда стоит задать это вручную
  • Вы используете Ollama с кастомным num_ctx, который меньше максимума модели
  • Вы хотите ограничить контекст ниже максимума модели (например, 8k на модели с 128k, чтобы сэкономить VRAM)
  • Вы работаете через прокси, который не предоставляет /v1/models

Именованные кастомные провайдеры

Если вы работаете с несколькими кастомными эндпоинтами (например, локальный сервер для разработки и удалённый GPU-сервер), их можно определить как именованных кастомных провайдеров в словаре providers: в config.yaml, где ключ — имя провайдера:

providers:
  local:
    api: http://localhost:8080/v1
    # api_key опущен — Hermes использует «no-key-required» для локальных серверов без ключа
  work:
    api: https://gpu-server.internal.corp/v1
    key_env: CORP_API_KEY
    transport: chat_completions   # задаётся явно мастером `hermes model` → Custom Endpoint; автоопределение всё равно срабатывает как резерв
  anthropic-proxy:
    api: https://proxy.example.com/anthropic
    key_env: ANTHROPIC_PROXY_KEY
    transport: anthropic_messages  # для прокси, совместимых с Anthropic

Каждая запись принимает: api (базовый URL эндпоинта — псевдонимы base_url/url тоже работают), name (опциональное отображаемое имя; по умолчанию — ключ словаря), key_env либо встроенный api_key, либо key_cmd (см. ниже), transport (chat_completions / anthropic_messages / codex_responses), default_model, models, context_length, discover_models, extra_body, extra_headers, session_affinity_header (имя заголовка, несущего id разговора, — для прокси, учитывающих сессии; выключено, пока не задано), ssl_ca_cert / ssl_verify, catalog_provider (см. ниже), а также enabled: false — чтобы скрыть запись, не удаляя её.

Учётные данные, выпускаемые командой (key_cmd)

Пробы возможностей — зрение, размышления, нативные локальные модели — материализуют те же вызываемые учётные данные, что и чат, ещё до сборки заголовков аутентификации. Кэш токенов команды они переиспользуют, но вызываемый объект клиента чата не подменяют. Если команда не может выпустить строковый токен, эти необязательные пробы уходят вообще без bearer — а не с объектным представлением или с учётными данными более низкого приоритета. Пробы нативных локальных моделей при сорвавшемся явном вызываемом объекте снимают унаследованный Authorization, сохраняя посторонние настроенные заголовки. У чата обработка ошибок остаётся прежней.

Корпоративные шлюзы часто выдают короткоживущие bearer-токены (брокеры SSO/OIDC, IAM облака, внутренние прокси авторизации) вместо статических API-ключей, поэтому токен, скопированный в .env, устаревает посреди сессии, и запросы начинают возвращать 401. key_cmd задаёт команду, которая выводит токен; Hermes запускает её и кэширует результат до момента незадолго перед истечением срока действия, так что долгие сессии продолжают работать без перезапуска:

providers:
  my-gateway:
    base_url: "https://gateway.internal.example.com/v1"
    api_mode: chat_completions
    key_cmd: "my-auth-cli print-token --profile prod"

Работает с любым хелпером, который печатает токен: databricks auth token, gcloud auth print-access-token, az account get-access-token, vault read, скрипты в духе apiKeyHelper из Claude Code.

Команда должна печатать в stdout только токен: либо голым текстом, либо в виде JSON с полем access_token (поле expires_in учитывается, как и абсолютные ISO-метки expiry/expiresOn). Многострочный вывод отклоняется, а не угадывается. Если срок действия не заявлен, токен перевыпускается в рамках ограниченного окна.

Приоритет: явный флаг --api-key всё равно побеждает; в остальном key_cmd имеет приоритет над статическим api_key/key_env в той же записи. Выпущенные учётные данные применяются как к основному ходу агента, так и к вспомогательным задачам (генерация заголовков, сжатие, обработка изображений, эмбеддинги).

Обнаружение моделей тоже уважает key_cmd — и для записей providers:, и для устаревших custom_providers:, включая настройку через hermes model. Хелперы запускаются лишь тогда, когда нужна проба живого каталога с аутентификацией: при отключённом обнаружении и при чтении тёплого кэша каталога токены не выпускаются. Каталоги привязаны к идентичности команды, поэтому ротация bearer каталог не обнуляет. Хелперы проб пользуются своим короткоживущим источником токена, а не кэшем клиента инференса; выпущенные bearer в config.yaml не сохраняются никогда. Если хелпер сорвался, обнаружение откатывается на настроенную модель, не показывая вывод хелпера.

Не путайте с secrets.command, который запускает хелпер один раз при старте, чтобы заполнить переменные окружения для всего процесса. Используйте его для хелпера vault/keychain, отдающего сразу много секретов; key_cmd — когда учётные данные одного провайдера нужно перевыпускать в ходе сессии.

заметка
Устаревший формат

В старых конфигах вместо словаря использовался список custom_providers: верхнего уровня. Он по-прежнему работает — Hermes читает оба, — а hermes update автоматически переносит его в словарь providers: (конфиг v12). Имена полей в словарном формате слегка отличаются: устаревшее model стало default_model, а api_mode — transport.

Окно контекста на прокси с codex_responses. Пользовательская запись с transport: codex_responses (например, локальный прокси Codex) берёт окно контекста моделей Codex OAuth (gpt-6-astra, gpt-5.6-sol/-terra/-luna, gpt-5.5, …) из таблицы Codex OAuth — 272K для большинства слагов, — а не из каталога прямого API на 1,05M, так что сжатие срабатывает раньше лимита бэкенда Codex и его тарифного уровня 272K. Решение следует за транспортом, а не за именем хоста; то же верно для openai-codex за HERMES_CODEX_BASE_URL или model.base_url. Поле models.<id>.context_length у модели, context_length на уровне записи или model.context_length по-прежнему побеждают; варианты -900k в выборе моделей, включаемые по желанию, сохраняют свои проверенные 900K.

Уровень рассуждений на пользовательских эндпоинтах. Настроенный reasoning_effort (/reasoning max, agent.reasoning_effort) доходит до пользовательского эндпоинта без изменений как на транспорте chat_completions, так и на codex_responses — вплоть до max; только внутренний для Hermes ultra урезается до max. Два исключения зависят от хоста, а не от записи: запись, направленная на api.openai.com, сохраняет лестницу уровней OpenAI для каждой модели (max там есть только у gpt-5.6), а запись, направленная на провайдера, чей профиль публикует словарь уровней по моделям (Ramp Router), урезается до этого каталога. Эндпоинт, который отвергает уровень, отвечает HTTP 400, а не Hermes молча его понижает. Когда уровень не настроен вовсе, запросы chat_completions несут reasoning_effort: medium — то же умолчание, что применяют маршруты Nous Portal и OpenRouter, — а не оставляют решение за умолчанием эндпоинта (у kimi-k3 это max, примерно в 3 раза больше токенов рассуждений, чем у medium); модели с пометкой supports_reasoning: false в каталоге или в model_overrides, а также модели Ollama без возможности thinking этого поля не получают.

Некоторым OpenAI-совместимым эндпоинтам нужны специфичные для провайдера поля в теле запроса. Добавьте карту extra_body к соответствующему кастомному провайдеру, и Hermes будет вливать её в каждый запрос chat-completions к этому эндпоинту:

providers:
  gemma-local:
    api: http://localhost:8080/v1
    default_model: google/gemma-4-31b-it
    extra_body:
      enable_thinking: true
      reasoning_effort: high

Используйте ту структуру, которую документирует ваш сервер. Например, развёртывания vLLM Gemma и некоторые эндпоинты NVIDIA NIM ожидают enable_thinking внутри chat_template_kwargs, а не как поле верхнего уровня в extra_body:

extra_body:
  chat_template_kwargs:
    enable_thinking: true

Для рассуждающих моделей Qwen, обслуживаемых через vLLM, ту же структуру можно использовать, чтобы отключить размышления, когда парсер рассуждений выносит весь сгенерированный текст в поля рассуждений, оставляя content ассистента пустым:

extra_body:
  chat_template_kwargs:
    enable_thinking: false

Настроенный extra_body следует за провайдером повсюду: он вливается при создании агента, сохраняется на каждом ходу через шлюз (включая ходы, где /fast накладывает поверх переопределения service_tier/speed — они объединяются поверх вашего extra_body, а не заменяют его), и пересчитывается при переключении /model — переход на именованного кастомного провайдера применяет его extra_body, а переход в сторону очищает его, чтобы он не просочился к другому провайдеру.

Мастер hermes model → Custom Endpoint теперь явно запрашивает режим API и сохраняет ваш ответ в config.yaml (полем transport записи провайдера). Автоопределение по URL (например, пути /anthropic → anthropic_messages) по-прежнему срабатывает как резерв, если поле оставлено пустым.

Нативная поддержка изображений для моделей кастомных провайдеров. Если ваш кастомный эндпоинт обслуживает модель с поддержкой изображений, которой нет в models.dev, задайте model.supports_vision: true, чтобы Hermes направлял прикреплённые изображения нативно (как части image_url), а не предварительно обрабатывал их через vision_analyze. Единственный переключатель — дополнительно задавать agent.image_input_mode: native не нужно.

model:
  provider: custom
  base_url: http://localhost:8080/v1
  default: qwen3.6-35b-a3b
  supports_vision: true   # отправлять изображения нативно; иначе vision_analyze предварительно их описывает

Тот же ключ учитывается и для моделей именованных провайдеров (providers.<name>.models.<id>.supports_vision) и принимает стандартные YAML-булевы значения (true/false/yes/no/on/off/1/0).

Запись model_overrides, которая лишь исправляет метаданные (например, context_window) для модели, неизвестной каталогу, оставляет поддержку зрения и рассуждений, а также лимит выходных токенов неизвестными — vision_analyze, video_analyze и подборщик уровня рассуждений остаются доступны. Только явные supports_vision: false / supports_reasoning: false в переопределении помечают модель как текстовую или не умеющую рассуждать.

Наследование метаданных каталогизированного вендора (catalog_provider). Когда именованный пользовательский провайдер (шлюз, прокси или реселлер) отдаёт модели, которые Hermes уже знает у встроенного провайдера, укажите в записи этого вендора — и его модели унаследуют из каталога контекстное окно, лимит вывода, флаги зрения и рассуждений, без всяких model_overrides:

providers:
  my-gateway:
    api: https://gateway.example.com/v1
    key_env: GATEWAY_API_KEY
    catalog_provider: deepseek   # метаданные берутся из записей каталога DeepSeek

catalog_provider принимает id провайдера Hermes (deepseek, anthropic, openai, …) или id из models.dev. Он влияет только на поиск метаданных — запросы по-прежнему идут на ваш URL api с вашими учётными данными, — а явная запись model_overrides для той же модели всё равно побеждает.

Переключайтесь между ними посреди сессии через тройной синтаксис:

/model custom:local:qwen-2.5       # Использовать эндпоинт «local» с qwen-2.5
/model custom:work:llama3-70b      # Использовать эндпоинт «work» с llama3-70b
/model custom:anthropic-proxy:claude-sonnet-4  # Использовать прокси

Именованных кастомных провайдеров можно также выбирать из интерактивного меню hermes model.


Кулинарная книга: Together AI, Groq, Perplexity

Облачные провайдеры из раздела Другие совместимые провайдеры говорят на диалекте REST от OpenAI, поэтому подключаются так же — через словарь providers:. Ниже три готовых рецепта. Каждый добавляется в ~/.hermes/config.yaml, а соответствующий API-ключ — в ~/.hermes/.env.

Together AI

Размещает открытые модели (Llama, MiniMax, Gemma, DeepSeek, Qwen) по ценам значительно ниже, чем у первичных API. Хороший вариант по умолчанию для парка из нескольких моделей.

# ~/.hermes/config.yaml
providers:
  together:
    api: https://api.together.xyz/v1
    key_env: TOGETHER_API_KEY
    # transport: chat_completions  # по умолчанию — задавать не нужно

model:
  default: MiniMaxAI/MiniMax-M2.7   # или любая модель с together.ai/models
  provider: custom:together
# ~/.hermes/.env
TOGETHER_API_KEY=your-together-key

Переключение моделей посреди сессии:

/model custom:together:meta-llama/Llama-3.3-70B-Instruct-Turbo
/model custom:together:google/gemma-4-31b-it
/model custom:together:deepseek-ai/DeepSeek-V3

Эндпоинт /v1/models у Together работает, поэтому hermes model может автоматически найти доступные модели.

Groq

Сверхбыстрый инференс (~500 ток/с на Llama-3.3-70B). Небольшой каталог, но отлично подходит для интерактивной работы, чувствительной к задержке.

# ~/.hermes/config.yaml
providers:
  groq:
    api: https://api.groq.com/openai/v1
    key_env: GROQ_API_KEY

model:
  default: llama-3.3-70b-versatile
  provider: custom:groq
# ~/.hermes/.env
GROQ_API_KEY=your-groq-key

Perplexity

Полезен, когда нужна модель, которая сама делает живой веб-поиск и приводит цитаты. Строго ограничен список доступных моделей — актуальный список смотрите на perplexity.ai/settings/api.

# ~/.hermes/config.yaml
providers:
  perplexity:
    api: https://api.perplexity.ai
    key_env: PERPLEXITY_API_KEY

model:
  default: sonar
  provider: custom:perplexity
# ~/.hermes/.env
PERPLEXITY_API_KEY=your-perplexity-key

Agent API Perplexity (api: https://api.perplexity.ai/v1 с api_mode: codex_responses) резервирует имена функций web_search, search_files, fetch_url, people_search и finance_search за своими встроенными инструментами. Одноимённые клиентские инструменты Hermes при передаче переименовывает в hermes_<name>, а перед выполнением сопоставляет обратно — и в основном цикле агента, и во вспомогательных вызовах (генерация заголовков, сжатие, агрегация MoA); так же обрабатываются эндпоинты /v1/responses у OpenCode.

Несколько провайдеров в одном конфиге

Три рецепта сочетаются друг с другом — используйте их все вместе и переключайтесь за каждый ход командой /model custom:<имя>:<модель>:

providers:
  together:
    api: https://api.together.xyz/v1
    key_env: TOGETHER_API_KEY
  groq:
    api: https://api.groq.com/openai/v1
    key_env: GROQ_API_KEY
  perplexity:
    api: https://api.perplexity.ai
    key_env: PERPLEXITY_API_KEY

model:
  default: MiniMaxAI/MiniMax-M2.7
  provider: custom:together      # загрузка на Together; дальше переключайтесь свободно
совет
Диагностика проблем
  • hermes doctor не должен выводить предупреждений Unknown provider ни для одного из этих имён после исправлений валидатора CLI в #15083.
  • Если эндпоинт /v1/models у провайдера недоступен (частый случай для Perplexity), hermes model сохранит модель с предупреждением, а не жёстко откажет — см. #15136.
  • Чтобы вообще пропустить именованных провайдеров и использовать голый provider: custom с переменной окружения CUSTOM_BASE_URL, см. #15103.

Выбор подходящей настройки

Сценарий использованияРекомендация
Просто нужно, чтобы работалоOpenRouter (по умолчанию) или Nous Portal
Локальные модели, простая настройкаOllama
Продакшен-обслуживание на GPUvLLM или SGLang
Mac / без GPUOllama или llama.cpp
Маршрутизация между несколькими провайдерамиLiteLLM Proxy или OpenRouter
Оптимизация по стоимостиClawRouter или OpenRouter с sort: "price"
Максимальная приватностьOllama, vLLM или llama.cpp (полностью локально)
Корпоративный сегмент / AzureAzure OpenAI с кастомным эндпоинтом
Китайские ИИ-моделиz.ai (GLM), Kimi/Moonshot (kimi-coding или kimi-coding-cn), MiniMax, Xiaomi MiMo или Tencent TokenHub (полноценные провайдеры)
совет

Переключаться между провайдерами можно в любой момент командой hermes model — без перезапуска. История диалога, память и навыки сохраняются независимо от того, каким провайдером вы пользуетесь.

Опциональные API-ключи

ФункцияПровайдерПеременная окружения
Веб-скрапингFirecrawlFIRECRAWL_API_KEY, FIRECRAWL_API_URL
Автоматизация браузераBrowserbaseBROWSERBASE_API_KEY, BROWSERBASE_PROJECT_ID
Генерация изображенийFALFAL_KEY
Премиум-голоса TTSElevenLabsELEVENLABS_API_KEY
TTS и распознавание голоса от OpenAIOpenAIVOICE_TOOLS_OPENAI_KEY
TTS и распознавание голоса от MistralMistralMISTRAL_API_KEY
Межсессионное моделирование пользователяHonchoHONCHO_API_KEY
Семантическая долговременная памятьSupermemorySUPERMEMORY_API_KEY

Self-hosting Firecrawl

По умолчанию Hermes использует облачный API Firecrawl для веб-поиска и скрапинга. Если вы предпочитаете запускать Firecrawl локально, можно направить Hermes на self-hosted-инстанс. Полное описание настройки — в SELF_HOST.md от Firecrawl.

Что вы получаете: API-ключ не нужен, нет лимитов запросов, нет платы за страницу, полный суверенитет над данными.

Что вы теряете: облачная версия использует проприетарный «Fire-engine» от Firecrawl для продвинутого обхода антибот-защиты (Cloudflare, CAPTCHA, ротация IP). Self-hosted-вариант использует обычный fetch + Playwright, поэтому некоторые защищённые сайты могут не поддаться. Поиск использует DuckDuckGo вместо Google.

Настройка:

  1. Склонируйте и запустите Docker-стек Firecrawl (5 контейнеров: API, Playwright, Redis, RabbitMQ, PostgreSQL — требуется ~4–8 ГБ RAM):

    git clone https://github.com/firecrawl/firecrawl
    cd firecrawl
    # В .env задайте: USE_DB_AUTHENTICATION=false, HOST=0.0.0.0, PORT=3002
    docker compose up -d
  2. Направьте Hermes на ваш инстанс (API-ключ не нужен):

    hermes config set FIRECRAWL_API_URL http://localhost:3002

Можно также задать и FIRECRAWL_API_KEY, и FIRECRAWL_API_URL, если на вашем self-hosted-инстансе включена аутентификация.

Маршрутизация провайдеров OpenRouter

При использовании OpenRouter можно управлять тем, как запросы маршрутизируются между провайдерами. Добавьте секцию provider_routing в ~/.hermes/config.yaml:

provider_routing:
  sort: "throughput"          # "price" (по умолчанию), "throughput" или "latency"
  # only: ["anthropic"]      # Использовать только этих провайдеров
  # ignore: ["deepinfra"]    # Пропускать этих провайдеров
  # order: ["anthropic", "google"]  # Пробовать провайдеров в этом порядке
  # require_parameters: true  # Использовать только провайдеров, поддерживающих все параметры запроса
  # data_collection: "deny"   # Исключить провайдеров, которые могут хранить данные или обучаться на них

Сокращения: добавьте :nitro к любому имени модели для сортировки по пропускной способности (например, anthropic/claude-sonnet-4:nitro), либо :floor для сортировки по цене. Подробности про настройки для отдельных моделей — в разделе Маршрутизация провайдеров.

OpenRouter Pareto Code Router

OpenRouter предлагает экспериментальный роутер для кодинг-моделей openrouter/pareto-code, который автоматически направляет запросы на самую дешёвую модель, удовлетворяющую порогу качества кодинга (по рейтингу Artificial Analysis). Выберите эту модель и настройте параметр min_coding_score в ~/.hermes/config.yaml:

model:
  provider: openrouter
  model: openrouter/pareto-code

openrouter:
  min_coding_score: 0.65   # 0.0–1.0; выше = более сильный (и более дорогой) кодер. По умолчанию 0.65.

Примечания:

  • min_coding_score отправляется только когда model.model равен openrouter/pareto-code. На любой другой модели значение не имеет эффекта.
  • Задайте пустую строку (или удалите строку), чтобы позволить OpenRouter выбрать самого сильного доступного кодера — таково документированное поведение при отсутствии блока plugins.
  • Выбор детерминирован по оценке в рамках одного дня, но фактически выбираемая модель может меняться по мере сдвига границы Парето (новые модели, обновления бенчмарков).
  • Полное описание поведения роутера — в документации Pareto Router от OpenRouter.
  • Чтобы использовать роутер Pareto Code для конкретной вспомогательной задачи (сжатие, обработка изображений и т. д.) вместо основного агента, задайте extra_body.plugins для этой задачи — см. Вспомогательные модели → Маршрутизация OpenRouter и Pareto Code для вспомогательных задач.

Резервные провайдеры

Настройте цепочку резервных провайдеров, которые Hermes пробует по очереди, если основная модель не отвечает (лимиты запросов, ошибки сервера, сбои аутентификации). Каноническая форма — список верхнего уровня fallback_providers::

fallback_providers:
  - provider: openrouter
    model: anthropic/claude-sonnet-4
  - provider: anthropic
    model: claude-sonnet-4
    # base_url: http://localhost:8000/v1    # опционально, для кастомных эндпоинтов
    # api_mode: chat_completions           # опциональное переопределение (`transport:` — допустимый псевдоним)

Запись, которая называет блок providers.<name> (provider: my-relay или provider: custom:my-relay), наследует его transport / api_mode, если сама их не задаёт, так что relay только для Responses или для Anthropic Messages сохраняет объявленный протокол и при переключении на резерв. Чтобы переопределить, задайте api_mode в самой записи.

Устаревший словарь fallback_model: с одной парой по-прежнему поддерживается для обратной совместимости:

fallback_model:
  provider: openrouter
  model: anthropic/claude-sonnet-4

При активации резервный вариант заменяет модель и провайдера посреди сессии без потери истории диалога. Цепочка пробуется по порядку записей; активация происходит один раз за сессию.

Поддерживаемые провайдеры: openrouter, nous, novita, openai-codex, copilot, copilot-acp, anthropic, gemini, qwen-oauth, huggingface, zai, kimi-coding, kimi-coding-cn, minimax, minimax-cn, minimax-oauth, deepseek, nvidia, xai, xai-oauth, ollama-cloud, bedrock, ai-gateway, azure-foundry, opencode-zen, opencode-go, commandcode, commandcode-anthropic, kilocode, xiaomi, arcee, gmi, actual, stepfun, lmstudio, alibaba, alibaba-coding-plan, tencent-tokenhub, tencent-tokenplan, nebius-token-factory, router, custom.

совет

Резервный вариант настраивается исключительно через config.yaml — либо интерактивно через hermes fallback. Полное описание того, когда он срабатывает, как продвигается цепочка и как это взаимодействует со вспомогательными задачами и делегированием — в разделе Резервные провайдеры.


См. также

  • Конфигурация — общая конфигурация (структура каталогов, приоритет настроек, терминальные бэкенды, память, сжатие и многое другое)
  • Переменные окружения — полный справочник всех переменных окружения
перевод и редактура:

обновлено

⌕ ESC