File size: 4,040 Bytes
ed0dca2
a40632d
bdf3e70
 
30da7cc
 
9e53c43
b1cf10f
30da7cc
b1cf10f
a40632d
 
42cd34a
30da7cc
42cd34a
30da7cc
 
 
 
 
 
 
 
 
 
 
42cd34a
30da7cc
42cd34a
bdf3e70
ed0dca2
52589e7
17dfda2
 
c59143e
17dfda2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f58a3a5
611772e
 
 
 
f58a3a5
611772e
 
 
 
 
 
 
 
f58a3a5
 
 
17dfda2
 
 
 
 
8c9400b
 
17dfda2
 
 
 
 
 
52589e7
 
 
 
17dfda2
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
##################################### Imports ######################################
# Generic imports
import gradio as gr

# Module imports
from utilities.setup import get_json_cfg
from utilities.templates import prompt_template

########################### Global objects and functions ###########################

conf = get_json_cfg()

def textbox_visibility(radio):
    value = radio
    if value == "Hugging Face Hub Dataset":
        return gr.Dropdown(visible=bool(1))
    else:
        return gr.Dropdown(visible=bool(0))

def upload_visibility(radio):
    value = radio
    if value == "Upload Your Own":
        return gr.UploadButton(visible=bool(1)) #make it visible
    else:
        return gr.UploadButton(visible=bool(0))

def greet(model_name, inject_prompt, dataset):
    """The model call"""
    return f"Hello!! Using model: {model_name} with template: {inject_prompt}"

##################################### App UI #######################################

def main():
    with gr.Blocks() as demo:
    
        ##### Title Block #####
        gr.Markdown("# Instruction Tuning with Unsloth")
    
        ##### Model Inputs #####
    
        # Select Model
        modelnames = conf['model']['choices']
        model_name = gr.Dropdown(label="Supported Models", 
                                 choices=modelnames, 
                                 value=modelnames[0])
        # Prompt template
        inject_prompt = gr.Textbox(label="Prompt Template", 
                                     value=prompt_template())
        # Dataset choice
        dataset_choice = gr.Radio(label="Choose Dataset", 
                                  choices=["Hugging Face Hub Dataset", "Upload Your Own"], 
                                  value="Hugging Face Hub Dataset")
        dataset_predefined = gr.Textbox(label="Hugging Face Hub Dataset", 
                                        value='yahma/alpaca-cleaned', 
                                        visible=True)
        dataset_upload = gr.UploadButton(label="Upload Dataset (csv, jsonl, or txt)", 
                                         file_types=[".csv",".jsonl", ".txt"], 
                                         visible=False)
        dataset_choice.change(textbox_visibility, 
                              dataset_choice, 
                              dataset_predefined)
        dataset_choice.change(upload_visibility, 
                              dataset_choice, 
                              dataset_upload)
        # Hyperparameters (allow selection, but hide in accordion.)
        with gr.Accordion("Advanced Tuning", open=False):
            # config
            peftparams = conf['model']['peft']
            sftparams = conf['model']['sft']
            # accordion container content
            gr.Markdown("### PEFT Parameters")
            r = gr.Textbox(label="r", value=peftparams['r'])
            alpha = gr.Textbox(label="LoRA alpha", value=peftparams['alpha'])
            dropout = gr.Textbox(label="LoRA dropout", value=peftparams['dropout'])
            bias = gr.Textbox(label="Bias", value=peftparams['bias'])
            seed = gr.Textbox(label="Random State", value=peftparams['seed'])
            rslora = gr.Textbox(label="Use R-S LoRA", value=peftparams['rslora'])
            pefts = [r, alpha, dropout, bias, seed, rslora]
            
            gr.Markdown("List of items")
            gr.Markdown("### Supervised Fine-Tuning Parameters")
            gr.Markdown("List of items")
        
        ##### Execution #####
    
        # Setup button
        tune_btn = gr.Button("Start Fine Tuning")
        # Text output (for now)
        output = gr.Textbox(label="Output") 
        # Execute button
        tune_btn.click(fn=greet, 
                       inputs=[model_name, inject_prompt, dataset_predefined],
                       outputs=output)
        # Launch baby
        demo.launch()

##################################### Launch #######################################

if __name__ == "__main__":
    main()