Catalog
На этой странице
Hermes загружает актуальные списки моделей для OpenRouter и Nous Portal из JSON-манифеста, размещённого вместе с сайтом документации. Это позволяет мейнтейнерам обновлять списки выбора, не выпуская новый релиз hermes-agent.
Если манифест недоступен (офлайн, сеть заблокирована, сбой хостинга), Hermes бесшумно переключается на снапшот из репозитория, который поставляется вместе с CLI. Манифест никогда не ломает выбор моделей — в худшем случае отображается тот список, который был собран в вашей установленной версии.
URL живого манифеста¶
[code] https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
[/code]
Публикуется при каждом слиянии в ветку main через существующий пайплайн GitHub Pages deploy-site.yml. Источник истины находится в репозитории по пути website/static/api/model-catalog.json.
Схема¶
[code]
{
"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"}
]
}
}
}
[/code]
Примечания к полям:
version— целочисленная версия схемы. Будущие схемы увеличивают это значение; Hermes отклоняет манифесты с неизвестной версией и переключается на жёстко заданный снапшот.metadata— свободный словарь на уровне манифеста, провайдера и модели. Любые ключи. Hermes игнорирует неизвестные поля, поэтому можно аннотировать записи ("tier": "paid","tags": [...]и т.д.) без согласования изменения схемы.description— только для OpenRouter. Определяет текст бейджа в списке выбора ("recommended","free"или пустая строка). Nous Portal не использует это поле — ограничение бесплатного уровня определяется на лету через pricing endpoint Портала.- Цены и длина контекста НЕ входят в манифест. Они запрашиваются из живых API провайдеров (эндпоинты
/v1/models, models.dev) во время загрузки.
Поведение при загрузке¶
| Когда | Что происходит |
|---|---|
/model или hermes model |
Загружает, если дисковый кеш устарел, иначе использует кеш |
| Дисковый кеш свежий (< TTL) | Без сетевого запроса |
| Сбой сети, кеш есть | Бесшумное переключение на кеш, одна строка в логе |
| Сбой сети, кеша нет | Бесшумное переключение на снапшот из репозитория |
| Манифест не прошёл валидацию схемы | Считается недоступным |
Расположение кеша: ~/.hermes/cache/model_catalog.json. |
Конфиг¶
[code]
model_catalog:
enabled: true
url: https://hermes-agent.nousresearch.com/docs/api/model-catalog.json
ttl_hours: 24
providers: {}
[/code]
Установите enabled: false, чтобы полностью отключить удалённую загрузку и всегда использовать снапшот из репозитория.
URL переопределения для отдельных провайдеров¶
Сторонние разработчики могут разместить собственный список моделей, используя ту же схему. Укажите провайдеру кастомный URL:
[code]
model_catalog:
providers:
openrouter:
url: https://example.com/my-openrouter-curation.json
[/code]
Переопределяющему манифесту достаточно заполнить только те блоки провайдеров, которые нужны. Остальные провайдеры продолжают разрешаться через основной URL.
Обновление манифеста¶
Мейнтейнерам:
[code]
# Перегенерировать из жёстко заданных списков в репозитории (синхронизирует манифест после
# редактирования OPENROUTER_MODELS или _PROVIDER_MODELS["nous"] в hermes_cli/models.py).
python scripts/build_model_catalog.py
[/code]
Затем отправьте PR с получившимися изменениями в website/static/api/model-catalog.json в ветку main. Сайт документации разворачивается автоматически после слияния, и новый манифест становится доступен в течение нескольких минут.
Также можно редактировать JSON вручную для точных изменений метаданных, которые не должны попадать в снапшот репозитория — скрипт-генератор является лишь удобным инструментом, а не единственным источником истины.