selfheal-sql / README.md
HideIron's picture
final results: gate approves BCO+replay, test +2.0pp
2a8d74e verified
|
Raw History Blame Contribute Delete
4.81 kB
---
title: Self-Healing Text-to-SQL
emoji: 🩹
colorFrom: red
colorTo: yellow
sdk: static
pinned: false
license: cc-by-sa-4.0
---
# Self-Healing Text-to-SQL (Lexsi Hackathon, Track 3, PS #8)
A fully automated self-healing loop for a **Tiny Aya Global (3.35B)** text-to-SQL
agent on **Spider**: detect failing runs by *executing* the SQL, classify root causes,
generate **execution-verified** corrective training pairs with **Aya Expanse 32B**,
retrain adapter-only (DPO / BCO) through **AgentTune**, and gate redeployment with
**AgentTune's DeploymentGate**. Outcomes independently verified with **AuditKIT**.
Result: the gate blocked four regressing adapters, approved the fifth
(BCO + success replay) on a 400-question held-out gate, and the deployed adapter
improves the unseen 500-question test split 45.6% -> 47.6% execution accuracy
(valid-SQL 68.2% -> 73.0%).
```
student (Tiny Aya) writes SQL ──▢ execcheck runs it vs gold ──▢ failures
β–² β”‚
β”‚ classify (SQL taxonomy, Aya-32B)
LoRA adapter β”‚
(AgentTune DPO/BCO retrain) generate fix (Aya-32B, never sees gold)
β–² β”‚
β”‚ execute fix ─ correct? keep : retry ≀3
158 verified pairs β—€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚
DeploymentGate (AgentTune, held-out gate split) ──▢ deploy / keep old
β”‚
final report on unseen test split (+ AuditKIT re-verification)
```
## Layout
| path | what |
|---|---|
| `src/selfheal_sql/execcheck.py` | Execution checker, the single source of truth for pass/fail |
| `src/selfheal_sql/make_splits.py` | Database-disjoint pool/gate/test splits from Spider |
| `src/selfheal_sql/make_gate_large.py` | Enlarges the gate split 100 -> 400 for statistical power |
| `src/selfheal_sql/student.py` | Student harness: prompt -> SQL -> execute -> grade -> log |
| `src/selfheal_sql/heal.py` | Classify failures + generate execution-verified training pairs |
| `src/selfheal_sql/train_dpo.py` | Adapter-only DPO/BCO via AgentTune `RetrainConfig`/`build_retrainer` |
| `src/selfheal_sql/gate_decision.py` | AgentTune `DeploymentGate.evaluate_decision` on gate data |
| `src/selfheal_sql/audit_eval.py` | AuditKIT `agent_eval` with a fresh-execution outcome oracle |
| `src/selfheal_sql/metrics.py` | Before/after report (accuracy, heal/regression rate, McNemar) |
| `src/selfheal_sql/launch_job.py` | Runs any of the above on HF Jobs GPUs |
| `src/selfheal_sql/build_hf_dataset.py` | Packages splits + SQLite DBs to the HF dataset repo |
| `third_party/agenttune_gate/` | AgentTune's DeploymentGate vendored verbatim (provenance inside) |
| `writeup/` | HF Article |
## Hugging Face artifacts (all public)
- Project page + this source: Space `HideIron/selfheal-sql`
- Dataset (splits + 149 Spider DBs): `HideIron/selfheal-sql-spider`
- Every run log, heal pairs, gate decisions, metrics, audits: `HideIron/selfheal-sql-runs`
- Adapters: `HideIron/tiny-aya-global-sql-selfheal` (DPO, blocked),
`...-bco` (blocked), `...-bco-replay` (deployed)
## Reproduce
```bash
# 1. splits (needs the official Spider download)
python src/selfheal_sql/make_splits.py <spider_data_dir> data/splits 600 100 500 0
python src/selfheal_sql/make_gate_large.py --total 400 --seed 1
# 2. baseline on an HF Jobs A10G
python src/selfheal_sql/launch_job.py --name baseline-pool -- student.py --split pool
# 3. heal (local; needs HF_TOKEN for the Aya-32B router calls)
python src/selfheal_sql/heal.py --split-file data/splits/pool.jsonl --out data/heal
# 4. retrain (AgentTune on an A10G); best recipe = BCO + success replay
python src/selfheal_sql/launch_job.py --name bco-replay --image python:3.12 \
--pip "agenttune huggingface_hub" -- train_dpo.py --algorithm bco \
--replay-run baseline-pool600 --adapter-repo <you>/tiny-aya-sql-bco-replay
# 5. healed evals, gate, metrics
python src/selfheal_sql/launch_job.py --name healed-gate -- student.py --split gate_large \
--adapter <you>/tiny-aya-sql-bco-replay
python src/selfheal_sql/gate_decision.py --old baseline-gate-large --new healed-gate
python src/selfheal_sql/metrics.py --pair test:baseline-test:healed-test
python src/selfheal_sql/audit_eval.py --run healed-test --split-file data/splits/test.jsonl
```
Models: Tiny Aya Global (student) and Aya Expanse 32B (healer), both open-weights
Cohere Labs models from the hackathon's allowed list. Spider is CC BY-SA 4.0.
AgentTune/AuditKIT are Lexsi Labs (their respective licenses).