Skip to content

Custom (compatible OpenAI)

TL;DR

bash
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://your-relay/v1     # REQUIRED — no upstream default
ONGRID_CUSTOM_MODEL=your-default-model

Provider 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 :

go
// 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

VariableDéfautNotes
ONGRID_CUSTOM_API_KEYVide = provider retiré
ONGRID_CUSTOM_BASE_URLREQUIS
ONGRID_CUSTOM_MODELId de modèle par défaut envoyé à chaque appel
ONGRID_CUSTOM_MODELSListe 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 :

go
// 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

bash
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-70b

vLLM local

bash
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-Instruct

vLLM ne valide pas les clés d'API par défaut — mettez n'importe quelle chaîne non vide.

Groq

bash
ONGRID_CUSTOM_API_KEY=gsk_...
ONGRID_CUSTOM_BASE_URL=https://api.groq.com/openai/v1
ONGRID_CUSTOM_MODEL=llama-3.3-70b-versatile

Mistral

bash
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://api.mistral.ai/v1
ONGRID_CUSTOM_MODEL=mistral-large-latest

Faire de Custom le défaut

bash
ONGRID_LLM_DEFAULT_PROVIDER=custom

Attention 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_LIMIT pour un garde-fou de budget cross-provider — voir Budget.

Voir aussi