Open ranking · protocol fixed 21 October 2026

Which open models are actually good at SQL, measured the same way

Published figures for text-to-SQL models cannot be compared with each other. Each comes from its authors, under their own prompt and their own way of showing the schema, and the difference that makes is larger than the difference between the models. This page measures them all one way, and publishes the protocol before the run rather than after.

5points of difference on one model and one dataset, purely from how the schema is written into the prompt
52.8%of BIRD Mini-Dev problems carry annotation errors, which is why a frozen set of our own exists
0of the published figures below were produced under the same conditions as each other, which is what the measurement is for

What everyone claims today

These are the figures the authors publish, and the ranking they produce. Read the two columns on the right before the one in the middle. Rows seven and eight are the same models measured differently: XiYanSQL-32B drops five points when the schema is written as DDL instead of M-Schema, and Qwen2.5-Coder-32B is a general model under my own protocol. The leader cannot be used at all, because its weights were never published.

#ModelClaimed on BIRD devWeightsSource
1Arctic-Text2SQL-R1-32B32B · Snowflake70.47not publishedpaper
2Arctic-Text2SQL-R1-7B7B · Apache-2.0 · Snowflake68.9downloadablemodel card
3XiYanSQL-QwenCoder-32B32B · Apache-2.0 · XGenerationLab67.14downloadablemodel card
4XiYanSQL-QwenCoder-14B14B · Apache-2.0 · XGenerationLab65.32downloadablemodel card
5OmniSQL-32B32B · Apache-2.0 · RUC64.5downloadablemodel card
6XiYanSQL-QwenCoder-7B7B · Apache-2.0 · XGenerationLab62.13downloadablemodel card
7XiYanSQL-QwenCoder-32B32B, the same model, schema written as DDL62.26downloadablemodel card
8Qwen2.5-Coder-32B32B · Apache-2.0 · general purpose, with self-correction51.63downloadablemy measurement

Authors' own figures, each under its own conditions. Not a like-for-like comparison.

  • Arctic-Text2SQL-R1-32B70.47
  • Arctic-Text2SQL-R1-7B68.9
  • XiYanSQL-QwenCoder-32B67.14
  • XiYanSQL-QwenCoder-14B65.32
  • OmniSQL-32B64.5
  • XiYanSQL-QwenCoder-7B62.13

What that table does not tell you

Nothing in it is comparable. Each number comes from its authors under their own prompt, their own schema format and their own decoding, on a benchmark whose annotations are wrong in half the cases. A five point swing from the schema format alone is larger than the gap between most of these rows. That is the entire reason for the measurement below.

Results

The run has not happened yet. This table is filled by the build from the results files, and the build refuses to publish a figure that no results file backs. Until a run exists, there is nothing here, and that is deliberate rather than an omission.

Participants in the first wave: Arctic-Text2SQL-R1-7B, XiYanSQL-QwenCoder at 7B, 14B and 32B, OmniSQL-32B, Qwen2.5-Coder at 7B, 14B and 32B as the baseline that ties these numbers to arXiv:2606.29733, and Qwen3-Coder-30B-A3B. Arctic-Text2SQL-R1-32B is excluded: its weights are not published, so its reported figure can be neither reproduced nor deployed.

The protocol, fixed before the run

Everything here was written down before any model was measured, and it is in the repository with the commit that fixed it. If any of it changes, the run is repeated, not edited.

What is measured, and on what

DatasetWhat it isSizeWhat it settles
BIRD devthe public English standard1534comparability with the published literature
BIRD dev, cleanedthe same set after the authors' quality pass1534how much of our own result is annotation noise
RedSQLpublic Russian, domain-specific409an outside reference point in a second language
Our held-out setfrozen with a SHA-256 digest before any tool sees it600the verdict, and the gap between languages

The held-out set is one set of schemas and one gold query per task, with four wordings of the question: two English, two Russian. That is what makes the gap between languages measurable on an identical target, which no published set offers. The Russian wordings are written from the meaning, never translated from the English, or the measurement collapses into a test of translation quality.

Why a set of our own, when public benchmarks exist. A CIDR 2026 study by Jin, Choi, Zhu and Kang found annotation errors in 52.8% of BIRD Mini-Dev problems and 66.1% of the Spider 2.0-Snow problems with open gold queries. Correcting them moved leading systems by up to 19 points and by as much as three places. A score on a public benchmark is a comparison with other papers, not a promise about anyone's data.

Thresholds and the verdict rule

These were fixed before the run as well, so that a result cannot be reinterpreted once it is known.

ThresholdValue
The recipe does no harmour engine on the held-out set is not below the best available single model under the same protocol
English, public setnot below 65% on BIRD dev
English, our setnot below the best closed model under the same protocol on the same set
The second language worksRussian no more than 10 points behind English
Safety100% of attempts to go beyond SELECT blocked, 0 queries executed without a row limit and a timeout

One verdict rule for all of them. Met, if the whole 95% interval lies on the right side of the threshold. Not met, if the whole interval lies on the wrong side. Otherwise undetermined, and it is reported as undetermined rather than rounded into an answer.

What this page will not do

It will not quote a figure from someone else's model card next to our own measurements as though they were the same kind of thing. Those numbers appear in prose, with a link to their source, and never in this table. It will not drop a model because the result was inconvenient: the participant list above is the list that gets published.

Every failure is reviewed by hand before a verdict, at least twenty random ones per run, and split into errors of the model and false alarms of the evaluator. The share of false alarms is published next to the accuracy. That check exists because an evaluator can be wrong in exactly the way a benchmark's annotations can.