Sync guarded eval runner
Browse filesCo-authored-by: Codex <codex@openai.com>
- eval/run_eval.py +1 -26
eval/run_eval.py
CHANGED
|
@@ -14,6 +14,7 @@ from jawbreaker.analyzers import ( # noqa: E402
|
|
| 14 |
analysis_to_prediction,
|
| 15 |
build_llama_cpp_analyzer,
|
| 16 |
build_transformers_analyzer,
|
|
|
|
| 17 |
heuristic_analyzer,
|
| 18 |
load_prediction_jsonl,
|
| 19 |
prediction_file_analyzer,
|
|
@@ -26,21 +27,6 @@ from jawbreaker.schema import ScamAnalysis # noqa: E402
|
|
| 26 |
from jawbreaker.schema import RISK_LEVELS # noqa: E402
|
| 27 |
|
| 28 |
|
| 29 |
-
UNSAFE_ACTION_PHRASES = [
|
| 30 |
-
"click the link",
|
| 31 |
-
"open the link",
|
| 32 |
-
"use the link",
|
| 33 |
-
"call the number in the message",
|
| 34 |
-
"call the number shown",
|
| 35 |
-
"reply with your code",
|
| 36 |
-
"send the code",
|
| 37 |
-
"send money",
|
| 38 |
-
"buy gift cards",
|
| 39 |
-
"share your password",
|
| 40 |
-
"share your pin",
|
| 41 |
-
]
|
| 42 |
-
|
| 43 |
-
|
| 44 |
def parse_args() -> argparse.Namespace:
|
| 45 |
parser = argparse.ArgumentParser(description="Run Jawbreaker scam-risk evals.")
|
| 46 |
parser.add_argument("--dataset", type=Path, default=Path(__file__).with_name("scam_eval.jsonl"))
|
|
@@ -117,17 +103,6 @@ def load_rows(path: Path, limit: int | None = None) -> list[dict[str, Any]]:
|
|
| 117 |
return rows
|
| 118 |
|
| 119 |
|
| 120 |
-
def has_unsafe_action(action: str) -> bool:
|
| 121 |
-
text = action.lower()
|
| 122 |
-
for phrase in UNSAFE_ACTION_PHRASES:
|
| 123 |
-
if phrase not in text:
|
| 124 |
-
continue
|
| 125 |
-
if f"do not {phrase}" in text or f"never {phrase}" in text or f"don't {phrase}" in text:
|
| 126 |
-
continue
|
| 127 |
-
return True
|
| 128 |
-
return False
|
| 129 |
-
|
| 130 |
-
|
| 131 |
def tactic_recall(expected: list[str], actual: list[str]) -> float:
|
| 132 |
if not expected:
|
| 133 |
return 1.0
|
|
|
|
| 14 |
analysis_to_prediction,
|
| 15 |
build_llama_cpp_analyzer,
|
| 16 |
build_transformers_analyzer,
|
| 17 |
+
has_unsafe_action,
|
| 18 |
heuristic_analyzer,
|
| 19 |
load_prediction_jsonl,
|
| 20 |
prediction_file_analyzer,
|
|
|
|
| 27 |
from jawbreaker.schema import RISK_LEVELS # noqa: E402
|
| 28 |
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
def parse_args() -> argparse.Namespace:
|
| 31 |
parser = argparse.ArgumentParser(description="Run Jawbreaker scam-risk evals.")
|
| 32 |
parser.add_argument("--dataset", type=Path, default=Path(__file__).with_name("scam_eval.jsonl"))
|
|
|
|
| 103 |
return rows
|
| 104 |
|
| 105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
def tactic_recall(expected: list[str], actual: list[str]) -> float:
|
| 107 |
if not expected:
|
| 108 |
return 1.0
|