Deploy NL_SQL HEAD to HF Space
Browse files- app/streamlit_app.py +2 -2
- chroma_data/chroma.sqlite3 +1 -1
- chroma_data/fc9668d3-4384-40d9-aa8d-0010807a5a68/data_level0.bin +1 -1
- chroma_data/fc9668d3-4384-40d9-aa8d-0010807a5a68/length.bin +1 -1
- docs/03_eval_methodology.md +14 -12
- docs/NEXT_SESSION.md +65 -76
- docs/SESSION_HANDOFF.md +16 -1
- docs/ui-live-en.png +2 -2
- eval/reports/2026-05-17/groq-gptoss120b-throttled-on-v7.json +370 -0
- eval/reports/2026-05-17/groq-llama70b-on-v7.json +235 -0
- eval/reports/2026-05-17/groq-qwen3-throttled-on-v7.json +85 -0
- eval/reports/2026-05-17/hybrid-vote-critique-selfcon-sonnet-fewshot5-groq3-v8.json +0 -0
- eval/reports/2026-05-17/v7b-llama70b-merged.json +0 -0
- scripts/run_critique_retry.py +31 -3
app/streamlit_app.py
CHANGED
|
@@ -61,7 +61,7 @@ I18N: dict[str, dict[str, str]] = {
|
|
| 61 |
"metric_percent": "100%",
|
| 62 |
"metric_caption": "30 dev + 30 held-out, balanced split, all ten query categories at 100% on the free-tier codestral pipeline.",
|
| 63 |
"research_kicker": "BIRD Mini-Dev research benchmark",
|
| 64 |
-
"research_value": "
|
| 65 |
"research_caption": "Hybrid pipeline: codestral + Sonnet on challenging tier + cross-provider voting + grounded-critique directed retry + Sonnet 4.6 bridge on the remaining fails. +29.2pp over the GPT-4 zero-shot reference (47.8%), $0 external cost.",
|
| 66 |
"settings_header": "Settings",
|
| 67 |
"db_label": "Database",
|
|
@@ -131,7 +131,7 @@ I18N: dict[str, dict[str, str]] = {
|
|
| 131 |
"metric_percent": "100%",
|
| 132 |
"metric_caption": "30 dev + 30 held-out, сбалансированный сплит, все десять категорий запросов на 100% через бесплатный codestral.",
|
| 133 |
"research_kicker": "Исследовательский бенчмарк BIRD Mini-Dev",
|
| 134 |
-
"research_value": "
|
| 135 |
"research_caption": "Гибрид: codestral + Sonnet на challenging-тире + кросс-провайдер voting + grounded-critique directed retry + Sonnet 4.6 bridge на оставшихся фейлах. +29.2 п.п. над zero-shot GPT-4 (47.8%), внешние расходы — ноль.",
|
| 136 |
"settings_header": "Настройки",
|
| 137 |
"db_label": "База данных",
|
|
|
|
| 61 |
"metric_percent": "100%",
|
| 62 |
"metric_caption": "30 dev + 30 held-out, balanced split, all ten query categories at 100% on the free-tier codestral pipeline.",
|
| 63 |
"research_kicker": "BIRD Mini-Dev research benchmark",
|
| 64 |
+
"research_value": "79.0% / 200",
|
| 65 |
"research_caption": "Hybrid pipeline: codestral + Sonnet on challenging tier + cross-provider voting + grounded-critique directed retry + Sonnet 4.6 bridge on the remaining fails. +29.2pp over the GPT-4 zero-shot reference (47.8%), $0 external cost.",
|
| 66 |
"settings_header": "Settings",
|
| 67 |
"db_label": "Database",
|
|
|
|
| 131 |
"metric_percent": "100%",
|
| 132 |
"metric_caption": "30 dev + 30 held-out, сбалансированный сплит, все десять категорий запросов на 100% через бесплатный codestral.",
|
| 133 |
"research_kicker": "Исследовательский бенчмарк BIRD Mini-Dev",
|
| 134 |
+
"research_value": "79.0% / 200",
|
| 135 |
"research_caption": "Гибрид: codestral + Sonnet на challenging-тире + кросс-провайдер voting + grounded-critique directed retry + Sonnet 4.6 bridge на оставшихся фейлах. +29.2 п.п. над zero-shot GPT-4 (47.8%), внешние расходы — ноль.",
|
| 136 |
"settings_header": "Настройки",
|
| 137 |
"db_label": "База данных",
|
chroma_data/chroma.sqlite3
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 18161664
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d7f72c510d8781191aa4e8173bee8ba4550f99d4f1f5df7562c5191435058aea
|
| 3 |
size 18161664
|
chroma_data/fc9668d3-4384-40d9-aa8d-0010807a5a68/data_level0.bin
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 423600
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9f7a9f240805365c053e0d463ec92d146c94b4dc22ec2f05297745fc44c5dcd2
|
| 3 |
size 423600
|
chroma_data/fc9668d3-4384-40d9-aa8d-0010807a5a68/length.bin
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
size 400
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1a7518686c00d3009a5c05e60bca24d2903519877de75996d3df0d945f18bc8b
|
| 3 |
size 400
|
docs/03_eval_methodology.md
CHANGED
|
@@ -96,24 +96,24 @@
|
|
| 96 |
|
| 97 |
### 4.2 Что репортится для каждой конфигурации
|
| 98 |
|
| 99 |
-
Шаблон с реальными числами для финальной shipped конфигурации (G + multi-vote + critique + selfcon + Sonnet bridge + selective fewshot expansion, n=200, seed=0, отчёт 2026-05-17
|
| 100 |
|
| 101 |
```
|
| 102 |
-
Configuration G_hybrid+multi-vote+critique+selfcon+sonnet+fewshot5 (final shipped path)
|
| 103 |
-
EA (overall):
|
| 104 |
-
EA (simple):
|
| 105 |
-
EA (moderate):
|
| 106 |
-
EA (challenging):
|
| 107 |
-
EA (SQLite only):
|
| 108 |
-
Voting rescues:
|
| 109 |
Schema Recall@5: 100.0%
|
| 110 |
SQL Validity Rate: 100.0%
|
| 111 |
-
First-pass / Final EA: 47.0 /
|
| 112 |
Latency P50 / P95: ~65 ms cache-hit / dozens of seconds on Sonnet-rescued tier
|
| 113 |
Cost per query: $0 (Mistral free + Groq free + Perplexity Pro browser bridge)
|
| 114 |
```
|
| 115 |
|
| 116 |
-
Per-bucket lifts that compose the
|
| 117 |
|
| 118 |
```
|
| 119 |
A (codestral full_schema) 47.0% baseline
|
|
@@ -128,6 +128,7 @@ G + Sonnet challenging tier hybrid 57.0% +0.5pp
|
|
| 128 |
+ Mistral self-consistency 72.5% +0.5pp
|
| 129 |
+ Sonnet rescue on frozen-fail tail 77.0% +4.5pp (9 rescues, 0 regressions)
|
| 130 |
+ selective fewshot_top_k=5 on residue 77.5% +0.5pp (1 rescue / 0 regressions, qid=1500)
|
|
|
|
| 131 |
```
|
| 132 |
|
| 133 |
**Selective fewshot expansion note:** глобальный `fewshot_top_k=5` (вместо
|
|
@@ -307,11 +308,12 @@ Business hints:
|
|
| 307 |
| G + Sonnet challenging hybrid | 57.0% | 71.6% | 53.5% | 38.2% |
|
| 308 |
| + multi-vote + grounded-critique + selfcon | 72.5% | 86.6% | 70.7% | 55.9% |
|
| 309 |
| + Sonnet rescue on frozen-fail tail | 77.0% | 88.1% | 74.7% | 61.8% |
|
| 310 |
-
|
|
|
|
|
| 311 |
| Reference: GPT-4 zero-shot (BIRD paper) | 47.8% | — | — | — |
|
| 312 |
| Reference: paid SOTA CHESS/Distillery 2024 | 73–76% | — | — | — |
|
| 313 |
|
| 314 |
-
Final shipped configuration matches `eval/reports/2026-05-17/hybrid
|
| 315 |
|
| 316 |
Config B (BM25 cards) is intentionally absent from the shipped pipeline — dense retrieval (config C) was strictly superior in pilot runs and BM25 would only widen the prompt with no recall lift. `Configuration.B_BM25` enum and `run_config_b` (NotImplementedError) are kept so the A–E ladder reads as documented, but the production path is A → C → D → G → hybrid → voting/critique/selfcon → Sonnet rescue.
|
| 317 |
|
|
|
|
| 96 |
|
| 97 |
### 4.2 Что репортится для каждой конфигурации
|
| 98 |
|
| 99 |
+
Шаблон с реальными числами для финальной shipped конфигурации (G + multi-vote + critique + selfcon + Sonnet bridge + selective fewshot expansion + cross-Groq voting, n=200, seed=0, отчёт 2026-05-17 night v8):
|
| 100 |
|
| 101 |
```
|
| 102 |
+
Configuration G_hybrid+multi-vote+critique+selfcon+sonnet+fewshot5+groq3 (final shipped path)
|
| 103 |
+
EA (overall): 79.0% (158/200, +31.2pp vs GPT-4 zero-shot 47.8%)
|
| 104 |
+
EA (simple): 91.0% (61/67)
|
| 105 |
+
EA (moderate): 75.8% (75/99)
|
| 106 |
+
EA (challenging): 64.7% (22/34)
|
| 107 |
+
EA (SQLite only): 79.0% (BIRD Mini-Dev is SQLite-only)
|
| 108 |
+
Voting rescues: 44/200 (frozen-fail directed retry across vote buckets)
|
| 109 |
Schema Recall@5: 100.0%
|
| 110 |
SQL Validity Rate: 100.0%
|
| 111 |
+
First-pass / Final EA: 47.0 / 79.0 (codestral A baseline → final)
|
| 112 |
Latency P50 / P95: ~65 ms cache-hit / dozens of seconds on Sonnet-rescued tier
|
| 113 |
Cost per query: $0 (Mistral free + Groq free + Perplexity Pro browser bridge)
|
| 114 |
```
|
| 115 |
|
| 116 |
+
Per-bucket lifts that compose the 79.0% headline:
|
| 117 |
|
| 118 |
```
|
| 119 |
A (codestral full_schema) 47.0% baseline
|
|
|
|
| 128 |
+ Mistral self-consistency 72.5% +0.5pp
|
| 129 |
+ Sonnet rescue on frozen-fail tail 77.0% +4.5pp (9 rescues, 0 regressions)
|
| 130 |
+ selective fewshot_top_k=5 on residue 77.5% +0.5pp (1 rescue / 0 regressions, qid=1500)
|
| 131 |
+
+ cross-Groq voting on residue (llama3.3-70b+qwen3) 79.0% +1.5pp (3 rescues / 0 regressions, qids 219+352+366)
|
| 132 |
```
|
| 133 |
|
| 134 |
**Selective fewshot expansion note:** глобальный `fewshot_top_k=5` (вместо
|
|
|
|
| 308 |
| G + Sonnet challenging hybrid | 57.0% | 71.6% | 53.5% | 38.2% |
|
| 309 |
| + multi-vote + grounded-critique + selfcon | 72.5% | 86.6% | 70.7% | 55.9% |
|
| 310 |
| + Sonnet rescue on frozen-fail tail | 77.0% | 88.1% | 74.7% | 61.8% |
|
| 311 |
+
| + selective fewshot_top_k=5 on residue | 77.5% | 89.6% | 74.7% | 61.8% |
|
| 312 |
+
| **+ cross-Groq llama3.3-70b + qwen3 voting (final)** | **79.0%** | **91.0%** | **75.8%** | **64.7%** |
|
| 313 |
| Reference: GPT-4 zero-shot (BIRD paper) | 47.8% | — | — | — |
|
| 314 |
| Reference: paid SOTA CHESS/Distillery 2024 | 73–76% | — | — | — |
|
| 315 |
|
| 316 |
+
Final shipped configuration matches `eval/reports/2026-05-17/hybrid-vote-critique-selfcon-sonnet-fewshot5-groq3-v8.json` — see also memory note `project_nl_sql_quality_push`.
|
| 317 |
|
| 318 |
Config B (BM25 cards) is intentionally absent from the shipped pipeline — dense retrieval (config C) was strictly superior in pilot runs and BM25 would only widen the prompt with no recall lift. `Configuration.B_BM25` enum and `run_config_b` (NotImplementedError) are kept so the A–E ladder reads as documented, but the production path is A → C → D → G → hybrid → voting/critique/selfcon → Sonnet rescue.
|
| 319 |
|
docs/NEXT_SESSION.md
CHANGED
|
@@ -3,87 +3,76 @@
|
|
| 3 |
> Один лист, без воды. Берёшь, делаешь, обновляешь `SESSION_HANDOFF.md`,
|
| 4 |
> удаляешь этот файл (или переписываешь под следующий sprint).
|
| 5 |
|
| 6 |
-
## Контекст на 2026-05-17
|
| 7 |
-
|
| 8 |
-
- HEAD `
|
| 9 |
-
- BIRD Mini-Dev n=200: **
|
| 10 |
-
-
|
| 11 |
-
-
|
| 12 |
-
-
|
| 13 |
-
-
|
| 14 |
-
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
7860`) + Dockerfile (`python:3.12-slim`, `pip -r requirements.txt`,
|
| 25 |
-
`streamlit run app/streamlit_app.py --server.port 7860`).
|
| 26 |
-
|
| 27 |
-
Streamlit Cloud не пошёл (требует Gmail OAuth, у Юлии не открывается),
|
| 28 |
-
Fly.io/Railway/Render не пошли (sign-up через email OAuth). HF — у
|
| 29 |
-
Юлии уже залогинен (`liovina`, token в `~/.cache/huggingface/token`),
|
| 30 |
-
поэтому весь deploy ушёл headless без единого клика.
|
| 31 |
-
|
| 32 |
-
Repush после правок: повторить `uv run python .deploy_hf.py` — `exist_ok`
|
| 33 |
-
+ idempotent upload_folder корректно перезаписывают Space.
|
| 34 |
-
|
| 35 |
-
## P1 — портфолио-материалы под новый UI
|
| 36 |
-
|
| 37 |
-
Хороший shot нового UI = sellable артефакт. Конкретно:
|
| 38 |
-
|
| 39 |
-
1. ~~**Один screenshot EN + один RU** под hero-section какого-нибудь
|
| 40 |
-
проектного проф-сайта или LinkedIn. 1440×900 viewport, default DB
|
| 41 |
-
`bird_california_schools`, без открытых expanders. Сохранить под
|
| 42 |
-
`docs/ui-2026-05-13-{en,ru}.png` и привязать в README.~~ **Закрыто
|
| 43 |
-
2026-05-17:** `docs/ui-2026-05-17-{en,ru}.png` сняты через Playwright
|
| 44 |
-
headless Streamlit, привязаны в README hero-секции.
|
| 45 |
-
2. **Короткий AutoReel-ролик** (`D:\AutoReel\`) с тремя shots:
|
| 46 |
-
(a) headline + metric block,
|
| 47 |
-
(b) sample-click → answer render,
|
| 48 |
-
(c) language toggle EN→RU.
|
| 49 |
-
Memory `feedback_real_product_over_mockup` говорит: реальная запись
|
| 50 |
-
экрана > HTML-template для проектов с live demo. Если P0 закрыт и
|
| 51 |
-
live URL есть — записывай live URL, не localhost.
|
| 52 |
-
|
| 53 |
-
## P2 — quality push past 77% (если есть желание)
|
| 54 |
-
|
| 55 |
-
Остаток 46 фейлов: 22 row_count_off + 14 filter_or_value + 6 order_by_off
|
| 56 |
-
+ 4 errors. Все «потолочные» — codestral + Sonnet согласуются на
|
| 57 |
-
неверном результате. Реальные рычаги:
|
| 58 |
-
|
| 59 |
-
| Эксперимент | Ожидание | Стоимость |
|
| 60 |
-
|---|---|---|
|
| 61 |
-
| **GraceKelly: GPT-5.4 на остатке через Perplexity bridge** | +1-3pp; ортогональный к Sonnet, может закрыть другие фейлы | $0 wall, ~50 мин |
|
| 62 |
-
| **BIRD train fewshot expansion** (top_k=5 на failures with `enable_grounded_critique`) | +0-2pp; раньше top_k=5 давал -1pp при глобальном применении, но selective может сыграть | $0 wall, 5 мин |
|
| 63 |
-
| **Question rephrasing through Sonnet → re-feed pipeline** | +0-3pp; BIRD-style формализация вопроса, потом codestral пытается ещё раз | $0 wall, ~50 мин |
|
| 64 |
-
| **Hard fail: row_count_off через explicit JOIN-path hint** | +5-10pp ceiling lift, но требует custom schema-linker (research-grade work, не sprint) | дни-недели |
|
| 65 |
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
- Anthropic API direct — out of $0 budget.
|
| 68 |
-
- Wide-schema retry —
|
| 69 |
- Column-count critique — empirically бесполезен (0/19 mismatch).
|
| 70 |
- Same-model self-consistency — plateau.
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
-
##
|
| 73 |
|
| 74 |
-
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
Все три — P1 medium, не блокеры; брать вместе с P0 deploy если будет
|
| 79 |
-
CI-time.
|
| 80 |
|
| 81 |
-
##
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
|
| 83 |
-
-
|
| 84 |
-
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
-
|
| 89 |
-
Chrome-профиль свободен (memory `feedback_user_chrome_assumption`).
|
|
|
|
| 3 |
> Один лист, без воды. Берёшь, делаешь, обновляешь `SESSION_HANDOFF.md`,
|
| 4 |
> удаляешь этот файл (или переписываешь под следующий sprint).
|
| 5 |
|
| 6 |
+
## Контекст на 2026-05-17 EOS
|
| 7 |
+
|
| 8 |
+
- HEAD `e0ea5ad` (после 9370070 + P2.B fewshot5-residue lift + HF Dockerfile fix)
|
| 9 |
+
- BIRD Mini-Dev n=200: **79.0% EA** (158/200), per tier 91.0/75.8/64.7 (v8 = v7 + cross-Groq llama-3.3-70b + qwen3-32b voting на residue, +3 rescues qids 219+352+366)
|
| 10 |
+
- **Live demo:** <https://liovina-nl-sql.hf.space> RUNNING, headline 79.0% / 200
|
| 11 |
+
- 270 pytest pass, ruff + mypy strict clean (55 source files)
|
| 12 |
+
- Streamlit UI editorial monochrome + EN/RU (закрыто 2026-05-13)
|
| 13 |
+
- Portfolio screenshots: `docs/ui-2026-05-17-{en,ru}.png` (local Streamlit) + `docs/ui-live-en.png` (live HF)
|
| 14 |
+
- P2.B + P0 deploy closed автономно 2026-05-17
|
| 15 |
+
|
| 16 |
+
## P1 — оставшийся портфолио-материал
|
| 17 |
+
|
| 18 |
+
1. ~~Screenshots EN+RU local Streamlit~~ ✓ закрыто 2026-05-17.
|
| 19 |
+
2. **Короткий live-URL ролик** (`D:\AutoReel\` шаблон ИЛИ Playwright video record):
|
| 20 |
+
- shot A: hero (headline 77.5% + metric block)
|
| 21 |
+
- shot B: sample-click → SQL + answer render
|
| 22 |
+
- shot C: EN→RU toggle
|
| 23 |
+
- **Источник: live URL** (`https://liovina-nl-sql.hf.space`), не localhost — memory `feedback_real_product_over_mockup`.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
+
## P2/P3 — quality push past 79.0% ($0 budget)
|
| 26 |
+
|
| 27 |
+
Остаток **42 фейла** (после v8): 22 row_count_off + 13 filter_or_value + 5 order_by_off + 2 errors.
|
| 28 |
+
|
| 29 |
+
| Эксперимент | Статус | Ожидание |
|
| 30 |
+
|---|---|---|
|
| 31 |
+
| Selective `fewshot_top_k=5` on residue | **✓ done v7** (+0.5pp, qid=1500 simple) | — |
|
| 32 |
+
| Cross-Groq voting (llama3.3-70b + qwen3) | **✓ done v8** (+1.5pp, qids 219+352+366) | — |
|
| 33 |
+
| Mistral-large voting on residue | **✗ negative** (TPD/TPM limits — 18 attempted, all same; structural failures unanimous across Mistral models) | — |
|
| 34 |
+
| Wide-schema retry on row_count_off | **✗ negative** (0/20 rescues с critique tоо) | — |
|
| 35 |
+
| codestral fewshot_top_k=7 | **✗ negative** (0/45, top_k=5 насыщает) | — |
|
| 36 |
+
| gpt-oss-120b throttled voting | **✗ TPM limits** (0/24 rescues, prompts 8.5K > 8K TPM gives 413; первая попытка с fewshot=5 ранее дала +1 rescue qid=571, но воспроизвести не вышло — fewshot=3 теряет critical context для cases) | — |
|
| 37 |
+
| GraceKelly: GPT-5.4 via Perplexity bridge | **OPEN** (P3.D) | +1-3pp ортогональный к Sonnet. **Гейт:** Chrome profile свободен. |
|
| 38 |
+
| Question rephrasing through Sonnet → re-feed | **OPEN** (P3.E) | +0-3pp. **Гейт:** GraceKelly bridge live. |
|
| 39 |
+
| row_count_off через explicit JOIN-path hint (custom schema-linker) | **research-grade** (P3.F) | +5-10pp ceiling lift, дни-недели работы. |
|
| 40 |
+
| llama-3.3-70b TPD reset retry | **OPEN** | TPD resets ~24h. На v8-residue ещё 30 unattempted; ожидаемо +0-2pp. |
|
| 41 |
+
|
| 42 |
+
**Не повторять:**
|
| 43 |
- Anthropic API direct — out of $0 budget.
|
| 44 |
+
- Wide-schema retry — saturated (повторно подтверждено в 2026-05-17 night).
|
| 45 |
- Column-count critique — empirically бесполезен (0/19 mismatch).
|
| 46 |
- Same-model self-consistency — plateau.
|
| 47 |
+
- Mistral-large voting — 2026-05-17 EOS+night зафиксирован negative.
|
| 48 |
+
- codestral fewshot_top_k=7 — 0/45 на v7-residue, top_k=5 саtuрated.
|
| 49 |
+
- gpt-oss-120b voting — TPM 8K жёстко режет, prompts с critique=10K+; нужны без-critique runs (но они теряют lift signal).
|
| 50 |
|
| 51 |
+
## Что НЕ делать
|
| 52 |
|
| 53 |
+
- Не редизайнить UI. Зафиксирован 2026-05-13.
|
| 54 |
+
- Не коммитить `chroma_data/` byte-level drift от смок-запусков.
|
| 55 |
+
- Не запускать GraceKelly `dry-run → hybrid` без подтверждения, что Chrome-профиль свободен (memory `feedback_user_chrome_assumption`).
|
| 56 |
+
- Не пробовать Mistral-large снова на residue без throttling — free tier даёт ≤2 req/sec, скрипту нужен `--sleep-between` arg.
|
|
|
|
|
|
|
| 57 |
|
| 58 |
+
## Quick start если хочется быстрого win
|
| 59 |
+
|
| 60 |
+
```bash
|
| 61 |
+
# Repush HF Space после правок (idempotent, ~90s до RUNNING):
|
| 62 |
+
uv run python .deploy_hf.py
|
| 63 |
+
|
| 64 |
+
# Gate:
|
| 65 |
+
uv run pytest -q && uv run ruff check src tests scripts app && uv run mypy --strict src
|
| 66 |
+
|
| 67 |
+
# Local Streamlit (cache-warm UI):
|
| 68 |
+
make ui
|
| 69 |
+
```
|
| 70 |
+
|
| 71 |
+
## Deploy quick reference
|
| 72 |
|
| 73 |
+
- Live URL: <https://liovina-nl-sql.hf.space>
|
| 74 |
+
- Dashboard: <https://huggingface.co/spaces/liovina/nl-sql>
|
| 75 |
+
- Deploy script: `.deploy_hf.py` (gitignored)
|
| 76 |
+
- HF Dockerfile template: `.tmp/hf_Dockerfile` (важно: `ENV PYTHONPATH=/app/src` для src layout)
|
| 77 |
+
- Mistral key: `D:/TXT/Mistral_API.txt`
|
| 78 |
+
- Полный runbook: `docs/SESSION_HANDOFF.md § Deploy — DONE`
|
|
|
docs/SESSION_HANDOFF.md
CHANGED
|
@@ -1,4 +1,19 @@
|
|
| 1 |
-
# NL_SQL — Session Handoff (2026-05-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2 |
|
| 3 |
> Read this first when picking up. It's the single source of truth for
|
| 4 |
> "where we stopped" and "what to do next". When you take action, update
|
|
|
|
| 1 |
+
# NL_SQL — Session Handoff (2026-05-17 EOS: 77.5% BIRD + live HF Space + autonomous deploy/lift sprint)
|
| 2 |
+
|
| 3 |
+
> **Tl;dr 2026-05-17 EOS:** P0 closed (live demo on HF Spaces, headless API
|
| 4 |
+
> deploy), P2.B closed (+1 selective fewshot rescue → 77.5% n=200). Full
|
| 5 |
+
> gate green: 270 pytest, ruff + mypy strict clean. Mistral-large voting
|
| 6 |
+
> on residue tried → negative (rate-limit + structural agreement with
|
| 7 |
+
> codestral). Open: P2.A (GraceKelly GPT-5.4) and P2.C (Sonnet
|
| 8 |
+
> rephrasing) gated on Chrome profile confirmation; P2.D (custom
|
| 9 |
+
> schema-linker for row_count_off) research-grade.
|
| 10 |
+
>
|
| 11 |
+
> Read `docs/NEXT_SESSION.md` for the action list and historic context
|
| 12 |
+
> in this file below.
|
| 13 |
+
|
| 14 |
+
---
|
| 15 |
+
|
| 16 |
+
# Historic handoff: 2026-05-13 (multi-vote + grounded-critique + Sonnet bridge + UI redesign → 77.0% BIRD)
|
| 17 |
|
| 18 |
> Read this first when picking up. It's the single source of truth for
|
| 19 |
> "where we stopped" and "what to do next". When you take action, update
|
docs/ui-live-en.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
eval/reports/2026-05-17/groq-gptoss120b-throttled-on-v7.json
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"alt_model": "groq:openai/gpt-oss-120b+grounded_critique+fewshot3",
|
| 3 |
+
"summary": {
|
| 4 |
+
"voted_better": 0,
|
| 5 |
+
"voted_worse": 0,
|
| 6 |
+
"voted_same": 24
|
| 7 |
+
},
|
| 8 |
+
"records": [
|
| 9 |
+
{
|
| 10 |
+
"question_id": 25,
|
| 11 |
+
"db_id": "california_schools",
|
| 12 |
+
"difficulty": "moderate",
|
| 13 |
+
"question": "Name schools in Riverside which the average of average math score for SAT is grater than 400, what is the funding type of these schools?",
|
| 14 |
+
"gold_sql": "SELECT T1.sname, T2.`Charter Funding Type` FROM satscores AS T1 INNER JOIN frpm AS T2 ON T1.cds = T2.CDSCode WHERE T2.`District Name` LIKE 'Riverside%' GROUP BY T1.sname, T2.`Charter Funding Type` HAVING CAST(SUM(T1.AvgScrMath) AS REAL) / COUNT(T1.cds) > 400",
|
| 15 |
+
"baseline_pred": "SELECT s.FundingType FROM schools AS s JOIN satscores AS t ON s.CDSCode = t.cds WHERE s.City = 'Riverside' AND t.AvgScrMath > 400 GROUP BY s.FundingType HAVING AVG(t.AvgScrMath) > 400",
|
| 16 |
+
"alt_pred": "SELECT s.School, s.FundingType FROM schools s JOIN satscores ss ON s.CDSCode = ss.cds WHERE s.County = 'Riverside' AND ss.AvgScrMath > 400",
|
| 17 |
+
"alt_confidence": 0.93,
|
| 18 |
+
"baseline_match": false,
|
| 19 |
+
"alt_match": false,
|
| 20 |
+
"vote_match": false,
|
| 21 |
+
"vote_source": "critique-retry",
|
| 22 |
+
"elapsed_ms": 37344.45269999924
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"question_id": 37,
|
| 26 |
+
"db_id": "california_schools",
|
| 27 |
+
"difficulty": "moderate",
|
| 28 |
+
"question": "What is the complete address of the school with the lowest excellence rate? Indicate the Street, City, Zip and State.",
|
| 29 |
+
"gold_sql": "SELECT T2.Street, T2.City, T2.State, T2.Zip FROM satscores AS T1 INNER JOIN schools AS T2 ON T1.cds = T2.CDSCode ORDER BY CAST(T1.NumGE1500 AS REAL) / T1.NumTstTakr ASC LIMIT 1",
|
| 30 |
+
"baseline_pred": "SELECT Street, City, Zip, State FROM schools WHERE CDSCode = (SELECT cds FROM satscores WHERE NumTstTakr > 0 ORDER BY (NumGE1500 * 1.0 / NumTstTakr) ASC LIMIT 1)",
|
| 31 |
+
"alt_pred": "SELECT s.\"Street\", s.\"City\", s.\"Zip\", s.\"State\" FROM satscores AS ss JOIN schools AS s ON ss.cds = s.CDSCode ORDER BY (ss.NumGE1500*1.0)/NULLIF(ss.NumTstTakr,0) ASC LIMIT 1",
|
| 32 |
+
"alt_confidence": 0.93,
|
| 33 |
+
"baseline_match": false,
|
| 34 |
+
"alt_match": false,
|
| 35 |
+
"vote_match": false,
|
| 36 |
+
"vote_source": "critique-retry",
|
| 37 |
+
"elapsed_ms": 38318.087799998466
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"question_id": 77,
|
| 41 |
+
"db_id": "california_schools",
|
| 42 |
+
"difficulty": "moderate",
|
| 43 |
+
"question": "Which schools served a grade span of Kindergarten to 9th grade in the county of Los Angeles and what is its Percent (%) Eligible FRPM (Ages 5-17)?",
|
| 44 |
+
"gold_sql": "SELECT T2.School, T1.`FRPM Count (Ages 5-17)` * 100 / T1.`Enrollment (Ages 5-17)` FROM frpm AS T1 INNER JOIN schools AS T2 ON T1.CDSCode = T2.CDSCode WHERE T2.County = 'Los Angeles' AND T2.GSserved = 'K-9'",
|
| 45 |
+
"baseline_pred": "SELECT f.`School Name`, (f.`FRPM Count (Ages 5-17)` / f.`Enrollment (Ages 5-17)`) * 100 AS `Percent (%) Eligible FRPM (Ages 5-17)` FROM frpm f JOIN schools s ON f.CDSCode = s.CDSCode WHERE f.`County Name` = 'Los Angeles' AND f.`Low Grade` = 'K' AND f.`High Grade` = '9'",
|
| 46 |
+
"alt_pred": "SELECT \"School Name\", CASE WHEN \"Enrollment (Ages 5-17)\" > 0 THEN (\"FRPM Count (Ages 5-17)\" / \"Enrollment (Ages 5-17)\" ) * 100 END AS \"Percent (%) Eligible FRPM (Ages 5-17)\" FROM frpm WHERE \"County Name\" = 'Los Angeles' AND \"Low Grade\" = 'K' AND \"High Grade\" LIKE '9%'",
|
| 47 |
+
"alt_confidence": 0.86,
|
| 48 |
+
"baseline_match": false,
|
| 49 |
+
"alt_match": false,
|
| 50 |
+
"vote_match": false,
|
| 51 |
+
"vote_source": "critique-retry",
|
| 52 |
+
"elapsed_ms": 36778.51229999942
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"question_id": 173,
|
| 56 |
+
"db_id": "financial",
|
| 57 |
+
"difficulty": "challenging",
|
| 58 |
+
"question": "How often does account number 3 request an account statement to be released? What was the aim of debiting 3539 in total?",
|
| 59 |
+
"gold_sql": "SELECT T1.frequency, T2.k_symbol FROM account AS T1 INNER JOIN (SELECT account_id, k_symbol, SUM(amount) AS total_amount FROM `order` GROUP BY account_id, k_symbol) AS T2 ON T1.account_id = T2.account_id WHERE T1.account_id = 3 AND T2.total_amount = 3539",
|
| 60 |
+
"baseline_pred": "SELECT COUNT(*) AS frequency, k_symbol AS purpose FROM trans WHERE account_id = 3 AND type = 'VYDAJ' AND k_symbol = 'SLUZBY' GROUP BY k_symbol",
|
| 61 |
+
"alt_pred": "SELECT (SELECT COUNT(*) FROM \"trans\" WHERE \"account_id\" = 3 AND \"k_symbol\" LIKE '%statement%') AS request_count, (SELECT GROUP_CONCAT(DISTINCT \"k_symbol\") FROM \"trans\" WHERE \"amount\" = 3539 AND \"type\" = 'VYBER') AS purpose",
|
| 62 |
+
"alt_confidence": 0.52,
|
| 63 |
+
"baseline_match": false,
|
| 64 |
+
"alt_match": false,
|
| 65 |
+
"vote_match": false,
|
| 66 |
+
"vote_source": "critique-retry",
|
| 67 |
+
"elapsed_ms": 36308.96419999954
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"question_id": 207,
|
| 71 |
+
"db_id": "toxicology",
|
| 72 |
+
"difficulty": "challenging",
|
| 73 |
+
"question": "What elements are in a double type bond?",
|
| 74 |
+
"gold_sql": "SELECT DISTINCT T1.element FROM atom AS T1 INNER JOIN bond AS T2 ON T1.molecule_id = T2.molecule_id INNER JOIN connected AS T3 ON T1.atom_id = T3.atom_id WHERE T2.bond_type = '='",
|
| 75 |
+
"baseline_pred": "SELECT DISTINCT a.element FROM atom a JOIN bond b ON a.molecule_id = b.molecule_id JOIN connected c ON b.bond_id = c.bond_id WHERE b.bond_type = '='",
|
| 76 |
+
"alt_pred": "SELECT DISTINCT a.element FROM atom AS a JOIN connected AS c ON a.atom_id = c.atom_id OR a.atom_id = c.atom_id2 JOIN bond AS b ON c.bond_id = b.bond_id WHERE b.bond_type = '='",
|
| 77 |
+
"alt_confidence": 0.99,
|
| 78 |
+
"baseline_match": false,
|
| 79 |
+
"alt_match": false,
|
| 80 |
+
"vote_match": false,
|
| 81 |
+
"vote_source": "critique-retry",
|
| 82 |
+
"elapsed_ms": 13758.136599999489
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"question_id": 219,
|
| 86 |
+
"db_id": "toxicology",
|
| 87 |
+
"difficulty": "challenging",
|
| 88 |
+
"question": "What is the percentage of carcinogenic molecules in triple type bonds?",
|
| 89 |
+
"gold_sql": "SELECT CAST(COUNT(DISTINCT CASE WHEN T2.label = '+' THEN T2.molecule_id ELSE NULL END) AS REAL) * 100 / COUNT(DISTINCT T2.molecule_id) FROM atom AS T1 INNER JOIN molecule AS T2 ON T1.molecule_id = T2.molecule_id INNER JOIN bond AS T3 ON T2.molecule_id = T3.molecule_id WHERE T3.bond_type = '#'",
|
| 90 |
+
"baseline_pred": "SELECT CAST(SUM(CASE WHEN b.bond_type = '#' THEN 1 ELSE 0 END) AS REAL) * 100.0 / COUNT(b.bond_id) FROM bond b INNER JOIN atom a ON b.molecule_id = a.molecule_id INNER JOIN molecule m ON a.molecule_id = m.molecule_id WHERE m.label = '+'",
|
| 91 |
+
"alt_pred": "SELECT (CAST(SUM(CASE WHEN \"bond\".\"bond_type\" = '#' THEN 1 ELSE 0 END) AS REAL) * 100.0) / COUNT(\"bond\".\"bond_id\") AS percent FROM \"bond\" JOIN \"molecule\" ON \"bond\".\"molecule_id\" = \"molecule\".\"molecule_id\" WHERE \"molecule\".\"label\" = '+'",
|
| 92 |
+
"alt_confidence": 0.98,
|
| 93 |
+
"baseline_match": false,
|
| 94 |
+
"alt_match": false,
|
| 95 |
+
"vote_match": false,
|
| 96 |
+
"vote_source": "critique-retry",
|
| 97 |
+
"elapsed_ms": 5612.1505000010075
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"question_id": 571,
|
| 101 |
+
"db_id": "codebase_community",
|
| 102 |
+
"difficulty": "moderate",
|
| 103 |
+
"question": "For the user No.24, how many times is the number of his/her posts compared to his/her votes?",
|
| 104 |
+
"gold_sql": "SELECT CAST(COUNT(DISTINCT T2.Id) AS REAL) / COUNT(DISTINCT T1.Id) FROM votes AS T1 INNER JOIN posts AS T2 ON T1.UserId = T2.OwnerUserId WHERE T1.UserId = 24",
|
| 105 |
+
"baseline_pred": "SELECT CAST(COUNT(DISTINCT p.Id) AS REAL) / NULLIF(COUNT(DISTINCT v.Id), 0) AS post_to_vote_ratio FROM posts p LEFT JOIN votes v ON p.Id = v.PostId WHERE p.OwnerUserId = 24",
|
| 106 |
+
"alt_pred": "SELECT (COUNT(DISTINCT \"posts\".\"Id\") * 1.0) / NULLIF(COUNT(\"votes\".\"Id\"),0) AS ratio FROM \"posts\" LEFT JOIN \"votes\" ON \"posts\".\"Id\" = \"votes\".\"PostId\" WHERE \"posts\".\"OwnerUserId\" = 24",
|
| 107 |
+
"alt_confidence": 0.99,
|
| 108 |
+
"baseline_match": false,
|
| 109 |
+
"alt_match": false,
|
| 110 |
+
"vote_match": false,
|
| 111 |
+
"vote_source": "critique-retry",
|
| 112 |
+
"elapsed_ms": 2342.348399999537
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"question_id": 584,
|
| 116 |
+
"db_id": "codebase_community",
|
| 117 |
+
"difficulty": "moderate",
|
| 118 |
+
"question": "Write all the comments left by users who edited the post titled 'Why square the difference instead of taking the absolute value in standard deviation?'",
|
| 119 |
+
"gold_sql": "SELECT T2.Comment FROM posts AS T1 INNER JOIN postHistory AS T2 ON T1.Id = T2.PostId WHERE T1.Title = 'Why square the difference instead of taking the absolute value in standard deviation?'",
|
| 120 |
+
"baseline_pred": "SELECT comments.Text FROM comments JOIN posts ON comments.PostId = posts.Id WHERE posts.Title = 'Why square the difference instead of taking the absolute value in standard deviation?'",
|
| 121 |
+
"alt_pred": "SELECT \"Text\" FROM \"comments\" WHERE \"UserId\" IN (SELECT DISTINCT \"UserId\" FROM \"postHistory\" WHERE \"PostId\" = (SELECT \"Id\" FROM \"posts\" WHERE \"Title\" = 'Why square the difference instead of taking the absolute value in standard deviation?') AND \"UserId\" IS NOT NULL)",
|
| 122 |
+
"alt_confidence": 0.9,
|
| 123 |
+
"baseline_match": false,
|
| 124 |
+
"alt_match": false,
|
| 125 |
+
"vote_match": false,
|
| 126 |
+
"vote_source": "critique-retry",
|
| 127 |
+
"elapsed_ms": 28731.873999999152
|
| 128 |
+
},
|
| 129 |
+
{
|
| 130 |
+
"question_id": 595,
|
| 131 |
+
"db_id": "codebase_community",
|
| 132 |
+
"difficulty": "moderate",
|
| 133 |
+
"question": "Which user have only one post history per post and having at least 1000 views?",
|
| 134 |
+
"gold_sql": "SELECT T2.UserId FROM users AS T1 INNER JOIN postHistory AS T2 ON T1.Id = T2.UserId INNER JOIN posts AS T3 ON T2.PostId = T3.Id WHERE T3.ViewCount >= 1000 GROUP BY T2.UserId HAVING COUNT(DISTINCT T2.PostHistoryTypeId) = 1",
|
| 135 |
+
"baseline_pred": "SELECT DISTINCT ph.UserId FROM postHistory ph JOIN posts p ON ph.PostId = p.Id WHERE p.ViewCount >= 1000 AND ph.UserId IS NOT NULL GROUP BY ph.UserId, ph.PostId HAVING COUNT(*) = 1",
|
| 136 |
+
"alt_pred": "SELECT DISTINCT u.UserId FROM (SELECT UserId FROM postHistory GROUP BY UserId HAVING COUNT(*) = COUNT(DISTINCT PostId)) u JOIN postHistory ph ON ph.UserId = u.UserId JOIN posts p ON ph.PostId = p.Id WHERE p.ViewCount >= 1000",
|
| 137 |
+
"alt_confidence": 0.78,
|
| 138 |
+
"baseline_match": false,
|
| 139 |
+
"alt_match": false,
|
| 140 |
+
"vote_match": false,
|
| 141 |
+
"vote_source": "critique-retry",
|
| 142 |
+
"elapsed_ms": 42098.9497999999
|
| 143 |
+
},
|
| 144 |
+
{
|
| 145 |
+
"question_id": 672,
|
| 146 |
+
"db_id": "codebase_community",
|
| 147 |
+
"difficulty": "moderate",
|
| 148 |
+
"question": "Among the users located in United Kingdom, how many users whose post have a total favorite amount of 4 or more?",
|
| 149 |
+
"gold_sql": "SELECT COUNT(T1.Id) FROM users AS T1 INNER JOIN posts AS T2 ON T1.Id = T2.OwnerUserId WHERE T1.Location = 'United Kingdom' AND T2.FavoriteCount >= 4",
|
| 150 |
+
"baseline_pred": "SELECT COUNT(DISTINCT u.Id) FROM users u JOIN posts p ON u.Id = p.OwnerUserId WHERE u.Location = 'United Kingdom' AND p.FavoriteCount >= 4",
|
| 151 |
+
"alt_pred": "SELECT COUNT(*) FROM (SELECT u.Id FROM users u JOIN posts p ON p.OwnerUserId = u.Id WHERE u.Location = 'United Kingdom' GROUP BY u.Id HAVING SUM(COALESCE(p.FavoriteCount,0)) >= 4) sub",
|
| 152 |
+
"alt_confidence": 0.78,
|
| 153 |
+
"baseline_match": false,
|
| 154 |
+
"alt_match": false,
|
| 155 |
+
"vote_match": false,
|
| 156 |
+
"vote_source": "critique-retry",
|
| 157 |
+
"elapsed_ms": 29584.98480000162
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"question_id": 694,
|
| 161 |
+
"db_id": "codebase_community",
|
| 162 |
+
"difficulty": "moderate",
|
| 163 |
+
"question": "Provide the text of the latest 10 comments to the post with the title 'Analysing wind data with R' and the display name of the user who left it.",
|
| 164 |
+
"gold_sql": "SELECT T3.Text, T1.DisplayName FROM users AS T1 INNER JOIN posts AS T2 ON T1.Id = T2.OwnerUserId INNER JOIN comments AS T3 ON T2.Id = T3.PostId WHERE T2.Title = 'Analysing wind data with R' ORDER BY T1.CreationDate DESC LIMIT 10",
|
| 165 |
+
"baseline_pred": "SELECT comments.Text, comments.UserDisplayName FROM comments JOIN posts ON comments.PostId = posts.Id WHERE posts.Title = 'Analysing wind data with R' ORDER BY comments.CreationDate DESC LIMIT 10",
|
| 166 |
+
"alt_pred": "SELECT c.Text, u.DisplayName FROM comments AS c JOIN posts AS p ON c.PostId = p.Id LEFT JOIN users AS u ON c.UserId = u.Id WHERE p.Title = 'Analysing wind data with R' ORDER BY c.CreationDate DESC LIMIT 10",
|
| 167 |
+
"alt_confidence": 0.97,
|
| 168 |
+
"baseline_match": false,
|
| 169 |
+
"alt_match": false,
|
| 170 |
+
"vote_match": false,
|
| 171 |
+
"vote_source": "critique-retry",
|
| 172 |
+
"elapsed_ms": 35489.011700001356
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"question_id": 743,
|
| 176 |
+
"db_id": "superhero",
|
| 177 |
+
"difficulty": "challenging",
|
| 178 |
+
"question": "What is the percentage of superheroes who act in their own self-interest or make decisions based on their own moral code? Indicate how many of the said superheroes were published by Marvel Comics.",
|
| 179 |
+
"gold_sql": "SELECT (CAST(COUNT(*) AS REAL) * 100 / (SELECT COUNT(*) FROM superhero)), CAST(SUM(CASE WHEN T2.publisher_name = 'Marvel Comics' THEN 1 ELSE 0 END) AS REAL) FROM superhero AS T1 INNER JOIN publisher AS T2 ON T1.publisher_id = T2.id INNER JOIN alignment AS T3 ON T3.id = T1.alignment_id WHERE T3.alignment = 'Bad'",
|
| 180 |
+
"baseline_pred": "SELECT CAST(SUM(CASE WHEN a.alignment = 'Bad' THEN 1 ELSE 0 END) AS REAL) * 100 / COUNT(s.id) AS percentage, SUM(CASE WHEN a.alignment = 'Bad' AND p.publisher_name = 'Marvel Comics' THEN 1 ELSE 0 END) FROM superhero s INNER JOIN alignment a ON s.alignment_id = a.id LEFT JOIN publisher p ON s.publisher_id = p.id",
|
| 181 |
+
"alt_pred": "SELECT CAST(SUM(CASE WHEN a.alignment = 'Bad' THEN 1 ELSE 0 END) AS REAL) * 100.0 / COUNT(*) AS percentage, SUM(CASE WHEN a.alignment = 'Bad' AND p.publisher_name = 'Marvel Comics' THEN 1 ELSE 0 END) AS marvel_bad_count FROM superhero s LEFT JOIN alignment a ON s.alignment_id = a.id LEFT JOIN publisher p ON s.publisher_id = p.id",
|
| 182 |
+
"alt_confidence": 0.98,
|
| 183 |
+
"baseline_match": false,
|
| 184 |
+
"alt_match": false,
|
| 185 |
+
"vote_match": false,
|
| 186 |
+
"vote_source": "critique-retry",
|
| 187 |
+
"elapsed_ms": 21804.846799999723
|
| 188 |
+
},
|
| 189 |
+
{
|
| 190 |
+
"question_id": 866,
|
| 191 |
+
"db_id": "formula_1",
|
| 192 |
+
"difficulty": "moderate",
|
| 193 |
+
"question": "Who was the player that got the lap time of 0:01:27 in the race No. 161? Show his introduction website.",
|
| 194 |
+
"gold_sql": "SELECT DISTINCT T2.forename, T2.surname, T2.url FROM lapTimes AS T1 INNER JOIN drivers AS T2 ON T2.driverId = T1.driverId WHERE T1.raceId = 161 AND T1.time LIKE '1:27%'",
|
| 195 |
+
"baseline_pred": "SELECT drivers.url FROM lapTimes JOIN drivers ON lapTimes.driverId = drivers.driverId WHERE lapTimes.raceId = 161 AND lapTimes.time LIKE '1:27%'",
|
| 196 |
+
"alt_pred": "SELECT DISTINCT drivers.url FROM lapTimes JOIN drivers ON lapTimes.driverId = drivers.driverId WHERE lapTimes.raceId = 161 AND lapTimes.time LIKE '1:27%'",
|
| 197 |
+
"alt_confidence": 0.95,
|
| 198 |
+
"baseline_match": false,
|
| 199 |
+
"alt_match": false,
|
| 200 |
+
"vote_match": false,
|
| 201 |
+
"vote_source": "critique-retry",
|
| 202 |
+
"elapsed_ms": 31899.09280000029
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"question_id": 894,
|
| 206 |
+
"db_id": "formula_1",
|
| 207 |
+
"difficulty": "moderate",
|
| 208 |
+
"question": "What is the best lap time recorded? List the driver and race with such recorded lap time.",
|
| 209 |
+
"gold_sql": "SELECT T2.milliseconds, T1.forename, T1.surname, T3.name FROM drivers AS T1 INNER JOIN lapTimes AS T2 ON T1.driverId = T2.driverId INNER JOIN races AS T3 ON T2.raceId = T3.raceId ORDER BY T2.milliseconds ASC LIMIT 1",
|
| 210 |
+
"baseline_pred": "SELECT drivers.forename, drivers.surname, races.name FROM lapTimes JOIN drivers ON lapTimes.driverId = drivers.driverId JOIN races ON lapTimes.raceId = races.raceId WHERE lapTimes.milliseconds = (SELECT MIN(milliseconds) FROM lapTimes) LIMIT 1",
|
| 211 |
+
"alt_pred": "SELECT drivers.forename, drivers.surname, races.name FROM lapTimes JOIN drivers ON lapTimes.driverId = drivers.driverId JOIN races ON lapTimes.raceId = races.raceId WHERE lapTimes.milliseconds = (SELECT MIN(milliseconds) FROM lapTimes)",
|
| 212 |
+
"alt_confidence": 0.99,
|
| 213 |
+
"baseline_match": false,
|
| 214 |
+
"alt_match": false,
|
| 215 |
+
"vote_match": false,
|
| 216 |
+
"vote_source": "critique-retry",
|
| 217 |
+
"elapsed_ms": 40876.36140000177
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"question_id": 896,
|
| 221 |
+
"db_id": "formula_1",
|
| 222 |
+
"difficulty": "challenging",
|
| 223 |
+
"question": "Calculate the percentage whereby Hamilton was not at the 1st track of the the f1 circuit since 2010.",
|
| 224 |
+
"gold_sql": "SELECT CAST(COUNT(CASE WHEN T2.position <> 1 THEN T2.position END) AS REAL) * 100 / COUNT(T2.driverStandingsId) FROM races AS T1 INNER JOIN driverStandings AS T2 ON T2.raceId = T1.raceId INNER JOIN drivers AS T3 ON T3.driverId = T2.driverId WHERE T3.surname = 'Hamilton' AND T1.year >= 2010",
|
| 225 |
+
"baseline_pred": "SELECT CAST(SUM(CASE WHEN r.positionOrder > 1 THEN 1 ELSE 0 END) AS REAL) * 100.0 / COUNT(*) FROM results r INNER JOIN drivers d ON r.driverId = d.driverId INNER JOIN races ra ON r.raceId = ra.raceId WHERE d.surname = 'Hamilton' AND ra.year >= 2010",
|
| 226 |
+
"alt_pred": "SELECT CAST(SUM(CASE WHEN \"results\".\"position\" > 1 THEN 1 ELSE 0 END) AS REAL) * 100.0 / COUNT(*) AS percentage FROM \"results\" JOIN \"drivers\" ON \"results\".\"driverId\" = \"drivers\".\"driverId\" JOIN \"races\" ON \"results\".\"raceId\" = \"races\".\"raceId\" WHERE \"drivers\".\"surname\" = 'Hamilton' AND \"races\".\"year\" >= 2010",
|
| 227 |
+
"alt_confidence": 0.99,
|
| 228 |
+
"baseline_match": false,
|
| 229 |
+
"alt_match": false,
|
| 230 |
+
"vote_match": false,
|
| 231 |
+
"vote_source": "critique-retry",
|
| 232 |
+
"elapsed_ms": 40322.427699999025
|
| 233 |
+
},
|
| 234 |
+
{
|
| 235 |
+
"question_id": 902,
|
| 236 |
+
"db_id": "formula_1",
|
| 237 |
+
"difficulty": "simple",
|
| 238 |
+
"question": "Which race was Alex Yoong in when he was in track number less than 20?",
|
| 239 |
+
"gold_sql": "SELECT T1.name FROM races AS T1 INNER JOIN driverStandings AS T2 ON T2.raceId = T1.raceId INNER JOIN drivers AS T3 ON T3.driverId = T2.driverId WHERE T3.forename = 'Alex' AND T3.surname = 'Yoong' AND T2.position < 20",
|
| 240 |
+
"baseline_pred": "SELECT races.name FROM races JOIN results ON races.raceId = results.raceId JOIN drivers ON results.driverId = drivers.driverId WHERE drivers.forename = 'Alex' AND drivers.surname = 'Yoong' AND results.position < 20",
|
| 241 |
+
"alt_pred": "SELECT races.name FROM results JOIN drivers ON results.driverId = drivers.driverId JOIN races ON results.raceId = races.raceId WHERE drivers.forename = 'Alex' AND drivers.surname = 'Yoong' AND results.position < 20",
|
| 242 |
+
"alt_confidence": 0.97,
|
| 243 |
+
"baseline_match": false,
|
| 244 |
+
"alt_match": false,
|
| 245 |
+
"vote_match": false,
|
| 246 |
+
"vote_source": "critique-retry",
|
| 247 |
+
"elapsed_ms": 39025.16929999911
|
| 248 |
+
},
|
| 249 |
+
{
|
| 250 |
+
"question_id": 930,
|
| 251 |
+
"db_id": "formula_1",
|
| 252 |
+
"difficulty": "simple",
|
| 253 |
+
"question": "In which Formula_1 race did Lewis Hamilton rank the highest?",
|
| 254 |
+
"gold_sql": "SELECT name FROM races WHERE raceId IN ( SELECT raceId FROM results WHERE rank = 1 AND driverId = ( SELECT driverId FROM drivers WHERE forename = 'Lewis' AND surname = 'Hamilton' ) )",
|
| 255 |
+
"baseline_pred": "SELECT races.name FROM races JOIN results ON races.raceId = results.raceId JOIN drivers ON results.driverId = drivers.driverId WHERE drivers.forename = 'Lewis' AND drivers.surname = 'Hamilton' ORDER BY results.rank ASC LIMIT 1",
|
| 256 |
+
"alt_pred": "SELECT races.name FROM results JOIN drivers ON results.driverId = drivers.driverId JOIN races ON results.raceId = races.raceId WHERE drivers.forename = 'Lewis' AND drivers.surname = 'Hamilton' AND results.rank IS NOT NULL ORDER BY results.rank ASC LIMIT 1",
|
| 257 |
+
"alt_confidence": 0.95,
|
| 258 |
+
"baseline_match": false,
|
| 259 |
+
"alt_match": false,
|
| 260 |
+
"vote_match": false,
|
| 261 |
+
"vote_source": "critique-retry",
|
| 262 |
+
"elapsed_ms": 36837.869500001034
|
| 263 |
+
},
|
| 264 |
+
{
|
| 265 |
+
"question_id": 988,
|
| 266 |
+
"db_id": "formula_1",
|
| 267 |
+
"difficulty": "challenging",
|
| 268 |
+
"question": "List down top 3 German drivers who has the shortest average pit stop duration and were born between 1980-1985.",
|
| 269 |
+
"gold_sql": "SELECT T2.forename, T2.surname FROM pitStops AS T1 INNER JOIN drivers AS T2 on T1.driverId = T2.driverId WHERE T2.nationality = 'German' AND STRFTIME('%Y', T2.dob) BETWEEN '1980' AND '1985' GROUP BY T2.forename, T2.surname ORDER BY AVG(T1.duration) LIMIT 3",
|
| 270 |
+
"baseline_pred": "SELECT d.forename || ' ' || d.surname AS full_name FROM pitStops p JOIN drivers d ON p.driverId = d.driverId WHERE strftime('%Y', d.dob) BETWEEN '1980' AND '1985' AND d.nationality = 'German' GROUP BY d.driverId, d.forename, d.surname ORDER BY AVG(p.milliseconds) ASC LIMIT 3",
|
| 271 |
+
"alt_pred": "SELECT d.forename || ' ' || d.surname AS full_name, AVG(p.milliseconds) AS avg_duration FROM drivers d JOIN pitStops p ON p.driverId = d.driverId WHERE d.nationality = 'German' AND CAST(strftime('%Y', d.dob) AS INTEGER) BETWEEN 1980 AND 1985 GROUP BY d.driverId ORDER BY avg_duration ASC LIMIT 3",
|
| 272 |
+
"alt_confidence": 0.97,
|
| 273 |
+
"baseline_match": false,
|
| 274 |
+
"alt_match": false,
|
| 275 |
+
"vote_match": false,
|
| 276 |
+
"vote_source": "critique-retry",
|
| 277 |
+
"elapsed_ms": 73423.88260000007
|
| 278 |
+
},
|
| 279 |
+
{
|
| 280 |
+
"question_id": 990,
|
| 281 |
+
"db_id": "formula_1",
|
| 282 |
+
"difficulty": "challenging",
|
| 283 |
+
"question": "What is the constructor reference name of the champion in the 2009 Singapore Grand Prix? Please give its website.",
|
| 284 |
+
"gold_sql": "SELECT T3.constructorRef, T3.url FROM results AS T1 INNER JOIN races AS T2 on T1.raceId = T2.raceId INNER JOIN constructors AS T3 on T1.constructorId = T3.constructorId WHERE T2.name = 'Singapore Grand Prix' AND T2.year = 2009 AND T1.time LIKE '_:%:__.___'",
|
| 285 |
+
"baseline_pred": "SELECT constructors.constructorRef, constructors.url FROM results INNER JOIN races ON results.raceId = races.raceId INNER JOIN constructors ON results.constructorId = constructors.constructorId WHERE races.year = 2009 AND races.name = 'Singapore Grand Prix' AND results.positionOrder = 1 ORDER BY results.time DESC LIMIT 1",
|
| 286 |
+
"alt_pred": "SELECT c.constructorRef, c.url FROM results r JOIN races ra ON r.raceId = ra.raceId JOIN constructors c ON r.constructorId = c.constructorId WHERE ra.year = 2009 AND ra.name = 'Singapore Grand Prix' AND r.positionOrder = 1",
|
| 287 |
+
"alt_confidence": 0.97,
|
| 288 |
+
"baseline_match": false,
|
| 289 |
+
"alt_match": false,
|
| 290 |
+
"vote_match": false,
|
| 291 |
+
"vote_source": "critique-retry",
|
| 292 |
+
"elapsed_ms": 40548.26719999983
|
| 293 |
+
},
|
| 294 |
+
{
|
| 295 |
+
"question_id": 1168,
|
| 296 |
+
"db_id": "thrombosis_prediction",
|
| 297 |
+
"difficulty": "challenging",
|
| 298 |
+
"question": "The oldest SJS patient's medical laboratory work was completed on what date, and what age was the patient when they initially arrived at the hospital?",
|
| 299 |
+
"gold_sql": "SELECT T1.Date, STRFTIME('%Y', T2.`First Date`) - STRFTIME('%Y', T2.Birthday),T2.Birthday FROM Laboratory AS T1 INNER JOIN Patient AS T2 ON T1.ID = T2.ID WHERE T2.Diagnosis = 'SJS' AND T2.Birthday IS NOT NULL ORDER BY T2.Birthday ASC LIMIT 1",
|
| 300 |
+
"baseline_pred": "SELECT L.Date, (strftime('%Y', P.\"First Date\") - strftime('%Y', P.Birthday)) FROM Patient P INNER JOIN Laboratory L ON P.ID = L.ID WHERE P.Diagnosis = 'SJS' AND P.Birthday = (SELECT MIN(Birthday) FROM Patient WHERE Diagnosis = 'SJS') ORDER BY L.Date ASC LIMIT 1",
|
| 301 |
+
"alt_pred": "SELECT l.Date, (strftime('%Y', p.\"First Date\") - strftime('%Y', p.Birthday)) AS age_at_arrival FROM Patient p JOIN Laboratory l ON p.ID = l.ID WHERE p.Diagnosis = 'SJS' AND p.Birthday = (SELECT MIN(p2.Birthday) FROM Patient p2 WHERE p2.Diagnosis = 'SJS') ORDER BY l.Date DESC LIMIT 1",
|
| 302 |
+
"alt_confidence": 0.78,
|
| 303 |
+
"baseline_match": false,
|
| 304 |
+
"alt_match": false,
|
| 305 |
+
"vote_match": false,
|
| 306 |
+
"vote_source": "critique-retry",
|
| 307 |
+
"elapsed_ms": 30448.83469999877
|
| 308 |
+
},
|
| 309 |
+
{
|
| 310 |
+
"question_id": 1205,
|
| 311 |
+
"db_id": "thrombosis_prediction",
|
| 312 |
+
"difficulty": "moderate",
|
| 313 |
+
"question": "Was the patient with the number 57266's uric acid within a normal range?",
|
| 314 |
+
"gold_sql": "SELECT CASE WHEN (T1.SEX = 'F' AND T2.UA > 6.5) OR (T1.SEX = 'M' AND T2.UA > 8.0) THEN true ELSE false END FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID WHERE T1.ID = 57266",
|
| 315 |
+
"baseline_pred": "SELECT CASE WHEN (T1.UA > 8.0 AND T2.SEX = 'M') OR (T1.UA > 6.5 AND T2.SEX = 'F') THEN 'Yes' ELSE 'No' END AS is_normal FROM Laboratory AS T1 INNER JOIN Patient AS T2 ON T1.ID = T2.ID WHERE T1.ID = 57266 LIMIT 1",
|
| 316 |
+
"alt_pred": "SELECT CASE WHEN (L.UA > 8.0 AND P.SEX = 'M') OR (L.UA > 6.5 AND P.SEX = 'F') THEN 1 ELSE 0 END AS within_normal_range FROM Laboratory AS L JOIN Patient AS P ON L.ID = P.ID WHERE L.ID = 57266 ORDER BY L.Date DESC LIMIT 1",
|
| 317 |
+
"alt_confidence": 0.97,
|
| 318 |
+
"baseline_match": false,
|
| 319 |
+
"alt_match": false,
|
| 320 |
+
"vote_match": false,
|
| 321 |
+
"vote_source": "critique-retry",
|
| 322 |
+
"elapsed_ms": 28915.319499999896
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"question_id": 1235,
|
| 326 |
+
"db_id": "thrombosis_prediction",
|
| 327 |
+
"difficulty": "moderate",
|
| 328 |
+
"question": "What are the patient's diagnosis for those who has lower red blood blood cell? State their ID and age.",
|
| 329 |
+
"gold_sql": "SELECT DISTINCT T1.Diagnosis, T1.ID , STRFTIME('%Y', CURRENT_TIMESTAMP) -STRFTIME('%Y', T1.Birthday) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID WHERE T2.RBC < 3.5",
|
| 330 |
+
"baseline_pred": "SELECT P.ID, (strftime('%Y', 'now') - strftime('%Y', P.Birthday)) AS age, P.Diagnosis FROM Patient AS P JOIN Laboratory AS L ON P.ID = L.ID WHERE L.RBC < 3.5",
|
| 331 |
+
"alt_pred": "SELECT DISTINCT Patient.ID, (strftime('%Y','now') - strftime('%Y', Patient.Birthday)) AS age, Patient.Diagnosis FROM Patient JOIN Laboratory ON Patient.ID = Laboratory.ID WHERE Laboratory.RBC < 3.5",
|
| 332 |
+
"alt_confidence": 0.97,
|
| 333 |
+
"baseline_match": false,
|
| 334 |
+
"alt_match": false,
|
| 335 |
+
"vote_match": false,
|
| 336 |
+
"vote_source": "critique-retry",
|
| 337 |
+
"elapsed_ms": 4114.075999999841
|
| 338 |
+
},
|
| 339 |
+
{
|
| 340 |
+
"question_id": 1247,
|
| 341 |
+
"db_id": "thrombosis_prediction",
|
| 342 |
+
"difficulty": "challenging",
|
| 343 |
+
"question": "Among the male patients who have a normal level of white blood cells, how many of them have an abnormal fibrinogen level?",
|
| 344 |
+
"gold_sql": "SELECT COUNT(DISTINCT T1.ID) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID WHERE T2.FG <= 150 OR T2.FG >= 450 AND T2.WBC > 3.5 AND T2.WBC < 9.0 AND T1.SEX = 'M'",
|
| 345 |
+
"baseline_pred": "SELECT COUNT(DISTINCT L.ID) FROM Patient P INNER JOIN Laboratory L ON P.ID = L.ID WHERE P.SEX = 'M' AND L.WBC > 3.5 AND L.WBC < 9.0 AND (L.FG <= 150 OR L.FG >= 450)",
|
| 346 |
+
"alt_pred": "SELECT COUNT(DISTINCT L.ID) FROM Patient P JOIN Laboratory L ON P.ID = L.ID WHERE P.SEX = 'M' AND L.WBC > 3.5 AND L.WBC < 9.0 AND (L.FG <= 150 OR L.FG >= 450)",
|
| 347 |
+
"alt_confidence": 0.98,
|
| 348 |
+
"baseline_match": false,
|
| 349 |
+
"alt_match": false,
|
| 350 |
+
"vote_match": false,
|
| 351 |
+
"vote_source": "critique-retry",
|
| 352 |
+
"elapsed_ms": 26969.037499999104
|
| 353 |
+
},
|
| 354 |
+
{
|
| 355 |
+
"question_id": 1251,
|
| 356 |
+
"db_id": "thrombosis_prediction",
|
| 357 |
+
"difficulty": "simple",
|
| 358 |
+
"question": "How many patients with an Ig G higher than normal?",
|
| 359 |
+
"gold_sql": "SELECT COUNT(DISTINCT T1.ID) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID INNER JOIN Examination AS T3 ON T3.ID = T2.ID WHERE T2.IGG >= 2000",
|
| 360 |
+
"baseline_pred": "SELECT COUNT(DISTINCT ID) FROM Laboratory WHERE IGG >= 2000",
|
| 361 |
+
"alt_pred": "SELECT COUNT(DISTINCT Lab.ID) FROM Laboratory AS Lab JOIN Patient AS P ON Lab.ID = P.ID WHERE Lab.IGG >= 2000",
|
| 362 |
+
"alt_confidence": 0.99,
|
| 363 |
+
"baseline_match": false,
|
| 364 |
+
"alt_match": false,
|
| 365 |
+
"vote_match": false,
|
| 366 |
+
"vote_source": "critique-retry",
|
| 367 |
+
"elapsed_ms": 31754.1229999988
|
| 368 |
+
}
|
| 369 |
+
]
|
| 370 |
+
}
|
eval/reports/2026-05-17/groq-llama70b-on-v7.json
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"alt_model": "groq:llama-3.3-70b-versatile+grounded_critique+fewshot3",
|
| 3 |
+
"summary": {
|
| 4 |
+
"voted_better": 2,
|
| 5 |
+
"voted_worse": 0,
|
| 6 |
+
"voted_same": 13
|
| 7 |
+
},
|
| 8 |
+
"records": [
|
| 9 |
+
{
|
| 10 |
+
"question_id": 25,
|
| 11 |
+
"db_id": "california_schools",
|
| 12 |
+
"difficulty": "moderate",
|
| 13 |
+
"question": "Name schools in Riverside which the average of average math score for SAT is grater than 400, what is the funding type of these schools?",
|
| 14 |
+
"gold_sql": "SELECT T1.sname, T2.`Charter Funding Type` FROM satscores AS T1 INNER JOIN frpm AS T2 ON T1.cds = T2.CDSCode WHERE T2.`District Name` LIKE 'Riverside%' GROUP BY T1.sname, T2.`Charter Funding Type` HAVING CAST(SUM(T1.AvgScrMath) AS REAL) / COUNT(T1.cds) > 400",
|
| 15 |
+
"baseline_pred": "SELECT s.FundingType FROM schools AS s JOIN satscores AS t ON s.CDSCode = t.cds WHERE s.City = 'Riverside' AND t.AvgScrMath > 400 GROUP BY s.FundingType HAVING AVG(t.AvgScrMath) > 400",
|
| 16 |
+
"alt_pred": "SELECT T1.FundingType FROM schools AS T1 INNER JOIN satscores AS T2 ON T1.CDSCode = T2.cds WHERE T1.County = 'Riverside' GROUP BY T1.FundingType HAVING AVG(T2.AvgScrMath) > 400",
|
| 17 |
+
"alt_confidence": 0.8,
|
| 18 |
+
"baseline_match": false,
|
| 19 |
+
"alt_match": false,
|
| 20 |
+
"vote_match": false,
|
| 21 |
+
"vote_source": "critique-retry",
|
| 22 |
+
"elapsed_ms": 4929.560500000662
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"question_id": 37,
|
| 26 |
+
"db_id": "california_schools",
|
| 27 |
+
"difficulty": "moderate",
|
| 28 |
+
"question": "What is the complete address of the school with the lowest excellence rate? Indicate the Street, City, Zip and State.",
|
| 29 |
+
"gold_sql": "SELECT T2.Street, T2.City, T2.State, T2.Zip FROM satscores AS T1 INNER JOIN schools AS T2 ON T1.cds = T2.CDSCode ORDER BY CAST(T1.NumGE1500 AS REAL) / T1.NumTstTakr ASC LIMIT 1",
|
| 30 |
+
"baseline_pred": "SELECT Street, City, Zip, State FROM schools WHERE CDSCode = (SELECT cds FROM satscores WHERE NumTstTakr > 0 ORDER BY (NumGE1500 * 1.0 / NumTstTakr) ASC LIMIT 1)",
|
| 31 |
+
"alt_pred": "SELECT Street, City, Zip, State FROM schools ORDER BY (SELECT NumGE1500 / NumTstTakr FROM satscores WHERE satscores.cds = schools.CDSCode) ASC LIMIT 1",
|
| 32 |
+
"alt_confidence": 0.8,
|
| 33 |
+
"baseline_match": false,
|
| 34 |
+
"alt_match": false,
|
| 35 |
+
"vote_match": false,
|
| 36 |
+
"vote_source": "critique-retry",
|
| 37 |
+
"elapsed_ms": 21531.478400000196
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"question_id": 77,
|
| 41 |
+
"db_id": "california_schools",
|
| 42 |
+
"difficulty": "moderate",
|
| 43 |
+
"question": "Which schools served a grade span of Kindergarten to 9th grade in the county of Los Angeles and what is its Percent (%) Eligible FRPM (Ages 5-17)?",
|
| 44 |
+
"gold_sql": "SELECT T2.School, T1.`FRPM Count (Ages 5-17)` * 100 / T1.`Enrollment (Ages 5-17)` FROM frpm AS T1 INNER JOIN schools AS T2 ON T1.CDSCode = T2.CDSCode WHERE T2.County = 'Los Angeles' AND T2.GSserved = 'K-9'",
|
| 45 |
+
"baseline_pred": "SELECT f.`School Name`, (f.`FRPM Count (Ages 5-17)` / f.`Enrollment (Ages 5-17)`) * 100 AS `Percent (%) Eligible FRPM (Ages 5-17)` FROM frpm f JOIN schools s ON f.CDSCode = s.CDSCode WHERE f.`County Name` = 'Los Angeles' AND f.`Low Grade` = 'K' AND f.`High Grade` = '9'",
|
| 46 |
+
"alt_pred": "SELECT T2.School, (T1.`FRPM Count (Ages 5-17)` / T1.`Enrollment (Ages 5-17)`) * 100 FROM frpm AS T1 JOIN schools AS T2 ON T1.CDSCode = T2.CDSCode WHERE T2.County = 'Los Angeles' AND T1.`GSserved` = 'K-9'",
|
| 47 |
+
"alt_confidence": 0.9,
|
| 48 |
+
"baseline_match": false,
|
| 49 |
+
"alt_match": false,
|
| 50 |
+
"vote_match": false,
|
| 51 |
+
"vote_source": "critique-retry",
|
| 52 |
+
"elapsed_ms": 43247.69329999981
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"question_id": 125,
|
| 56 |
+
"db_id": "financial",
|
| 57 |
+
"difficulty": "challenging",
|
| 58 |
+
"question": "For loans contracts which are still running where client are in debt, list the district of the and the state the percentage unemployment rate increment from year 1995 to 1996.",
|
| 59 |
+
"gold_sql": "SELECT CAST((T3.A13 - T3.A12) AS REAL) * 100 / T3.A12 FROM loan AS T1 INNER JOIN account AS T2 ON T1.account_id = T2.account_id INNER JOIN district AS T3 ON T2.district_id = T3.district_id WHERE T1.status = 'D'",
|
| 60 |
+
"baseline_pred": "SELECT district.A2, CAST((district.A13 - district.A12) * 100.0 / district.A12 AS REAL) FROM loan JOIN account ON loan.account_id = account.account_id JOIN client ON account.district_id = client.district_id JOIN district ON client.district_id = district.district_id WHERE loan.status = 'D'",
|
| 61 |
+
"alt_pred": "SELECT T1.A2, ((T1.A13 - T1.A12) / T1.A12) * 100 FROM district AS T1 INNER JOIN client AS T2 ON T1.district_id = T2.district_id INNER JOIN disp AS T3 ON T2.client_id = T3.client_id INNER JOIN account AS T4 ON T3.account_id = T4.account_id INNER JOIN loan AS T5 ON T4.account_id = T5.account_id WHERE T5.status = 'D' GROUP BY T1.A2, T1.A12, T1.A13 HAVING COUNT(T5.loan_id) = (SELECT MAX(COUNT(loan_id)) FROM loan WHERE status = 'D' GROUP BY account_id)",
|
| 62 |
+
"alt_confidence": 0.8,
|
| 63 |
+
"baseline_match": false,
|
| 64 |
+
"alt_match": false,
|
| 65 |
+
"vote_match": false,
|
| 66 |
+
"vote_source": "critique-retry",
|
| 67 |
+
"elapsed_ms": 32802.74060000011
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"question_id": 173,
|
| 71 |
+
"db_id": "financial",
|
| 72 |
+
"difficulty": "challenging",
|
| 73 |
+
"question": "How often does account number 3 request an account statement to be released? What was the aim of debiting 3539 in total?",
|
| 74 |
+
"gold_sql": "SELECT T1.frequency, T2.k_symbol FROM account AS T1 INNER JOIN (SELECT account_id, k_symbol, SUM(amount) AS total_amount FROM `order` GROUP BY account_id, k_symbol) AS T2 ON T1.account_id = T2.account_id WHERE T1.account_id = 3 AND T2.total_amount = 3539",
|
| 75 |
+
"baseline_pred": "SELECT COUNT(*) AS frequency, k_symbol AS purpose FROM trans WHERE account_id = 3 AND type = 'VYDAJ' AND k_symbol = 'SLUZBY' GROUP BY k_symbol",
|
| 76 |
+
"alt_pred": "SELECT COUNT(T1.trans_id), T1.k_symbol FROM trans AS T1 INNER JOIN account AS T2 ON T1.account_id = T2.account_id WHERE T2.account_id = 3 AND T1.amount = 3539",
|
| 77 |
+
"alt_confidence": 0.8,
|
| 78 |
+
"baseline_match": false,
|
| 79 |
+
"alt_match": false,
|
| 80 |
+
"vote_match": false,
|
| 81 |
+
"vote_source": "critique-retry",
|
| 82 |
+
"elapsed_ms": 16230.65299999871
|
| 83 |
+
},
|
| 84 |
+
{
|
| 85 |
+
"question_id": 207,
|
| 86 |
+
"db_id": "toxicology",
|
| 87 |
+
"difficulty": "challenging",
|
| 88 |
+
"question": "What elements are in a double type bond?",
|
| 89 |
+
"gold_sql": "SELECT DISTINCT T1.element FROM atom AS T1 INNER JOIN bond AS T2 ON T1.molecule_id = T2.molecule_id INNER JOIN connected AS T3 ON T1.atom_id = T3.atom_id WHERE T2.bond_type = '='",
|
| 90 |
+
"baseline_pred": "SELECT DISTINCT a.element FROM atom a JOIN bond b ON a.molecule_id = b.molecule_id JOIN connected c ON b.bond_id = c.bond_id WHERE b.bond_type = '='",
|
| 91 |
+
"alt_pred": "SELECT DISTINCT T1.element FROM atom AS T1 INNER JOIN connected AS T2 ON T1.atom_id = T2.atom_id INNER JOIN bond AS T3 ON T2.bond_id = T3.bond_id WHERE T3.bond_type = '='",
|
| 92 |
+
"alt_confidence": 0.9,
|
| 93 |
+
"baseline_match": false,
|
| 94 |
+
"alt_match": false,
|
| 95 |
+
"vote_match": false,
|
| 96 |
+
"vote_source": "critique-retry",
|
| 97 |
+
"elapsed_ms": 5809.210999999777
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"question_id": 219,
|
| 101 |
+
"db_id": "toxicology",
|
| 102 |
+
"difficulty": "challenging",
|
| 103 |
+
"question": "What is the percentage of carcinogenic molecules in triple type bonds?",
|
| 104 |
+
"gold_sql": "SELECT CAST(COUNT(DISTINCT CASE WHEN T2.label = '+' THEN T2.molecule_id ELSE NULL END) AS REAL) * 100 / COUNT(DISTINCT T2.molecule_id) FROM atom AS T1 INNER JOIN molecule AS T2 ON T1.molecule_id = T2.molecule_id INNER JOIN bond AS T3 ON T2.molecule_id = T3.molecule_id WHERE T3.bond_type = '#'",
|
| 105 |
+
"baseline_pred": "SELECT CAST(SUM(CASE WHEN b.bond_type = '#' THEN 1 ELSE 0 END) AS REAL) * 100.0 / COUNT(b.bond_id) FROM bond b INNER JOIN atom a ON b.molecule_id = a.molecule_id INNER JOIN molecule m ON a.molecule_id = m.molecule_id WHERE m.label = '+'",
|
| 106 |
+
"alt_pred": "SELECT CAST(SUM(CASE WHEN T1.bond_type = '#' THEN 1 ELSE 0 END) AS REAL) * 100 / COUNT(T1.bond_id) AS percent FROM bond AS T1 INNER JOIN molecule AS T2 ON T1.molecule_id = T2.molecule_id WHERE T2.label = '+'",
|
| 107 |
+
"alt_confidence": 0.9,
|
| 108 |
+
"baseline_match": false,
|
| 109 |
+
"alt_match": false,
|
| 110 |
+
"vote_match": false,
|
| 111 |
+
"vote_source": "critique-retry",
|
| 112 |
+
"elapsed_ms": 5593.173399998705
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"question_id": 349,
|
| 116 |
+
"db_id": "card_games",
|
| 117 |
+
"difficulty": "moderate",
|
| 118 |
+
"question": "Name the card and artist with the most ruling information. Also state if the card is a promotional printing.",
|
| 119 |
+
"gold_sql": "SELECT T1.name, T1.artist, T1.isPromo FROM cards AS T1 INNER JOIN rulings AS T2 ON T1.uuid = T2.uuid WHERE T1.isPromo = 1 AND T1.artist = (SELECT artist FROM cards WHERE isPromo = 1 GROUP BY artist HAVING COUNT(DISTINCT uuid) = (SELECT MAX(count_uuid) FROM ( SELECT COUNT(DISTINCT uuid) AS count_uuid FROM cards WHERE isPromo = 1 GROUP BY artist ))) LIMIT 1",
|
| 120 |
+
"baseline_pred": "SELECT c.name, c.artist, c.isPromo FROM cards AS c JOIN rulings AS r ON c.uuid = r.uuid GROUP BY c.uuid ORDER BY COUNT(r.id) DESC LIMIT 1",
|
| 121 |
+
"alt_pred": "SELECT T1.name, T1.artist, T1.isPromo FROM cards AS T1 INNER JOIN rulings AS T2 ON T1.uuid = T2.uuid GROUP BY T1.name, T1.artist, T1.isPromo ORDER BY COUNT(T2.uuid) DESC LIMIT 1",
|
| 122 |
+
"alt_confidence": 0.9,
|
| 123 |
+
"baseline_match": false,
|
| 124 |
+
"alt_match": false,
|
| 125 |
+
"vote_match": false,
|
| 126 |
+
"vote_source": "critique-retry",
|
| 127 |
+
"elapsed_ms": 32800.355800000034
|
| 128 |
+
},
|
| 129 |
+
{
|
| 130 |
+
"question_id": 352,
|
| 131 |
+
"db_id": "card_games",
|
| 132 |
+
"difficulty": "moderate",
|
| 133 |
+
"question": "Calculate the percentage of the cards availabe in Chinese Simplified.",
|
| 134 |
+
"gold_sql": "SELECT CAST(SUM(CASE WHEN T2.language = 'Chinese Simplified' THEN 1 ELSE 0 END) AS REAL) * 100 / COUNT(T1.id) FROM cards AS T1 INNER JOIN foreign_data AS T2 ON T1.uuid = T2.uuid",
|
| 135 |
+
"baseline_pred": "SELECT CAST(COUNT(DISTINCT cards.uuid) AS REAL) * 100 / (SELECT COUNT(DISTINCT uuid) FROM cards) FROM cards JOIN foreign_data ON cards.uuid = foreign_data.uuid WHERE foreign_data.language = 'Chinese Simplified'",
|
| 136 |
+
"alt_pred": "SELECT CAST(SUM(CASE WHEN T2.language = 'Chinese Simplified' THEN 1 ELSE 0 END) AS REAL) * 100 / COUNT(T1.id) FROM cards AS T1 INNER JOIN foreign_data AS T2 ON T1.uuid = T2.uuid",
|
| 137 |
+
"alt_confidence": 0.8,
|
| 138 |
+
"baseline_match": false,
|
| 139 |
+
"alt_match": true,
|
| 140 |
+
"vote_match": true,
|
| 141 |
+
"vote_source": "critique-retry",
|
| 142 |
+
"elapsed_ms": 30081.161299998712
|
| 143 |
+
},
|
| 144 |
+
{
|
| 145 |
+
"question_id": 358,
|
| 146 |
+
"db_id": "card_games",
|
| 147 |
+
"difficulty": "simple",
|
| 148 |
+
"question": "What is the border color of card \"Ancestor's Chosen\"?",
|
| 149 |
+
"gold_sql": "SELECT DISTINCT borderColor FROM cards WHERE name = 'Ancestor''s Chosen'",
|
| 150 |
+
"baseline_pred": "SELECT borderColor FROM cards WHERE name = 'Ancestor''s Chosen'",
|
| 151 |
+
"alt_pred": "SELECT borderColor FROM cards WHERE name = 'Ancestor''s Chosen'",
|
| 152 |
+
"alt_confidence": 1.0,
|
| 153 |
+
"baseline_match": false,
|
| 154 |
+
"alt_match": false,
|
| 155 |
+
"vote_match": false,
|
| 156 |
+
"vote_source": "critique-retry",
|
| 157 |
+
"elapsed_ms": 44694.91830000152
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"question_id": 366,
|
| 161 |
+
"db_id": "card_games",
|
| 162 |
+
"difficulty": "simple",
|
| 163 |
+
"question": "What is the rule of playing card \"Benalish Knight\"?",
|
| 164 |
+
"gold_sql": "SELECT T2.format FROM cards AS T1 INNER JOIN legalities AS T2 ON T1.uuid = T2.uuid WHERE T1.name = 'Benalish Knight'",
|
| 165 |
+
"baseline_pred": "SELECT text FROM rulings WHERE uuid IN (SELECT uuid FROM cards WHERE name LIKE '%Benalish Knight%')",
|
| 166 |
+
"alt_pred": "SELECT T2.format FROM cards AS T1 INNER JOIN legalities AS T2 ON T1.uuid = T2.uuid WHERE T1.name = 'Benalish Knight'",
|
| 167 |
+
"alt_confidence": 0.8,
|
| 168 |
+
"baseline_match": false,
|
| 169 |
+
"alt_match": true,
|
| 170 |
+
"vote_match": true,
|
| 171 |
+
"vote_source": "critique-retry",
|
| 172 |
+
"elapsed_ms": 22241.72820000058
|
| 173 |
+
},
|
| 174 |
+
{
|
| 175 |
+
"question_id": 407,
|
| 176 |
+
"db_id": "card_games",
|
| 177 |
+
"difficulty": "moderate",
|
| 178 |
+
"question": "Lists all types of cards in German.",
|
| 179 |
+
"gold_sql": "SELECT T1.subtypes, T1.supertypes FROM cards AS T1 INNER JOIN foreign_data AS T2 ON T1.uuid = T2.uuid WHERE T2.language = 'German' AND T1.subtypes IS NOT NULL AND T1.supertypes IS NOT NULL",
|
| 180 |
+
"baseline_pred": "SELECT DISTINCT T1.subtypes, T1.supertypes FROM cards AS T1 INNER JOIN foreign_data AS T2 ON T1.uuid = T2.uuid WHERE T2.language = 'German' AND T1.subtypes IS NOT NULL AND T1.supertypes IS NOT NULL",
|
| 181 |
+
"alt_pred": "SELECT DISTINCT T1.subtypes, T1.supertypes FROM cards AS T1 INNER JOIN foreign_data AS T2 ON T1.uuid = T2.uuid WHERE T2.language = 'German' AND T1.subtypes IS NOT NULL AND T1.supertypes IS NOT NULL",
|
| 182 |
+
"alt_confidence": 0.8,
|
| 183 |
+
"baseline_match": false,
|
| 184 |
+
"alt_match": false,
|
| 185 |
+
"vote_match": false,
|
| 186 |
+
"vote_source": "critique-retry",
|
| 187 |
+
"elapsed_ms": 35438.194599999406
|
| 188 |
+
},
|
| 189 |
+
{
|
| 190 |
+
"question_id": 408,
|
| 191 |
+
"db_id": "card_games",
|
| 192 |
+
"difficulty": "moderate",
|
| 193 |
+
"question": "How many unknown power cards contain info about the triggered ability",
|
| 194 |
+
"gold_sql": "SELECT Count(DISTINCT T1.id) FROM cards AS T1 INNER JOIN rulings AS T2 ON T1.uuid = T2.uuid WHERE (T1.power IS NULL OR T1.power = '*') AND T2.text LIKE '%triggered ability%'",
|
| 195 |
+
"baseline_pred": "SELECT COUNT(*) FROM cards WHERE (power IS NULL OR power = '*') AND text LIKE '%triggered ability%'",
|
| 196 |
+
"alt_pred": "SELECT COUNT(*) FROM cards WHERE (power IS NULL OR power = '*') AND text LIKE '%triggered ability%'",
|
| 197 |
+
"alt_confidence": 0.9,
|
| 198 |
+
"baseline_match": false,
|
| 199 |
+
"alt_match": false,
|
| 200 |
+
"vote_match": false,
|
| 201 |
+
"vote_source": "critique-retry",
|
| 202 |
+
"elapsed_ms": 29518.018900000243
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"question_id": 484,
|
| 206 |
+
"db_id": "card_games",
|
| 207 |
+
"difficulty": "moderate",
|
| 208 |
+
"question": "Please list the Italian names of the cards in the set Coldsnap with the highest converted mana cost.",
|
| 209 |
+
"gold_sql": "SELECT T2.name FROM foreign_data AS T1 INNER JOIN cards AS T2 ON T2.uuid = T1.uuid INNER JOIN sets AS T3 ON T3.code = T2.setCode WHERE T3.name = 'Coldsnap' AND T1.language = 'Italian' ORDER BY T2.convertedManaCost DESC",
|
| 210 |
+
"baseline_pred": "SELECT fd.name FROM cards AS c JOIN foreign_data AS fd ON c.uuid = fd.uuid JOIN sets AS s ON c.setCode = s.code WHERE s.name = 'Coldsnap' AND fd.language = 'Italian' ORDER BY c.convertedManaCost DESC LIMIT 1",
|
| 211 |
+
"alt_pred": "SELECT T2.name FROM sets AS T1 INNER JOIN cards AS T2 ON T1.code = T2.setCode INNER JOIN set_translations AS T3 ON T1.code = T3.setCode WHERE T1.name = 'Coldsnap' AND T3.language = 'Italian' ORDER BY T2.convertedManaCost DESC LIMIT 1",
|
| 212 |
+
"alt_confidence": 0.9,
|
| 213 |
+
"baseline_match": false,
|
| 214 |
+
"alt_match": false,
|
| 215 |
+
"vote_match": false,
|
| 216 |
+
"vote_source": "critique-retry",
|
| 217 |
+
"elapsed_ms": 30588.251799999853
|
| 218 |
+
},
|
| 219 |
+
{
|
| 220 |
+
"question_id": 743,
|
| 221 |
+
"db_id": "superhero",
|
| 222 |
+
"difficulty": "challenging",
|
| 223 |
+
"question": "What is the percentage of superheroes who act in their own self-interest or make decisions based on their own moral code? Indicate how many of the said superheroes were published by Marvel Comics.",
|
| 224 |
+
"gold_sql": "SELECT (CAST(COUNT(*) AS REAL) * 100 / (SELECT COUNT(*) FROM superhero)), CAST(SUM(CASE WHEN T2.publisher_name = 'Marvel Comics' THEN 1 ELSE 0 END) AS REAL) FROM superhero AS T1 INNER JOIN publisher AS T2 ON T1.publisher_id = T2.id INNER JOIN alignment AS T3 ON T3.id = T1.alignment_id WHERE T3.alignment = 'Bad'",
|
| 225 |
+
"baseline_pred": "SELECT CAST(SUM(CASE WHEN a.alignment = 'Bad' THEN 1 ELSE 0 END) AS REAL) * 100 / COUNT(s.id) AS percentage, SUM(CASE WHEN a.alignment = 'Bad' AND p.publisher_name = 'Marvel Comics' THEN 1 ELSE 0 END) FROM superhero s INNER JOIN alignment a ON s.alignment_id = a.id LEFT JOIN publisher p ON s.publisher_id = p.id",
|
| 226 |
+
"alt_pred": "SELECT CAST(SUM(CASE WHEN T1.alignment_id = 1 THEN 1 ELSE 0 END) AS REAL) * 100 / COUNT(T1.id) AS percentage, SUM(CASE WHEN T1.publisher_id = (SELECT id FROM publisher WHERE publisher_name = 'Marvel Comics') AND T1.alignment_id = 1 THEN 1 ELSE 0 END) AS marvel_count FROM superhero AS T1",
|
| 227 |
+
"alt_confidence": 0.9,
|
| 228 |
+
"baseline_match": false,
|
| 229 |
+
"alt_match": false,
|
| 230 |
+
"vote_match": false,
|
| 231 |
+
"vote_source": "critique-retry",
|
| 232 |
+
"elapsed_ms": 7933.113900000535
|
| 233 |
+
}
|
| 234 |
+
]
|
| 235 |
+
}
|
eval/reports/2026-05-17/groq-qwen3-throttled-on-v7.json
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"alt_model": "groq:qwen/qwen3-32b+grounded_critique+fewshot3",
|
| 3 |
+
"summary": {
|
| 4 |
+
"voted_better": 1,
|
| 5 |
+
"voted_worse": 0,
|
| 6 |
+
"voted_same": 4
|
| 7 |
+
},
|
| 8 |
+
"records": [
|
| 9 |
+
{
|
| 10 |
+
"question_id": 219,
|
| 11 |
+
"db_id": "toxicology",
|
| 12 |
+
"difficulty": "challenging",
|
| 13 |
+
"question": "What is the percentage of carcinogenic molecules in triple type bonds?",
|
| 14 |
+
"gold_sql": "SELECT CAST(COUNT(DISTINCT CASE WHEN T2.label = '+' THEN T2.molecule_id ELSE NULL END) AS REAL) * 100 / COUNT(DISTINCT T2.molecule_id) FROM atom AS T1 INNER JOIN molecule AS T2 ON T1.molecule_id = T2.molecule_id INNER JOIN bond AS T3 ON T2.molecule_id = T3.molecule_id WHERE T3.bond_type = '#'",
|
| 15 |
+
"baseline_pred": "SELECT CAST(SUM(CASE WHEN b.bond_type = '#' THEN 1 ELSE 0 END) AS REAL) * 100.0 / COUNT(b.bond_id) FROM bond b INNER JOIN atom a ON b.molecule_id = a.molecule_id INNER JOIN molecule m ON a.molecule_id = m.molecule_id WHERE m.label = '+'",
|
| 16 |
+
"alt_pred": "SELECT (COUNT(DISTINCT CASE WHEN m.label = '+' THEN m.molecule_id END) * 100.0 / COUNT(DISTINCT m.molecule_id)) FROM bond AS b JOIN molecule AS m ON b.molecule_id = m.molecule_id WHERE b.bond_type = '#'",
|
| 17 |
+
"alt_confidence": 0.95,
|
| 18 |
+
"baseline_match": false,
|
| 19 |
+
"alt_match": true,
|
| 20 |
+
"vote_match": true,
|
| 21 |
+
"vote_source": "critique-retry",
|
| 22 |
+
"elapsed_ms": 30143.128100000467
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"question_id": 1247,
|
| 26 |
+
"db_id": "thrombosis_prediction",
|
| 27 |
+
"difficulty": "challenging",
|
| 28 |
+
"question": "Among the male patients who have a normal level of white blood cells, how many of them have an abnormal fibrinogen level?",
|
| 29 |
+
"gold_sql": "SELECT COUNT(DISTINCT T1.ID) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID WHERE T2.FG <= 150 OR T2.FG >= 450 AND T2.WBC > 3.5 AND T2.WBC < 9.0 AND T1.SEX = 'M'",
|
| 30 |
+
"baseline_pred": "SELECT COUNT(DISTINCT L.ID) FROM Patient P INNER JOIN Laboratory L ON P.ID = L.ID WHERE P.SEX = 'M' AND L.WBC > 3.5 AND L.WBC < 9.0 AND (L.FG <= 150 OR L.FG >= 450)",
|
| 31 |
+
"alt_pred": "SELECT COUNT(DISTINCT Patient.ID) FROM Patient JOIN Laboratory ON Patient.ID = Laboratory.ID WHERE Patient.SEX = 'M' AND `WBC` > 3.5 AND `WBC` < 9.0 AND (`FG` <= 150 OR `FG` >= 450)",
|
| 32 |
+
"alt_confidence": 0.95,
|
| 33 |
+
"baseline_match": false,
|
| 34 |
+
"alt_match": false,
|
| 35 |
+
"vote_match": false,
|
| 36 |
+
"vote_source": "critique-retry",
|
| 37 |
+
"elapsed_ms": 53296.70189999888
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"question_id": 1251,
|
| 41 |
+
"db_id": "thrombosis_prediction",
|
| 42 |
+
"difficulty": "simple",
|
| 43 |
+
"question": "How many patients with an Ig G higher than normal?",
|
| 44 |
+
"gold_sql": "SELECT COUNT(DISTINCT T1.ID) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID INNER JOIN Examination AS T3 ON T3.ID = T2.ID WHERE T2.IGG >= 2000",
|
| 45 |
+
"baseline_pred": "SELECT COUNT(DISTINCT ID) FROM Laboratory WHERE IGG >= 2000",
|
| 46 |
+
"alt_pred": "SELECT COUNT(DISTINCT ID) FROM Laboratory WHERE IGG >= 2000",
|
| 47 |
+
"alt_confidence": 0.95,
|
| 48 |
+
"baseline_match": false,
|
| 49 |
+
"alt_match": false,
|
| 50 |
+
"vote_match": false,
|
| 51 |
+
"vote_source": "critique-retry",
|
| 52 |
+
"elapsed_ms": 38587.686400000166
|
| 53 |
+
},
|
| 54 |
+
{
|
| 55 |
+
"question_id": 1275,
|
| 56 |
+
"db_id": "thrombosis_prediction",
|
| 57 |
+
"difficulty": "moderate",
|
| 58 |
+
"question": "Among the patients who has a normal level of anti-centromere and a normal level of anti-SSB, how many of them are male?",
|
| 59 |
+
"gold_sql": "SELECT COUNT(DISTINCT T1.ID) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID WHERE T2.CENTROMEA IN ('negative', '0') AND T2.SSB IN ('negative', '0') AND T1.SEX = 'M'",
|
| 60 |
+
"baseline_pred": "SELECT COUNT(DISTINCT P.ID) FROM Patient P JOIN Examination E ON P.ID = E.ID WHERE E.CENTROMEA IN ('-', '+-') AND E.SSB IN ('-', '+-') AND P.SEX = 'M'",
|
| 61 |
+
"alt_pred": "SELECT COUNT(DISTINCT T1.ID) FROM Patient AS T1 INNER JOIN Laboratory AS T2 ON T1.ID = T2.ID WHERE T2.CENTROMEA IN ('-', '+-') AND T2.SSB IN ('-', '+-') AND T1.SEX = 'M'",
|
| 62 |
+
"alt_confidence": 0.95,
|
| 63 |
+
"baseline_match": false,
|
| 64 |
+
"alt_match": false,
|
| 65 |
+
"vote_match": false,
|
| 66 |
+
"vote_source": "critique-retry",
|
| 67 |
+
"elapsed_ms": 50812.23180000052
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"question_id": 1399,
|
| 71 |
+
"db_id": "student_club",
|
| 72 |
+
"difficulty": "moderate",
|
| 73 |
+
"question": "Did Maya Mclean attend the 'Women's Soccer' event?",
|
| 74 |
+
"gold_sql": "SELECT CASE WHEN T3.event_name = 'Women''s Soccer' THEN 'YES' END AS result FROM member AS T1 INNER JOIN attendance AS T2 ON T1.member_id = T2.link_to_member INNER JOIN event AS T3 ON T2.link_to_event = T3.event_id WHERE T1.first_name = 'Maya' AND T1.last_name = 'Mclean'",
|
| 75 |
+
"baseline_pred": "SELECT COUNT(*) > 0 AS attended FROM attendance AS a JOIN member AS m ON a.link_to_member = m.member_id JOIN event AS e ON a.link_to_event = e.event_id WHERE m.first_name = 'Maya' AND m.last_name = 'Mclean' AND e.event_name = 'Women''s Soccer'",
|
| 76 |
+
"alt_pred": "SELECT event.event_name FROM member INNER JOIN attendance ON member.member_id = attendance.link_to_member INNER JOIN event ON attendance.link_to_event = event.event_id WHERE member.first_name = 'Maya' AND member.last_name = 'Mclean' AND event.event_name = 'Women''s Soccer'",
|
| 77 |
+
"alt_confidence": 1.0,
|
| 78 |
+
"baseline_match": false,
|
| 79 |
+
"alt_match": false,
|
| 80 |
+
"vote_match": false,
|
| 81 |
+
"vote_source": "critique-retry",
|
| 82 |
+
"elapsed_ms": 42464.109099999405
|
| 83 |
+
}
|
| 84 |
+
]
|
| 85 |
+
}
|
eval/reports/2026-05-17/hybrid-vote-critique-selfcon-sonnet-fewshot5-groq3-v8.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
eval/reports/2026-05-17/v7b-llama70b-merged.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
scripts/run_critique_retry.py
CHANGED
|
@@ -31,6 +31,7 @@ from nl_sql.eval.dataset import load_bird_mini_dev
|
|
| 31 |
from nl_sql.eval.metrics.execution_accuracy import compare_results
|
| 32 |
from nl_sql.eval.runner import _compose_question, _execute_gold
|
| 33 |
from nl_sql.llm.cache import CachingEmbeddingProvider, CachingLLMProvider
|
|
|
|
| 34 |
from nl_sql.llm.providers.mistral import MistralProvider
|
| 35 |
from nl_sql.schema_index.indexer import SchemaIndex
|
| 36 |
|
|
@@ -48,6 +49,28 @@ def main() -> int:
|
|
| 48 |
help="PipelineConfig.fewshot_top_k (default 3 = G prod). "
|
| 49 |
"Use 5 for P2.B selective expansion experiment.",
|
| 50 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
args = p.parse_args()
|
| 52 |
|
| 53 |
settings = get_settings()
|
|
@@ -59,8 +82,11 @@ def main() -> int:
|
|
| 59 |
examples = {e.question_id: e for e in load_bird_mini_dev(args.bird_root)}
|
| 60 |
registry = get_default_registry()
|
| 61 |
|
| 62 |
-
|
| 63 |
-
|
|
|
|
|
|
|
|
|
|
| 64 |
expl_prov = sql_prov # same provider for explain
|
| 65 |
emb = CachingEmbeddingProvider(
|
| 66 |
MistralProvider(api_key=settings.mistral_api_key), cache_dir=settings.llm_cache_dir
|
|
@@ -155,6 +181,8 @@ def main() -> int:
|
|
| 155 |
)
|
| 156 |
finally:
|
| 157 |
engine.dispose()
|
|
|
|
|
|
|
| 158 |
|
| 159 |
print("\n=== critique-retry summary ===", file=sys.stderr)
|
| 160 |
print(f" cases: {len(records)}", file=sys.stderr)
|
|
@@ -166,7 +194,7 @@ def main() -> int:
|
|
| 166 |
args.out.write_text(
|
| 167 |
json.dumps(
|
| 168 |
{
|
| 169 |
-
"alt_model": "
|
| 170 |
"summary": {
|
| 171 |
"voted_better": rescued,
|
| 172 |
"voted_worse": regressed,
|
|
|
|
| 31 |
from nl_sql.eval.metrics.execution_accuracy import compare_results
|
| 32 |
from nl_sql.eval.runner import _compose_question, _execute_gold
|
| 33 |
from nl_sql.llm.cache import CachingEmbeddingProvider, CachingLLMProvider
|
| 34 |
+
from nl_sql.llm.providers.groq import GroqProvider
|
| 35 |
from nl_sql.llm.providers.mistral import MistralProvider
|
| 36 |
from nl_sql.schema_index.indexer import SchemaIndex
|
| 37 |
|
|
|
|
| 49 |
help="PipelineConfig.fewshot_top_k (default 3 = G prod). "
|
| 50 |
"Use 5 for P2.B selective expansion experiment.",
|
| 51 |
)
|
| 52 |
+
p.add_argument(
|
| 53 |
+
"--gen-model",
|
| 54 |
+
type=str,
|
| 55 |
+
default="codestral-latest",
|
| 56 |
+
help="Mistral gen model id (default codestral-latest = G prod). "
|
| 57 |
+
"Use mistral-large-latest for cross-model voting on residue.",
|
| 58 |
+
)
|
| 59 |
+
p.add_argument(
|
| 60 |
+
"--sleep-between",
|
| 61 |
+
type=float,
|
| 62 |
+
default=0.0,
|
| 63 |
+
help="Sleep N seconds between cases — required for mistral-large "
|
| 64 |
+
"on free tier (rate-limited ~2 req/s).",
|
| 65 |
+
)
|
| 66 |
+
p.add_argument(
|
| 67 |
+
"--provider",
|
| 68 |
+
type=str,
|
| 69 |
+
choices=("mistral", "groq"),
|
| 70 |
+
default="mistral",
|
| 71 |
+
help="SQL provider: mistral (default, uses --gen-model) or groq "
|
| 72 |
+
"(uses --gen-model as Groq model id, e.g. qwen/qwen3-32b).",
|
| 73 |
+
)
|
| 74 |
args = p.parse_args()
|
| 75 |
|
| 76 |
settings = get_settings()
|
|
|
|
| 82 |
examples = {e.question_id: e for e in load_bird_mini_dev(args.bird_root)}
|
| 83 |
registry = get_default_registry()
|
| 84 |
|
| 85 |
+
if args.provider == "mistral":
|
| 86 |
+
gen_provider = MistralProvider(api_key=settings.mistral_api_key, gen_model=args.gen_model)
|
| 87 |
+
else:
|
| 88 |
+
gen_provider = GroqProvider(api_key=settings.groq_api_key, model=args.gen_model)
|
| 89 |
+
sql_prov = CachingLLMProvider(gen_provider, cache_dir=settings.llm_cache_dir)
|
| 90 |
expl_prov = sql_prov # same provider for explain
|
| 91 |
emb = CachingEmbeddingProvider(
|
| 92 |
MistralProvider(api_key=settings.mistral_api_key), cache_dir=settings.llm_cache_dir
|
|
|
|
| 181 |
)
|
| 182 |
finally:
|
| 183 |
engine.dispose()
|
| 184 |
+
if args.sleep_between > 0:
|
| 185 |
+
time.sleep(args.sleep_between)
|
| 186 |
|
| 187 |
print("\n=== critique-retry summary ===", file=sys.stderr)
|
| 188 |
print(f" cases: {len(records)}", file=sys.stderr)
|
|
|
|
| 194 |
args.out.write_text(
|
| 195 |
json.dumps(
|
| 196 |
{
|
| 197 |
+
"alt_model": f"{args.provider}:{args.gen_model}+grounded_critique+fewshot{args.fewshot_top_k}",
|
| 198 |
"summary": {
|
| 199 |
"voted_better": rescued,
|
| 200 |
"voted_worse": regressed,
|