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 :
| Provider | Modèle par défaut | Clé d'env |
|---|---|---|
| Anthropic | claude-sonnet-4-6 | ONGRID_ANTHROPIC_API_KEY |
| OpenAI | gpt-5.4 | ONGRID_OPENAI_API_KEY |
| Zhipu (GLM) | glm-4.7 | ONGRID_ZHIPU_API_KEY |
| DeepSeek | deepseek-v4-flash | ONGRID_DEEPSEEK_API_KEY |
| Gemini | gemini-2.5-pro | ONGRID_GEMINI_API_KEY |
| Kimi | kimi-k2.6 | ONGRID_KIMI_API_KEY |
| Custom (compatible OpenAI) | — | ONGRID_CUSTOM_API_KEY + base URL |
Plus :
- Une couche de routing — choisissez le provider par appel, défaut dynamique.
- Un gate de budget — plafond global de tokens par jour UTC.
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_keyavec 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.
// 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 :
{
"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é).
// 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 & default —
RoutingChatModel.pick, le DefaultResolver, et comment câbler un provider non-défaut dans le code. - Budget & limites —
ONGRID_LLM_DAILY_TOKEN_LIMIT, leBudgetCallback, la sémantiqueErrBudgetExceeded.
Voir aussi
- Architecture — où se situe la couche LLM dans la couche d'intelligence L3.
- Variables d'environnement — la matrice complète
ONGRID_*_API_KEY+ONGRID_*_MODEL+ONGRID_*_BASE_URL.