| | --- |
| | 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)) |