sidebar_position: 4 title: "Provider Runtime Resolution" description: "How Hermes resolves providers, credentials, API modes, and auxiliary models at runtime" lang: ru


Разрешение времени выполнения поставщика

У Hermes есть общий преобразователь времени выполнения поставщика, используемый в:

Первичная реализация:

Если вы пытаетесь добавить нового первоклассного поставщика вывода, прочтите Добавление поставщиков рядом с этой страницей.

Приоритет разрешения

На высоком уровне разрешение поставщика использует:

  1. явный запрос CLI/среды выполнения
  2. config.yaml конфигурация модели/провайдера
  3. переменные среды
  4. настройки по умолчанию для конкретного поставщика или автоматическое разрешение.

Этот порядок имеет значение, поскольку Hermes рассматривает сохраненный выбор модели/провайдера как источник истины для обычных запусков. Это не позволяет устаревшему экспорту оболочки автоматически переопределять конечную точку, которую пользователь последний раз выбрал в hermes model.

Поставщики

Текущие семейства поставщиков включают:

Вывод разрешения во время выполнения

Резолвер времени выполнения возвращает такие данные, как:

Почему это важно

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

AI-шлюз

Установите AI_GATEWAY_API_KEY в ~/.hermes/.env и запустите с --provider ai-gateway. Hermes извлекает доступные модели из конечной точки шлюза /models, фильтруя их по языковым моделям с поддержкой использования инструментов.

OpenRouter, AI Gateway и пользовательские базовые URL-адреса, совместимые с OpenAI

Hermes содержит логику, позволяющую избежать утечки неправильного ключа API в пользовательскую конечную точку при наличии нескольких ключей поставщика (например, OPENROUTER_API_KEY, AI_GATEWAY_API_KEY и OPENAI_API_KEY).

Ключ API каждого поставщика ограничен собственным базовым URL-адресом:

Гермес также различает:

Это различие особенно важно для:

Родной антропный путь

Anthropic больше не просто «через OpenRouter».

Когда разрешение поставщика выбирает anthropic, Hermes использует:

Разрешение учетных данных для собственного Anthropic теперь предпочитает обновляемые учетные данные Claude Code скопированным токенам env, если они оба присутствуют. На практике это означает:

Путь к Кодексу OpenAI

Кодекс использует отдельный путь API ответов:

Маршрутизация вспомогательной модели

Вспомогательные задачи, такие как:

могут использовать собственную маршрутизацию провайдера/модели, а не основную диалоговую модель.

Когда вспомогательная задача настроена с помощью поставщика main, Hermes решает ее, используя тот же общий путь выполнения, что и обычный чат. На практике это означает:

Резервные модели

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

Как это работает внутри

  1. Хранилище: AIAgent.__init__ сохраняет словарь fallback_model и устанавливает _fallback_activated = False.

  2. Триггерные точки: _try_activate_fallback() вызывается из трех мест основного цикла повтора в run_agent.py:

  3. После максимального количества повторных попыток недопустимых ответов API (нет выбора, отсутствует контент)
  4. При невозможных ошибках клиента (HTTP 401, 403, 404).
  5. После максимального количества попыток при временных ошибках (HTTP 429, 500, 502, 503)

  6. Последовательность действий (_try_activate_fallback):

  7. Немедленно возвращает False, если он уже активирован или не настроен.
  8. Вызывает resolve_provider_client() от auxiliary_client.py для создания нового клиента с правильной аутентификацией.
  9. Определяет api_mode: codex_responses для openai-codex, anthropic_messages для антропных, chat_completions для всего остального
  10. Обмены на месте: self.model, self.provider, self.base_url, self.api_mode, self.client, self._client_kwargs
  11. Для антропного запасного варианта: создается собственный Anthropic клиент вместо OpenAI-совместимого.
  12. Переоценивается кэширование подсказок (включено для моделей Claude на OpenRouter)
  13. Устанавливает _fallback_activated = True — предотвращает повторную стрельбу
  14. Сбрасывает счетчик повторов до 0 и продолжает цикл.

  15. Последовательность действий:

  16. CLI: cli.py читает CLI_CONFIG["fallback_model"] → переходит к AIAgent(fallback_model=...)
  17. Шлюз: gateway/run.py._load_fallback_model() читает config.yaml → переходит к AIAgent
  18. Проверка: ключи provider и model должны быть непустыми, иначе резервный вариант отключен.

Что НЕ поддерживает резервный вариант

Задания Cron поддерживают резервный вариант: run_job() считывает fallback_providers (или устаревший fallback_model) из config.yaml и передает его AIAgent(fallback_model=...), сопоставляя его с шаблоном _load_fallback_model() шлюза. См. Внутренние элементы Cron.

Тестовое покрытие

См. tests/test_fallback_model.py для комплексных тестов, охватывающих всех поддерживаемых поставщиков, однократную семантику и крайние случаи.

Связанные документы