import React, { useState, useEffect, useRef } from 'react'; import { adminApi } from '../api/client'; import { Activity, Trash2, RefreshCw } from 'lucide-react'; import CacheStats from './CacheStats'; import LatencyChart from './LatencyChart'; import ClusterViz from './ClusterViz'; const AdminPanel = ({ stats, analytics, fetchData }) => { const [isEvaluating, setIsEvaluating] = useState(false); const [evalResults, setEvalResults] = useState(null); const [adminMessage, setAdminMessage] = useState(''); const evalRef = useRef(null); const handleClearCache = async () => { try { await adminApi.clearCache(); setAdminMessage('Cache cleared successfully!'); setTimeout(() => setAdminMessage(''), 3000); fetchData(); } catch (err) { console.error("Failed to clear cache", err); } }; const handleRunEvaluation = async () => { setIsEvaluating(true); try { const res = await adminApi.runEvaluation(); setEvalResults(res.data); setTimeout(() => { if (evalRef.current) { evalRef.current.scrollIntoView({ behavior: 'smooth' }); } }, 100); } catch (err) { console.error("Eval failed", err); } setIsEvaluating(false); }; return (

System Dashboard

{evalResults && !evalResults.error && (

Retrieval Evaluation (NDCG/MRR)

{Object.entries(evalResults).map(([mode, metrics]) => ( ))}
Mode NDCG@10 MRR P@3 R@10 MAP
{mode} {metrics['ndcg@10'].toFixed(4)} {metrics['mrr'].toFixed(4)} {metrics['p@3'].toFixed(4)} {metrics['r@10'].toFixed(4)} {metrics['map'].toFixed(4)}
)} {evalResults?.error && (
{evalResults.error}
)}
{adminMessage && {adminMessage}}
); }; export default AdminPanel;