@@ -16,6 +16,7 @@ import { RunsTable } from './components/RunsTable';
1616import { ResultsSummary } from './components/ResultsSummary' ;
1717import { ResultItem } from './components/ResultItem' ;
1818import { FilterControls } from './components/FilterControls' ;
19+ import { StatusFilter } from './components/StatusFilter' ;
1920import { Alert , AlertDescription } from '../components/ui/alert' ;
2021import { Button } from '../components/ui/button' ;
2122import './EvaluationView.css' ;
@@ -52,6 +53,7 @@ export class EvaluationViewShell extends React.Component<
5253 detailedResults : DetailedEvaluationResult [ ] ;
5354 searchTerm : string ;
5455 correctnessFilter : 'all' | 'correct' | 'incorrect' ;
56+ statusFilter : 'all' | 'pending' | 'running' | 'completed' | 'failed' ;
5557 expandedResultIds : Set < string > ;
5658 showDialog : boolean ;
5759 hasInProgressEvaluation : boolean ;
@@ -78,6 +80,7 @@ export class EvaluationViewShell extends React.Component<
7880 detailedResults : [ ] ,
7981 searchTerm : '' ,
8082 correctnessFilter : 'all' ,
83+ statusFilter : 'all' ,
8184 expandedResultIds : new Set ( ) ,
8285 showDialog : false ,
8386 hasInProgressEvaluation : false ,
@@ -314,6 +317,10 @@ export class EvaluationViewShell extends React.Component<
314317 this . setState ( { correctnessFilter : filter } ) ;
315318 } ;
316319
320+ handleStatusFilterChange = ( status : 'all' | 'pending' | 'running' | 'completed' | 'failed' ) => {
321+ this . setState ( { statusFilter : status } ) ;
322+ } ;
323+
317324 toggleResultExpanded = ( testCaseId : string ) => {
318325 this . setState ( ( prev ) => {
319326 const newExpanded = new Set ( prev . expandedResultIds ) ;
@@ -343,6 +350,28 @@ export class EvaluationViewShell extends React.Component<
343350 } ) ;
344351 } ;
345352
353+ getFilteredRuns = ( ) => {
354+ const { pastRuns, statusFilter } = this . state ;
355+
356+ if ( statusFilter === 'all' ) {
357+ return pastRuns ;
358+ }
359+
360+ return pastRuns . filter ( ( run ) => run . status === statusFilter ) ;
361+ } ;
362+
363+ getStatusCounts = ( ) => {
364+ const { pastRuns } = this . state ;
365+
366+ return {
367+ all : pastRuns . length ,
368+ pending : pastRuns . filter ( ( r ) => r . status === 'pending' ) . length ,
369+ running : pastRuns . filter ( ( r ) => r . status === 'running' ) . length ,
370+ completed : pastRuns . filter ( ( r ) => r . status === 'completed' ) . length ,
371+ failed : pastRuns . filter ( ( r ) => r . status === 'failed' ) . length ,
372+ } ;
373+ } ;
374+
346375 render ( ) {
347376 const {
348377 availableModels,
@@ -355,12 +384,15 @@ export class EvaluationViewShell extends React.Component<
355384 expandedResultIds,
356385 searchTerm,
357386 correctnessFilter,
387+ statusFilter,
358388 showDialog,
359389 hasInProgressEvaluation,
360390 remainingQuestionsCount,
361391 } = this . state ;
362392
363393 const filteredResults = this . getFilteredResults ( ) ;
394+ const filteredRuns = this . getFilteredRuns ( ) ;
395+ const statusCounts = this . getStatusCounts ( ) ;
364396 const latestRun = pastRuns . length > 0 ? pastRuns [ 0 ] : null ;
365397
366398 return (
@@ -452,7 +484,12 @@ export class EvaluationViewShell extends React.Component<
452484 : null
453485 }
454486 />
455- < RunsTable runs = { pastRuns } onSelectRun = { this . handleSelectRun } />
487+ < StatusFilter
488+ currentStatus = { statusFilter }
489+ onStatusChange = { this . handleStatusFilterChange }
490+ counts = { statusCounts }
491+ />
492+ < RunsTable runs = { filteredRuns } onSelectRun = { this . handleSelectRun } />
456493 </ >
457494 ) }
458495
0 commit comments