Spaces:
Sleeping
Sleeping
File size: 3,598 Bytes
269f632 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | """Task definitions for SQL Repair env.
Each task gives the agent:
- schema : list of CREATE/INSERT statements (executed verbatim)
- broken : a SQL query that errors or returns the wrong rows
- canonical : the reference fix used to compute expected_rows
- hint : short natural-language pointer
Difficulty is tuned so even a vanilla LLM agent (Nemotron-class) can solve
task_1 reliably, task_2 with effort, and task_3 about half the time —
ensuring score variance across tasks (Phase 2 likely checks for this).
"""
from typing import Dict, List
TASKS: Dict[str, dict] = {
"task_1": {
"id": "task_1",
"name": "Missing commas in SELECT list",
"difficulty": "easy",
"schema": [
"CREATE TABLE products (id INTEGER PRIMARY KEY, name TEXT NOT NULL, price REAL NOT NULL);",
"INSERT INTO products VALUES (1, 'Apple', 0.50);",
"INSERT INTO products VALUES (2, 'Bread', 2.50);",
"INSERT INTO products VALUES (3, 'Cheese', 5.00);",
"INSERT INTO products VALUES (4, 'Milk', 1.50);",
"INSERT INTO products VALUES (5, 'Eggs', 3.00);",
],
"broken_query": "SELECT id name price FROM products ORDER BY id",
"canonical_query": "SELECT id, name, price FROM products ORDER BY id",
"hint": "The SELECT list is missing commas between column names.",
},
"task_2": {
"id": "task_2",
"name": "Wrong column reference in JOIN",
"difficulty": "medium",
"schema": [
"CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, country TEXT);",
"CREATE TABLE orders (id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL, total REAL NOT NULL);",
"INSERT INTO users VALUES (1, 'Aarav', 'IN');",
"INSERT INTO users VALUES (2, 'Bea', 'US');",
"INSERT INTO users VALUES (3, 'Chen', 'CN');",
"INSERT INTO orders VALUES (10, 1, 99.00);",
"INSERT INTO orders VALUES (11, 1, 49.50);",
"INSERT INTO orders VALUES (12, 2, 200.00);",
"INSERT INTO orders VALUES (13, 3, 25.00);",
],
"broken_query": (
"SELECT u.username, o.total "
"FROM users u JOIN orders o ON u.id = o.user "
"ORDER BY o.id"
),
"canonical_query": (
"SELECT u.name, o.total "
"FROM users u JOIN orders o ON u.id = o.user_id "
"ORDER BY o.id"
),
"hint": "Two columns are misspelled — check the schema for the real names.",
},
"task_3": {
"id": "task_3",
"name": "Aggregate without GROUP BY",
"difficulty": "hard",
"schema": [
"CREATE TABLE sales (id INTEGER PRIMARY KEY, region TEXT NOT NULL, amount REAL NOT NULL);",
"INSERT INTO sales VALUES (1, 'north', 100.00);",
"INSERT INTO sales VALUES (2, 'north', 50.00);",
"INSERT INTO sales VALUES (3, 'south', 200.00);",
"INSERT INTO sales VALUES (4, 'south', 75.00);",
"INSERT INTO sales VALUES (5, 'east', 150.00);",
"INSERT INTO sales VALUES (6, 'east', 25.00);",
],
"broken_query": "SELECT region, SUM(amount) AS total FROM sales ORDER BY region",
"canonical_query": (
"SELECT region, SUM(amount) AS total FROM sales "
"GROUP BY region ORDER BY region"
),
"hint": "You SELECT a non-aggregate column with an aggregate — add GROUP BY.",
},
}
TASK_IDS: List[str] = list(TASKS.keys())
|