Ling-3.0-tiny-GGUF / validation /compare_generation.py
Mike0021's picture
Publish v1.0 model card, provenance, and validation
31596cd verified
Raw History Blame Contribute Delete
2.54 kB
#!/usr/bin/env python3
"""Compare a deterministic llama-completion output with the HF BF16 reference."""
from __future__ import annotations
import argparse
import json
from pathlib import Path
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument("--artifact", required=True)
parser.add_argument("--hf-reference", type=Path, required=True)
parser.add_argument("--gguf-output", type=Path, required=True)
parser.add_argument("--case", default="greedy_capitals_12")
parser.add_argument("--prompt-text", required=True)
parser.add_argument(
"--mismatch-policy",
choices=("fail", "report"),
default="fail",
help="Whether a valid but different quantized generation is fatal.",
)
parser.add_argument("--output", type=Path, required=True)
args = parser.parse_args()
reference = json.loads(args.hf_reference.read_text(encoding="utf-8"))
reference_case = reference["generations"][args.case]
expected = reference_case["new_text"]
expected_prompt = reference_case["prompt"]
raw = args.gguf_output.read_text(encoding="utf-8")
transport_suffix_present = raw.endswith("\n\n")
actual = raw[:-2] if transport_suffix_present else raw
execution_failures = []
if args.prompt_text != expected_prompt:
execution_failures.append("llama.cpp prompt differs from HF reference prompt")
if not transport_suffix_present:
execution_failures.append("missing llama-completion terminal newline suffix")
result = {
"artifact": args.artifact,
"case": args.case,
"prompt": args.prompt_text,
"prompt_exact_match": args.prompt_text == expected_prompt,
"expected_hf_bf16_text": expected,
"actual_gguf_text": actual,
"exact_text_match": actual == expected,
"transport_suffix_present": transport_suffix_present,
"execution_failures": execution_failures,
"mismatch_policy": args.mismatch_policy,
}
args.output.parent.mkdir(parents=True, exist_ok=True)
args.output.write_text(
json.dumps(result, ensure_ascii=False, indent=2, sort_keys=True) + "\n",
encoding="utf-8",
)
print(json.dumps(result, ensure_ascii=False, sort_keys=True))
if execution_failures:
raise SystemExit("; ".join(execution_failures))
if not result["exact_text_match"] and args.mismatch_policy == "fail":
raise SystemExit("greedy generation differs from HF BF16 reference")
if __name__ == "__main__":
main()