fg-sql-merged

A fine-tuned text-to-SQL model for the fg_organization HR/ERP database schema. Given a natural-language question, it generates the corresponding MySQL query. This repo is the merged model (base weights + LoRA adapter folded together, full fp16 precision) โ€” for the standalone adapter alone, see yoonboom/fg-sql-lora-adapter.

Model Details

  • Base model: Qwen/Qwen2.5-Coder-7B-Instruct
  • Fine-tuning method: QLoRA (4-bit base + LoRA adapter during training, merged back to fp16 for this repo)
  • LoRA config: r=16, alpha=32, dropout=0.05, target modules q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj
  • Precision: fp16 (merged); a q8_0 GGUF quantization is also available for llama.cpp/Ollama serving at yoonboom/fg-sql-gguf
  • Language: English (natural-language input), MySQL 8.0 dialect (SQL output)

Intended Use

Translate natural-language questions about a fictional company's HR/ERP data into MySQL queries against the fg_organization schema (18 tables covering organization structure, workforce, projects/tasks, and finance). Intended to run behind a guardrail layer that validates generated SQL against the real schema before execution (see sql_schema_guard.py in the companion repo) โ€” this model should not be trusted to execute SQL directly against a production database without that validation step.

Out of Scope

  • Any other database schema โ€” this model is specifically tuned to fg_organization's tables/columns/ID conventions and will not generalize to arbitrary SQL schemas.
  • Recruitment/candidate data, IT asset tracking, employee training records, and real external client identity โ€” the underlying schema has no tables for any of these; the model is trained to decline these rather than fabricate a table.
  • True cost/profit/margin calculations โ€” the schema has no cost/rate column anywhere, only revenue and hours logged as separate figures.

Training Data

  • 400 hand-written/generated questionโ†’SQL pairs (320 train / 40 val / 40 test), stratified across ~10-11 categories: simple lookups, joins, aggregations, date/time filtering, manager-hierarchy recursion, and mixed-complexity queries (CTEs, EXISTS, correlated subqueries).
  • Schema: fg_organization, 18 tables, MySQL 8.0 (WITH RECURSIVE support required for hierarchy queries).

Training Procedure

  • Hardware: Google Colab free-tier, Tesla T4 GPU (16GB VRAM, fp16 only โ€” no bf16 support)
  • Method: QLoRA โ€” 4-bit quantized base (bitsandbytes, nf4, double-quant) + LoRA adapter (peft), trained via transformers.Trainer
  • Hyperparameters: 3 epochs, effective batch size 16 (per-device batch 1 ร— grad accumulation 16), learning rate 2e-4, cosine schedule, 3% warmup, paged_adamw_8bit optimizer
  • Loss masking: assistant-turn-only (system + user prompt tokens masked to -100, loss computed only on the generated SQL)

Training Results

Step Train loss Val loss
10 0.369 0.227
20 0.195 0.155
30 0.102 0.124
40 0.075 0.113
50 0.065 0.110
60 0.048 0.109

Val loss plateaus over the final 20 steps while train loss keeps falling โ€” 3 epochs was about the right stopping point for this dataset size.

Evaluation

  • Exact-match on held-out test set (40 examples): 30% strict string-match; substantially higher (68%) when accounting for functionally-equivalent-but-differently-styled SQL (renamed aliases, different but valid ORDER BY choices, extra helpful columns).
  • Known weak categories (as of this checkpoint): resolving named roles/titles without hardcoded lookups, descendant-direction recursive hierarchy questions ("everyone under X" vs. "who X reports to"), and a tendency toward schema hallucination under harder aggregation/CTE questions (invented column/ID names that don't exist in the real schema).
  • A static schema-fidelity checker (regex/alias-aware, no DB required) is used alongside this model in production to catch hallucinated tables/columns/IDs before execution.

Limitations

  • Trained on a relatively small dataset (400 pairs) for a 7B model โ€” some brittleness on question phrasings not well-represented in training data should be expected, particularly for hierarchy-direction and role/title resolution questions (see Evaluation above).
  • This model can still generate SQL referencing non-existent columns/tables/IDs when uncertain, rather than reliably declining โ€” always validate output against the real schema before execution.
  • Specific to the fg_organization schema; not a general-purpose text-to-SQL model.

License

Apache 2.0 (inherited from the Qwen2.5-Coder-7B-Instruct base model).

Downloads last month
26
Safetensors
Model size
8B params
Tensor type
F16
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for yoonboom/fg-sql-merged

Base model

Qwen/Qwen2.5-7B
Adapter
(730)
this model