Spaces:
Sleeping
Sleeping
| from app.models import QueryAction, DDLAction, TestAction, SubmitAction | |
| TASK_REGISTRY = { | |
| 1: { | |
| "id": 1, | |
| "name": "Data Cleaning", | |
| "difficulty": "easy", | |
| "description": "Find the table containing NULL values in its ID column and remove only those rows, without deleting any valid data.", | |
| "max_steps": 15, | |
| "success_threshold": 0.9, | |
| "hints": [ | |
| "Start by querying sqlite_master to see all tables", | |
| "Use SELECT * FROM table WHERE col IS NULL to find the problem", | |
| "Use DELETE FROM table WHERE col IS NULL to fix it" | |
| ] | |
| }, | |
| 2: { | |
| "id": 2, | |
| "name": "PII Masking", | |
| "difficulty": "medium", | |
| "description": "Find tables containing email addresses, phone numbers, and government ID numbers (SSN/tax_id). Mask each field using SQL string functions preserving the original value length. Emails β a***@domain.com, phones β ***-***-XXXX, SSN/gov IDs β ***-**-XXXX. Do not drop any columns or NULL any values.", | |
| "max_steps": 25, | |
| "success_threshold": 0.80, | |
| "hints": [ | |
| "Query the schema first β there are three PII columns to find", | |
| "Use SUBSTR and REPLACE SQL functions for masking, not NULL or DROP", | |
| "Email mask: first char + asterisks + @domain (same total length)", | |
| "SSN mask pattern: ***-**-XXXX (keep last 4 digits)" | |
| ] | |
| }, | |
| 3: { | |
| "id": 3, | |
| "name": "Pipeline Repair", | |
| "difficulty": "hard", | |
| "description": "A SQL VIEW used by the executive dashboard is broken. Inspect the error_log table to find the real error among noise, identify the renamed columns in the source tables, and recreate the VIEW correctly.", | |
| "max_steps": 25, | |
| "success_threshold": 0.75, | |
| "hints": [ | |
| "Read the error_log table \u2014 filter for severity='ERROR'", | |
| "Query sqlite_master to see the broken VIEW definition", | |
| "Query the raw tables to find the current correct column names", | |
| "DROP the VIEW then CREATE it with corrected column names" | |
| ] | |
| } | |
| } | |
| def get_task(task_id: int) -> dict: | |
| if task_id not in TASK_REGISTRY: | |
| raise ValueError(f"task_id {task_id} not found. Valid: {list(TASK_REGISTRY.keys())}") | |
| return TASK_REGISTRY[task_id] | |
| def get_action_schema() -> dict: | |
| return { | |
| "query": QueryAction.model_json_schema(), | |
| "ddl": DDLAction.model_json_schema(), | |
| "test": TestAction.model_json_schema(), | |
| "submit": SubmitAction.model_json_schema() | |
| } | |