Skip to content

Overview de modelos

Ongrid no trae un modelo horneado. La plataforma es un router multi-provider: tú provees API keys para uno o más upstreams, el manager muestra el catálogo configurado al picker por-mensaje de la SPA, y cada llamada de chat / RCA / translate hace dispatch al upstream correcto en runtime.

Siete providers están soportados de fábrica:

ProviderModelo defaultEnv key
Anthropicclaude-sonnet-4-6ONGRID_ANTHROPIC_API_KEY
OpenAIgpt-5.4ONGRID_OPENAI_API_KEY
Zhipu (GLM)glm-4.7ONGRID_ZHIPU_API_KEY
DeepSeekdeepseek-v4-flashONGRID_DEEPSEEK_API_KEY
Geminigemini-2.5-proONGRID_GEMINI_API_KEY
Kimikimi-k2.6ONGRID_KIMI_API_KEY
Custom (compatible con OpenAI)ONGRID_CUSTOM_API_KEY + base URL

Más:

Las dos rutas de configuración

Ambas rutas producen el mismo []llm.ProviderConfig que consume el router; difieren solo en quién opera la perilla.

Sembrado por env (boot)

cmd/ongrid/main.go lee cfg.LLM.* y siembra filas matcheando en system_settings.llm.* vía setting.Service.SetIfAbsent. El primer boot de una instalación fresca con ONGRID_ANTHROPIC_API_KEY=... termina con una instalación Anthropic-default funcional — sin login de SPA requerido.

SetIfAbsent es la clave — los re-boots nunca sobrescriben ediciones de operador en la SPA.

UI de Settings (runtime)

/settings/llm en la SPA permite a un admin:

  • Añadir / rotar la API key por-provider (almacenada en system_settings.llm.<provider>_api_key con el flag secret seteado).
  • Editar la BaseURL (relays, endpoints regionales, mirrors en China).
  • Mantener la lista de modelos por-provider (el conjunto cerrado que muestra el picker).
  • Fijar el modelo default por provider.
  • Elegir el default provider — a qué cae el chat de la home page cuando no hay pin por-mensaje seteado.

Las 6 cards de vendor más la 7ma card "Custom" se renderizan con sus logos de mark de provider reales (sacados de simple-icons) para que los admins los reconozcan sin leer las labels.

Hot swap

Las ediciones de provider toman efecto en 60s sin reinicio del manager. El TTL de cache DB → router es 60s del resolver, más 60s propios del MultiClient — así que en el peor caso 120s. Los agentes edge no se ven afectados; el manager es el único cliente LLM.

El resolver

LLMSettingsResolver lee de system_settings.llm.* y ensambla []llm.ProviderConfig. Cae a defaults de env por campo, así que una instalación a medio configurar (key seteada vía env, BaseURL en blanco) sigue funcionando.

go
// internal/manager/biz/setting/llm.go:133
func (r *LLMSettingsResolver) ResolveProviders(ctx context.Context) (
    providers []llm.ProviderConfig, defaultProvider string, err error,
)

Los IDs de provider son strings estables: openai, anthropic, zhipu, gemini, deepseek, kimi, custom. Estos ids aparecen en todas partes — el picker de chat, audit logs, ChatReq.Provider, opción WithProvider.

GET /v1/aiops/models devuelve el catálogo que renderiza el picker de la SPA:

json
{
  "providers": [
    {
      "id": "anthropic",
      "label": "Anthropic",
      "default_model": "claude-sonnet-4-6",
      "models": ["claude-opus-4-7", "claude-sonnet-4-6", "claude-haiku-4-5"]
    },
    {
      "id": "zhipu", "label": "Zhipu (GLM)",
      "default_model": "glm-4.7",
      "models": ["glm-5.1", "glm-5", "glm-4.7", "glm-4.7-flash"]
    }
  ],
  "default": "anthropic"
}

Los providers sin API key configurada se descartan silenciosamente — así sabe el picker qué está realmente disponible. Las API keys en sí nunca son devueltas por este endpoint.

Dispatch por-llamada

Un ChatReq lleva un campo Provider; cuando está seteado, MultiClient.Chat hace dispatch al sub-cliente matcheando. Cuando está vacío, el router usa el default configurado (DB > env > primero ordenado).

go
// internal/pkg/llm/router.go
func (m *MultiClient) Chat(ctx context.Context, req ChatReq) (*ChatResp, error)

Para llamadas del graph-kernel (el agente ReAct), el equivalente es llm.WithProvider(id) como una opción de model eino — ver Routing.

Qué está dónde

  • Anthropic / OpenAI / Zhipu / DeepSeek / Gemini / Kimi / Custom — una página por provider con las env vars, el modelo default y cualquier quirk vendor-específico.
  • Routing & defaultRoutingChatModel.pick, el DefaultResolver, y cómo cablear un provider no-default en código.
  • Budget & limitsONGRID_LLM_DAILY_TOKEN_LIMIT, el BudgetCallback, la semántica de ErrBudgetExceeded.

Ver también

  • Arquitectura — dónde se sienta la capa LLM en la capa L3 de intelligence.
  • Variables de entorno — la matriz completa ONGRID_*_API_KEY + ONGRID_*_MODEL + ONGRID_*_BASE_URL.