Custom (compatible OpenAI)
TL;DR
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://your-relay/v1 # REQUIRED — no upstream default
ONGRID_CUSTOM_MODEL=your-default-modelProvider id : custom. Adaptateur SDK : eino-openai (tout endpoint compatible OpenAI Chat Completions).
Le slot Custom est la 7ème carte de provider dans l'UI Settings. Il existe pour tout ce qui est compatible OpenAI au niveau wire mais n'est pas l'un des six providers cuits dedans :
- vLLM / TGI / llama.cpp self-hostés.
- OpenRouter, Together, Fireworks, Anyscale, Groq, Mistral.
- Gateways de modèle corporate internes.
- Nouveaux providers qui sortent avant qu'Ongrid n'ajoute un slot dédié pour eux.
Le garde-fou base-URL
Le slot custom requiert une URL de base explicite. Sans une, le SDK sous-jacent retomberait silencieusement sur le défaut d'OpenAI (https://api.openai.com/v1), envoyant la clé custom de l'opérateur au mauvais host. Le résolveur saute le provider dans ce cas :
// internal/manager/biz/setting/llm.go:155
if pk.id == model.LLMProviderCustom && strings.TrimSpace(baseURL) == "" {
continue
}Fournissez une BaseURL via env ou UI Settings ; sinon le provider n'apparaît jamais dans le catalogue.
Variables d'env
| Variable | Défaut | Notes |
|---|---|---|
ONGRID_CUSTOM_API_KEY | — | Vide = provider retiré |
ONGRID_CUSTOM_BASE_URL | — | REQUIS |
ONGRID_CUSTOM_MODEL | — | Id de modèle par défaut envoyé à chaque appel |
ONGRID_CUSTOM_MODELS | — | Liste de catalogue (ensemble fermé que le picker SPA affiche) |
Il n'y a pas de catalogue par défaut out-of-box — remplissez ce que votre endpoint supporte.
ChatModel interne pré-enregistré
Le runtime graph-kernel pré-enregistre un ChatModel interne pour l'id de provider custom au démarrage, même quand aucune clé n'est encore configurée. C'est la propriété « configuré APRÈS le démarrage route immédiatement, pas de redémarrage » que les opérateurs attendent de l'UI Settings :
// cmd/ongrid/main.go:2457
for _, id := range []string{
llm.ProviderOpenAI, llm.ProviderAnthropic, llm.ProviderZhipu,
llm.ProviderGemini, llm.ProviderDeepSeek, llm.ProviderKimi, llm.ProviderCustom,
} {
if _, ok := innerModels[id]; !ok {
addInner(id, "") // model supplied per-call (picker / DefaultResolver)
}
}L'interne existe au démarrage ; la clé / baseURL par appel est résolue dynamiquement via le résolveur de settings LLM. Les providers non configurés n'atteignent jamais le picker (le catalogue /v1/aiops/models gate sur ResolveProviders), donc l'interne est inoffensif jusqu'à ce qu'il soit réellement nécessaire.
Exemples de configuration
OpenRouter
ONGRID_CUSTOM_API_KEY=sk-or-v1-...
ONGRID_CUSTOM_BASE_URL=https://openrouter.ai/api/v1
ONGRID_CUSTOM_MODEL=anthropic/claude-sonnet-4
ONGRID_CUSTOM_MODELS=anthropic/claude-sonnet-4,anthropic/claude-opus-4,meta-llama/llama-3.3-70bvLLM local
ONGRID_CUSTOM_API_KEY=sk-not-checked-by-vllm
ONGRID_CUSTOM_BASE_URL=http://vllm.internal:8000/v1
ONGRID_CUSTOM_MODEL=Qwen2.5-72B-Instruct
ONGRID_CUSTOM_MODELS=Qwen2.5-72B-InstructvLLM ne valide pas les clés d'API par défaut — mettez n'importe quelle chaîne non vide.
Groq
ONGRID_CUSTOM_API_KEY=gsk_...
ONGRID_CUSTOM_BASE_URL=https://api.groq.com/openai/v1
ONGRID_CUSTOM_MODEL=llama-3.3-70b-versatileMistral
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://api.mistral.ai/v1
ONGRID_CUSTOM_MODEL=mistral-large-latestFaire de Custom le défaut
ONGRID_LLM_DEFAULT_PROVIDER=customAttention au bug du résolveur LLM — si default_provider n'est pas posé, le résolveur retombe sur le premier id de provider trié (anthropic). Avec OpenRouter câblé via le slot custom mais default_provider="", les appels de chat vont à l'id de modèle d'Anthropic sur l'endpoint d'Anthropic, pas à OpenRouter — ce qui échoue sur l'auth. Mettez default_provider=custom explicitement.
Particularités
- Fidélité de schéma — suppose que l'endpoint parle vraiment OpenAI Chat Completions. Les endpoints qui retirent des champs (
tool_calls,finish_reason) dégraderont la fiabilité du function-calling de l'agent. - Streaming — beaucoup de relais ne supportent pas encore le streaming. L'adaptateur gère les deux modes ; si
Stream()erre avec"streaming not supported", l'UI de chat retombe automatiquement sur buffered. - Pas de rate-limit natif — les gateways corporate imposent souvent des rate limits par token qui ne se présentent pas comme des 429 standard. Posez
ONGRID_LLM_DAILY_TOKEN_LIMITpour un garde-fou de budget cross-provider — voir Budget.
Voir aussi
- OpenAI (GPT) — pour le vrai endpoint OpenAI ou Azure OpenAI.
- Aperçu des modèles.
- Routing.