diff --git a/src/renderer/components/Experiment/Eval/EvalJobsTable.tsx b/src/renderer/components/Experiment/Eval/EvalJobsTable.tsx index ba8444fafeb961d13ca888e98e9a5393619d67e8..481c36d42ec3b45b7fc36a9a0d3047b7bee463b4 100644 --- a/src/renderer/components/Experiment/Eval/EvalJobsTable.tsx +++ b/src/renderer/components/Experiment/Eval/EvalJobsTable.tsx @@ -91,13 +91,15 @@ function RenderScore({ score }) { )); } + const EvalJobsTable = () => { const [selected, setSelected] = useState<readonly string[]>([]); const [viewOutputFromJob, setViewOutputFromJob] = useState(-1); const [openCSVModal, setOpenCSVModal] = useState(false); const [openPlotModal, setOpenPlotModal] = useState(false); const [currentJobId, setCurrentJobId] = useState(''); - const [currentScore, setCurrentScore] = useState(''); + const [currentData, setCurrentData] = useState(''); + const [chart, setChart] = useState(true); const [currentTensorboardForModal, setCurrentTensorboardForModal] = useState(-1); const [fileNameForDetailedReport, setFileNameForDetailedReport] = useState(''); @@ -119,14 +121,33 @@ const EvalJobsTable = () => { fallbackData: [], }); + const handleCombinedReports = async () => { + try { + const jobIdsParam = selected.join(','); + const compareEvalsUrl = chatAPI.Endpoints.Charts.CompareEvals(jobIdsParam); + const response = await fetch(compareEvalsUrl, { method: 'GET' }); + if (!response.ok) { + throw new Error('Network response was not ok'); + } + const data = await response.json(); + console.log('data', data); + setCurrentData(JSON.stringify(data)); + setOpenPlotModal(true); + setChart(false); + setCurrentJobId('-1'); + } catch (error) { + console.error('Failed to fetch combined reports:', error); + } + }; + + const handleOpenCSVModal = (jobId) => { setCurrentJobId(jobId); setOpenCSVModal(true); }; - const handleOpenPlotModal = (jobId, score) => { - setCurrentJobId(jobId); - setCurrentScore(score); + const handleOpenPlotModal = (score) => { + setCurrentData(score); setOpenPlotModal(true); }; @@ -145,8 +166,9 @@ const EvalJobsTable = () => { <ViewPlotModal open={openPlotModal} onClose={() => setOpenPlotModal(false)} + data={currentData} jobId={currentJobId} - score={currentScore} + chart={chart} /> <ViewOutputModalStreaming jobId={viewOutputFromJob} @@ -170,9 +192,11 @@ const EvalJobsTable = () => { <Typography level="body-sm" startDecorator={<ChartColumnIncreasingIcon size="20px" />} - onClick={() => { - alert('this feature coming soon'); - }} + // Uncomment this line to enable the combined reports feature + onClick={handleCombinedReports} + // onClick={() => { + // alert('this feature coming soon'); + // }} sx={{ cursor: 'pointer' }} > <>Compare Selected Evals</> diff --git a/src/renderer/components/Experiment/Eval/ViewPlotModal.tsx b/src/renderer/components/Experiment/Eval/ViewPlotModal.tsx index 9ffb898ef3afa6af7cfe82f1060f3a0232d0cfbe..2623586cb05faa90589bef7572282c6bc89cbc5b 100644 --- a/src/renderer/components/Experiment/Eval/ViewPlotModal.tsx +++ b/src/renderer/components/Experiment/Eval/ViewPlotModal.tsx @@ -3,15 +3,15 @@ import { Modal, ModalDialog, ModalClose, Box, Typography } from '@mui/joy'; import Chart from './Chart'; import * as chatAPI from 'renderer/lib/transformerlab-api-sdk'; -function parseJSON(score) { +function parseJSON(data) { try { - return JSON.parse(score); + return JSON.parse(data); } catch { return []; } } -export default function ViewPlotModal({ open, onClose, jobId, score }) { +export default function ViewPlotModal({ open, onClose, data, jobId, chart = true}) { if (!jobId) { return <></>; } @@ -46,7 +46,11 @@ export default function ViewPlotModal({ open, onClose, jobId, score }) { p: 2, }} > - <Chart metrics={parseJSON(score)} /> + {chart ? ( + <Chart metrics={parseJSON(data)} /> + ) : ( + <div>{JSON.stringify(parseJSON(data))}</div> + )} </Box> </Box> </ModalDialog> diff --git a/src/renderer/lib/transformerlab-api-sdk.ts b/src/renderer/lib/transformerlab-api-sdk.ts index e20f61823ae0b8c86700ebaf21df9702e1d6e9de..819a33154002cbc8cfc59cf243ff344c369616f6 100644 --- a/src/renderer/lib/transformerlab-api-sdk.ts +++ b/src/renderer/lib/transformerlab-api-sdk.ts @@ -1198,6 +1198,11 @@ Endpoints.ServerInfo = { StreamLog: () => API_URL() + 'server/stream_log', }; +Endpoints.Charts = { + CompareEvals: (jobIds: string) => + API_URL() + 'evals/compare_evals?job_list=' + jobIds, +} + export function GET_TRAINING_TEMPLATE_URL() { return API_URL() + 'train/templates'; }