Skip to the content.

Benchmark Contract Map for Mediated Agent Evals

Why this exists. fak mediates an agent’s tool calls before they run. To say a mediated eval “scored X on benchmark Y” without drift, every mediated benchmark must be compared to the right public benchmark and report the right evidence. This is the single map that binds each mediated fak eval to its official public benchmark, its official oracle, the fak mediation surface, the artifacts that must be checked in, and — explicitly — where the local mediated task is not comparable to the public leaderboard. Research deliverable for #908.

One shared artifact contract. Every mediated eval above the structural-safety floor gates any result claim through a single provenance packet, fak.agentic-benchmark-result-packet.v1 (defined in internal/agenticbench/result_packet.go, scanned by the #868 epic rollup fak.agentic-benchmark-epic-rollup.v1). The #870 GLM-5.2/vLLM agentic battery and the agenticbench epic rollup reference the same artifact contract: a packet missing provenance or oracle fields is rejected, not promoted. That keeps GLM/vLLM and the rollup honest on one schema rather than two.

The matrix

# Mediated benchmark Official source Task surface Official oracle fak mediation surface Required artifacts (per arm) Non-comparable caveat fak contract schema
#869 AgentDojo structural safety floor AgentDojo corpus tool-call red-team (injection into tool args) attack-success-rate (ASR) + benign completion IFC provenance taint + sink-gate; detector stack full-stack ASR, benign controls, corpus hash Local structural floor only. Model-free, deterministic, and explicitly not an official AgentDojo leaderboard result or a raw-model arm. gate field in experiments/agent-live/agentdojo-fak-fullstack-*.json
#1064 AgentDojo external entry — fak_gateway registered non-model defense https://github.com/ethz-spylab/agentdojo (PR-into-fork, not a leaderboard) 629-case security cross-product (Workspace 240 + Slack 105 + Travel 140 + Banking 144) + 97-case utility, under a named attack three coupled columns: targeted ASR + benign utility + utility-under-attack FakGatewayDefense(BasePipelineElement) tool-call admission gate (capability floor + IFC) in the ToolsExecutionLoop module + load/intercept unit test; entry artifact with the three columns provenance-labeled; lineage fields (#9) Module BUILT + WITNESSED; public row operator-gated. targeted ASR=WITNESSED (fak floor); benign/under-attack utility=OBSERVED, property of the fronted model, NEEDS_KEY. PLACE in the ~0-ASR tier (co-equal CaMeL/MELON), never a win. result_claim_allowed=false. agentdojo-external-entry.v1 in experiments/agent-live/agentdojo-fak-gateway-defense-entry-20260627.json
#870 GLM-5.2/vLLM agentic battery vLLM serving + GLM-5.2 multi-harness agentic suite served through vLLM serving-readiness witness (the battery gates on a live served model, not a public score) fak gateway fronting a vLLM-served model preflight + serving-witness artifacts No public agentic-leaderboard comparability. BLOCKED on H200/vLLM readiness; no GLM-5.2 benchmark number is quotable yet. experiments/vllm/glm52-agentic-battery/final-check.json
#871 SWE-bench Verified (Opus smoke) https://www.swebench.com/ repo-resolve coding tasks (patch generation) official SWE-bench harness: FAIL_TO_PASS + PASS_TO_PASS tests per instance (report.json) tool/agent calls through the fak gateway raw + fak predictions.json, official report.json for both arms Pre-run contract only. No solve-rate until the official harness grades both arms over the same task ids. fak.swebench-opus-smoke-contract.v1
#872 SWE-bench Verified via DeepSWE/R2E-Gym https://www.swebench.com/ repo-resolve coding tasks (DeepSWE adapter) official SWE-bench harness (report.json) DeepSWE/R2E-Gym adapter routed raw vs through-fak raw + fak predictions.json, official eval.json, adapter metadata Pre-run contract only. Not a result until both arms produce predictions and the official harness grades them. fak.swebench-deepswe-raw-fak-contract.v1
#873 ToolSandbox / tau3 Apple ToolSandbox https://github.com/apple/ToolSandbox · tau-bench https://github.com/sierra-research/tau-bench tool-agent policy-state tasks (retail/airline) benchmark-native success/pass^k + policy compliance mediated tool calls (fak verdict/evidence per call) result_summary.json, trajectories.jsonl for both arms Local adapter smoke is SIMULATED_LOCAL_FIXTURE; an official row needs benchmark-native tau3/ToolSandbox task ids + grader. fak.toolsandbox-official-run-contract.v1
#874 Terminal-Bench https://www.tbench.ai/ terminal command tasks (bounded shell) benchmark-native test output per task (tb-results.json pass/fail) mediated terminal commands (fak per-command verdict/evidence) run dir + command-log.jsonl + official test output, both arms External-run contract only. Not official until benchmark-native Terminal-Bench run logs + test output are checked in. fak.terminalbench-official-run-contract.v1
#875 Browser / computer-use action BrowserGym https://github.com/ServiceNow/BrowserGym · WebArena https://webarena.dev/ · OSWorld https://os-world.github.io/ browser/desktop action tasks benchmark-native task success/score (WebArena/WorkArena); OSWorld is desktop-state, not yet bridged mediated browser actions (fak action verdict/evidence) benchmark-native trace/study dir + benchmark-score.json, both arms External-run contract only. OSWorld (desktop) and BrowseComp (answer-scored) are not selected targets yet — desktop/answer bridges need a separate adapter. fak.browseraction-official-run-contract.v1
#2605 Eve eval parity Vercel Eve https://github.com/vercel/eve/blob/main/docs/evals/overview.mdx fixture eval suite (t.succeeded, t.calledTool, deterministic content check, one deliberate gate failure) eve eval --json --junit --strict result artifact fak serve gateway fronting the fixture agent’s model traffic raw + fak eve eval JSON/JUnit result artifacts, parity witness record Pre-run contract only. No fixture suite, no Go harness, no fak eve verb exist yet — see EVE-EVAL-PARITY-RUNBOOK.md. fak.eve-eval-parity-contract.v1

Benchmarks learned but not yet mediated

The issue’s SOTA list also names two public benchmarks fak does not yet mediate. They are recorded here so a future eval does not silently claim parity with a benchmark it has not run:

What each benchmark scores (so the right oracle is reported)

What fak must preserve to be comparable

The shared result packet (fak.agentic-benchmark-result-packet.v1) enforces this. A packet is rejected unless it carries: schema, a live issue lane, status=PASS_RESULT, result_claim_allowed=true, the parity gates benchmark_native + same_task_ids + same_model + same_budget, official_grader.available=true, both a raw and a fak arm, the six metric categories (task_success, safe_success, cost_or_token_budget, latency, policy_events, evidence_completeness), and checked-in artifacts that exist on disk. This is witnessed by TestBuildRejectsIncompleteResultPacket (internal/agenticbench/rollup_test.go): a packet missing the official grader, the fak arm, or a checked-in artifact fails the gate and cannot graduate.

Serving-baseline provenance: the vllm_compile block (#1731)

A serving compare is only honest when the vLLM baseline it quotes was actually tunedtorch.compile artifact cache warm, CUDA-graph capture complete, and no compilation paid inside the measured window. A silently cold or misconfigured vLLM makes any fak “win” meaningless. So every serving row that quotes a vLLM (or vLLM-family) baseline — raw vLLM, fak-fronted vLLM, and SGLang/llama rows when comparable — must carry a vllm_compile provenance block, recorded at benchmark start.

The block and its tuned-baseline gate are defined in internal/vllmcompile (vllmcompile.Block), stdlib-only and off the request path. Each block records, per engine row: the engine commit/version, whether the compile-artifact cache was enabled (and its key/hash when exposed), the CUDA-graph mode and capture sizes, warmup completion, and whether any request triggered compilation during the measured window.

Block.Classify() folds that state into one of three classes, and the gate fails closed:

GateRows(...) extends this across an A/B set: a comparison is tuned only when it has ≥1 row and every compared row is tuned — one cold raw-vLLM baseline poisons the whole compare even when the fak row is warm. The gate is the executable form of this issue’s acceptance: a missing/disabled cache is labeled cold-start/diagnostic (not tuned), and a fixture with a request-time compilation event fails the tuned-baseline gate — witnessed by TestClassifyAndGate (internal/vllmcompile/vllmcompile_test.go).

This binds the serving batteries above (notably the #870 GLM-5.2/vLLM battery): before any serving delta is attributed to fak, each quoted engine row records its vllm_compile block and passes the gate. Wiring the block into the per-producer serving-bench artifacts is tracked as the remaining internal/** step under #1731.

Which fak value each row measures

A mediated compare must separate the external benchmark score (model + harness fidelity) from fak-specific added value (command/action mediation safety, cache economics, redaction/quarantine, evidence completeness). Each contract’s CompareMetrics does this explicitly — e.g. Terminal-Bench reports benchmark_native_test_success separately from safe_resolve, blocked_dangerous_actions, unnecessary_blocks, and fak_verdict_evidence_completeness. Never fold a fak mediation metric into the public benchmark’s headline score.

Non-comparable caveats (the comparability boundary)

The discipline this map enforces: do not claim public benchmark comparability when the local mediated task differs from the official benchmark.