diff --git a/package.json b/package.json index b78ce56..ead337a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "web-codegen-scorer", - "version": "0.0.58", + "version": "0.0.59", "scripts": { "build-runner": "tsc", "release-build": "tsx ./scripts/release-build.ts", diff --git a/runner/utils/extract-rubrics.ts b/runner/utils/extract-rubrics.ts index c87cfe7..f4ba708 100644 --- a/runner/utils/extract-rubrics.ts +++ b/runner/utils/extract-rubrics.ts @@ -1,13 +1,15 @@ -import {IndividualAssessmentState, RunInfo} from '../shared-interfaces.js'; +import {AssessmentResult, IndividualAssessmentState} from '../shared-interfaces.js'; export interface RubricInfo { score: number; } -export function extractRubrics(run: RunInfo): Record { - const rubricsAnalysis: Record = {}; +export function extractRubrics(results: AssessmentResult[]): Record { + const rubricsBreakdown: Record = {}; + + for (const app of results) { + const rubricsAnalysis: Record = {}; - for (const app of run.results) { for (const category of app.score.categories) { for (const check of category.assessments) { if (check.state === IndividualAssessmentState.SKIPPED) { @@ -29,16 +31,22 @@ export function extractRubrics(run: RunInfo): Record { } } } - } - const rubricsBreakdown: Record = {}; - for (const label in rubricsAnalysis) { - const scores = rubricsAnalysis[label]!.scores; - const numerator = scores.reduce((sum, score) => sum + score.value, 0); - const denominator = scores.reduce((sum, score) => sum + score.weight, 0); - rubricsBreakdown[label] = { - score: numerator / denominator, - }; + for (const label in rubricsAnalysis) { + const scores = rubricsAnalysis[label]!.scores; + const numerator = scores.reduce((sum, score) => sum + score.value, 0); + const denominator = scores.reduce((sum, score) => sum + score.weight, 0); + + rubricsBreakdown[label] ??= []; + rubricsBreakdown[label].push(numerator / denominator); + } } - return rubricsBreakdown; + + return Object.entries(rubricsBreakdown).reduce( + (rubricsResult, [label, scores]) => ({ + ...rubricsResult, + [label]: scores.reduce((prev, cur) => prev + cur, 0) / scores.length, + }), + {}, + ); }