Skip to content

LLM Providers

源码版本v2026.7.20

Responsabilité

Traduire « nom de provider (nvidia, kimi, openai, openrouter…) » en « hostname concret, prétraitement des messages, extra_body, liste de modèles ». Hermes n'utilise pas une hiérarchie d'héritage pour abstraire les providers, mais une dataclass ProviderProfile + un ensemble de hooks ; le profil est enregistré comme plugin, ce qui se traduit par « déclarer c'est câbler ». Prend en charge Nous Portal, OpenRouter, OpenAI et endpoints personnalisés.

Fichiers clés

Flux de données

  1. init_agent:276 récupère le nom de provider configuré par l'utilisateur.
  2. Appelle get_provider_profile:65 (premier appel déclenche la découverte paresseuse : scan de plugins/model-providers/<name>/, import et register_provider).
  3. Après obtention du ProviderProfile :
  4. La boucle principale appelle l'API du provider avec la requête assemblée (sous-boucle de retry:1227).
  5. L'extra_body des providers personnalisés est fusionné dans _merge_custom_provider_extra_body:257.

Résumé

Les mots-clés de l'abstraction provider sont « profil + hooks » plutôt qu'« héritage ». Ajouter un provider consiste à créer un sous-répertoire dans plugins/model-providers/, déclarer un ProviderProfile et appeler register_provider, sans toucher à la base. La découverte paresseuse garantit un démarrage rapide et un chargement à la demande.

Site d'apprentissage communautaire non officiel. Basé sur le code source de NousResearch/hermes-agent (licence MIT).