File size: 3,629 Bytes
4321963
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
---
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))