Skip to content

OpenAI (GPT)

TL;DR

bash
ONGRID_OPENAI_API_KEY=sk-...
ONGRID_OPENAI_MODEL=gpt-5.4                 # default
ONGRID_OPENAI_BASE_URL=                     # optional; OpenAI-compatible relay

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

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

VarDefaultNotas
ONGRID_OPENAI_API_KEYVacío = provider descartado del catálogo
ONGRID_OPENAI_MODELgpt-5.4Perilla legacy de modelo único; honrada como el modelo default cuando la fila openai_default_model está vacía
ONGRID_OPENAI_BASE_URLhttps://api.openai.com/v1Override 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:

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

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

bash
# 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/v1

Usa 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

bash
ONGRID_LLM_DEFAULT_PROVIDER=openai

O /settings/llm → Default provider.

Quirks

  • Function calling — array plano de tool_calls en 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.Message de Generate o un StreamReader de eino desde Stream sin importar el provider.

Ver también