--- library_name: transformers tags: - text-to-sql - sql - natural-language-processing - peft - qlora - phi-2 - sqlite - database - code-generation - question-answering language: - en license: mit base_model: microsoft/phi-2 datasets: - spider pipeline_tag: text-generation --- # 🦌 Antelope Text-to-SQL **Convert plain English questions into SQL queries instantly.** Lightweight, fast, and runs on CPU. No database expertise needed. 🚀 **[Try the live demo →](https://huggingface.co/spaces/AuricErgeson/Antelope-textTosql-demo)** --- ## What it does | Question | Database | Output | |---|---|---| | How many employees are there? | company | `SELECT COUNT(*) FROM employees` | | List all customers from Germany | store | `SELECT * FROM customers WHERE country = 'Germany'` | | What is the average salary by department? | hr | `SELECT department, AVG(salary) FROM employees GROUP BY department` | --- ## Quick Start ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch model_id = "AuricErgeson/Antelope-textTosql" tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True) model = AutoModelForCausalLM.from_pretrained( model_id, torch_dtype=torch.float16, device_map="auto", trust_remote_code=True ) def generate_sql(question, db=""): prompt = ( f"### Task: Convert question to SQL. Use only what the question asks. Simple questions need simple SQL.\n" f"### Database: {db}\n" f"### Question: {question}\n" f"### SQL:" ) inputs = tokenizer(prompt, return_tensors="pt").to(model.device) with torch.no_grad(): out = model.generate( **inputs, max_new_tokens=128, temperature=0.1, do_sample=True, pad_token_id=tokenizer.eos_token_id ) decoded = tokenizer.decode(out[0], skip_special_tokens=True) return decoded.split("### SQL:")[-1].strip().split("\n")[0] print(generate_sql("How many employees are in each department?", db="company")) # → SELECT department, COUNT(*) FROM employees GROUP BY department ``` --- ## Why use this model? - ✅ **Small** — 2.7B params, runs on modest hardware - ✅ **Fast** — CPU inference possible, GPU recommended - ✅ **Open** — MIT license, use anywhere - ✅ **No setup** — works out of the box with `transformers` - ✅ **Cross-domain** — trained on 200+ database schemas --- ## Prompt Format ``` ### Task: Convert question to SQL. Use only what the question asks. Simple questions need simple SQL. ### Database: {your_database_name} ### Question: {your_question} ### SQL: ``` --- ## Via HuggingFace Inference API ```python import requests API_URL = "https://api-inference.huggingface.co/models/AuricErgeson/Antelope-textTosql" headers = {"Authorization": "Bearer YOUR_HF_TOKEN"} response = requests.post(API_URL, headers=headers, json={ "inputs": "### Task: Convert question to SQL. Use only what the question asks. Simple questions need simple SQL.\n### Database: company\n### Question: How many employees?\n### SQL:" }) print(response.json()) ``` --- ## Training Details | Property | Value | |---|---| | Base model | microsoft/phi-2 (2.7B) | | Method | QLoRA (4-bit + LoRA) | | Dataset | Spider (7,000+ examples, 200+ databases) | | LoRA rank | 16 | | LoRA alpha | 32 | | Target modules | q_proj, v_proj | | Learning rate | 2e-4 | | Epochs | 3 | | Hardware | NVIDIA A100 (Google Colab) | | Training time | ~1.5 hours | | Adapter size | ~21MB | | Merged model size | ~5.56GB | --- ## Limitations - Not recommended for production databases without output validation - Complex multi-join queries may be inaccurate - Does not infer table/column names — provide your database name for best results --- ## Roadmap - [x] Text-to-SQL (this model) - [ ] Text-to-Regex (coming soon) - [ ] Text-to-Shell (planned) --- ## Author **Auric Ergeson Nitonde** 📧 auricergesonnitonde@gmail.com 🤗 [HuggingFace Profile](https://huggingface.co/AuricErgeson) *If this model helped you, consider leaving a like ⭐ — it helps others find it.*