Gansaw98 commited on
Commit
b60a4b7
·
verified ·
1 Parent(s): 0511339

Upload 4 files

Browse files
Files changed (4) hide show
  1. .gitkeep +0 -0
  2. README.md +15 -203
  3. app.py +108 -0
  4. requirements.txt +5 -0
.gitkeep ADDED
File without changes
README.md CHANGED
@@ -1,209 +1,21 @@
1
  ---
2
- base_model: Qwen/Qwen2.5-Coder-7B-Instruct
3
- library_name: peft
4
- pipeline_tag: text-generation
5
- tags:
6
- - base_model:adapter:Qwen/Qwen2.5-Coder-7B-Instruct
7
- - lora
8
- - sft
9
- - transformers
10
- - trl
11
  ---
12
 
13
- # Model Card for Model ID
14
 
15
- <!-- Provide a quick summary of what the model is/does. -->
 
 
16
 
 
 
17
 
18
-
19
- ## Model Details
20
-
21
- ### Model Description
22
-
23
- <!-- Provide a longer summary of what this model is. -->
24
-
25
-
26
-
27
- - **Developed by:** [More Information Needed]
28
- - **Funded by [optional]:** [More Information Needed]
29
- - **Shared by [optional]:** [More Information Needed]
30
- - **Model type:** [More Information Needed]
31
- - **Language(s) (NLP):** [More Information Needed]
32
- - **License:** [More Information Needed]
33
- - **Finetuned from model [optional]:** [More Information Needed]
34
-
35
- ### Model Sources [optional]
36
-
37
- <!-- Provide the basic links for the model. -->
38
-
39
- - **Repository:** [More Information Needed]
40
- - **Paper [optional]:** [More Information Needed]
41
- - **Demo [optional]:** [More Information Needed]
42
-
43
- ## Uses
44
-
45
- <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
46
-
47
- ### Direct Use
48
-
49
- <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
50
-
51
- [More Information Needed]
52
-
53
- ### Downstream Use [optional]
54
-
55
- <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
56
-
57
- [More Information Needed]
58
-
59
- ### Out-of-Scope Use
60
-
61
- <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
62
-
63
- [More Information Needed]
64
-
65
- ## Bias, Risks, and Limitations
66
-
67
- <!-- This section is meant to convey both technical and sociotechnical limitations. -->
68
-
69
- [More Information Needed]
70
-
71
- ### Recommendations
72
-
73
- <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
74
-
75
- Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
76
-
77
- ## How to Get Started with the Model
78
-
79
- Use the code below to get started with the model.
80
-
81
- [More Information Needed]
82
-
83
- ## Training Details
84
-
85
- ### Training Data
86
-
87
- <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
88
-
89
- [More Information Needed]
90
-
91
- ### Training Procedure
92
-
93
- <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
94
-
95
- #### Preprocessing [optional]
96
-
97
- [More Information Needed]
98
-
99
-
100
- #### Training Hyperparameters
101
-
102
- - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
103
-
104
- #### Speeds, Sizes, Times [optional]
105
-
106
- <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
107
-
108
- [More Information Needed]
109
-
110
- ## Evaluation
111
-
112
- <!-- This section describes the evaluation protocols and provides the results. -->
113
-
114
- ### Testing Data, Factors & Metrics
115
-
116
- #### Testing Data
117
-
118
- <!-- This should link to a Dataset Card if possible. -->
119
-
120
- [More Information Needed]
121
-
122
- #### Factors
123
-
124
- <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
125
-
126
- [More Information Needed]
127
-
128
- #### Metrics
129
-
130
- <!-- These are the evaluation metrics being used, ideally with a description of why. -->
131
-
132
- [More Information Needed]
133
-
134
- ### Results
135
-
136
- [More Information Needed]
137
-
138
- #### Summary
139
-
140
-
141
-
142
- ## Model Examination [optional]
143
-
144
- <!-- Relevant interpretability work for the model goes here -->
145
-
146
- [More Information Needed]
147
-
148
- ## Environmental Impact
149
-
150
- <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
151
-
152
- Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
153
-
154
- - **Hardware Type:** [More Information Needed]
155
- - **Hours used:** [More Information Needed]
156
- - **Cloud Provider:** [More Information Needed]
157
- - **Compute Region:** [More Information Needed]
158
- - **Carbon Emitted:** [More Information Needed]
159
-
160
- ## Technical Specifications [optional]
161
-
162
- ### Model Architecture and Objective
163
-
164
- [More Information Needed]
165
-
166
- ### Compute Infrastructure
167
-
168
- [More Information Needed]
169
-
170
- #### Hardware
171
-
172
- [More Information Needed]
173
-
174
- #### Software
175
-
176
- [More Information Needed]
177
-
178
- ## Citation [optional]
179
-
180
- <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
181
-
182
- **BibTeX:**
183
-
184
- [More Information Needed]
185
-
186
- **APA:**
187
-
188
- [More Information Needed]
189
-
190
- ## Glossary [optional]
191
-
192
- <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
193
-
194
- [More Information Needed]
195
-
196
- ## More Information [optional]
197
-
198
- [More Information Needed]
199
-
200
- ## Model Card Authors [optional]
201
-
202
- [More Information Needed]
203
-
204
- ## Model Card Contact
205
-
206
- [More Information Needed]
207
- ### Framework versions
208
-
209
- - PEFT 0.19.1
 
1
  ---
2
+ title: Text-to-SQL Demo
3
+ emoji: 🗃️
4
+ colorFrom: blue
5
+ colorTo: indigo
6
+ sdk: gradio
7
+ app_file: app.py
8
+ pinned: false
 
 
9
  ---
10
 
11
+ # Text-to-SQL Demo
12
 
13
+ Fine-tuned **Qwen2.5-Coder-7B** (LoRA / QLoRA) on the **Spider** benchmark.
14
+ Achieves **77.7% execution accuracy** on the Spider dev set (official Yale-LILY evaluation),
15
+ surpassing a zero-shot Llama 3.3-70B baseline by **+24.5%**.
16
 
17
+ Enter a database schema (CREATE TABLE statements) and a natural-language question;
18
+ the model generates the corresponding SQL query.
19
 
20
+ - Base model: `Qwen/Qwen2.5-Coder-7B-Instruct`
21
+ - Adapter: `Gansaw98/qwen2.5-coder-7b-text2sql-spider`
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py — Hugging Face Space (ZeroGPU) Gradio demo
2
+ # Fine-tuned Qwen2.5-Coder-7B (LoRA) for Text-to-SQL on the Spider benchmark.
3
+
4
+ import os
5
+ import gradio as gr
6
+ import spaces # ZeroGPU — provides a free GPU during decorated calls
7
+ import torch
8
+ from transformers import AutoModelForCausalLM, AutoTokenizer
9
+ from peft import PeftModel
10
+
11
+ BASE_MODEL = "Qwen/Qwen2.5-Coder-7B-Instruct"
12
+ ADAPTER = "Gansaw98/qwen2.5-coder-7b-text2sql-spider"
13
+ HF_TOKEN = os.environ.get("HF_TOKEN") # only needed if the adapter repo is private
14
+
15
+ # Exact system prompt the model was fine-tuned on — do not change.
16
+ SYSTEM_PROMPT = (
17
+ "You are an expert SQL generator. "
18
+ "Given a database schema and a natural language question, "
19
+ "write the correct SQL query. "
20
+ "Output only the SQL query with no explanation or markdown."
21
+ )
22
+
23
+ # --- Load once at startup (ZeroGPU provides a GPU for initialization) -----------
24
+ tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True, token=HF_TOKEN)
25
+ base = AutoModelForCausalLM.from_pretrained(
26
+ BASE_MODEL, torch_dtype=torch.bfloat16, trust_remote_code=True, token=HF_TOKEN
27
+ ).to("cuda")
28
+ model = PeftModel.from_pretrained(base, ADAPTER, token=HF_TOKEN)
29
+ model.eval()
30
+ PAD_ID = tokenizer.pad_token_id or tokenizer.eos_token_id
31
+
32
+
33
+ @spaces.GPU(duration=60)
34
+ def generate_sql(schema: str, question: str) -> str:
35
+ schema = (schema or "").strip()
36
+ question = (question or "").strip()
37
+ if not schema or not question:
38
+ return "-- Please provide both a database schema and a question."
39
+
40
+ user = f"### Database Schema:\n{schema}\n\n### Question:\n{question}"
41
+ messages = [
42
+ {"role": "system", "content": SYSTEM_PROMPT},
43
+ {"role": "user", "content": user},
44
+ ]
45
+ inputs = tokenizer.apply_chat_template(
46
+ messages, add_generation_prompt=True, return_tensors="pt", return_dict=True
47
+ ).to(model.device)
48
+
49
+ with torch.no_grad():
50
+ out = model.generate(
51
+ **inputs,
52
+ max_new_tokens=256,
53
+ do_sample=False, # greedy, deterministic
54
+ num_beams=1,
55
+ pad_token_id=PAD_ID,
56
+ )
57
+ gen = out[0][inputs["input_ids"].shape[1]:]
58
+ return tokenizer.decode(gen, skip_special_tokens=True).strip()
59
+
60
+
61
+ # --- UI -------------------------------------------------------------------------
62
+ EXAMPLE_SCHEMA = """CREATE TABLE singer (
63
+ Singer_ID REAL PRIMARY KEY,
64
+ Name TEXT,
65
+ Country TEXT,
66
+ Song_Name TEXT,
67
+ Song_release_year TEXT,
68
+ Age REAL,
69
+ Is_male TEXT
70
+ )
71
+
72
+ CREATE TABLE concert (
73
+ concert_ID REAL PRIMARY KEY,
74
+ concert_Name TEXT,
75
+ Theme TEXT,
76
+ Stadium_ID TEXT,
77
+ Year TEXT
78
+ )"""
79
+
80
+ with gr.Blocks(title="Text-to-SQL — Fine-tuned Qwen2.5-Coder-7B") as demo:
81
+ gr.Markdown(
82
+ "# 🗃️ Text-to-SQL Demo\n"
83
+ "Fine-tuned **Qwen2.5-Coder-7B** (LoRA / QLoRA) on the **Spider** benchmark — "
84
+ "**77.7% execution accuracy**, beating a zero-shot 70B model by 24.5%.\n\n"
85
+ "Paste a database schema and ask a question in plain English; the model returns SQL."
86
+ )
87
+ with gr.Row():
88
+ with gr.Column():
89
+ schema_in = gr.Textbox(label="Database Schema (CREATE TABLE ...)", lines=14, value=EXAMPLE_SCHEMA)
90
+ question_in = gr.Textbox(label="Question (English)", lines=2,
91
+ value="How many singers are there from each country?")
92
+ btn = gr.Button("Generate SQL", variant="primary")
93
+ with gr.Column():
94
+ sql_out = gr.Code(label="Generated SQL", language="sql")
95
+
96
+ btn.click(generate_sql, inputs=[schema_in, question_in], outputs=sql_out)
97
+
98
+ gr.Examples(
99
+ examples=[
100
+ [EXAMPLE_SCHEMA, "How many singers are there from each country?"],
101
+ [EXAMPLE_SCHEMA, "What are the names of singers older than 40, ordered by age descending?"],
102
+ [EXAMPLE_SCHEMA, "Show the theme and year of every concert."],
103
+ ],
104
+ inputs=[schema_in, question_in],
105
+ )
106
+
107
+ if __name__ == "__main__":
108
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ spaces
2
+ transformers
3
+ peft
4
+ accelerate
5
+ sentencepiece