OpenAI (GPT)
TL;DR
ONGRID_OPENAI_API_KEY=sk-...
ONGRID_OPENAI_MODEL=gpt-5.4 # default
ONGRID_OPENAI_BASE_URL= # optional; OpenAI-compatible relayProvider-ID: openai. SDK-Adapter: OpenAI Chat Completions (eino-openai-Client).
OpenAI ist der Legacy-Default — ältere Ongrid-Bereitstellungen kamen mit gpt-4o eingebackenen als cfg.OpenAI.Model (ein Top-Level-Struct-Feld, nicht unter cfg.LLM). Der aktuelle Code behält das Top-Level-Feld für Rückwärtskompatibilität:
// internal/pkg/config/config.go:36
type Config struct {
OpenAI OpenAIConfig
LLM LLMConfig
// ...
}Eine frische Installation liest ONGRID_OPENAI_API_KEY aus diesem Legacy-Pfad; ein Operator-Edit in /settings/llm schreibt die neuen system_settings.llm.openai_*-Zeilen. Der Resolver prüft beide, mit Per-Provider-Zeilen, die gewinnen.
Umgebungsvariablen
| Var | Default | Notizen |
|---|---|---|
ONGRID_OPENAI_API_KEY | — | Leer = Provider aus dem Katalog gedroppt |
ONGRID_OPENAI_MODEL | gpt-5.4 | Legacy-Single-Model-Knopf; geehrt als Standardmodell, wenn die openai_default_model-Zeile leer ist |
ONGRID_OPENAI_BASE_URL | https://api.openai.com/v1 | Override für Azure / OpenAI-kompatible Relays |
Die „Default-Modell"-Stolperfalle
Es gibt ZWEI modell-bezogene Settings-Keys für OpenAI:
openai_model— die Legacy-Single-Modell-Zeile. Geht der Per-Provider-Erweiterung voraus.openai_default_model— die neue „Default-Modell im Katalog"-Zeile, passt zu dem, was jeder andere Provider verwendet.
Der Resolver probiert zuerst die neue Zeile, dann fällt er auf den Legacy-Key zurück, dann auf env:
// internal/manager/biz/setting/llm.go:181
defaultModel, _, _ := r.svc.Get(ctx, model.CategoryLLM, pk.defaultModel)
if defaultModel == "" && pk.legacyModelKey != "" {
legacy, _, _ := r.svc.Get(ctx, model.CategoryLLM, pk.legacyModelKey)
defaultModel = strings.TrimSpace(legacy)
}Deshalb verliert ein Admin, der 2025 nach openai_model schrieb, seinen Default nach einem 2026-Upgrade nicht — der Lesepfad ehrt es weiterhin.
Standardkatalog
Der Out-of-Box-Modell-Picker zeigt drei GPT-Modelle — verdrahtet in cmd/ongrid/main.go:499:
Models: dedupeModels(firstNonEmpty(cfg.OpenAI.Model, "gpt-5.4"),
"gpt-5.5", "gpt-5.4", "gpt-5.4-mini"),dedupeModels heilt Bereitstellungen, die mit dem konfigurierten Default in der Liste dupliziert endeten (der gpt-5.4 / gpt-5.4-Bug, der einige 2026-05-Installationen traf).
BaseURL-Override
OpenAI-kompatible Relays (Azure OpenAI, OpenRouter, llama.cpps --api-Modus lokal, vLLM) alle funktionieren — setzen Sie ONGRID_OPENAI_BASE_URL auf den /v1-gerooten Base des Relays.
# Azure OpenAI
ONGRID_OPENAI_BASE_URL=https://<resource>.openai.azure.com/openai/deployments/<deployment>
# OpenRouter
ONGRID_OPENAI_BASE_URL=https://openrouter.ai/api/v1
# Local vLLM
ONGRID_OPENAI_BASE_URL=http://localhost:8000/v1Verwenden Sie Custom für Nicht-Azure-Relays, die Sie auch neben echtem OpenAI verwenden
Der einzelne ONGRID_OPENAI_BASE_URL-Knopf bedeutet, Sie können OpenAI UND ein OpenAI-kompatibles Relay nicht gleichzeitig durch den openai-Provider-Slot laufen lassen. Verwenden Sie Custom für das Relay stattdessen — es ist ein paralleler Slot speziell dafür.
OpenAI zum Default machen
ONGRID_LLM_DEFAULT_PROVIDER=openaiOder /settings/llm → Default-Provider.
Eigenheiten
- Function-Calling — Flat-
tool_calls-Array auf Assistant-Messages. Der Ongrid-Tool-Dispatcher erwartet diese Form; Adapter für andere Provider übersetzen dazu. - Streaming — OpenAIs
data: [DONE]-Sentinel wird vom eino-Adapter konsumiert; Sie bekommen eine einzelne*schema.MessagevonGenerateoder eineneino-StreamReader vonStream, unabhängig vom Provider.
Siehe auch
- Custom (OpenAI-kompatibel) — der zweite OpenAI-style-Slot für Relays / lokale Server.
- Modelle-Übersicht — Provider-Katalog-Zusammenstellung.
- Routing —
WithProvider("openai").