Abrak commited on
Commit
c8455f6
Β·
verified Β·
1 Parent(s): abea173

First iteration from Copilot without changes

Browse files
Files changed (1) hide show
  1. app.py +123 -0
app.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # app.py
2
+
3
+ import gradio as gr
4
+ from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments, TextDataset, DataCollatorForLanguageModeling
5
+ import torch
6
+ import os
7
+
8
+ # Check if CUDA is available
9
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
10
+
11
+ # Model name
12
+ PRETRAINED_MODEL = "distilgpt2"
13
+ MODEL_DIR = "./fine_tuned_model"
14
+
15
+ # Load tokenizer
16
+ tokenizer = AutoTokenizer.from_pretrained(PRETRAINED_MODEL)
17
+
18
+ def fine_tune_model(files):
19
+ # Combine uploaded files into one text
20
+ if not files:
21
+ return "No files uploaded."
22
+ text_data = ""
23
+ for file in files:
24
+ text = file.decode('utf-8')
25
+ text_data += text + "\n"
26
+
27
+ # Save combined text to a file
28
+ with open("train.txt", "w") as f:
29
+ f.write(text_data)
30
+
31
+ # Create dataset
32
+ dataset = TextDataset(
33
+ tokenizer=tokenizer,
34
+ file_path="train.txt",
35
+ block_size=128
36
+ )
37
+
38
+ data_collator = DataCollatorForLanguageModeling(
39
+ tokenizer=tokenizer, mlm=False,
40
+ )
41
+
42
+ # Load pre-trained model
43
+ model = AutoModelForCausalLM.from_pretrained(PRETRAINED_MODEL)
44
+ model.to(device)
45
+
46
+ # Set training arguments
47
+ training_args = TrainingArguments(
48
+ output_dir=MODEL_DIR,
49
+ overwrite_output_dir=True,
50
+ num_train_epochs=1,
51
+ per_device_train_batch_size=4,
52
+ save_steps=500,
53
+ save_total_limit=2,
54
+ logging_steps=100,
55
+ )
56
+
57
+ # Initialize Trainer
58
+ trainer = Trainer(
59
+ model=model,
60
+ args=training_args,
61
+ data_collator=data_collator,
62
+ train_dataset=dataset,
63
+ )
64
+
65
+ # Fine-tune model
66
+ trainer.train()
67
+
68
+ # Save the model
69
+ trainer.save_model(MODEL_DIR)
70
+ tokenizer.save_pretrained(MODEL_DIR)
71
+
72
+ return "Fine-tuning completed successfully!"
73
+
74
+ def generate_response(prompt, temperature, max_length, top_p):
75
+ # Load fine-tuned model if available
76
+ if os.path.exists(MODEL_DIR):
77
+ model = AutoModelForCausalLM.from_pretrained(MODEL_DIR)
78
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
79
+ else:
80
+ model = AutoModelForCausalLM.from_pretrained(PRETRAINED_MODEL)
81
+ tokenizer = AutoTokenizer.from_pretrained(PRETRAINED_MODEL)
82
+ model.to(device)
83
+
84
+ # Encode prompt
85
+ input_ids = tokenizer.encode(prompt, return_tensors='pt').to(device)
86
+
87
+ # Generate output
88
+ output = model.generate(
89
+ input_ids,
90
+ do_sample=True,
91
+ max_length=int(max_length),
92
+ temperature=float(temperature),
93
+ top_p=float(top_p),
94
+ pad_token_id=tokenizer.eos_token_id
95
+ )
96
+
97
+ response = tokenizer.decode(output[0], skip_special_tokens=True)
98
+ return response
99
+
100
+ # Build Gradio Interface
101
+
102
+ with gr.Blocks() as demo:
103
+ gr.Markdown("# πŸš€ Language Model Fine-Tuner and Chatbot")
104
+
105
+ with gr.Tab("Fine-Tune Model"):
106
+ gr.Markdown("## πŸ“š Fine-Tune the Model with Your Documents")
107
+ file_inputs = gr.File(label="Upload Text Files", file_count="multiple", type="bytes")
108
+ fine_tune_button = gr.Button("Start Fine-Tuning")
109
+ fine_tune_status = gr.Textbox(label="Status", interactive=False)
110
+ fine_tune_button.click(fine_tune_model, inputs=file_inputs, outputs=fine_tune_status)
111
+
112
+ with gr.Tab("Chat with Model"):
113
+ gr.Markdown("## πŸ’¬ Chat with the Fine-Tuned Model")
114
+ user_input = gr.Textbox(label="Your Message")
115
+ with gr.Accordion("Advanced Parameters", open=False):
116
+ temperature = gr.Slider(0.1, 1.0, value=0.7, label="Temperature")
117
+ max_length = gr.Slider(20, 200, value=100, step=10, label="Max Length")
118
+ top_p = gr.Slider(0.1, 1.0, value=0.9, label="Top-p")
119
+ generate_button = gr.Button("Generate Response")
120
+ bot_response = gr.Textbox(label="Model Response", interactive=False)
121
+ generate_button.click(generate_response, inputs=[user_input, temperature, max_length, top_p], outputs=bot_response)
122
+
123
+ demo.launch()