#!/usr/bin/env python
"""Lightweight validation for the ingestion output."""
from __future__ import annotations
import argparse
import json
import os
REQUIRED_FIELDS = {"doc_id", "page", "section", "section_index", "content", "source"}
def validate_jsonl(path: str) -> None:
if not os.path.exists(path):
raise FileNotFoundError(f"Missing output file: {path}")
with open(path, "r", encoding="utf-8") as handle:
for line_num, line in enumerate(handle, start=1):
if not line.strip():
continue
record = json.loads(line)
missing = REQUIRED_FIELDS - set(record)
if missing:
raise ValueError(f"Line {line_num} missing fields: {sorted(missing)}")
if not record["doc_id"]:
raise ValueError(f"Line {line_num} has empty doc_id")
if not record["section"]:
raise ValueError(f"Line {line_num} has empty section")
if not record["content"]:
raise ValueError(f"Line {line_num} has empty content")
if not isinstance(record["source"], dict):
raise ValueError(f"Line {line_num} source must be a dict")
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Validate ingestion output JSONL.")
parser.add_argument(
"--input",
default=os.path.join("01_data_ingestion", "output", "cleaned_mtsamples.jsonl"),
help="Path to JSONL output file.",
)
return parser.parse_args()
def main() -> None:
args = parse_args()
validate_jsonl(args.input)
print("Validation passed.")
if __name__ == "__main__":
main()