"use client"; import { AlertTriangle, Copy, ExternalLink } from "lucide-react"; import { useState } from "react"; import { useDoclingHealthQuery } from "@/app/api/queries/useDoclingHealthQuery"; import { Banner, BannerAction, BannerIcon, BannerTitle, } from "@/components/ui/banner"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { cn } from "@/lib/utils"; interface DoclingHealthBannerProps { className?: string; } // DoclingSetupDialog component interface DoclingSetupDialogProps { open: boolean; onOpenChange: (open: boolean) => void; className?: string; } function DoclingSetupDialog({ open, onOpenChange, className, }: DoclingSetupDialogProps) { const [copied, setCopied] = useState(false); const handleCopy = async () => { await navigator.clipboard.writeText("uv run openrag"); setCopied(true); setTimeout(() => setCopied(false), 2000); }; return ( docling-serve is stopped. Knowledge ingest is unavailable. Start docling-serve by running:
uv run openrag
Then, select{" "} Start All Services {" "} in the TUI. Once docling-serve is running, refresh OpenRAG.
); } // Custom hook to check docling health status export function useDoclingHealth() { const { data: health, isLoading, isError } = useDoclingHealthQuery(); const isHealthy = health?.status === "healthy" && !isError; // Only consider unhealthy if backend is up but docling is down // Don't show banner if backend is unavailable const isUnhealthy = health?.status === "unhealthy"; const isBackendUnavailable = health?.status === "backend-unavailable" || isError; return { health, isLoading, isError, isHealthy, isUnhealthy, isBackendUnavailable, }; } export function DoclingHealthBanner({ className }: DoclingHealthBannerProps) { const { isLoading, isHealthy, isUnhealthy } = useDoclingHealth(); const [showDialog, setShowDialog] = useState(false); // Only show banner when service is unhealthy if (isLoading || isHealthy) { return null; } if (isUnhealthy) { return ( <> docling-serve native service is stopped. Knowledge ingest is unavailable. setShowDialog(true)} className="bg-foreground text-background hover:bg-primary/90" > Setup Docling Serve ); } return null; }