from __future__ import annotations import argparse import hashlib import json import os import tempfile from pathlib import Path from typing import Any HERE = Path(__file__).resolve().parent DEFAULT_DATASET = HERE.parent / "dataset" / "data-complete-core" DEFAULT_LAB_DATASET = HERE.parent / "dataset" / "data-lab" DEFAULT_STABILITY = ( HERE.parents[1] / "paper/generated/complete-core/complete-core-stability-analysis.json" ) DEFAULT_OUTPUT = HERE / "data-complete-core" / "flavourbench-complete-core-space.json" class CompleteCoreSpaceBuildError(RuntimeError): """The complete-common-core Space bundle failed verification.""" def _canonical(value: object) -> bytes: return json.dumps( value, ensure_ascii=False, separators=(",", ":"), sort_keys=True, allow_nan=False, ).encode() def _load(path: Path) -> dict[str, Any]: if path.is_symlink() or not path.is_file(): raise CompleteCoreSpaceBuildError(f"input is not a regular file: {path}") value = json.loads(path.read_text(encoding="utf-8")) if not isinstance(value, dict): raise CompleteCoreSpaceBuildError(f"input is not a JSON object: {path}") return value def _semantic_valid(document: dict[str, Any]) -> bool: payload = dict(document) recorded = str(payload.pop("artifact_sha256", "")) return bool(recorded and recorded == hashlib.sha256(_canonical(payload)).hexdigest()) def _jsonl(path: Path, *, expected_sha256: str, expected_rows: int) -> list[dict[str, Any]]: payload = path.read_bytes() if hashlib.sha256(payload).hexdigest() != expected_sha256: raise CompleteCoreSpaceBuildError(f"dataset table hash failed: {path.name}") rows = [json.loads(line) for line in payload.splitlines() if line] if len(rows) != expected_rows or any(not isinstance(row, dict) for row in rows): raise CompleteCoreSpaceBuildError(f"dataset table cardinality failed: {path.name}") return rows def build_bundle( *, dataset_directory: Path, lab_dataset_directory: Path, stability_path: Path = DEFAULT_STABILITY, ) -> dict[str, Any]: manifest = _load(dataset_directory / "DATA_MANIFEST.json") if ( not _semantic_valid(manifest) or manifest.get("schema_version") != "flavourbench-hf-complete-core-dataset-manifest-v1" or manifest.get("status") != "final_complete_common_core" ): raise CompleteCoreSpaceBuildError("dataset manifest failed verification") records = {str(row["name"]): row for row in manifest["files"]} def rows(name: str) -> list[dict[str, Any]]: record = records[name] return _jsonl( dataset_directory / name, expected_sha256=str(record["sha256"]), expected_rows=int(record["rows"]), ) release_record = records["release.json"] release_path = dataset_directory / "release.json" release_bytes = release_path.read_bytes() if hashlib.sha256(release_bytes).hexdigest() != release_record["sha256"]: raise CompleteCoreSpaceBuildError("release physical hash failed") release = _load(release_path) if ( not _semantic_valid(release) or release.get("status") != "final_complete_common_core" or release.get("artifact_sha256") != manifest["release_artifact_sha256"] ): raise CompleteCoreSpaceBuildError("release and dataset manifest differ") models = rows("models.jsonl") tasks = rows("tasks.jsonl") primary = rows("primary_observations.jsonl") pairwise = rows("pairwise_comparisons.jsonl") lab_manifest = _load(lab_dataset_directory / "DATA_MANIFEST.json") if ( not _semantic_valid(lab_manifest) or lab_manifest.get("schema_version") != "flavourbench-lab-dataset-v2" or lab_manifest.get("status") != "preregistered_transfer_maps_not_official_leaderboard_test" ): raise CompleteCoreSpaceBuildError("lab dataset manifest failed verification") lab_records = {str(row["name"]): row for row in lab_manifest["files"]} def lab_rows(name: str) -> list[dict[str, Any]]: record = lab_records[name] return _jsonl( lab_dataset_directory / name, expected_sha256=str(record["sha256"]), expected_rows=int(record["rows"]), ) lab_tasks = [*lab_rows("train_tasks.jsonl"), *lab_rows("validation_tasks.jsonl")] stability = _load(stability_path) if ( not _semantic_valid(stability) or stability.get("schema_version") != "flavourbench-task-count-stability-v1" or stability.get("status") != "retrospective_precision_and_stability_analysis" ): raise CompleteCoreSpaceBuildError("task-count stability analysis failed verification") official_ids = {str(row["task_id"]) for row in tasks} official_anchors = {str(row["anchor_ingredient"]) for row in tasks} lab_ids = {str(row["task_id"]) for row in lab_tasks} lab_anchors = {str(row["anchor_ingredient"]) for row in lab_tasks} if ( len(lab_tasks) != 342 or len(lab_ids) != 342 or len(lab_anchors) != 342 or lab_ids & official_ids or lab_anchors & official_anchors ): raise CompleteCoreSpaceBuildError("lab and official reward maps are not disjoint") compact_observations: list[dict[str, Any]] = [] for row in primary: response = row["response"] generation = response.get("generation") or {} answer = str(generation.get("answer_markdown") or "") compact_observations.append( { "release_panel": row["release_panel"], "model_id": response["model_id"], "task_id": response["task_id"], "status": response["status"], "scoring": row["release_scoring"], "answer_excerpt": answer[:1800], "answer_truncated": len(answer) > 1800, "actual_model_id": generation.get("actual_model_id"), "actual_provider": generation.get("actual_provider"), "finish_reason": generation.get("finish_reason"), "latency_ms": generation.get("latency_ms"), "cost_micros": generation.get("cost_micros"), "artifact_sha256": response["artifact_sha256"], } ) bundle: dict[str, Any] = { "schema_version": "flavourbench-complete-core-space-bundle-v1", "release_artifact_sha256": release["artifact_sha256"], "dataset_manifest_sha256": manifest["artifact_sha256"], "status": release["status"], "benchmark": release["benchmark"], "track": release["track"], "design": release["design"], "analysis": release["analysis"], "claim_boundary": release["claim_boundary"], "models": models, "tasks": tasks, "lab": { "dataset_manifest_sha256": lab_manifest["artifact_sha256"], "status": lab_manifest["status"], "task_count": len(lab_tasks), "train_tasks": int(lab_manifest["counts"]["train_tasks"]), "validation_tasks": int(lab_manifest["counts"]["validation_tasks"]), "evaluation_tasks": int(lab_manifest["counts"]["evaluation_tasks"]), "official_anchor_overlap": 0, }, "lab_tasks": lab_tasks, "stability_analysis": stability, "primary_observations": compact_observations, "pairwise_comparisons": pairwise, } if ( len(models) != 27 or len(tasks) != 534 or len(compact_observations) != 14_418 or len(pairwise) != 351 ): raise CompleteCoreSpaceBuildError("Space bundle cardinality differs") bundle["artifact_sha256"] = hashlib.sha256(_canonical(bundle)).hexdigest() return bundle def _bytes(bundle: dict[str, Any]) -> bytes: return (json.dumps(bundle, ensure_ascii=False, indent=2, sort_keys=True) + "\n").encode() def _write_atomic(path: Path, payload: bytes) -> None: path.parent.mkdir(parents=True, exist_ok=True) descriptor, temporary = tempfile.mkstemp(prefix=f".{path.name}.", dir=path.parent) temporary_path = Path(temporary) try: with os.fdopen(descriptor, "wb") as handle: handle.write(payload) handle.flush() os.fsync(handle.fileno()) os.replace(temporary_path, path) finally: temporary_path.unlink(missing_ok=True) def main() -> None: parser = argparse.ArgumentParser(description="Build the final FlavourBench Space bundle") parser.add_argument("--dataset-directory", type=Path, default=DEFAULT_DATASET) parser.add_argument("--lab-dataset-directory", type=Path, default=DEFAULT_LAB_DATASET) parser.add_argument("--stability", type=Path, default=DEFAULT_STABILITY) parser.add_argument("--output", type=Path, default=DEFAULT_OUTPUT) parser.add_argument("--check", action="store_true") args = parser.parse_args() bundle = build_bundle( dataset_directory=args.dataset_directory, lab_dataset_directory=args.lab_dataset_directory, stability_path=args.stability, ) payload = _bytes(bundle) if args.check: if args.output.is_symlink() or not args.output.is_file(): raise CompleteCoreSpaceBuildError("Space bundle output is absent") if args.output.read_bytes() != payload: raise CompleteCoreSpaceBuildError("generated Space bundle differs") print(f"OK: complete-core Space bundle {bundle['artifact_sha256']}") return _write_atomic(args.output, payload) print(f"Wrote {args.output} ({len(payload)} bytes, {bundle['artifact_sha256']})") if __name__ == "__main__": main()