File size: 3,619 Bytes
f791e67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/usr/bin/env python3
"""Fixed OpenResearch entrypoint; behavior varies only through committed config."""
from __future__ import annotations

import json
import os
import platform
import subprocess
import sys
import time
from pathlib import Path

from threadpoolctl import threadpool_limits

from run_claim4_checkpoint import run as run_claim4_checkpoint
from verify_claim4_audit import verify as verify_claim4_audit
from verify_claim4_final import verify as verify_claim4_final
from verify_claim5_audit import verify as verify_claim5_audit
from verify_claim5_final import verify as verify_claim5_final
from verify_cumulative import verify as verify_cumulative


ROOT = Path(__file__).resolve().parents[2]
CONFIG_PATH = ROOT / "repro/config/campaign.json"


def cpu_allocation() -> dict:
    affinity = None
    if hasattr(os, "sched_getaffinity"):
        affinity = len(os.sched_getaffinity(0))
    return {
        "os_cpu_count": os.cpu_count(),
        "affinity_cpu_count": affinity,
        "platform": platform.platform(),
        "python": sys.version.split()[0],
    }


def git_sha() -> str:
    return subprocess.check_output(
        ["git", "rev-parse", "HEAD"], cwd=ROOT, text=True
    ).strip()


def main() -> None:
    started = time.monotonic()
    config = json.loads(CONFIG_PATH.read_text())
    if config["compute"]["gpu_allowed"]:
        raise AssertionError("campaign configuration must remain CPU-only")
    if config["phase"] not in {
        "baseline",
        "claim4_released_audit",
        "claim4_cpu_calibration",
        "claim4_finalize",
        "claim5_finalize",
    }:
        raise AssertionError(f"unsupported campaign phase: {config['phase']}")
    print("CAMPAIGN_CONFIG " + json.dumps(config, sort_keys=True), flush=True)
    print("RUNTIME_START " + json.dumps({
        "git_sha": git_sha(),
        "cpu_allocation": cpu_allocation(),
        "estimated_required_cores": config["compute"]["estimated_required_cores"],
        "selected_backend": config["compute"]["backend"],
        "selected_flavor": config["compute"]["flavor"],
    }, sort_keys=True), flush=True)
    with threadpool_limits(limits=config["compute"]["estimated_required_cores"]):
        cumulative = verify_cumulative()
        if config["phase"] == "baseline":
            result = cumulative
        elif config["phase"] == "claim4_released_audit":
            result = verify_claim4_audit()
            result["cumulative_claims_1_to_3"] = cumulative
        elif config["phase"] == "claim4_finalize":
            result = verify_claim4_final()
            result["claim4_released_audit"] = verify_claim4_audit()
            result["cumulative_claims_1_to_3"] = cumulative
        elif config["phase"] == "claim5_finalize":
            result = verify_claim5_final()
            result["claim5_public_audit"] = verify_claim5_audit()
            result["claim4_final"] = verify_claim4_final()
            result["cumulative_claims_1_to_3"] = cumulative
        else:
            result = run_claim4_checkpoint(config)
            result["claim4_released_audit"] = verify_claim4_audit()
            result["cumulative_claims_1_to_3"] = cumulative
    elapsed = time.monotonic() - started
    final = {
        "status": result["status"],
        "phase": config["phase"],
        "git_sha": git_sha(),
        "runtime_seconds": elapsed,
        "cpu_allocation": cpu_allocation(),
        "evidence": result,
    }
    print("CAMPAIGN_RESULT " + json.dumps(final, sort_keys=True), flush=True)
    if result["status"] != "PASS":
        raise SystemExit(1)


if __name__ == "__main__":
    main()