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. Adapter SDK: OpenAI Chat Completions (cliente eino-openai).
OpenAI es el default legacy — despliegues de Ongrid más viejos venían con gpt-4o horneado como cfg.OpenAI.Model (un campo de struct de nivel superior, no bajo cfg.LLM). El código actual conserva el campo top-level para compatibilidad hacia atrás:
// internal/pkg/config/config.go:36
type Config struct {
OpenAI OpenAIConfig
LLM LLMConfig
// ...
}Una instalación fresca lee ONGRID_OPENAI_API_KEY desde este path legacy; una edición del operador en /settings/llm escribe las nuevas filas system_settings.llm.openai_*. El resolver chequea ambas, con las filas por-provider ganando.
Env vars
| Var | Default | Notas |
|---|---|---|
ONGRID_OPENAI_API_KEY | — | Vacío = provider descartado del catálogo |
ONGRID_OPENAI_MODEL | gpt-5.4 | Perilla legacy de modelo único; honrada como el modelo default cuando la fila openai_default_model está vacía |
ONGRID_OPENAI_BASE_URL | https://api.openai.com/v1 | Override para Azure / relays compatibles con OpenAI |
La trip-wire del "default model"
Hay DOS keys de configuración relacionadas a modelo para OpenAI:
openai_model— la fila legacy de modelo único. Anterior a la expansión por-provider.openai_default_model— la nueva fila "modelo default en el catálogo", matchea con lo que usa cada otro provider.
El resolver intenta la fila nueva primero, luego cae a la key legacy, luego al 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)
}Por esto un admin que escribió a openai_model en 2025 no pierde su default tras un upgrade en 2026 — el path de lectura todavía lo honra.
Catálogo default
El picker de modelo de fábrica muestra tres modelos GPT — cableado en 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 cura despliegues que terminaron con el default configurado duplicado en la lista (el bug gpt-5.4 / gpt-5.4 que pegó a algunas instalaciones de 2026-05).
Override de BaseURL
Los relays compatibles con OpenAI (Azure OpenAI, OpenRouter, el modo --api local de llama.cpp, vLLM) todos funcionan — setea ONGRID_OPENAI_BASE_URL a la base rooteada en /v1 del relay.
# 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/v1Usa Custom para relays no-Azure que también usas junto a OpenAI real
La perilla única ONGRID_OPENAI_BASE_URL significa que no puedes correr OpenAI Y un relay compatible con OpenAI simultáneamente a través del slot del provider openai. Usa Custom para el relay en su lugar — es un slot paralelo específicamente para esto.
Haciendo a OpenAI el default
ONGRID_LLM_DEFAULT_PROVIDER=openaiO /settings/llm → Default provider.
Quirks
- Function calling — array plano de
tool_callsen mensajes de assistant. El dispatcher de tool de Ongrid espera esta forma; los adapters para otros providers traducen a esto. - Streaming — el sentinel
data: [DONE]de OpenAI lo consume el adapter de eino; obtienes un único*schema.MessagedeGenerateo un StreamReader deeinodesdeStreamsin importar el provider.
Ver también
- Custom (compatible con OpenAI) — el segundo slot estilo OpenAI para relays / servidores locales.
- Overview de modelos — ensamblaje del catálogo de provider.
- Routing —
WithProvider("openai").