// // SPDX-FileCopyrightText: Copyright (c) 1993-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. // SPDX-License-Identifier: Apache-2.0 // "use client" import { useState, useEffect } from "react" import { AlertCircle, Loader2 } from "lucide-react" const POLL_INTERVAL_MS = 60_000 export function BackendReadinessBanner() { const [showBanner, setShowBanner] = useState(false) useEffect(() => { let mounted = true const check = async () => { let isVllmMode = false try { const configRes = await fetch("/api/config") if (!mounted || !configRes.ok) return const config = await configRes.json() const mode = config.backendMode ?? "ollama" isVllmMode = mode === "vllm" if (mode !== "vllm") { setShowBanner(false) return } const vllmRes = await fetch("/api/vllm/models", { signal: AbortSignal.timeout(5000), }) if (!mounted) return const data = vllmRes.ok ? await vllmRes.json() : { models: [] } const hasModels = Array.isArray(data.models) && data.models.length > 0 setShowBanner(!hasModels) } catch { if (mounted && isVllmMode) setShowBanner(true) } } check() const id = setInterval(check, POLL_INTERVAL_MS) return () => { mounted = false clearInterval(id) } }, []) if (!showBanner) return null return (
Backend (vLLM) is still initializing. This can take 30+ minutes after start.
Check progress: docker logs vllm-service -f