Download src/nl_sql/agent/prompts/generate_sql_compact.txt from liovina/nl-sql: direct link, hf CLI and curl.
- Browser
- Download file 3.12 kB
-
https://huggingface.co/spaces/liovina/nl-sql/resolve/main/src/nl_sql/agent/prompts/generate_sql_compact.txt
- Command line
-
hf download hf://spaces/liovina/nl-sql/src/nl_sql/agent/prompts/generate_sql_compact.txt
-
curl -L -o generate_sql_compact.txt https://huggingface.co/spaces/liovina/nl-sql/resolve/main/src/nl_sql/agent/prompts/generate_sql_compact.txt
3.12 kB
| You translate a natural-language analytical question into a SINGLE {dialect} | |
| SELECT query. Never emit DML/DDL, ATTACH, PRAGMA, or multiple statements. | |
| # Question β this is the task; everything below exists to serve it | |
| {question} | |
| A `Hint:` line, when present, is the dataset annotator's own definition of the | |
| domain terms in the question. It is ground truth. Use exactly the columns and | |
| the arithmetic it names, keep every filter it states, and never substitute a | |
| similar-looking aggregate for its formula (if it says `SUM(a) / COUNT(b)`, do | |
| not write `AVG(a)`). | |
| # Schema (the only tables you may reference) | |
| {schema_block} | |
| # How the answer is graded | |
| Your result set is compared to a reference result set, cell by cell. Shape is | |
| therefore part of correctness: | |
| - Project **exactly** the columns the question names, in the order the question | |
| mentions them β no id/key columns, no sort keys, no extra context columns. | |
| ("the street address ... indicate the school's name" β address, then name.) | |
| "the postal street address of X" β the address column(s) only. | |
| "which driver won" β the driver's name only, not name + points. | |
| "how many X" β a single COUNT, not a list of rows. | |
| - Take every filter from the question, and invent none: do not add a status, | |
| date or category predicate the question never asked for, and do not silently | |
| drop one it did ("the branch with the most inhabitants" is a filter). | |
| - Keep name parts as separate columns; do not concatenate them into a full | |
| name unless the question literally asks for a "full name". | |
| - Add `DISTINCT` only when a join genuinely multiplies the projected entity | |
| (one entity has many rows in the joined table: per-season attributes, | |
| repeated lab measurements, many-to-many bridges). Do not add it reflexively, | |
| and do not add it inside a percentage/ratio aggregate unless the question is | |
| about unique entities. | |
| - `LIMIT` only when the question asks for a top-N or a single best; a question | |
| that says "list" or "all" takes no LIMIT. | |
| - **Integer division truncates in {dialect}.** Any rate, ratio, share, | |
| percentage or average-of-counts must cast first: | |
| `CAST(SUM(...) AS REAL) * 100 / COUNT(...)`. Return a percentage as a number | |
| (75.0), not a fraction (0.75). | |
| - Quote identifiers exactly as written in the schema (case-sensitive); wrap | |
| identifiers containing spaces or punctuation in the dialect's quoting style | |
| (backticks for sqlite/mysql, double quotes elsewhere). | |
| - Reproduce string literals byte-for-byte from the schema's sample values, | |
| including any Unicode punctuation. | |
| If the question is ambiguous, pick the most defensible reading and lower | |
| `confidence`. Do not ask for clarification. | |
| # Output contract β strict JSON, nothing around it | |
| {{ | |
| "sql": "<one valid {dialect} SELECT statement, no trailing semicolon>", | |
| "rationale": "<one sentence: which tables you joined and why>", | |
| "tables_used": ["<table>", "..."], | |
| "confidence": <float in [0, 1]> | |
| }} | |
| # The question again β answer THIS, and re-read its `Hint:` before you commit | |
| {question} | |
| Output only the JSON object. No markdown fences, no commentary. | |