@@ -9,22 +9,43 @@ import type {
99 SweepAggregateReport ,
1010} from "./types.js" ;
1111
12+ interface LoadSummaryOptions {
13+ allowLegacyDiversityMetrics ?: boolean ;
14+ }
15+
1216function assertFiniteNumber ( value : unknown , path : string ) : number {
1317 if ( typeof value !== "number" || Number . isNaN ( value ) || ! Number . isFinite ( value ) ) {
1418 throw new Error ( `${ path } must be a finite number` ) ;
1519 }
1620 return value ;
1721}
1822
19- function validateSummary ( summary : EvalSummary , summaryPath : string ) : EvalSummary {
23+ function validateSummary (
24+ summary : EvalSummary ,
25+ summaryPath : string ,
26+ options ?: LoadSummaryOptions
27+ ) : EvalSummary {
2028 assertFiniteNumber ( summary . metrics . hitAt1 , `${ summaryPath } .metrics.hitAt1` ) ;
2129 assertFiniteNumber ( summary . metrics . hitAt3 , `${ summaryPath } .metrics.hitAt3` ) ;
2230 assertFiniteNumber ( summary . metrics . hitAt5 , `${ summaryPath } .metrics.hitAt5` ) ;
2331 assertFiniteNumber ( summary . metrics . hitAt10 , `${ summaryPath } .metrics.hitAt10` ) ;
2432 assertFiniteNumber ( summary . metrics . mrrAt10 , `${ summaryPath } .metrics.mrrAt10` ) ;
2533 assertFiniteNumber ( summary . metrics . ndcgAt10 , `${ summaryPath } .metrics.ndcgAt10` ) ;
26- assertFiniteNumber ( summary . metrics . distinctTop3Ratio , `${ summaryPath } .metrics.distinctTop3Ratio` ) ;
27- assertFiniteNumber ( summary . metrics . rawDistinctTop3Ratio , `${ summaryPath } .metrics.rawDistinctTop3Ratio` ) ;
34+
35+ const metrics = summary . metrics as EvalSummary [ "metrics" ] & {
36+ distinctTop3Ratio ?: number ;
37+ rawDistinctTop3Ratio ?: number ;
38+ } ;
39+
40+ if ( metrics . distinctTop3Ratio === undefined && options ?. allowLegacyDiversityMetrics ) {
41+ metrics . distinctTop3Ratio = 0 ;
42+ }
43+ if ( metrics . rawDistinctTop3Ratio === undefined && options ?. allowLegacyDiversityMetrics ) {
44+ metrics . rawDistinctTop3Ratio = 0 ;
45+ }
46+
47+ assertFiniteNumber ( metrics . distinctTop3Ratio , `${ summaryPath } .metrics.distinctTop3Ratio` ) ;
48+ assertFiniteNumber ( metrics . rawDistinctTop3Ratio , `${ summaryPath } .metrics.rawDistinctTop3Ratio` ) ;
2849 assertFiniteNumber ( summary . metrics . latencyMs . p50 , `${ summaryPath } .metrics.latencyMs.p50` ) ;
2950 assertFiniteNumber ( summary . metrics . latencyMs . p95 , `${ summaryPath } .metrics.latencyMs.p95` ) ;
3051 assertFiniteNumber ( summary . metrics . latencyMs . p99 , `${ summaryPath } .metrics.latencyMs.p99` ) ;
@@ -51,9 +72,9 @@ function signed(value: number, digits = 4): string {
5172 return value > 0 ? `+${ formatted } ` : formatted ;
5273}
5374
54- export function loadSummary ( summaryPath : string ) : EvalSummary {
75+ export function loadSummary ( summaryPath : string , options ?: LoadSummaryOptions ) : EvalSummary {
5576 const raw = readFileSync ( summaryPath , "utf-8" ) ;
56- return validateSummary ( JSON . parse ( raw ) as EvalSummary , summaryPath ) ;
77+ return validateSummary ( JSON . parse ( raw ) as EvalSummary , summaryPath , options ) ;
5778}
5879
5980export function createRunDirectory ( outputRoot : string , timestampOverride ?: string ) : string {
0 commit comments