|
|
--- |
|
|
library_name: transformers |
|
|
license: apache-2.0 |
|
|
base_model: |
|
|
- Ellbendls/Qwen-3-4b-Text_to_SQL |
|
|
pipeline_tag: text-generation |
|
|
datasets: |
|
|
- gretelai/synthetic_text_to_sql |
|
|
language: |
|
|
- fra |
|
|
- eng |
|
|
- zho |
|
|
- spa |
|
|
- por |
|
|
- deu |
|
|
- ita |
|
|
- rus |
|
|
- jpn |
|
|
- kor |
|
|
- vie |
|
|
- tha |
|
|
- ara |
|
|
--- |
|
|
|
|
|
# Modèle Text-to-SQL – Version Strict + Fine-Tuning Personnalisé |
|
|
|
|
|
Ce modèle est une version améliorée de **Ellbendls/Qwen-3-4b-Text_to_SQL** (Apache-2.0). |
|
|
Il inclut : |
|
|
|
|
|
### ✔ un pré-prompt intégré “Discipline SQL”, |
|
|
### ✔ un léger fine-tuning sur un dataset interne spécialisé, |
|
|
### ✔ un packaging propre pour un usage en production. |
|
|
|
|
|
L’objectif est de fournir une génération SQL **fiable, stricte, reproductible et mieux alignée** sur les besoins métier spécifiques du cas d’usage ciblé. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🧠 Description du modèle |
|
|
|
|
|
Ce modèle transforme des instructions en langage naturel en requêtes SQL standardisées. |
|
|
La version originale a été améliorée sur deux axes : |
|
|
|
|
|
### **1) Discipline SQL intégrée dans le `generation_config.json`** |
|
|
Elle impose : |
|
|
- sortie **UNIQUEMENT SQL** |
|
|
- format propre et cohérent |
|
|
- alias systématiques dans les jointures |
|
|
- liste explicite des colonnes |
|
|
- **sélection de toutes les colonnes seulement si l’utilisateur le demande explicitement** |
|
|
- pas d’invention de tables ou colonnes |
|
|
|
|
|
### **2) Fine-tuning léger basé sur un dataset interne** |
|
|
Ce fine-tuning ajoute : |
|
|
- de nouveaux schémas de base de données |
|
|
- des requêtes métiers typiques |
|
|
- un style de SQL homogène |
|
|
- de meilleures performances sur un domaine précis |
|
|
|
|
|
Ce fine-tuning (LoRA ou QLoRA) permet d’adapter finement le comportement du modèle sans nécessiter un entraînement complet. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🔍 Caractéristiques clés |
|
|
|
|
|
### **✔ Conversion texte → SQL fiable** |
|
|
Génération de requêtes SQL propres, correctes et adaptées aux schémas ciblés. |
|
|
|
|
|
### **✔ Standardisation stricte, mais flexible** |
|
|
Le modèle évite `SELECT *` **à moins que l’utilisateur demande explicitement “toutes les colonnes”**. |
|
|
|
|
|
### **✔ Aligné sur ton domaine métier** |
|
|
Grâce au fine-tune interne, les requêtes sont plus pertinentes et contextualisées. |
|
|
|
|
|
### **✔ Multilingue** |
|
|
Fonctionne en français, anglais, espagnol, portugais, allemand, chinois, etc. |
|
|
|
|
|
### **✔ Fenêtre de contexte étendue** |
|
|
Adapté aux grandes bases, requêtes complexes, longues définitions de tables. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🧩 Exemple de prompt interne intégré |
|
|
|
|
|
Le pré-prompt utilisé dans cette version : |
|
|
|
|
|
You are a strict SQL generation engine. |
|
|
Your only task is to convert natural language instructions into valid SQL queries. |
|
|
Rules: |
|
|
1. Output ONLY SQL. No explanations, no comments. |
|
|
2. Always generate syntactically correct SQL. |
|
|
3. Never invent tables or columns. |
|
|
4. Avoid SELECT * unless the user explicitly requests all columns. |
|
|
5. Use explicit column lists by default. |
|
|
6. Use clear table aliases when joins are present. |
|
|
7. Keep formatting clean and standardized. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🚀 Exemple d’utilisation |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
|
|
|
model_name = "Hugo991/SQLBuilder" |
|
|
|
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
model = AutoModelForCausalLM.from_pretrained(model_name) |
|
|
|
|
|
user_input = "Montre-moi tous les départements avec leur identifiant." |
|
|
|
|
|
# On récupère le template intégré dans le generation_config |
|
|
template = tokenizer.generation_config.prompt_template |
|
|
prompt = template.replace("{input}", user_input) |
|
|
|
|
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
|
outputs = model.generate(**inputs, max_new_tokens=256) |
|
|
|
|
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True)) |