import { confirmedReviewCorpus, type ConfirmedReviewEvalCase } from "./confirmedReviewCorpus"; import { seedCorpus } from "./seedCorpus"; import type { OcrEvalCase } from "../ocrEvalHarness"; export { confirmedReviewCorpus, seedCorpus }; export type { ConfirmedReviewEvalCase }; export const ocrEvalCorpus: OcrEvalCase[] = [...seedCorpus, ...confirmedReviewCorpus]; export function validateConfirmedReviewCorpus(corpus: readonly ConfirmedReviewEvalCase[] = confirmedReviewCorpus) { const errors: string[] = []; const seen = new Set(); for (const entry of corpus) { if (seen.has(entry.id)) errors.push(`${entry.id}: duplicate id`); seen.add(entry.id); if (entry.confirmed !== true) errors.push(`${entry.id}: confirmed must be true`); if (entry.meta.source !== "review-sample") errors.push(`${entry.id}: meta.source must be review-sample`); if (!entry.meta.note?.trim()) errors.push(`${entry.id}: meta.note must describe the review source/reason`); if (Object.keys(entry.expect).length === 0) errors.push(`${entry.id}: expect must label at least one field`); if (Object.keys(entry.ocr).length === 0) errors.push(`${entry.id}: ocr must contain at least one field`); } return errors; }