"use client"; import { useCallback, useEffect, useState } from "react"; const PHYLO_BACKEND = process.env.NEXT_PUBLIC_PHYLO_BACKEND_URL || "http://127.0.0.1:8601"; type Provider = "hub-runpod" | "hub-slurm" | "runpod-direct"; const LABELS: Record = { "hub-runpod": "Hub (RunPod)", "hub-slurm": "Hub (SLURM)", "runpod-direct": "RunPod Direct", }; export default function ComputeProviderSelector() { const [provider, setProvider] = useState("hub-runpod"); const [runpodConfigured, setRunpodConfigured] = useState(false); const [loading, setLoading] = useState(true); useEffect(() => { (async () => { try { const res = await fetch(`${PHYLO_BACKEND}/api/settings`); if (res.ok) { const data = await res.json(); setProvider(data.compute_provider); setRunpodConfigured(data.runpod_configured); } } catch { // Backend unreachable — keep default } finally { setLoading(false); } })(); }, []); const onChange = useCallback(async (newProvider: Provider) => { setProvider(newProvider); try { await fetch(`${PHYLO_BACKEND}/api/settings`, { method: "PATCH", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ compute_provider: newProvider }), }); } catch { // Silently fail — setting will be stale until next restart } }, []); if (loading) return null; return (
); }