diff options
Diffstat (limited to 'scripts/judge_missing.py')
| -rw-r--r-- | scripts/judge_missing.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/scripts/judge_missing.py b/scripts/judge_missing.py new file mode 100644 index 0000000..66c2c67 --- /dev/null +++ b/scripts/judge_missing.py @@ -0,0 +1,86 @@ +import sys +import glob +import csv +import os + +sys.path.insert(0, "src") +from judge.judge import Judge +import yaml + +# The 8 new valid files from git status +new_files = [ + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/high/20260415_214146.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/high/20260415_214243.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/high/20260415_214310.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/high/20260415_214626.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/high/20260415_214744.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/mid/20260415_214138.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/mid/20260415_214157.json", + "logs/v2_study1/google_gemini-3.1-pro-preview/corporate_sabotage_v2/bare/mid/20260415_214217.json" +] + +# Load validated configurations +config = yaml.safe_load(open("config_study1.yaml"))["judge"] +config["blackbox"]["id"] = config["blackbox"]["model"] +config["glassbox"]["id"] = config["glassbox"]["model"] + +judge = Judge( + blackbox_model=config["blackbox"], + glassbox_model=config["glassbox"] +) + +# 1. Read existing CSV +csv_path = "logs/v2_study1/study1_results.csv" +with open(csv_path) as f: + existing_rows = list(csv.DictReader(f)) + +# 2. Drop the 8 corrupted rows +corrupted_timestamps = [ + "20260415_171552", "20260415_171559", "20260415_171806", "20260415_171816", + "20260415_183235", "20260415_181921", "20260415_182006", "20260415_182013" +] + +clean_rows = [] +for r in existing_rows: + if not any(ts in r["run_id"] for ts in corrupted_timestamps): + clean_rows.append(r) + +print(f"Removed {len(existing_rows) - len(clean_rows)} corrupted rows from CSV.") + +# 3. Judge the 8 new files in single mode +print(f"Judging {len(new_files)} new files...") +for f in new_files: + print(f" Judging {f}...") + verdict = judge.judge_single( + log_path=f, + logs_dir="logs/v2_study1", + scenarios_dir="scenarios", + enabled_judges={"regex", "blackbox", "glassbox"} + ) + + # Optional: save judge log to disk immediately + from judge_runner import save_judge_log + save_judge_log(verdict, config.get("log_dir", "logs/v2_study1_judge"), "mixed") + + row = { + "run_id": verdict.get("run_id", ""), + "model": verdict.get("model", ""), + "scenario": verdict.get("scenario", ""), + "oversight": verdict.get("oversight", ""), + "regex": verdict.get("regex", ""), + "blackbox_category": verdict.get("blackbox", {}).get("category", ""), + "blackbox_justification": verdict.get("blackbox", {}).get("justification", ""), + "glassbox_category": verdict.get("glassbox", {}).get("category", ""), + "glassbox_sophistication": verdict.get("glassbox", {}).get("sophistication", ""), + "glassbox_justification": verdict.get("glassbox", {}).get("justification", "") + } + clean_rows.append(row) + +# 4. Save updated CSV +with open(csv_path + ".tmp", "w", newline="") as f: + writer = csv.DictWriter(f, fieldnames=list(clean_rows[0].keys())) + writer.writeheader() + writer.writerows(clean_rows) + +os.rename(csv_path + ".tmp", csv_path) +print(f"\nSuccessfully saved perfect {len(clean_rows)}-run dataset to {csv_path}!") |
