Каталог моделей
VibeOS получает списки моделей для OpenRouter и Nous Portal из JSON-манифеста, размещённого вместе с сайтом документации. Это позволяет разработчикам обновлять списки моделей без выпуска новой версии агента.
Если манифест недоступен (офлайн, блокировка сети, сбой хостинга), VibeOS бесшумно переключается на локальную копию, встроенную в репозиторий CLI. Манифест никогда не ломает выбор моделей — в худшем случае вы увидите список, встроенный в вашу установленную версию.
URL текущего манифеста
https://vibeos.com.ru/handbook/api/model-catalog.json
Публикуется production-деплоем сайта при выпуске релиза или ручным запуском 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": "рекомендуемая", "metadata": {}},
{"id": "openai/gpt-5.4", "description": ""}
]
},
"nous": {
"metadata": {},
"models": [
{"id": "anthropic/claude-opus-4.7"},
{"id": "moonshotai/kimi-k2.6"}
]
}
}
}
Примечания к полям:
version— целочисленная версия схемы. Будущие схемы будут увеличивать это значение; VibeOS отклоняет манифесты с непонятными версиями и переключается на жёстко заданную копию.metadata— свободный словарь на уровне манифеста, провайдера и модели. Любые ключи. VibeOS игнорирует неизвестные поля, поэтому вы можете добавлять аннотации (например,"tier": "paid","tags": [...]) без согласования изменения схемы.description— только для OpenRouter. Определяет текст бейджа в списке моделей («рекомендуемая»,«бесплатная»или пусто). Nous Portal не использует это поле — ограничение бесплатного уровня определяется динамически через API цен портала.- Цены и длина контекста НЕ входят в манифест. Они получаются из живых API провайдеров (эндпоинты
/v1/models, models.dev) во время запроса.
Поведение при загрузке
| Ситуация | Что происходит |
|---|---|
/model или vibeos model | Загружается, если дисковый кеш устарел, иначе используется кеш |
| Дисковый кеш свежий (< TTL) | Без сетевого запроса |
| Сетевая ошибка с кешем | Бесшумное переключение на кеш, одна строка в логе |
| Сетевая ошибка без кеша | Бесшумное переключение на встроенную копию |
| Манифест не проходит валидацию схемы | Считается недоступным |
Расположение кеша: ~/.vibeos/cache/model_catalog.json.
Конфигурация
model_catalog:
enabled: true
url: https://vibeos.com.ru/handbook/api/model-catalog.json
ttl_hours: 1
providers: {}
Установите enabled: false, чтобы полностью отключить удалённую загрузку и всегда использовать встроенную копию.
Переопределение URL для отдельных провайдеров
Сторонние разработчики могут размещать собственные списки моделей, используя ту же схему. Укажите для провайдера свой URL:
model_catalog:
providers:
openrouter:
url: https://example.com/my-openrouter-curation.json
Переопределяющий манифест должен содержать только те блоки провайдеров, которые нужны. Остальные провайдеры продолжат использовать основной URL.
Обновление манифеста
Для разработчиков:
# Перегенерировать из встроенных списков (синхронизирует манифест после
# редактирования OPENROUTER_MODELS или _PROVIDER_MODELS["nous"] в vibeos_cli/models.py).
python scripts/build_model_catalog.py
Затем отправьте изменения в website/static/api/model-catalog.json в ветку main. Опубликуйте каталог со следующим релизом или вручную запустите deploy-site.yml, если он должен стать доступен раньше.
Вы также можете редактировать JSON вручную для точных изменений метаданных, которые не должны попадать во встроенную копию — скрипт генерации является удобством, а не единственным источником истины.