+ {/* -------- Grok (xAI) key -------- */}
+
+
+
+ {hasGrokKey ? (
+
+ key set
+
+ ) : (
+
+ not set
+
+ )}
+
+
+ setGrokKey(e.target.value)}
+ placeholder={
+ hasGrokKey ? "•••••••••••• (leave blank to keep)" : "xai-…"
+ }
+ disabled={clearGrokKey}
+ />
+
+
+ {hasGrokKey ? (
+
+ ) : (
+
+ Used for grok-build-0.1 at api.x.ai/v1. Stored
+ Fernet-encrypted server-side; never returned by the API.
+
+ )}
+
-
+
- {/* -------- Ollama key -------- */}
-
-
-
- {hasOllamaKey ? (
-
- key set
-
- ) : (
-
- not set
-
- )}
+ {/* -------- Ollama key -------- */}
+
+
+
+ {hasOllamaKey ? (
+
+ key set
+
+ ) : (
+
+ not set
+
+ )}
+
+
+ setApiKey(e.target.value)}
+ placeholder={
+ hasOllamaKey
+ ? "•••••••••••• (leave blank to keep)"
+ : "ollama_xxx…"
+ }
+ disabled={clearKey}
+ />
+
+
+ {hasOllamaKey ? (
+
+ ) : (
+
+ Stored Fernet-encrypted server-side; never returned by the
+ API.
+
+ )}
+
-
- setApiKey(e.target.value)}
- placeholder={
- hasOllamaKey
- ? "•••••••••••• (leave blank to keep)"
- : "ollama_xxx…"
- }
- disabled={clearKey}
- />
-
-
- {hasOllamaKey ? (
-
- ) : (
-
- Stored Fernet-encrypted server-side; never returned by the API.
-
- )}
-
-
-
- {/* -------- Self-Hosted LLM -------- */}
-
undefined}
- />
+ {/* -------- Self-Hosted LLM -------- */}
+ undefined}
+ />
+
@@ -560,109 +596,151 @@ export function AIRoutingCard() {
all per-agent overrides with what's picked here.