import type { Metadata } from "next"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { CheckCircle, XCircle, Database, Cpu } from "lucide-react"; import Link from "next/link"; import { getAllSiteSettings } from "@/lib/site-settings"; export const metadata: Metadata = {}; function resolveProvider(settings: Record) { if (settings["OPENROUTER_API_KEY"]?.value) return { provider: "OpenRouter", description: "Routes to many models via openrouter.ai" }; if (settings["OPENAI_API_KEY"]?.value) return { provider: "OpenAI", description: "Direct OpenAI API (GPT-4 etc.)" }; if (settings["ANTHROPIC_API_KEY"]?.value) return { provider: "Anthropic", description: "Direct Anthropic API (Claude models)" }; const url = settings["OLLAMA_BASE_URL"]?.value || "http://localhost:11434"; return { provider: "Ollama", description: `Local inference at ${url}` }; } export default async function AdminAiConfigPage() { const settings = await getAllSiteSettings(); const active = resolveProvider(settings); const keyRows = [ { key: "OPENROUTER_API_KEY", label: "OPENROUTER_API_KEY" }, { key: "OPENAI_API_KEY", label: "OPENAI_API_KEY" }, { key: "ANTHROPIC_API_KEY", label: "ANTHROPIC_API_KEY" }, ]; return (

AI Configuration

Current AI provider settings. Override values in{" "} Site Settings .

Active Provider
{active.provider} {active.description}

Priority: OpenRouter → OpenAI → Anthropic → Ollama (first configured key wins).

API Keys {keyRows.map(({ key, label }) => { const meta = settings[key]; const present = !!meta?.value; return (
{present ? ( ) : ( )} {label}
{present && meta?.fromDb && ( DB override )} {present && !meta?.fromDb && ( from .env )} {present ? "Configured" : "Not set"}
); })}
OLLAMA_BASE_URL {settings["OLLAMA_BASE_URL"]?.value || "http://localhost:11434 (default)"}
OPENROUTER_DEFAULT_MODEL {settings["OPENROUTER_DEFAULT_MODEL"]?.value || "google/gemini-flash-1.5 (default)"}
); }