Custom (OpenAI-kompatibel)
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. SDK-Adapter: eino-openai (jeder OpenAI-Chat-Completions–kompatible Endpunkt).
Der Custom-Slot ist die 7. Provider-Karte in der Settings-UI. Er existiert für alles, was auf Wire-Level OpenAI-kompatibel ist, aber nicht einer der sechs eingebackenen Provider ist:
- Selbstgehostetes vLLM / TGI / llama.cpp.
- OpenRouter, Together, Fireworks, Anyscale, Groq, Mistral.
- Interne Corporate-Modell-Gateways.
- Neue Provider, die ausgeliefert werden, bevor Ongrid einen dedizierten Slot für sie hinzufügt.
Der Base-URL-Guard
Der Custom-Slot erfordert eine explizite Base-URL. Ohne eine würde das zugrundeliegende SDK stillschweigend auf OpenAIs Default zurückfallen (https://api.openai.com/v1) und den custom-Key des Operators an den falschen Host senden. Der Resolver überspringt den Provider in diesem Fall:
// internal/manager/biz/setting/llm.go:155
if pk.id == model.LLMProviderCustom && strings.TrimSpace(baseURL) == "" {
continue
}Liefern Sie eine BaseURL via env oder Settings-UI; sonst erscheint der Provider nie im Katalog.
Umgebungsvariablen
| Var | Default | Notizen |
|---|---|---|
ONGRID_CUSTOM_API_KEY | — | Leer = Provider gedroppt |
ONGRID_CUSTOM_BASE_URL | — | ERFORDERLICH |
ONGRID_CUSTOM_MODEL | — | Standard-Modell-ID, die bei jedem Aufruf gesendet wird |
ONGRID_CUSTOM_MODELS | — | Katalog-Liste (geschlossenes Set, das der SPA-Picker zeigt) |
Es gibt keinen Out-of-Box-Default-Katalog — füllen Sie ein, was Ihr Endpunkt unterstützt.
Pre-registrierter innerer ChatModel
Die Graph-Kernel-Runtime registriert einen inneren ChatModel für die custom-Provider-ID beim Boot vorab, auch wenn noch kein Key konfiguriert ist. Das ist die „konfiguriert NACH Boot routet sofort, kein Restart"-Eigenschaft, die Operatoren von der Settings-UI erwarten:
// 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)
}
}Der Inner existiert beim Boot; der Per-Call-Key / BaseURL wird dynamisch via den LLM-Settings-Resolver aufgelöst. Unkonfigurierte Provider erreichen nie den Picker (der /v1/aiops/models-Katalog gatet auf ResolveProviders), sodass der Inner harmlos ist, bis er tatsächlich gebraucht wird.
Konfigurationsbeispiele
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-70bLokales vLLM
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 validiert API-Keys standardmäßig nicht — setzen Sie eine beliebige nicht-leere Zeichenkette.
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-latestCustom zum Default machen
ONGRID_LLM_DEFAULT_PROVIDER=customAchten Sie auf den LLM-Resolver-Bug — wenn default_provider nicht gesetzt ist, fällt der Resolver auf die erstsortierte Provider-ID (anthropic) zurück. Mit OpenRouter via den Custom-Slot verdrahtet, aber default_provider="", gehen Chat-Aufrufe an Anthropics Modell-ID auf Anthropics Endpunkt, nicht an OpenRouter — was beim Auth fehlschlägt. Setzen Sie default_provider=custom explizit.
Eigenheiten
- Schema-Treue — nimmt an, dass der Endpunkt echtes OpenAI-Chat-Completions spricht. Endpunkte, die Felder strippen (
tool_calls,finish_reason), degradieren das Function-Calling des Agenten zuverlässig. - Streaming — viele Relays unterstützen noch kein Streaming. Der Adapter handhabt beide Modi; wenn
Stream()mit"streaming not supported"errort, fällt die Chat-UI automatisch auf buffered zurück. - Kein natives Rate-Limit — Corporate-Gateways verhängen oft Per-Token-Rate-Limits, die nicht als Standard-429s erscheinen. Setzen Sie
ONGRID_LLM_DAILY_TOKEN_LIMITfür einen Cross-Provider-Budget-Guard — siehe Budget.
Siehe auch
- OpenAI (GPT) — für den echten OpenAI-Endpunkt oder Azure OpenAI.
- Modelle-Übersicht.
- Routing.