Spaces:
Running
Running
| import json | |
| import os | |
| import sys | |
| def validate(path: str) -> None: | |
| if not os.path.exists(path): | |
| print(f"ERROR: File not found at {path}") | |
| sys.exit(1) | |
| with open(path, encoding="utf-8") as f: | |
| try: | |
| pairs = json.load(f) | |
| except json.JSONDecodeError: | |
| print(f"ERROR: {path} is not a valid JSON file.") | |
| sys.exit(1) | |
| errors = [] | |
| seen_ids = set() | |
| for i, pair in enumerate(pairs): | |
| qid = pair.get("question_id", f"[index {i}]") | |
| if qid in seen_ids: | |
| errors.append(f"{qid}: duplicate question_id") | |
| seen_ids.add(qid) | |
| if not pair.get("question", "").strip(): | |
| errors.append(f"{qid}: empty question") | |
| if not pair.get("ground_truth_answer", "").strip(): | |
| errors.append(f"{qid}: empty ground_truth_answer") | |
| valid_tags = {"financial", "academic", "technical"} | |
| if pair.get("domain_tag") not in valid_tags: | |
| errors.append(f"{qid}: invalid domain_tag '{pair.get('domain_tag')}'") | |
| # Track B check — only warn, not error, on empty chunk IDs | |
| # Supports both old format (array) and new format (object with | |
| # naive/structure_aware keys) | |
| empty_chunks = [] | |
| for p in pairs: | |
| chunk_ids = p.get("ground_truth_chunk_ids", {}) | |
| if isinstance(chunk_ids, dict): | |
| # New format: check if both naive and structure_aware are empty | |
| if not chunk_ids.get("naive") and not chunk_ids.get("structure_aware"): | |
| empty_chunks.append(p["question_id"]) | |
| elif isinstance(chunk_ids, list) and not chunk_ids: | |
| # Old format: empty list | |
| empty_chunks.append(p["question_id"]) | |
| if empty_chunks: | |
| print(f"WARNING: {len(empty_chunks)} pairs have no chunk IDs yet.") | |
| if errors: | |
| print(f"VALIDATION FAILED — {len(errors)} error(s):") | |
| for e in errors: | |
| print(f" - {e}") | |
| sys.exit(1) | |
| else: | |
| print(f"VALIDATION PASSED — {len(pairs)} pairs, {len(empty_chunks)} pending.") | |
| if __name__ == "__main__": | |
| # Ensure directory exists before running | |
| target_path = sys.argv[1] if len(sys.argv) > 1 else "data/ground_truth/ground_truth.json" | |
| validate(target_path) | |