Skip to content

Aperçu des modèles

Ongrid ne livre pas de modèle cuit dedans. La plateforme est un router multi-provider : vous fournissez des clés d'API pour un ou plusieurs upstreams, le manager fait remonter le catalogue configuré au picker par message de la SPA, et chaque appel chat / RCA / translate dispatche au bon upstream au runtime.

Sept providers sont supportés out of the box :

ProviderModèle par défautClé d'env
Anthropicclaude-sonnet-4-6ONGRID_ANTHROPIC_API_KEY
OpenAIgpt-5.4ONGRID_OPENAI_API_KEY
Zhipu (GLM)glm-4.7ONGRID_ZHIPU_API_KEY
DeepSeekdeepseek-v4-flashONGRID_DEEPSEEK_API_KEY
Geminigemini-2.5-proONGRID_GEMINI_API_KEY
Kimikimi-k2.6ONGRID_KIMI_API_KEY
Custom (compatible OpenAI)ONGRID_CUSTOM_API_KEY + base URL

Plus :

Les deux chemins de configuration

Les deux chemins produisent le même []llm.ProviderConfig que le router consomme ; ils diffèrent seulement par qui opère le bouton.

Seedé par env (boot)

cmd/ongrid/main.go lit cfg.LLM.* et seed les lignes matchantes dans system_settings.llm.* via setting.Service.SetIfAbsent. Le premier boot d'une install fraîche avec ONGRID_ANTHROPIC_API_KEY=... se termine par une install Anthropic-default fonctionnelle — pas de login SPA requis.

SetIfAbsent est la clé — les re-boots n'écrasent jamais les éditions opérateur dans la SPA.

UI Settings (runtime)

/settings/llm dans la SPA laisse un admin :

  • Ajouter / rotater la clé d'API par provider (stockée dans system_settings.llm.<provider>_api_key avec le flag secret posé).
  • Éditer la BaseURL (relais, endpoints régionaux, mirrors China-based).
  • Maintenir la liste de modèles par provider (l'ensemble fermé que le picker affiche).
  • Épingler le modèle par défaut par provider.
  • Choisir le default provider — ce sur quoi le chat de la page d'accueil retombe quand aucun épinglage par message n'est posé.

Les 6 cartes vendor plus la 7ème carte « Custom » se rendent avec leurs vrais logos de marque de provider (sourcés depuis simple-icons) pour que les admins les reconnaissent sans lire les labels.

Swap à chaud

Les éditions de provider prennent effet en 60s sans redémarrage du manager. Le TTL de cache DB → router est le 60s du résolveur, plus le 60s du MultiClient — donc pire cas 120s. Les agents edge ne sont pas affectés ; le manager est le seul client LLM.

Le résolveur

LLMSettingsResolver lit depuis system_settings.llm.* et assemble []llm.ProviderConfig. Retombe sur les défauts d'env par champ pour qu'une install à moitié configurée (clé posée via env, BaseURL laissée vide) marche encore.

go
// internal/manager/biz/setting/llm.go:133
func (r *LLMSettingsResolver) ResolveProviders(ctx context.Context) (
    providers []llm.ProviderConfig, defaultProvider string, err error,
)

Les IDs de provider sont des chaînes stables : openai, anthropic, zhipu, gemini, deepseek, kimi, custom. Ces ids apparaissent partout — le picker de chat, les logs d'audit, ChatReq.Provider, l'option WithProvider.

L'endpoint de catalogue

GET /v1/aiops/models renvoie le catalogue que le picker SPA rend :

json
{
  "providers": [
    {
      "id": "anthropic",
      "label": "Anthropic",
      "default_model": "claude-sonnet-4-6",
      "models": ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5"]
    },
    {
      "id": "zhipu", "label": "Zhipu (GLM)",
      "default_model": "glm-4.7",
      "models": ["glm-5.1", "glm-5", "glm-4.7", "glm-4.7-flash"]
    }
  ],
  "default": "anthropic"
}

Les providers sans clé d'API configurée sont droppés silencieusement — c'est ainsi que le picker sait ce qui est réellement disponible. Les clés d'API elles-mêmes ne sont jamais renvoyées par cet endpoint.

Dispatch par appel

Un ChatReq porte un champ Provider ; quand posé, MultiClient.Chat dispatche au sous-client matchant. Quand vide, le router utilise le défaut configuré (DB > env > premier trié).

go
// internal/pkg/llm/router.go
func (m *MultiClient) Chat(ctx context.Context, req ChatReq) (*ChatResp, error)

Pour les appels graph-kernel (l'agent ReAct), l'équivalent est llm.WithProvider(id) comme option de modèle eino — voir Routing.

Quoi où

  • Anthropic / OpenAI / Zhipu / DeepSeek / Gemini / Kimi / Custom — une page par provider avec les variables d'env, le modèle par défaut, et toute particularité spécifique au vendor.
  • Routing & defaultRoutingChatModel.pick, le DefaultResolver, et comment câbler un provider non-défaut dans le code.
  • Budget & limitesONGRID_LLM_DAILY_TOKEN_LIMIT, le BudgetCallback, la sémantique ErrBudgetExceeded.

Voir aussi