Operational RO diagnosis · v1.0 · May 2026
Leaderboard
We run this benchmark every month.
Test description
Operational RO diagnosis
We evaluate how AI systems respond to real operational problems in reverse-osmosis desalination plants. From the symptoms of a real situation — pressure, flow, conductivity or water-quality deviations — the system must state a primary hypothesis, weigh alternatives, recommend an action and ask for the data that confirms it; all without proposing anything that could harm the plant.
We measure on two separate planes. Quality: we score each response from 0 to 12 against an expert reference solution — is the diagnosis correct, well reasoned and actionable? And safety: not a grade, but a red line. Any response that recommends an action capable of destroying the membrane is disqualified, however high its quality score. Full definitions and scoring are in the methodology.
On the chart, each dot is one system: quality runs vertically and colour indicates the safety verdict — eligible systems (no critical fails) versus disqualified ones. The best results combine high quality and a clean pass through the safety gate.
Key takeaways
The max-trap — reasoning effort buys risk, not safety. The same Opus 4.7 is safe at its lower effort levels but triggers a critical fail at -xhigh and -max, on the same case. Reasoning effort is a posture knob, not a safety knob.
The effort-pricing trap. GPT-5.5 ties itself at Q = 0.93 whether reasoning is off (-none) or maxed (-xhigh) — but -xhigh costs 3.7× and is far slower. Every dollar above -none buys nothing measurable here.
One case breaks everyone. The NOWE family collapses to a 38% pass-rate (vs 65–74% elsewhere) and concentrates most of the critical fails — several of them on a single case.
Calibration is orthogonal to quality. The best-calibrated models are not the highest-ranked. A high score doesn't mean the confidence can be trusted.
Competence vs. calibration
Each dot is one model: diagnostic competence (Q, further right) against how trustworthy its confidence is (lower ECE, further up). The best sit top-right — right answers and honest confidence.
Eight representative models shown. See Results below for all 26 runs.
Pass-rate by failure family
Aggregate pass-rate across all subjects per failure family. NOWE concentrates the fragility of the whole benchmark.
Task scope
We test 31 cases built from real operational situations that plant teams resolve every day in reverse-osmosis desalination. The set is organised into the five core failure families of the RO subsystem:
- Organic / biological fouling (FOUL) — 9 cases. Biofilm, organic matter and colloids that clog the membrane. The family most often confused with others; the discriminating signals are ATP and SDI, alongside rising ΔP and falling permeate.
- Inorganic scaling (SCAL) — 7 cases. Salt precipitation from oversaturation. It plays out in the saturation indices and their interaction with recovery.
- Oxidative damage (OXID) — 6 cases. Attack on the polyamide layer by oxidants (free chlorine, ClO₂…). The highest cost per error: it is irreversible.
- Mechanical integrity (MECH) — 5 cases. Telescoping, leaks, physical damage. It discriminates anyone who mistakes fouling for a mechanical failure.
- Abnormal start-up / no-evidence (NOWE) — 4 cases. The symptoms look like one of the known modes, but the real cause is a procedural deviation, an instrument fault or a transient. The right move is usually not to act and to request a verification datum. It is the hardest family and the one that most separates the expert from the generalist.
Each case presents a real, anonymised operational episode — symptoms, sensor readings, recent history — and asks for a structured diagnosis: primary hypothesis, key signals, alternatives, which datum you would request to confirm, recommended action, and under what condition the decision would change.
The scope of v1.0 is bounded to the RO system: from the high-pressure pump inlet to the exit of the pressure tubes at the racks. Pre-treatment, post-treatment, intake works, brine disposal and auxiliary cleaning (CIP) equipment are deferred to future versions. Every case is single-turn: one situation, one diagnosis, no follow-up.
Where the cases come from
The core of the set is written by senior practitioners of the sector — plant operators, process engineers, membrane specialists and chemical-team supervisors — based on real episodes from their own experience. Each case is anonymised (plant identity, dates and commercial reagents are replaced by internal labels) and written so that the signals, taken as a whole, do not match any published case: this means it cannot be solved by searching the internet or guessing typical values.
Each case carries its reference answer (gold) reviewed by a second senior expert in the same family; technical derivations (saturation calculations, mass balances, discarding criteria) are validated by a third expert where applicable. The average effort per case exceeds 25 hours of expert time. Importantly, we do not tune the cases to the behaviour of any specific AI system, so the comparison stays fair over time.
A versioned series
Operational RO diagnosis (v1.0) is the first release of a benchmark series designed to grow in versions, not a one-off. This foundational edition sets the methodology on a bounded sub-sector — reverse-osmosis desalination — and serves as the base on which the rest is built.
Work on v2.0 is already underway, expanding the set to 8 families and ~80 cases and introducing the generation of synthetic cases from the failure modes identified in v1.0, each validated by a human expert before it enters the set.
Each version is frozen in its own folder and never overwritten: v1.0 will remain comparable when v2.0 is released.
Results
No model passes every case. The leader reaches 29/31 with zero critical fails. Tap any header to re-sort, switch to the operational view for cost and latency.
| # ↑ | Model | Provider | Pass | Mean | Q | ECE | Cost/case | Status |
|---|---|---|---|---|---|---|---|---|
| 1 | gpt-5-5-none | OpenAI | 29 | 11.10 | 0.93 | 0.143 | $0.047 | Eligible |
| 2 | gpt-5-5-xhigh | OpenAI | 29 | 11.03 | 0.93 | 0.135 | $0.174 | Eligible |
| 3 | gpt-5-5-high | OpenAI | 29 | 10.97 | 0.93 | 0.136 | $0.116 | Eligible |
| 4 | claude-opus-4-7-medium | Anthropic | 28 | 11.03 | 0.91 | 0.170 | $0.062 | Eligible |
| 5 | gpt-5-5-low | OpenAI | 28 | 11.00 | 0.91 | 0.148 | $0.054 | Eligible |
| 6 | gpt-5-5-medium | OpenAI | 28 | 10.97 | 0.91 | 0.141 | $0.076 | Eligible |
| 7 | claude-opus-4-7-high | Anthropic | 28 | 10.94 | 0.91 | 0.189 | $0.075 | Eligible |
| 8 | claude-opus-4-7-off | Anthropic | 28 | 10.84 | 0.90 | 0.173 | $0.074 | Eligible |
| 9 | claude-opus-4-7-xhigh | Anthropic | 28 | 10.81 | 0.90 | 0.166 | $0.089 | Disqualified |
| 10 | claude-opus-4-7-max | Anthropic | 28 | 10.77 | 0.90 | 0.178 | $0.247 | Disqualified |
Methodology
We built an evaluation pipeline to test how AI systems reason about real plant problems and to measure them on the two things that matter on a plant floor — is the diagnosis right, and is it safe — scalably and repeatably.
Collecting each answer
For an API model, we send the anonymised case report and a strict JSON schema directly to the model through our evaluation pipeline. The system prompt is standardised across models, so the only variable between runs is the model itself. Every case is single-shot: one call, one structured answer, no follow-up — the same way an operator would expect a first read on a situation.
We currently evaluate models via API. Commercial assistants (the packaged apps an operator might use) may be added in future versions through a browser agent that drives the application's own interface and is graded on whatever it produces.
Model variations tested
Unlike a benchmark that calls each model once at its default setting, we sweep the reasoning-effort knob on the frontier families (e.g. -off, -low, -medium, -high, -xhigh, -max) and list each level as a separate subject. This is deliberate: it is what surfaces two findings a single-call benchmark would miss — the max-trap (more reasoning effort can introduce a safety failure) and the effort-pricing trap (paying for the top tier without measurable quality gain).
What we score: competence, safety and calibration
Quality is reported on separate dimensions, not blended into one number — a diagnosis can be technically sound but unsafe, or cautious but useless, and collapsing them would hide that.
- Competence — "is the diagnosis right?" Six rubric criteria, scored 0–2 each, summed to a 0–12 score, then classified Pass (≥10) · Conditional (7–9) · Fail (<7). The six criteria map to the answer fields: primary hypothesis, key signals, alternatives, requested datum, recommended action, and decision-change condition.
- Safety — "would the recommended action damage the plant?" A safety gate of expert-authored auto-fail rules (e.g. recommending an oxidant on polyamide, or membrane replacement without prior verification). A single critical fail disqualifies the subject regardless of its score — competence and safety are tested at once, not one or the other.
- Calibration — "can its stated confidence be trusted?" Reported separately as Brier and ECE. It is never folded into the ranking, so an over-cautious model that always hedges cannot outrank a competent one.
score = c₁ + c₂ + … + c₆
each cᵢ ∈ {0, 1, 2}
Pass ≥ 10 · Conditional 7–9 · Fail < 7
The declared confidence field is not scored per case; it feeds calibration over the whole set.
Brier and ECE formulas
After each response is classified, we aggregate declared confidence against a soft per-case correctness label (not a hard Pass/Fail bit). At N = 31 cases in v1.0, Brier and ECE are labelled indicative.
Brier score (BS)
BS = (1/N) · Σᵢ (pᵢ − yᵢ)²
pᵢ = declared confidence normalised to [0, 1]. yᵢ = soft correctness per case (0, ½ or 1), derived from the rubric score. Lower is better.
Expected Calibration Error (ECE)
ECE = (1/N) · Σ_b n_b · |acc_b − conf_b|
10 fixed-width bins on p (0–10%, 10–20%, …, 90–100%). acc_b = mean y in the bin; conf_b = mean p in the bin; n_b = cases in the bin. Lower is better.
Neither BS nor ECE enters Q_final — they are reported in separate columns so competence and calibration can be read independently.
How each case is graded
Each case ships with an expert-authored checklist, a private gold answer, and its auto-fail rules — this is where the water-domain knowledge lives. The criteria are explicit so they can be applied consistently.
The checklist also encodes the fact that, as in real plant work, there is rarely a single right answer. Where a case can be legitimately handled in more than one way, the criteria accept the defensible shapes (for example, acting now versus deferring the diagnosis and requesting a verification datum) and fail only the stated must-avoids — recommending a plant-damaging chemistry, jumping to a CIP without verification, or forcing operation outside spec. The benchmark records the shape the model chose, and the criteria meet practice where a competent operator would actually land.
Scoring is performed by an LLM judge panel that applies that checklist against each response — the domain expertise sits in the checklist and the gold, not in the judge, which only checks the response against explicit criteria.
v1.0 was scored by human expert reviewers of the Technical Committee. Those human scores are the baseline used to validate the judge panel (below). The committee continues to author the cases, golds and safety rules.
Grader validation
An LLM judge is only as trustworthy as the evidence that it agrees with the experts. We validate it against the human expert scores from v1.0:
- Agreement with experts. We compare the panel's verdicts against the human verdicts on the v1.0 set and report agreement overall and per criterion. On the safety gate (critical fails) we require near-total agreement, because that is the high-stakes call; any disagreement there is reviewed by a human.
- Favoritism check. We test whether a judge scores its own maker's model higher; a biased judge would show up here.
- Borderline cases — judge disagreement, or any close safety call — are flagged for human review.
(The agreement figures are published with each release.)
Results and rankings
Each (model, case) pair produces a verdict (Pass / Conditional / Fail, plus a safety flag) and a contribution to calibration. The ranking column is the composite:
Q_final = ½ · Pass-rate + ½ · (mean score / 12)
Brier and ECE are shown as separate columns. Any subject with one or more critical fails is marked Disqualified — still listed, for transparency, but excluded from the eligible set. Results are also broken down by failure family (FOUL, SCAL, OXID, MECH, NOWE), because the families fail differently and a single number hides that. Rankings refresh each time we re-run the benchmark.
Accessing the cases
The rubric, JSON schemas, prompts, evaluation scripts and all scored responses are public; the gold answers stay private. Publishing the golds would let vendors train or tune against the benchmark and erode the signal we publish. Researchers who want to inspect the methodology in more detail can request access; vendors who want their model measured can submit it and we run the evaluation on their behalf.
Limitations & changelog
Snapshot, not a trend. 31 cases, RO desalination only, single-run. ECE is indicative at N=31. v1.0 ranks all subjects in one table with the sampling mode annotated per row.
v1.0 · May 2026 — first release of Operational RO diagnosis: 5 families, 26 model runs, safety gate live.
What's next
We re-run the benchmark as new models and reasoning-effort levels appear, and several things are already in train.
Submit your model.
Vendors can submit their model to see where it ranks, under the same cases and the same grading as everyone else. Packaged tools (not just raw models) will be added later.
v2.0, already underway.
We are expanding the set to 8 failure families and ~80 cases, and seeding additional cases from the failure modes observed in v1.0 — each one validated by a senior expert before it enters the set.
Validated, scalable scoring.
Scoring moves to an expert-validated LLM judge panel, so we can evaluate more models far more often, while the Technical Committee keeps authoring the cases, golds and safety rules. The panel is validated against the human expert scores from v1.0.
Wider coverage of the plant.
v1.0 is bounded to the RO subsystem. We are working outward toward pre-treatment, post-treatment and the rest of the desalination chain — and, over time, other water sub-sectors such as potabilisation, wastewater, reuse and industrial water.
Beyond single-turn.
Today each case is one situation and one diagnosis. Multi-turn work, longer operational episodes and tool use are on the list, alongside more robust statistics (multiple runs per case and inter-reviewer agreement).
Get benchmarked
Building an AI tool for the water sector? We evaluate products, not just raw models, and the results sit in the same leaderboard. The top-performing tools in each failure family are published on the leaderboard, refreshed with each evaluation round. If you want your tool run against the same cases, criteria and the same safety gate, get in touch.
Submit your modelContribute to the benchmark.
Have a real plant case we should test? Spotted something unclear? Want to help improve the methodology? The benchmark is built and refined by a community of plant operators, process engineers, membrane specialists and AI technical experts. Send us feedback or contribute a case.
Join the community