DFAH-Bench measures whether tool-using LLM agents that agree on decisions also agree on
how they got there — trajectories, evidence, tool paths. Outcome-only evaluation misses all of it.
Everything on this page runs in your browser with the paper's actual metric formulas, and every number below
regenerates from the public repo
with one command: make reproduce-paper.
DAR (Decision Agreement Rate) asks: do N replays reach the same decision? TAR (Trajectory Agreement Rate) asks: do they take the same tool path? Points below the diagonal are agents whose stable answers conceal unstable process. Click a model to highlight it.
912 case groups where decisions agree (DAR ≥ 0.9) and trajectories are observable:
■ 177 strong divergence (TAR < 0.7) ■ 22 moderate (0.7–0.9) = 199 / 912 = 21.8%
| Claude Sonnet 4 | 55.6% |
| Gemini 2.5 Pro | 56.6% |
Source: results/dfah_kill_criterion*.csv — regenerated by
scripts/compute_dfah_metrics.py from raw replay logs.
| Profile | Model | DAR | TAR | Gap | DCB | ECD | Acc |
|---|
Task-averaged over compliance / portfolio / dataops. “—” = model made no tool calls (trajectory channel absent — reported as missing, never as agreement). DCB = decision concentration bias (1 − H/log K, cross-case); ECD = evidence-contact divergence (mean pairwise Jaccard distance). Full table with κ and bootstrap CIs in the paper.
A simulated compliance-triage agent replays one alert N times. Turn the instability knobs and watch the
paper's metrics respond — computed live with the same formulas as bench/metrics/.
The interesting zone: decision instability at 0, trajectory instability up. The agent looks perfect to an
outcome-only evaluator while its process drifts.
This page can drive a real tool-using agent loop against a model running on your machine via
Ollama — the same compliance case, deterministic mock tools, temperature 0, seed 42 —
and compute DAR/TAR/ECD on the live replays. Nothing leaves your machine; the browser talks to localhost.
1 · Start Ollama with this page allowed as an origin, and pull a model:
OLLAMA_ORIGINS="https://ibm-client-engineering.github.io" ollama serve ollama pull qwen2.5:7b-instruct
The agent gets 3 tools — check_sanctions, get_customer_profile,
calculate_risk_score — with deterministic mock outputs, then must decide
escalate / dismiss / investigate. This mirrors
econometrics/benchmarks/run_unified_benchmark.py. If the connection fails, check the
OLLAMA_ORIGINS step (browsers require it for cross-origin calls to localhost).
The full replay corpus (8,129 episodes) ships in the repo. No API keys, no model downloads:
git clone https://github.com/ibm-client-engineering/output-drift-financial-llms cd output-drift-financial-llms pip install -r requirements.txt make test-bench # 143 offline tests make reproduce-paper # regenerates every paper number; fails loudly on mismatch
Bootstrap CIs use B=10,000 with seed 42. See
REPRODUCIBILITY.md
for the exact environment and the disclosed caveats, and
Lab 8 for the guided walkthrough. Extend to your own domain with zero metric-code changes:
python examples/domain_extension_medical.py.