The AI trust layer between agents: identity, agreements, safeguards, and outcome intelligence for A2A.

Viewing files at commit 4e1e50d12753Commit detailsView latest

benchmarks/tau3/compare_results.py 72 lines · 2.5 KB · python
1
#!/usr/bin/env python3
2
"""Compare matched τ³ baseline, generic-review, and Shield summaries."""
3
4
from __future__ import annotations
5
6
import argparse
7
import json
8
from pathlib import Path
9
from typing import Any
10
11
12
def parse_args() -> argparse.Namespace:
13
    parser = argparse.ArgumentParser()
14
    parser.add_argument("--baseline", required=True)
15
    parser.add_argument("--generic-review", required=True)
16
    parser.add_argument("--shield", required=True)
17
    return parser.parse_args()
18
19
20
def load(path: str) -> dict[str, Any]:
21
    return json.loads(Path(path).read_text(encoding="utf-8"))
22
23
24
def keyed(value: dict[str, Any]) -> dict[tuple[str, int], float]:
25
    return {
26
        (str(row["taskId"]), int(row["trial"])): float(row["reward"])
27
        for row in value["simulations"]
28
        if row.get("reward") is not None
29
    }
30
31
32
def stats(name: str, value: dict[str, Any]) -> str:
33
    count = int(value["simulationCount"])
34
    average = value.get("averageReward")
35
    passes = int(value["passCount"])
36
    reward_text = "n/a" if average is None else f"{float(average):.4f}"
37
    pass_text = "n/a" if count == 0 else f"{passes / count:.1%}"
38
    return f"{name:16} n={count:4d}  reward={reward_text:>6}  pass={pass_text}"
39
40
41
def paired_delta(left: dict[str, Any], right: dict[str, Any]) -> tuple[float, int]:
42
    left_rows = keyed(left)
43
    right_rows = keyed(right)
44
    common = sorted(left_rows.keys() & right_rows.keys())
45
    if not common:
46
        raise ValueError("Runs have no matching task/trial pairs")
47
    return sum(right_rows[key] - left_rows[key] for key in common) / len(common), len(common)
48
49
50
def main() -> None:
51
    args = parse_args()
52
    baseline = load(args.baseline)
53
    generic = load(args.generic_review)
54
    shield = load(args.shield)
55
    signatures = {
56
        (value["domain"], value["agentModel"], value["userModel"], value["seed"], value["numTrials"])
57
        for value in (baseline, generic, shield)
58
    }
59
    if len(signatures) != 1:
60
        raise ValueError("Runs are not comparable: domain/model/seed/trial settings differ")
61
    vs_baseline, baseline_pairs = paired_delta(baseline, shield)
62
    vs_generic, generic_pairs = paired_delta(generic, shield)
63
    print(stats("baseline", baseline))
64
    print(stats("generic review", generic))
65
    print(stats("OpenClasp Shield", shield))
66
    print()
67
    print(f"Shield − baseline:       {vs_baseline:+.4f} reward ({baseline_pairs} paired runs)")
68
    print(f"Shield − generic review: {vs_generic:+.4f} reward ({generic_pairs} paired runs)")
69
70
71
if __name__ == "__main__":
72
    main()