menouar commited on
Commit
6674f1f
Β·
1 Parent(s): e2f32aa
Files changed (2) hide show
  1. app.py +52 -9
  2. utils/components_creator.py +7 -7
app.py CHANGED
@@ -31,11 +31,24 @@ css = """
31
  align-items: center;
32
  transition: var(--button-transition);
33
  box-shadow: var(--button-shadow);
34
- text-align: center
 
 
 
 
 
 
 
35
  }
 
36
  .a_custom a {
37
  text-decoration: none;
38
  color: white;
 
 
 
 
 
39
  }
40
  """
41
 
@@ -44,6 +57,10 @@ def centered_column():
44
  return gr.Column(elem_classes=["container"])
45
 
46
 
 
 
 
 
47
  def should_login_to_hf_model(model_id: str):
48
  return model_id == gemma.name or model_id == llama.name
49
 
@@ -213,21 +230,47 @@ def generate_code(components: dict[Component, Any]):
213
 
214
  with gr.Blocks(css=css, theme=gr.themes.Soft(text_size='lg', font=["monospace"],
215
  primary_hue=gr.themes.colors.blue)) as demo:
216
- gr.Label("UI-Guided LLM FineTuning Jupyter Notebook Generator πŸ› οΈπŸ§ ", show_label=False)
217
- gr.Markdown(
218
- 'Generating a **Jupyter Notebook file (.ipynb)** πŸ“”βš™οΈ for **finetuning** a Large Language Model (**LLM**) '
219
- '🎚️🧠 on a chosen dataset (**ChatML Format**) and configured parameters, guided by an intuitive **User Interface (UI)** πŸ‘†πŸ’».',
220
- elem_classes=["center_text"])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
 
222
  all_components: Set[Component] = set()
223
 
224
- gr.HTML("<h2 style='text-align: center;'>LLM 🧠</h2>")
225
  with gr.Row():
226
  model_selection = gr.Dropdown(
227
  [model.name for model in models],
228
  elem_id=MODEL_SELECTION_ID,
229
- label="Select a Large Language Model (LLM)",
230
- info="Select a Large Language Model (LLM) to finetune using the SFTTrainer."
231
  )
232
  version_selection = gr.Dropdown(
233
  choices=[], label="Select a Model Version πŸ”„", info="", visible=False, elem_id=MODEL_VERSION_SELECTION_ID
 
31
  align-items: center;
32
  transition: var(--button-transition);
33
  box-shadow: var(--button-shadow);
34
+ text-align: center;
35
+ cursor: pointer;
36
+ }
37
+
38
+ .a_custom:hover {
39
+ border-color: var(--button-primary-border-color-hover);
40
+ background: var(--button-primary-background-fill-hover);
41
+ color: var(--button-primary-text-color-hover);
42
  }
43
+
44
  .a_custom a {
45
  text-decoration: none;
46
  color: white;
47
+ display: block;
48
+ }
49
+
50
+ .dashed_row {
51
+ border: 1px dashed #60a5fa;
52
  }
53
  """
54
 
 
57
  return gr.Column(elem_classes=["container"])
58
 
59
 
60
+ def dashed_row():
61
+ return gr.Row(elem_classes=["dashed_row"])
62
+
63
+
64
  def should_login_to_hf_model(model_id: str):
65
  return model_id == gemma.name or model_id == llama.name
66
 
 
230
 
231
  with gr.Blocks(css=css, theme=gr.themes.Soft(text_size='lg', font=["monospace"],
232
  primary_hue=gr.themes.colors.blue)) as demo:
233
+ gr.Label("UI-Guided LLM Fine-Tuning Jupyter Notebook Generator πŸ› οΈπŸ§ ", show_label=False)
234
+
235
+ gr.Markdown('''
236
+ This space generates a **Jupyter Notebook file (.ipynb)** πŸ“”βš™οΈ that guides you through the
237
+ entire process of **supervised fine-tuning** of a raw Large Language Model (**LLM**) 🧠 on a chosen dataset in
238
+ the **Conversational format**. The process is facilitated by an intuitive **User Interface (UI)** πŸ‘†πŸ’»:
239
+ ''', elem_classes=["center_text"])
240
+ with dashed_row():
241
+ with centered_column():
242
+ with gr.Accordion("1. No Coding Required", open=False):
243
+ gr.Markdown("The UI guides you through the entire process, eliminating the need for manual coding.")
244
+ with gr.Accordion("2. Customizable Parameters", open=False):
245
+ gr.Markdown(
246
+ "You can customize the most commonly used parameters for supervised fine-tuning to suit your needs.")
247
+ with centered_column():
248
+ with gr.Accordion("3. Comprehensive Notebook", open=False):
249
+ gr.Markdown("The generated .ipynb contains all steps, from installing libraries and writing a "
250
+ "README.md, "
251
+ "to pushing the final model to the Hugging Face Hub.")
252
+ with gr.Accordion("4. Preview Before Download", open=False):
253
+ gr.Markdown("You can preview the generated .ipynb before downloading it to ensure it "
254
+ "meets "
255
+ "your requirements.")
256
+ with centered_column():
257
+ with gr.Accordion("5. User-Friendly", open=False):
258
+ gr.Markdown("The UI is designed to be easy to use and understand, making the fine-tuning process "
259
+ "accessible "
260
+ "to everyone.")
261
+ with gr.Accordion("6. Open-Source", open=False):
262
+ gr.Markdown(
263
+ "This space is open source, so you can collaborate to improve it and make it more powerful.")
264
 
265
  all_components: Set[Component] = set()
266
 
267
+ gr.HTML("<h2 style='text-align: center;'>Model 🧠</h2>")
268
  with gr.Row():
269
  model_selection = gr.Dropdown(
270
  [model.name for model in models],
271
  elem_id=MODEL_SELECTION_ID,
272
+ label="Select a raw LLM",
273
+ info="Select a raw Large Language Model (LLM) to fine-tune."
274
  )
275
  version_selection = gr.Dropdown(
276
  choices=[], label="Select a Model Version πŸ”„", info="", visible=False, elem_id=MODEL_VERSION_SELECTION_ID
utils/components_creator.py CHANGED
@@ -51,12 +51,12 @@ def add_quantization_components1() -> Set[Component]:
51
 
52
 
53
  def add_dataset_components() -> Set[Component]:
54
- dataset_selection = gr.Dropdown(
55
- [dt.path for dt in ft_datasets],
56
- elem_id=DATASET_SELECTION_ID,
57
- label="Select a Dataset",
58
- info="Select a dataset for finetuning the model."
59
- )
60
  seed = gr.Slider(0, 256, step=1, value=42, elem_id=DATASET_SHUFFLING_SEED, label="Random Seed",
61
  info="Set a random seed for shuffling the dataset.", interactive=True)
62
 
@@ -170,7 +170,7 @@ def add_training_args_3() -> Set[Component]:
170
  def add_outputs() -> (Component, Component):
171
  output_dir = gr.Textbox(interactive=True,
172
  label="output_dir",
173
- info='The output directory where the model predictions and checkpoints will be written.',
174
  elem_id=OUTPUT_DIR_ID)
175
 
176
  push_to_hub = gr.Checkbox(label="push_to_hub", value=False, interactive=True,
 
51
 
52
 
53
  def add_dataset_components() -> Set[Component]:
54
+ dataset_selection = gr.Dropdown([dt.path for dt in ft_datasets],
55
+ elem_id=DATASET_SELECTION_ID,
56
+ label="Select a Dataset",
57
+ info="Choose a dataset to finetune the model in the ChatML format."
58
+ )
59
+
60
  seed = gr.Slider(0, 256, step=1, value=42, elem_id=DATASET_SHUFFLING_SEED, label="Random Seed",
61
  info="Set a random seed for shuffling the dataset.", interactive=True)
62
 
 
170
  def add_outputs() -> (Component, Component):
171
  output_dir = gr.Textbox(interactive=True,
172
  label="output_dir",
173
+ info='The output directory where the model and checkpoints will be saved.',
174
  elem_id=OUTPUT_DIR_ID)
175
 
176
  push_to_hub = gr.Checkbox(label="push_to_hub", value=False, interactive=True,