Custom (compatible con OpenAI)
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. Adapter SDK: eino-openai (cualquier endpoint compatible con OpenAI Chat Completions).
El slot Custom es la 7ma card de provider en la UI de Settings. Existe para todo lo que sea compatible con OpenAI a nivel wire pero no sea uno de los seis providers horneados:
- vLLM / TGI / llama.cpp self-hosted.
- OpenRouter, Together, Fireworks, Anyscale, Groq, Mistral.
- Gateways corporativos internos de modelo.
- Providers nuevos que salgan antes de que Ongrid añada un slot dedicado para ellos.
El guard de base-URL
El slot custom requiere una base URL explícita. Sin una, el SDK subyacente caería silenciosamente al default de OpenAI (https://api.openai.com/v1), enviando la key custom del operador al host equivocado. El resolver saltea el provider en ese caso:
// internal/manager/biz/setting/llm.go:155
if pk.id == model.LLMProviderCustom && strings.TrimSpace(baseURL) == "" {
continue
}Provee una BaseURL vía env o UI de Settings; en caso contrario el provider nunca aparece en el catálogo.
Env vars
| Var | Default | Notas |
|---|---|---|
ONGRID_CUSTOM_API_KEY | — | Vacío = provider descartado |
ONGRID_CUSTOM_BASE_URL | — | REQUERIDO |
ONGRID_CUSTOM_MODEL | — | ID de modelo default enviado en cada llamada |
ONGRID_CUSTOM_MODELS | — | Lista de catálogo (conjunto cerrado que muestra el picker de la SPA) |
No hay catálogo default de fábrica — rellena lo que tu endpoint soporte.
ChatModel interno pre-registrado
El runtime del graph-kernel pre-registra un ChatModel interno para el provider id custom al boot, incluso cuando no hay key configurada aún. Esta es la propiedad "configurado DESPUÉS del boot rutea inmediatamente, sin reinicio" que los operadores esperan de la UI de Settings:
// 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)
}
}El inner existe al boot; el key / baseURL por-llamada se resuelve dinámicamente vía el LLM-settings resolver. Los providers no configurados nunca alcanzan al picker (el catálogo /v1/aiops/models gateaa en ResolveProviders), así que el inner es inocuo hasta que se necesite realmente.
Ejemplos de configuración
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-70bvLLM local
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 no valida API keys por defecto — pon cualquier string no vacío.
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-latestHaciendo a Custom el default
ONGRID_LLM_DEFAULT_PROVIDER=customCuidado con el bug del resolver LLM — si default_provider no está seteado, el resolver cae al primer provider id ordenado (anthropic). Con OpenRouter cableado vía el slot custom pero default_provider="", las llamadas de chat van al id de modelo de Anthropic en el endpoint de Anthropic, no a OpenRouter — lo cual falla en auth. Establece default_provider=custom explícitamente.
Quirks
- Fidelidad de schema — asume que el endpoint habla Chat Completions OpenAI real. Endpoints que eliminan campos (
tool_calls,finish_reason) degradarán la function-calling del agente confiablemente. - Streaming — muchos relays no soportan streaming aún. El adapter maneja ambos modos; si
Stream()erra con"streaming not supported", la UI de chat auto-cae a buffered. - Sin rate-limit nativo — los gateways corporativos frecuentemente imponen rate limits por-token que no aparecen como 429s estándar. Setea
ONGRID_LLM_DAILY_TOKEN_LIMITpara un guard de budget cross-provider — ver Budget.
Ver también
- OpenAI (GPT) — para el endpoint real de OpenAI o Azure OpenAI.
- Overview de modelos.
- Routing.