Instructions to use chabab/gemma-3-270m-text2sql-oracle-postgres with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use chabab/gemma-3-270m-text2sql-oracle-postgres with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="chabab/gemma-3-270m-text2sql-oracle-postgres") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("chabab/gemma-3-270m-text2sql-oracle-postgres") model = AutoModelForCausalLM.from_pretrained("chabab/gemma-3-270m-text2sql-oracle-postgres", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use chabab/gemma-3-270m-text2sql-oracle-postgres with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "chabab/gemma-3-270m-text2sql-oracle-postgres" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "chabab/gemma-3-270m-text2sql-oracle-postgres", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/chabab/gemma-3-270m-text2sql-oracle-postgres
- SGLang
How to use chabab/gemma-3-270m-text2sql-oracle-postgres with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "chabab/gemma-3-270m-text2sql-oracle-postgres" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "chabab/gemma-3-270m-text2sql-oracle-postgres", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "chabab/gemma-3-270m-text2sql-oracle-postgres" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "chabab/gemma-3-270m-text2sql-oracle-postgres", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use chabab/gemma-3-270m-text2sql-oracle-postgres with Docker Model Runner:
docker model run hf.co/chabab/gemma-3-270m-text2sql-oracle-postgres
Use Docker
docker model run hf.co/chabab/gemma-3-270m-text2sql-oracle-postgresgemma-3-270m-text2sql-oracle-postgres
google/gemma-3-270m-it fine-tuned to turn a
schema + a natural-language question into one dialect-correct SQL statement — Oracle or
PostgreSQL — with no markdown fences and no commentary.
At 270M parameters it runs on CPU and quantizes to ~290 MB.
Results
Held-out test split (60 examples), greedy decoding, normalized exact match against gold SQL:
| Slice | Exact match |
|---|---|
| Overall | 78.3% (47/60) |
| Oracle | 86.7% (39/45) |
| PostgreSQL | 53.3% (8/15) |
| easy | 93.3% (14/15) |
| medium | 69.2% (27/39) |
| hard | 100% (6/6) |
Per-example predictions are in eval_results.json.
Caveats worth knowing before you rely on these numbers:
- The test split is skewed 45 Oracle / 15 PostgreSQL, so the PostgreSQL figure rests on 15 examples and has a wide error bar.
- Exact match is strict. Several "failures" are valid SQL that differs from gold — an extra
LIMIT, a different but equivalent predicate. Real semantic accuracy is higher than 78.3%. - The most common genuine error is dialect leakage: emitting
LIKEwhere PostgreSQL gold usesILIKE. If case-insensitive matching matters to you, check that specific pattern. - Only the 7 schemas in the training set (hr, sales, banking, inventory, tickets, university, logistics) are represented. Generalization to unseen schemas is untested.
Usage
The model expects the system prompt naming the dialect, then a Schema: block and a Question:
block — the same shape as the training data.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "chabab/gemma-3-270m-text2sql-oracle-postgres"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
dtype=torch.bfloat16,
attn_implementation="eager", # Gemma-3 needs eager attention for correct generation
device_map="auto",
)
messages = [
{"role": "system", "content": "You convert natural language into PostgreSQL SQL. Use only tables and columns from the provided schema. Reply with one SQL statement and nothing else. No markdown fences. No commentary."},
{"role": "user", "content": """Schema:
employees(
employee_id INTEGER PK,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
salary NUMERIC(12,2),
department_id INTEGER FK->departments.department_id
)
Question:
Show the five employees with the largest salary. Return only the SQL."""},
]
ids = tok.apply_chat_template(messages, add_generation_prompt=True,
return_tensors="pt", return_dict=True).to(model.device)
out = model.generate(**ids, max_new_tokens=256, do_sample=False)
print(tok.decode(out[0][ids["input_ids"].shape[-1]:], skip_special_tokens=True).strip())
# SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC LIMIT 5;
Two things matter for output quality:
- Use greedy decoding (
do_sample=False). The task has one right answer; sampling only adds drift. - Use
attn_implementation="eager". Gemma-3 generates degenerate repeated tokens under the default SDPA path in some configurations.
GGUF / local inference
Quantized builds for Ollama, LM Studio, and llama.cpp:
chabab/gemma-3-270m-text2sql-oracle-postgres-GGUF
Training
Full-parameter SFT (no LoRA — the model is small enough to tune end to end) with TRL SFTTrainer
on one L4 GPU, about 10 minutes.
| Base | google/gemma-3-270m-it |
| Data | chabab/text2sql-oracle-postgres — 684 train / 60 validation / 60 test |
| Epochs | 5 |
| Effective batch size | 16 (4 × 4 grad accum) |
| Learning rate | 5e-5, cosine, 10 warmup steps |
| Max sequence length | 1024 |
| Precision | bf16 |
Final metrics: train loss 0.0256, eval loss 0.0683, eval token accuracy 98.5%. Eval loss fell monotonically through training with no divergence.
Limitations
Generated SQL is not validated against a live database. The model can produce syntactically valid statements that reference the wrong table or misread the intent — two of the observed test failures do exactly that. Review output before executing it, and never run generated SQL against production with write permissions.
License
Apache 2.0, inheriting the Gemma terms of use from the base model.
- Downloads last month
- -
Install from pip and serve model
# Install vLLM from pip: pip install vllm# Start the vLLM server: vllm serve "chabab/gemma-3-270m-text2sql-oracle-postgres"# Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "chabab/gemma-3-270m-text2sql-oracle-postgres", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'