Каталог моделей

Hermes получает подобранные списки моделей для OpenRouter и Nous Portal из JSON-манифеста, размещённого вместе с сайтом документации. Это позволяет мейнтейнерам обновлять списки выбора без выпуска нового релиза hermes-agent.

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

URL активного манифеста

https://hermes-agent.nousresearch.com/docs/api/model-catalog.json

Публикуется при каждом слиянии в main через существующий пайплайн GitHub Pages deploy-site.yml. Источник истины находится в репозитории по пути website/static/api/model-catalog.json.

Схема

{
  "version": 1,
  "updated_at": "2026-04-25T22:00:00Z",
  "metadata": {},
  "providers": {
    "openrouter": {
      "metadata": {},
      "models": [
        {"id": "moonshotai/kimi-k2.6", "description": "recommended", "metadata": {}},
        {"id": "openai/gpt-5.4",       "description": ""}
      ]
    },
    "nous": {
      "metadata": {},
      "models": [
        {"id": "anthropic/claude-opus-4.7"},
        {"id": "moonshotai/kimi-k2.6"}
      ]
    }
  }
}

Описание полей:

Поведение при загрузке

Ситуация Что происходит
/model или hermes model Загружает, если дисковый кэш устарел, иначе использует кэш
Дисковый кэш свежий (< TTL) Без сетевого запроса
Сетевая ошибка при наличии кэша Бесшумное падение на кэш, одна строка в логе
Сетевая ошибка, кэша нет Бесшумное падение на встроенный снимок
Манифест не прошёл валидацию схемы Считается недоступным

Расположение кэша: ~/.hermes/cache/model_catalog.json.

Конфигурация

model_catalog:
  enabled: true
  url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
  ttl_hours: 24
  providers: {}

Установите enabled: false, чтобы полностью отключить удалённую загрузку и всегда использовать встроенный снимок.

Переопределение URL для провайдеров

Сторонние разработчики могут размещать собственные списки моделей, используя ту же схему. Укажите провайдеру пользовательский URL:

model_catalog:
  providers:
    openrouter:
      url: https://example.com/my-openrouter-curation.json

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

Обновление манифеста

Для мейнтейнеров:

# Re-generate from the in-repo hardcoded lists (keeps manifest in sync after
# editing OPENROUTER_MODELS or _PROVIDER_MODELS["nous"] in hermes_cli/models.py).
python scripts/build_model_catalog.py

Затем отправьте PR с изменениями в website/static/api/model-catalog.json в ветку main. Сайт документации развернётся автоматически после слияния, и новый манифест станет доступен в течение нескольких минут.

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