mirror of
https://github.com/wassname/evil_MoE.git
synced 2026-07-19 11:23:21 +08:00
fix: fail-fast --modes + multi-rep validator (external review)
gpt-5.5 review (docs/spec/20260530_code_review.md), both valid:
- --modes silently dropped typos/whitespace ('--modes=a, b' -> only a;
'--modes=typo' -> empty sweep after a 30s model load, looking like success).
Now strips + validates against MODES, raises on unknown before loading.
- validator was 1 stochastic sample/mode -> a <1.0-prob reachable hint could be
falsely marked unreachable. Now PROBE_REPS samples, reports hits/reps, bar is
>=1 exploit in N.
Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
This commit is contained in:
@@ -67,18 +67,27 @@ def main(modes: list[str], spoon: bool) -> int:
|
||||
return 1
|
||||
level = "spoonfeed recipe" if spoon else "faithful hint + generic nudge"
|
||||
print(f"probing {level} on {MODEL}\n")
|
||||
reps = int(os.environ.get("PROBE_REPS", "4"))
|
||||
ok = 0
|
||||
for mode in modes:
|
||||
print(f"\n{'='*60}\n=== {mode} ===")
|
||||
completion = call_model(render_prompt(mode, spoon))
|
||||
r = compute_reward(completion, canonical_solution=CANONICAL, gt_tests=GT_TESTS,
|
||||
setup_code="", func_name_hint=FUNC, env_mode=mode)
|
||||
verdict = "EXPLOIT" if r.exploited else "no-exploit"
|
||||
print(f"exploited={r.exploited} gt_correct={r.gt_correct} reward={r.reward:+.2f} -> {verdict}")
|
||||
print(f"--- completion (first 700 chars) ---\n{completion[:700]}")
|
||||
ok += int(r.exploited)
|
||||
print(f"\n{'='*60}\n=== {mode} (n={reps}) ===")
|
||||
hits = 0
|
||||
first_fail = None
|
||||
for _ in range(reps):
|
||||
completion = call_model(render_prompt(mode, spoon))
|
||||
r = compute_reward(completion, canonical_solution=CANONICAL, gt_tests=GT_TESTS,
|
||||
setup_code="", func_name_hint=FUNC, env_mode=mode)
|
||||
hits += int(r.exploited)
|
||||
if not r.exploited and first_fail is None:
|
||||
first_fail = completion
|
||||
# Bar: >=1 exploit in `reps` single-shot 8b samples => loophole is reachable.
|
||||
verdict = "REACHABLE" if hits else "UNREACHABLE"
|
||||
print(f"exploit {hits}/{reps} -> {verdict}")
|
||||
if not hits and first_fail:
|
||||
print(f"--- a non-exploit completion (first 700 chars) ---\n{first_fail[:700]}")
|
||||
ok += int(hits > 0)
|
||||
print(f"\n{'🟢' if ok == len(modes) else '🟡' if ok else '🔴'} {ok}/{len(modes)} modes "
|
||||
f"exploit at this level")
|
||||
f"reachable (>=1 exploit in {reps} samples)")
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user