"use client"; import { Sparkles, X } from "lucide-react"; import Link from "next/link"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Button } from "@/components/ui/button"; import { getAiConfig } from "@/lib/ai-settings"; // A single, dismissible heads-up shown above the chat input on a fresh chat when // no AI provider is configured yet (no API key, and no local Ollama). It only // renders on the empty state, so it naturally disappears once a message is sent. export function AiSetupNotice() { const { t } = useTranslation(); const [needsSetup, setNeedsSetup] = useState(false); const [dismissed, setDismissed] = useState(false); useEffect(() => { let active = true; getAiConfig() .then((cfg) => { if (!active) return; // Configured = an API key for any provider, or a local Ollama endpoint. const hasApiKey = Object.values(cfg.apiKeySet).some(Boolean); const hasLocal = cfg.mode === "local" && cfg.ollamaBaseUrl.trim().length > 0; setNeedsSetup(!(hasApiKey || hasLocal)); }) .catch(() => { // If we can't read the config, don't nag — the chat still works. if (active) setNeedsSetup(false); }); return () => { active = false; }; }, []); if (!needsSetup || dismissed) return null; return (
{t("chat.setupNotice.title")}
{t("chat.setupNotice.body")}
} size="sm" variant="link" > {t("chat.setupNotice.action")}