import { useState } from "react" import { useApi, apiFetch } from "@/hooks/useApi" import { Button } from "@/components/ui/button" type ExperimentSummary = { id: string name: string status: string run_count: number } type RunSummary = { id: string run_id: string model_id: string level: string sample_id: string repeat_index: number status: string retry_count: number } type RunDetail = { id: string run_id: string model_id: string level: string sample_id: string status: string raw_output: string | null latency_ms: number | null } export default function MonitorPage() { const experimentsState = useApi("/experiments") const [selectedExperimentId, setSelectedExperimentId] = useState(null) const runsState = useApi( selectedExperimentId ? `/experiments/${selectedExperimentId}/runs` : null, [selectedExperimentId] ) const [selectedRunId, setSelectedRunId] = useState(null) const runDetailState = useApi( selectedRunId ? `/experiments/${selectedExperimentId}/runs/${selectedRunId}` : null, [selectedRunId, selectedExperimentId] ) async function handleResume() { if (!selectedExperimentId) return await apiFetch(`/experiments/${selectedExperimentId}/run`, { method: "POST" }) alert("已触发断点续跑") } return (

实验监控

{experimentsState.status === "success" && (
{experimentsState.data.map((e) => ( ))}
)} {selectedExperimentId && (
)} {runsState.status === "success" && (
{runsState.data.map((r) => ( setSelectedRunId(r.id)} > ))}
模型 级别 重复 状态 重试
{r.model_id} {r.level} {r.repeat_index} {r.status} {r.retry_count}
)} {runDetailState.status === "success" && (

原始输出

Latency: {runDetailState.data.latency_ms ?? "-"} ms

            {runDetailState.data.raw_output ?? "无输出"}
          
)}
) }