Skip to content

Modelle-Übersicht

Ongrid liefert kein eingebackenes Modell aus. Die Plattform ist ein Multi-Provider-Router: Sie liefern API-Keys für ein oder mehrere Upstreams, der Manager exponiert den konfigurierten Katalog im Per-Message-Picker der SPA, und jeder Chat- / RCA- / Translate-Aufruf dispatcht zur Laufzeit an den richtigen Upstream.

Sieben Provider werden von Haus aus unterstützt:

ProviderStandardmodellenv-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 (OpenAI-kompatibel)ONGRID_CUSTOM_API_KEY + Base-URL

Plus:

Die zwei Konfigurationspfade

Beide Pfade produzieren dieselbe []llm.ProviderConfig, die der Router konsumiert; sie unterscheiden sich nur darin, wer den Knopf bedient.

Env-geseedet (Boot)

cmd/ongrid/main.go liest cfg.LLM.* und seedet passende Zeilen in system_settings.llm.* via setting.Service.SetIfAbsent. Der erste Boot einer frischen Installation mit ONGRID_ANTHROPIC_API_KEY=... endet mit einer funktionierenden Anthropic-Default-Installation — kein SPA-Login erforderlich.

SetIfAbsent ist der Schlüssel — Re-Boots überschreiben nie Operator-Edits in der SPA.

Settings-UI (Laufzeit)

/settings/llm in der SPA lässt einen Admin:

  • Den Per-Provider-API-Key hinzufügen / rotieren (gespeichert in system_settings.llm.<provider>_api_key mit gesetztem Secret-Flag).
  • Die BaseURL editieren (Relays, regionale Endpunkte, China-basierte Mirrors).
  • Die Per-Provider-Modell-Liste pflegen (das geschlossene Set, das der Picker zeigt).
  • Das Standardmodell pro Provider pinnen.
  • Den Default-Provider auswählen — auf was der Home-Page-Chat zurückfällt, wenn kein Per-Message-Pin gesetzt ist.

Die 6 Vendor-Karten plus die 7. „Custom"-Karte rendern mit ihren echten Provider-Mark-Logos (bezogen von simple-icons), sodass Admins sie ohne Labels lesen erkennen.

Hot Swap

Provider-Edits treten innerhalb von 60s ohne Manager-Restart in Kraft. Die DB → Router-Cache-TTL ist die 60s des Resolvers plus die eigenen 60s des MultiClient — also Worst-Case 120s. Edge-Agenten sind unbetroffen; der Manager ist der einzige LLM-Client.

Der Resolver

LLMSettingsResolver liest aus system_settings.llm.* und stellt []llm.ProviderConfig zusammen. Fällt pro Feld auf env-Defaults zurück, sodass eine halb-konfigurierte Installation (Key via env gesetzt, BaseURL leer gelassen) trotzdem funktioniert.

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

Provider-IDs sind stabile Strings: openai, anthropic, zhipu, gemini, deepseek, kimi, custom. Diese IDs tauchen überall auf — der Chat-Picker, Audit-Logs, ChatReq.Provider, WithProvider-Option.

Der Katalog-Endpunkt

GET /v1/aiops/models gibt den Katalog zurück, den der SPA-Picker rendert:

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"
}

Provider ohne konfigurierten API-Key werden stillschweigend gedroppt — so weiß der Picker, was tatsächlich verfügbar ist. API-Keys selbst werden von diesem Endpunkt nie zurückgegeben.

Per-Call-Dispatch

Ein ChatReq trägt ein Provider-Feld; wenn gesetzt, dispatcht MultiClient.Chat zum passenden Sub-Client. Wenn leer, verwendet der Router den konfigurierten Default (DB > env > erstes sortiertes).

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

Für Graph-Kernel-Aufrufe (der ReAct-Agent) ist das Äquivalent llm.WithProvider(id) als eino-Modell-Option — siehe Routing.

Wo was ist

  • Anthropic / OpenAI / Zhipu / DeepSeek / Gemini / Kimi / Custom — eine Seite pro Provider mit den Umgebungsvariablen, dem Standardmodell und allen vendor-spezifischen Eigenheiten.
  • Routing & DefaultRoutingChatModel.pick, der DefaultResolver und wie man im Code einen Nicht-Default-Provider verdrahtet.
  • Budget & LimitsONGRID_LLM_DAILY_TOKEN_LIMIT, der BudgetCallback, die ErrBudgetExceeded-Semantik.

Siehe auch

  • Architektur — wo die LLM-Schicht in der L3-Intelligenzschicht sitzt.
  • Umgebungsvariablen — die vollständige ONGRID_*_API_KEY- + ONGRID_*_MODEL- + ONGRID_*_BASE_URL-Matrix.