/** Metrics for one evaluation split (test or hard). All values optional — * absent means "not yet measured". WER-family values are percentages. */ export interface SplitMetrics { wer?: number; werCi?: [number, number]; cer?: number; csWer?: number; csWerCi?: [number, number]; nWer?: number; mtrExact?: number; mtrFuzzy?: number; rtfx?: number; } /** One leaderboard row. */ export interface ModelRow { slug: string; name: string; org: string; paramsB?: number; license: string; category: "vn-open" | "multilingual-open" | "medical" | "api-intl" | "api-vn"; track: "A" | "B" | "C"; provenance: | "platform-verified" | "api-snapshot" | "self-reported" | "paper-imported" | "running" | "planned"; flags?: { contamination?: boolean; referenceOnly?: boolean; frozen?: boolean; zone1?: boolean; }; note?: string; metrics?: { test?: SplitMetrics; hard?: SplitMetrics }; } /* Convenience aliases derived from ModelRow */ export type Category = ModelRow["category"]; export type Track = ModelRow["track"]; export type Provenance = ModelRow["provenance"]; export type ModelFlags = NonNullable; /** The two leaderboard splits. */ export type Split = "test" | "hard"; /** Rankable metric keys within SplitMetrics (CI tuples excluded). */ export type MetricKey = | "wer" | "cer" | "csWer" | "nWer" | "mtrExact" | "mtrFuzzy" | "rtfx"; export interface SplitInfo { hours: number; utts: number; } /** Lifecycle of a dataset on the hub. */ export type DatasetStatus = "live" | "coming-soon"; /** * Dataset profile. MedASR Bench is a multi-dataset hub: live datasets * carry full statistics; coming-soon entries only carry identity fields, * so everything measured is optional. */ export interface DatasetInfo { id: string; name: string; status: DatasetStatus; /** Expanded name, e.g. "Vietnamese Medical Code-Switching Speech". */ fullName?: string; /** One-sentence description for dataset cards. */ tagline: string; /** Where the audio comes from, e.g. "Vietnamese medical YouTube lectures". */ source?: string; /** Expected availability for coming-soon datasets, e.g. "2026". */ eta?: string; hours?: number; utterances?: number; csTerms?: number; license?: string; arxiv?: string; hf?: string; splits?: { train: SplitInfo; valid: SplitInfo; test: SplitInfo; hard: SplitInfo; }; } /** One registry entry: a dataset profile plus its leaderboard rows. */ export interface DatasetEntry { info: DatasetInfo; models: ModelRow[]; } /** Shape of src/data/results.json. */ export interface ResultsFile { datasets: DatasetEntry[]; }