Skip to content

LLM Providers

源码版本v2026.7.20

Responsabilidad

Traducir «nombre de provider (nvidia, kimi, openai, openrouter…)» a «hostname concreto, preprocesamiento de mensajes, extra_body, lista de modelos». Hermes no usa herencia para abstraer los providers, sino un dataclass ProviderProfile + un conjunto de hooks; el profile se registra como plugin, logrando «declarar = integrar». Soporta Nous Portal, OpenRouter, OpenAI y endpoints personalizados.

Archivos clave

Flujo de datos

  1. init_agent:276 recibe el nombre de provider configurado por el usuario.
  2. Llama a get_provider_profile:65 (lo que dispara el descubrimiento perezoso la primera vez: escanea plugins/model-providers/<name>/, lo importa y llama a register_provider).
  3. Una vez obtenido el ProviderProfile:
  4. El bucle principal usa la petición ensamblada para llamar a la API del provider (subbucle de reintentos:1227).
  5. El extra_body de un provider personalizado se fusiona en _merge_custom_provider_extra_body:257.

Resumen

La abstracción de provider se resume en «profile + hooks», no «herencia». Añadir un provider solo requiere crear un subdirectorio en plugins/model-providers/, declarar un ProviderProfile y llamar a register_provider, sin tocar la base. El descubrimiento perezoso mantiene el arranque rápido y la carga bajo demanda.

Sitio de aprendizaje comunitario no oficial. Basado en el código fuente de NousResearch/hermes-agent (licencia MIT).