Download experiments/oss_alignment.py from LIghtJUNction/LightNest: direct link, hf CLI and curl.
- Browser
- Download file 17.8 kB
-
https://huggingface.co/LIghtJUNction/LightNest/resolve/main/experiments/oss_alignment.py
- Command line
-
hf download hf://LIghtJUNction/LightNest/experiments/oss_alignment.py
-
curl -L -o oss_alignment.py https://huggingface.co/LIghtJUNction/LightNest/resolve/main/experiments/oss_alignment.py
17.8 kB
| """Run pinned upstream projects and gate compatible CLI candidates. | |
| This is an evaluation bridge, not a learned proposer. Reference build success | |
| must never be counted as LightNest generating or improving either project. | |
| Only trusted source trees and locally authorized candidate executables should | |
| be supplied. Process resource limits are not a security sandbox. | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import gzip | |
| import hashlib | |
| import io | |
| import json | |
| import os | |
| from pathlib import Path | |
| import platform | |
| import random | |
| import re | |
| import resource | |
| import shutil | |
| import signal | |
| import statistics | |
| import subprocess | |
| import tarfile | |
| import time | |
| import zlib | |
| PROJECTS = { | |
| "xxhash": { | |
| "version": "0.8.3", "directory": "xxHash-0.8.3", | |
| "url": "https://codeload.github.com/Cyan4973/xxHash/tar.gz/refs/tags/v0.8.3", | |
| "archive_sha256": "aae608dfe8213dfd05d909a57718ef82f30722c392344583d3f39050c7f29a80", | |
| "upstream_test_target": "make -j2 check", | |
| }, | |
| "zlib": { | |
| "version": "1.3.2", "directory": "zlib-1.3.2", | |
| "url": "https://zlib.net/fossils/zlib-1.3.2.tar.gz", | |
| "archive_sha256": "bb329a0a2cd0274d05519d61c667c062e06990d72e125ee2dfa8de64f0119d16", | |
| "upstream_test_target": "make -j2 test", | |
| }, | |
| } | |
| def sha(path: Path) -> str: | |
| digest = hashlib.sha256() | |
| with path.open("rb") as stream: | |
| while chunk := stream.read(1 << 20): | |
| digest.update(chunk) | |
| return digest.hexdigest() | |
| def save(path: Path, value) -> None: | |
| path.write_text(json.dumps(value, ensure_ascii=False, indent=2) + "\n") | |
| def source_manifest(path: Path) -> dict: | |
| files = [] | |
| for item in sorted(path.rglob("*")): | |
| if item.is_symlink(): | |
| raise ValueError(f"source symlinks are not supported: {item}") | |
| if item.is_file(): | |
| files.append({"path": str(item.relative_to(path)), "bytes": item.stat().st_size, | |
| "sha256": sha(item)}) | |
| encoded = json.dumps(files, sort_keys=True, separators=(",", ":")).encode() | |
| return {"files": files, "file_count": len(files), "bytes": sum(f["bytes"] for f in files), | |
| "tree_sha256": hashlib.sha256(encoded).hexdigest()} | |
| def verify_source_archive(archive: Path, source: Path, expected_hash: str) -> None: | |
| if sha(archive) != expected_hash: | |
| raise ValueError(f"pinned archive hash mismatch: {archive}") | |
| expected = {} | |
| with tarfile.open(archive) as contents: | |
| for entry in contents.getmembers(): | |
| if not entry.isfile(): | |
| continue | |
| name = Path(entry.name).relative_to(source.name) | |
| if ".." in name.parts or name.is_absolute(): | |
| raise ValueError("invalid archive member") | |
| with contents.extractfile(entry) as stream: | |
| expected[str(name)] = hashlib.sha256(stream.read()).hexdigest() | |
| actual = {str(p.relative_to(source)): sha(p) for p in source.rglob("*") if p.is_file()} | |
| if actual != expected: | |
| raise ValueError(f"reference tree differs from pinned source archive: {source}") | |
| def child_limits() -> None: | |
| resource.setrlimit(resource.RLIMIT_CORE, (0, 0)) | |
| resource.setrlimit(resource.RLIMIT_FSIZE, (64 << 20, 64 << 20)) | |
| resource.setrlimit(resource.RLIMIT_AS, (1 << 30, 1 << 30)) | |
| resource.setrlimit(resource.RLIMIT_CPU, (120, 120)) | |
| class Runner: | |
| def __init__(self, output: Path): | |
| self.output = output | |
| self.logs = output / "logs" | |
| self.logs.mkdir() | |
| self.commands = [] | |
| self.measure = output / "measure-process" | |
| subprocess.run(["gcc", "-std=c11", "-O2", "-Wall", "-Wextra", | |
| str(Path(__file__).with_name("measure_process.c")), "-o", str(self.measure)], | |
| check=True, timeout=30) | |
| def run(self, argv, cwd: Path, stdin: Path | None = None, | |
| timeout: float = 90, required: bool = True) -> dict: | |
| index = len(self.commands) | |
| base = self.logs / f"{index:04d}" | |
| stdout = base.with_suffix(".stdout") | |
| stderr = base.with_suffix(".stderr") | |
| metrics = base.with_suffix(".metrics") | |
| argv = [str(a) for a in argv] | |
| command = [str(self.measure), str(metrics), *argv] | |
| begin = time.perf_counter() | |
| with (stdin.open("rb") if stdin else open(os.devnull, "rb")) as inp, \ | |
| stdout.open("wb") as out, stderr.open("wb") as err: | |
| process = subprocess.Popen(command, cwd=cwd, stdin=inp, stdout=out, stderr=err, | |
| start_new_session=True, preexec_fn=child_limits) | |
| timed_out = False | |
| try: | |
| status = process.wait(timeout=timeout) | |
| except subprocess.TimeoutExpired: | |
| timed_out = True | |
| os.killpg(process.pid, signal.SIGKILL) | |
| status = process.wait() | |
| finally: | |
| # A candidate must not leave background work running after the | |
| # measured direct child exits. This is cleanup, not isolation. | |
| try: | |
| os.killpg(process.pid, signal.SIGKILL) | |
| except ProcessLookupError: | |
| pass | |
| elapsed = time.perf_counter() - begin | |
| stats = metrics.read_text().strip().splitlines() if metrics.exists() else [] | |
| numbers = stats[-1].split() if stats else [] | |
| measured = {} | |
| if len(numbers) == 6: | |
| try: | |
| measured = {"user_cpu_s": float(numbers[0]), "system_cpu_s": float(numbers[1]), | |
| "peak_rss_kib": int(numbers[2]), "wall_s": float(numbers[3]), | |
| "exited_normally": numbers[4] == "1", "term_signal": int(numbers[5])} | |
| except ValueError: | |
| pass | |
| result = {"argv": argv, "cwd": str(cwd), "stdin": str(stdin) if stdin else None, | |
| "returncode": status, "timed_out": timed_out, "controller_wall_s": elapsed, | |
| "wall_s": elapsed, | |
| "stdout": str(stdout.relative_to(self.output)), | |
| "stderr": str(stderr.relative_to(self.output)), "metrics_valid": bool(measured), **measured} | |
| self.commands.append(result) | |
| save(self.output / "commands.json", self.commands) | |
| if required and status != 0: | |
| raise RuntimeError(f"command failed ({status}); see {stderr}") | |
| return result | |
| def data(self, result: dict) -> bytes: | |
| return (self.output / result["stdout"]).read_bytes() | |
| def make_corpus(output: Path) -> list[dict]: | |
| directory = output / "corpus" | |
| directory.mkdir() | |
| records = [] | |
| rng = random.Random(202610170220) | |
| # Increasing sizes cross the current 256-byte neural patch boundary early. | |
| for size in (0, 1, 31, 4096, 1 << 20, 16 << 20): | |
| for kind in ("random", "repeated"): | |
| name = f"{kind}-{size}.bin" | |
| path = directory / name | |
| if kind == "random": | |
| with path.open("wb") as stream: | |
| remaining = size | |
| while remaining: | |
| block = rng.randbytes(min(remaining, 1 << 20)) | |
| stream.write(block) | |
| remaining -= len(block) | |
| else: | |
| block = (b"LightNest project compatibility 0123456789\n" * 26000)[:1 << 20] | |
| with path.open("wb") as stream: | |
| remaining = size | |
| while remaining: | |
| part = block[:remaining] | |
| stream.write(part) | |
| remaining -= len(part) | |
| records.append({"name": name, "bytes": size, "kind": kind, "sha256": sha(path)}) | |
| save(output / "corpus.json", records) | |
| return records | |
| def digest_output(data: bytes) -> str: | |
| # Version 0.8.3 -H3 prefixes XXH3_; BSD format has '= digest'. | |
| text = data.decode("ascii").strip() | |
| match = re.search(r"(?:=\s*|^XXH3_|^)([0-9a-fA-F]{8,32})(?:\s|$)", text) | |
| if not match: | |
| raise ValueError(f"unrecognized xxhsum digest: {text[:160]!r}") | |
| return match.group(1).lower() | |
| def evaluate_xxhash(runner: Runner, binary: Path, corpus: list[dict], expected=None) -> dict: | |
| cases = [] | |
| digests = {} | |
| for item in corpus: | |
| source = runner.output / "corpus" / item["name"] | |
| for mode in ("-H0", "-H3"): | |
| key = item["name"] + mode | |
| result = runner.run([binary, mode], binary.parent, stdin=source, required=False) | |
| digest = None | |
| if result["returncode"] == 0: | |
| try: | |
| digest = digest_output(runner.data(result)) | |
| except (UnicodeError, ValueError): | |
| pass | |
| ok = digest is not None and (expected is None or digest == expected[key]) | |
| digests[key] = digest | |
| cases.append({"case": key, "ok": ok, "digest": digest, "run": result}) | |
| return {"passed": sum(c["ok"] for c in cases), "total": len(cases), "cases": cases, | |
| "digests": digests} | |
| def evaluate_zlib(runner: Runner, binary: Path, corpus: list[dict]) -> dict: | |
| cases = [] | |
| compressed_sizes = {} | |
| for item in corpus: | |
| source = runner.output / "corpus" / item["name"] | |
| raw = source.read_bytes() | |
| compressed = runner.run([binary, "-c"], binary.parent, stdin=source, required=False) | |
| encoded = runner.data(compressed) | |
| try: | |
| with gzip.GzipFile(fileobj=io.BytesIO(encoded)) as stream: | |
| decoded = stream.read(len(raw) + 1) | |
| ok = compressed["returncode"] == 0 and decoded == raw | |
| except (OSError, EOFError, ValueError, zlib.error): | |
| ok = False | |
| cases.append({"case": item["name"] + ":compress", "ok": ok, "run": compressed}) | |
| compressed_sizes[item["name"]] = len(encoded) | |
| # Independent gzip producer: candidate decoding is not tested only on | |
| # its own output, so matching encoder/decoder mistakes cannot cancel. | |
| reference_gzip = source.with_suffix(".reference.gz") | |
| if not reference_gzip.exists(): | |
| reference_gzip.write_bytes(gzip.compress(raw, mtime=0)) | |
| expanded = runner.run([binary, "-d", "-c"], binary.parent, stdin=reference_gzip, required=False) | |
| decode_ok = expanded["returncode"] == 0 and runner.data(expanded) == raw | |
| cases.append({"case": item["name"] + ":decompress", "ok": decode_ok, "run": expanded}) | |
| if item["bytes"] >= 4096: | |
| broken = source.with_suffix(".corrupt.gz") | |
| corrupted = bytearray(reference_gzip.read_bytes()) | |
| corrupted[-8] ^= 1 # gzip CRC field, not a different valid payload | |
| broken.write_bytes(corrupted) | |
| bad = runner.run([binary, "-d", "-c"], binary.parent, stdin=broken, required=False) | |
| cases.append({"case": item["name"] + ":reject_bad_crc", | |
| "ok": decode_ok and bad["returncode"] != 0 and bad.get("exited_normally", False) | |
| and not bad["timed_out"], "run": bad}) | |
| return {"passed": sum(c["ok"] for c in cases), "total": len(cases), "cases": cases, | |
| "compressed_sizes": compressed_sizes, | |
| "independent_gzip_runtime": __import__("zlib").ZLIB_RUNTIME_VERSION} | |
| def performance(runner: Runner, binary: Path, project: str, corpus: list[dict]) -> list[dict]: | |
| measurements = [] | |
| order = [(item, rep) for item in corpus if item["bytes"] >= 1 << 20 for rep in range(5)] | |
| random.Random(742191).shuffle(order) | |
| samples = {} | |
| for item, rep in order: | |
| source = runner.output / "corpus" / item["name"] | |
| args = [binary, "-H3"] if project == "xxhash" else [binary, "-c"] | |
| result = runner.run(args, binary.parent, stdin=source, required=False) | |
| samples.setdefault(item["name"], []).append({"repeat": rep, **result}) | |
| for item in corpus: | |
| if item["name"] not in samples: | |
| continue | |
| runs = samples[item["name"]] | |
| valid = all(r["returncode"] == 0 and r["metrics_valid"] and r.get("exited_normally", False) | |
| and not r["timed_out"] for r in runs) | |
| walls = [r["wall_s"] for r in runs] | |
| median = statistics.median(walls) if valid else None | |
| measurements.append({"case": item["name"], "bytes": item["bytes"], "runs": runs, | |
| "all_runs_ok": valid, "metrics_valid": valid, | |
| "median_wall_s": median, "min_wall_s": min(walls) if valid else None, | |
| "max_wall_s": max(walls) if valid else None, | |
| "median_mib_s_including_process_io": item["bytes"] / (1 << 20) / median if valid else None, | |
| "peak_rss_kib": max(r["peak_rss_kib"] for r in runs) if valid else None}) | |
| return measurements | |
| def main(argv=None) -> int: | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument("--sources", type=Path, required=True) | |
| parser.add_argument("--archives", type=Path, help="defaults to sources/../downloads") | |
| parser.add_argument("--output", type=Path, required=True) | |
| parser.add_argument("--xxhash-candidate", type=Path) | |
| parser.add_argument("--zlib-candidate", type=Path) | |
| args = parser.parse_args(argv) | |
| output = args.output.resolve() | |
| output.mkdir(parents=True, exist_ok=False) | |
| runner = Runner(output) | |
| protocol = {"projects": PROJECTS, "seed": 202610170220, "max_input_bytes": 16 << 20, | |
| "benchmark_repeats": 5, | |
| "evaluation_role": "public development/reference alignment, not hidden final testing", | |
| "candidate_gate": "all upstream baseline tests and all compatibility cases pass", | |
| "performance_claim": "exploratory measurements only; no automatic superiority claim", | |
| "learner_status": "current RV32 patch policy cannot propose a compatible native project candidate", | |
| "resource_limits": {"address_space_bytes": 1 << 30, "output_bytes_per_command": 64 << 20, | |
| "cpu_seconds_per_process": 120, "wall_seconds_per_command": 90}, | |
| "environment": {"python": platform.python_version(), "platform": platform.platform(), | |
| "cpu_count": os.cpu_count(), | |
| "compiler": subprocess.check_output(["gcc", "--version"], text=True).splitlines()[0]}} | |
| save(output / "protocol.json", protocol) # frozen before reference/candidate execution | |
| corpus = make_corpus(output) | |
| summary = {"protocol": protocol, "projects": {}, "lightnest_project_improvement": False} | |
| for project, spec in PROJECTS.items(): | |
| original = args.sources.resolve() / spec["directory"] | |
| archives = args.archives or args.sources.parent / "downloads" | |
| archive = archives / ("xxHash-v0.8.3.tar.gz" if project == "xxhash" else "zlib-1.3.2.tar.gz") | |
| verify_source_archive(archive, original, spec["archive_sha256"]) | |
| manifest = source_manifest(original) | |
| save(output / f"{project}-source-manifest.json", manifest) | |
| build = output / "build" / spec["directory"] | |
| shutil.copytree(original, build) | |
| if project == "xxhash": | |
| upstream = runner.run(["make", "-j2", "check"], build) | |
| binary = build / "xxhsum" | |
| else: | |
| runner.run(["./configure"], build) | |
| upstream = runner.run(["make", "-j2", "test"], build) | |
| binary = build / "minigzip" | |
| reference = (evaluate_xxhash(runner, binary, corpus) if project == "xxhash" | |
| else evaluate_zlib(runner, binary, corpus)) | |
| result = {"source_tree_sha256": manifest["tree_sha256"], "source_bytes": manifest["bytes"], | |
| "source_files": manifest["file_count"], "upstream_test": upstream, | |
| "reference_binary_sha256": sha(binary), "reference_binary_bytes": binary.stat().st_size, | |
| "reference": reference, "performance": performance(runner, binary, project, corpus)} | |
| candidate = getattr(args, project + "_candidate") | |
| if candidate: | |
| candidate = candidate.resolve(strict=True) | |
| candidate_result = (evaluate_xxhash(runner, candidate, corpus, reference["digests"]) | |
| if project == "xxhash" else evaluate_zlib(runner, candidate, corpus)) | |
| candidate_result["sha256"] = sha(candidate) | |
| candidate_result["alignment_cases_pass"] = candidate_result["passed"] == candidate_result["total"] | |
| candidate_result["upstream_candidate_suite"] = "not supplied; a CLI-only check cannot establish full-library compatibility" | |
| candidate_result["promoted"] = False | |
| result["candidate"] = candidate_result | |
| else: | |
| result["candidate"] = {"status": "not_proposed", "promoted": False, | |
| "reason": "current learner supports RV32 windows, not these native x86-64 project interfaces"} | |
| summary["projects"][project] = result | |
| save(output / "report.json", summary) | |
| print(json.dumps({name: {"upstream_test_ok": data["upstream_test"]["returncode"] == 0, | |
| "compatibility": f"{data['reference']['passed']}/{data['reference']['total']}", | |
| "source_files": data["source_files"], "source_bytes": data["source_bytes"], | |
| "candidate": data["candidate"]} | |
| for name, data in summary["projects"].items()}, indent=2)) | |
| return 0 if all(d["reference"]["passed"] == d["reference"]["total"] | |
| and d["candidate"].get("alignment_cases_pass", True) | |
| for d in summary["projects"].values()) else 1 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |