diff --git a/internal/stage/model.go b/internal/stage/model.go index 8d16e4b..11d2ddb 100644 --- a/internal/stage/model.go +++ b/internal/stage/model.go @@ -224,3 +224,14 @@ type StageResult struct { Results NonNullSlice[ParserResult] `json:"results"` ForceQuit bool `json:"force_quit"` } + +type CaseDetail struct { + Index int + ExecutorResult ExecutorResult + ParserScores map[string]int +} + +type StageDetail struct { + Name string + CaseDetails []CaseDetail +} diff --git a/internal/stage/run.go b/internal/stage/run.go index c2181b2..e548dca 100644 --- a/internal/stage/run.go +++ b/internal/stage/run.go @@ -64,9 +64,13 @@ func Run(stages []Stage) ( "summary", SummarizeExecutorResults(executorResults), ) parserResults = []ParserResult{} + stageDetail := StageDetail{ + Name: stage.Name, + CaseDetails: make([]CaseDetail, len(executorResults)), + } parserScoresMap := map[string][]int{} - for _, stageParser := range stage.Parsers { - parserScoresMap[stageParser.Name] = make([]int, len(executorResults)) + for _, parser := range stage.Parsers { + parserScoresMap[parser.Name] = make([]int, len(executorResults)) } for _, stageParser := range stage.Parsers { slog.Info( @@ -129,12 +133,23 @@ func Run(stages []Stage) ( } } } + for i := range executorResults { + caseDetail := CaseDetail{ + Index: i, + ExecutorResult: executorResults[i], + ParserScores: make(map[string]int), + } + for name, scores := range parserScoresMap { + caseDetail.ParserScores[name] = scores[i] + } + stageDetail.CaseDetails[i] = caseDetail + } stageResults = append(stageResults, StageResult{ Name: stage.Name, Results: parserResults, ForceQuit: forceQuitStageName != "", }) - slog.Debug("stage done", "name", stage.Name, "parserScoresMap", parserScoresMap) + slog.Debug("stage done", "name", stage.Name, "stageDetail", stageDetail) if forceQuitStageName != "" { break }