Ephraimmm commited on
Commit
1b84177
Β·
verified Β·
1 Parent(s): c483f62

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +166 -54
app.py CHANGED
@@ -1,3 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
  from peft import PeftModel, PeftConfig
@@ -6,20 +142,14 @@ import torch
6
  # Model paths
7
  ADAPTER_MODEL = "Ephraimmm/pdgn_llama_model"
8
 
9
- print("Loading LoRA adapter configuration...")
10
  peft_config = PeftConfig.from_pretrained(ADAPTER_MODEL)
11
  BASE_MODEL = peft_config.base_model_name_or_path
12
 
13
- print(f"Base model: {BASE_MODEL}")
14
- print(f"Adapter model: {ADAPTER_MODEL}")
15
-
16
- print("\nLoading tokenizer...")
17
  tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
18
-
19
  if tokenizer.pad_token is None:
20
  tokenizer.pad_token = tokenizer.eos_token
21
 
22
- print("Loading base model...")
23
  base_model = AutoModelForCausalLM.from_pretrained(
24
  BASE_MODEL,
25
  dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
@@ -27,24 +157,20 @@ base_model = AutoModelForCausalLM.from_pretrained(
27
  low_cpu_mem_usage=True,
28
  trust_remote_code=True
29
  )
30
-
31
- print("Loading LoRA adapter...")
32
  model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL)
33
  model.eval()
34
 
35
- print("Model loaded successfully!")
36
-
37
  def chat_with_pidgin_bot(message, history, system_prompt, max_length=512, temperature=0.7, top_p=0.9):
38
  conversation = f"System: {system_prompt}\n\n" if system_prompt else ""
39
  for user_msg, bot_msg in history:
40
  conversation += f"User: {user_msg}\nAssistant: {bot_msg}\n"
41
  conversation += f"User: {message}\nAssistant:"
42
-
43
  inputs = tokenizer(conversation, return_tensors="pt", truncation=True, max_length=2048)
44
-
45
  if torch.cuda.is_available():
46
  inputs = inputs.to("cuda")
47
-
48
  with torch.no_grad():
49
  outputs = model.generate(
50
  **inputs,
@@ -55,80 +181,66 @@ def chat_with_pidgin_bot(message, history, system_prompt, max_length=512, temper
55
  pad_token_id=tokenizer.eos_token_id,
56
  eos_token_id=tokenizer.eos_token_id,
57
  )
58
-
59
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
60
- response = response.split("Assistant:")[-1].strip()
61
-
62
- if "User:" in response:
63
- response = response.split("User:")[0].strip()
64
-
65
  return response
66
 
67
- custom_css = """
68
- #chatbot {
69
- height: 500px;
70
- }
71
- """
72
-
73
- with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
74
  gr.Markdown(
75
  """
76
  # Pidgin LLaMA Chatbot
77
- ### Chat with an AI trained on Nigerian Pidgin English
78
-
79
- This chatbot uses a LoRA fine-tuned model for Nigerian Pidgin.
80
  """
81
  )
82
-
83
  chatbot = gr.Chatbot(label="Pidgin Chat", elem_id="chatbot")
84
-
85
- with gr.Row():
86
- msg = gr.Textbox(label="Your Message", placeholder="Type your message here...", scale=4)
87
- send_btn = gr.Button("Send", scale=1, variant="primary")
88
-
89
  with gr.Accordion("System Prompt", open=True):
90
  system_prompt = gr.Textbox(
91
  label="System Instructions",
92
- value="You are a helpful AI assistant that speaks Nigerian Pidgin English. You are friendly, respectful, and knowledgeable about Nigerian culture.",
93
  lines=4
94
  )
95
-
96
- with gr.Row():
97
- preset1 = gr.Button("Comedian")
98
- preset2 = gr.Button("Teacher")
99
- preset3 = gr.Button("Friend")
100
- preset4 = gr.Button("Professional")
101
-
102
  with gr.Accordion("Advanced Settings", open=False):
103
  max_length = gr.Slider(50, 1024, 512, step=50, label="Max Response Length")
104
  temperature = gr.Slider(0.1, 2.0, 0.7, step=0.1, label="Temperature")
105
  top_p = gr.Slider(0.1, 1.0, 0.9, step=0.05, label="Top P")
106
-
107
  clear = gr.Button("Clear Chat")
108
-
 
109
  def respond(message, chat_history, sys_prompt, max_len, temp, top_p_val):
110
  bot_message = chat_with_pidgin_bot(message, chat_history, sys_prompt, max_len, temp, top_p_val)
111
  chat_history.append((message, bot_message))
112
  return "", chat_history
113
-
 
114
  def set_preset(preset_type):
115
  presets = {
116
  "comedian": "You are a Nigerian comedian who speaks Pidgin. Make people laugh with witty responses.",
117
- "teacher": "You are a patient teacher who speaks Nigerian Pidgin. Explain things clearly.",
118
- "friend": "You are a caring friend who speaks Nigerian Pidgin. Give good advice.",
119
- "professional": "You are a professional consultant who speaks Nigerian Pidgin. Provide practical advice."
120
  }
121
  return presets.get(preset_type, "")
122
-
 
123
  msg.submit(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot])
124
  send_btn.click(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot])
125
-
126
  preset1.click(lambda: set_preset("comedian"), None, system_prompt)
127
  preset2.click(lambda: set_preset("teacher"), None, system_prompt)
128
  preset3.click(lambda: set_preset("friend"), None, system_prompt)
129
  preset4.click(lambda: set_preset("professional"), None, system_prompt)
130
-
131
  clear.click(lambda: None, None, chatbot, queue=False)
132
 
133
  if __name__ == "__main__":
134
- demo.launch(share=True)
 
1
+ # import gradio as gr
2
+ # from transformers import AutoTokenizer, AutoModelForCausalLM
3
+ # from peft import PeftModel, PeftConfig
4
+ # import torch
5
+
6
+ # # Model paths
7
+ # ADAPTER_MODEL = "Ephraimmm/pdgn_llama_model"
8
+
9
+ # print("Loading LoRA adapter configuration...")
10
+ # peft_config = PeftConfig.from_pretrained(ADAPTER_MODEL)
11
+ # BASE_MODEL = peft_config.base_model_name_or_path
12
+
13
+ # print(f"Base model: {BASE_MODEL}")
14
+ # print(f"Adapter model: {ADAPTER_MODEL}")
15
+
16
+ # print("\nLoading tokenizer...")
17
+ # tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
18
+
19
+ # if tokenizer.pad_token is None:
20
+ # tokenizer.pad_token = tokenizer.eos_token
21
+
22
+ # print("Loading base model...")
23
+ # base_model = AutoModelForCausalLM.from_pretrained(
24
+ # BASE_MODEL,
25
+ # dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
26
+ # device_map="auto" if torch.cuda.is_available() else None,
27
+ # low_cpu_mem_usage=True,
28
+ # trust_remote_code=True
29
+ # )
30
+
31
+ # print("Loading LoRA adapter...")
32
+ # model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL)
33
+ # model.eval()
34
+
35
+ # print("Model loaded successfully!")
36
+
37
+ # def chat_with_pidgin_bot(message, history, system_prompt, max_length=512, temperature=0.7, top_p=0.9):
38
+ # conversation = f"System: {system_prompt}\n\n" if system_prompt else ""
39
+ # for user_msg, bot_msg in history:
40
+ # conversation += f"User: {user_msg}\nAssistant: {bot_msg}\n"
41
+ # conversation += f"User: {message}\nAssistant:"
42
+
43
+ # inputs = tokenizer(conversation, return_tensors="pt", truncation=True, max_length=2048)
44
+
45
+ # if torch.cuda.is_available():
46
+ # inputs = inputs.to("cuda")
47
+
48
+ # with torch.no_grad():
49
+ # outputs = model.generate(
50
+ # **inputs,
51
+ # max_new_tokens=max_length,
52
+ # temperature=temperature,
53
+ # top_p=top_p,
54
+ # do_sample=True,
55
+ # pad_token_id=tokenizer.eos_token_id,
56
+ # eos_token_id=tokenizer.eos_token_id,
57
+ # )
58
+
59
+ # response = tokenizer.decode(outputs[0], skip_special_tokens=True)
60
+ # response = response.split("Assistant:")[-1].strip()
61
+
62
+ # if "User:" in response:
63
+ # response = response.split("User:")[0].strip()
64
+
65
+ # return response
66
+
67
+ # custom_css = """
68
+ # #chatbot {
69
+ # height: 500px;
70
+ # }
71
+ # """
72
+
73
+ # with gr.Blocks(css=custom_css, theme=gr.themes.Soft()) as demo:
74
+ # gr.Markdown(
75
+ # """
76
+ # # Pidgin LLaMA Chatbot
77
+ # ### Chat with an AI trained on Nigerian Pidgin English
78
+
79
+ # This chatbot uses a LoRA fine-tuned model for Nigerian Pidgin.
80
+ # """
81
+ # )
82
+
83
+ # chatbot = gr.Chatbot(label="Pidgin Chat", elem_id="chatbot")
84
+
85
+ # with gr.Row():
86
+ # msg = gr.Textbox(label="Your Message", placeholder="Type your message here...", scale=4)
87
+ # send_btn = gr.Button("Send", scale=1, variant="primary")
88
+
89
+ # with gr.Accordion("System Prompt", open=True):
90
+ # system_prompt = gr.Textbox(
91
+ # label="System Instructions",
92
+ # value="You are a helpful AI assistant that speaks Nigerian Pidgin English. You are friendly, respectful, and knowledgeable about Nigerian culture.",
93
+ # lines=4
94
+ # )
95
+
96
+ # with gr.Row():
97
+ # preset1 = gr.Button("Comedian")
98
+ # preset2 = gr.Button("Teacher")
99
+ # preset3 = gr.Button("Friend")
100
+ # preset4 = gr.Button("Professional")
101
+
102
+ # with gr.Accordion("Advanced Settings", open=False):
103
+ # max_length = gr.Slider(50, 1024, 512, step=50, label="Max Response Length")
104
+ # temperature = gr.Slider(0.1, 2.0, 0.7, step=0.1, label="Temperature")
105
+ # top_p = gr.Slider(0.1, 1.0, 0.9, step=0.05, label="Top P")
106
+
107
+ # clear = gr.Button("Clear Chat")
108
+
109
+ # def respond(message, chat_history, sys_prompt, max_len, temp, top_p_val):
110
+ # bot_message = chat_with_pidgin_bot(message, chat_history, sys_prompt, max_len, temp, top_p_val)
111
+ # chat_history.append((message, bot_message))
112
+ # return "", chat_history
113
+
114
+ # def set_preset(preset_type):
115
+ # presets = {
116
+ # "comedian": "You are a Nigerian comedian who speaks Pidgin. Make people laugh with witty responses.",
117
+ # "teacher": "You are a patient teacher who speaks Nigerian Pidgin. Explain things clearly.",
118
+ # "friend": "You are a caring friend who speaks Nigerian Pidgin. Give good advice.",
119
+ # "professional": "You are a professional consultant who speaks Nigerian Pidgin. Provide practical advice."
120
+ # }
121
+ # return presets.get(preset_type, "")
122
+
123
+ # msg.submit(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot])
124
+ # send_btn.click(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot])
125
+
126
+ # preset1.click(lambda: set_preset("comedian"), None, system_prompt)
127
+ # preset2.click(lambda: set_preset("teacher"), None, system_prompt)
128
+ # preset3.click(lambda: set_preset("friend"), None, system_prompt)
129
+ # preset4.click(lambda: set_preset("professional"), None, system_prompt)
130
+
131
+ # clear.click(lambda: None, None, chatbot, queue=False)
132
+
133
+ # if __name__ == "__main__":
134
+ # demo.launch(share=True)
135
+
136
+
137
  import gradio as gr
138
  from transformers import AutoTokenizer, AutoModelForCausalLM
139
  from peft import PeftModel, PeftConfig
 
142
  # Model paths
143
  ADAPTER_MODEL = "Ephraimmm/pdgn_llama_model"
144
 
145
+ # Load LoRA adapter and base model
146
  peft_config = PeftConfig.from_pretrained(ADAPTER_MODEL)
147
  BASE_MODEL = peft_config.base_model_name_or_path
148
 
 
 
 
 
149
  tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, trust_remote_code=True)
 
150
  if tokenizer.pad_token is None:
151
  tokenizer.pad_token = tokenizer.eos_token
152
 
 
153
  base_model = AutoModelForCausalLM.from_pretrained(
154
  BASE_MODEL,
155
  dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
 
157
  low_cpu_mem_usage=True,
158
  trust_remote_code=True
159
  )
 
 
160
  model = PeftModel.from_pretrained(base_model, ADAPTER_MODEL)
161
  model.eval()
162
 
163
+ # Chat generation
 
164
  def chat_with_pidgin_bot(message, history, system_prompt, max_length=512, temperature=0.7, top_p=0.9):
165
  conversation = f"System: {system_prompt}\n\n" if system_prompt else ""
166
  for user_msg, bot_msg in history:
167
  conversation += f"User: {user_msg}\nAssistant: {bot_msg}\n"
168
  conversation += f"User: {message}\nAssistant:"
169
+
170
  inputs = tokenizer(conversation, return_tensors="pt", truncation=True, max_length=2048)
 
171
  if torch.cuda.is_available():
172
  inputs = inputs.to("cuda")
173
+
174
  with torch.no_grad():
175
  outputs = model.generate(
176
  **inputs,
 
181
  pad_token_id=tokenizer.eos_token_id,
182
  eos_token_id=tokenizer.eos_token_id,
183
  )
184
+
185
  response = tokenizer.decode(outputs[0], skip_special_tokens=True)
186
+ response = response.split("Assistant:")[-1].split("User:")[0].strip()
 
 
 
 
187
  return response
188
 
189
+ # Gradio UI (without css argument)
190
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
 
 
 
 
 
191
  gr.Markdown(
192
  """
193
  # Pidgin LLaMA Chatbot
194
+ Chat with an AI trained on Nigerian Pidgin English.
 
 
195
  """
196
  )
197
+
198
  chatbot = gr.Chatbot(label="Pidgin Chat", elem_id="chatbot")
199
+ msg = gr.Textbox(label="Your Message", placeholder="Type your message here...", scale=4)
200
+ send_btn = gr.Button("Send", scale=1, variant="primary")
201
+
 
 
202
  with gr.Accordion("System Prompt", open=True):
203
  system_prompt = gr.Textbox(
204
  label="System Instructions",
205
+ value="You are a helpful AI assistant that speaks Nigerian Pidgin English. Be friendly and respectful.",
206
  lines=4
207
  )
208
+ preset1 = gr.Button("Comedian")
209
+ preset2 = gr.Button("Teacher")
210
+ preset3 = gr.Button("Friend")
211
+ preset4 = gr.Button("Professional")
212
+
 
 
213
  with gr.Accordion("Advanced Settings", open=False):
214
  max_length = gr.Slider(50, 1024, 512, step=50, label="Max Response Length")
215
  temperature = gr.Slider(0.1, 2.0, 0.7, step=0.1, label="Temperature")
216
  top_p = gr.Slider(0.1, 1.0, 0.9, step=0.05, label="Top P")
217
+
218
  clear = gr.Button("Clear Chat")
219
+
220
+ # Respond function
221
  def respond(message, chat_history, sys_prompt, max_len, temp, top_p_val):
222
  bot_message = chat_with_pidgin_bot(message, chat_history, sys_prompt, max_len, temp, top_p_val)
223
  chat_history.append((message, bot_message))
224
  return "", chat_history
225
+
226
+ # Presets function
227
  def set_preset(preset_type):
228
  presets = {
229
  "comedian": "You are a Nigerian comedian who speaks Pidgin. Make people laugh with witty responses.",
230
+ "teacher": "You are a patient teacher who speaks Pidgin. Explain things clearly.",
231
+ "friend": "You are a caring friend who speaks Pidgin. Give good advice.",
232
+ "professional": "You are a professional consultant who speaks Pidgin. Provide practical advice."
233
  }
234
  return presets.get(preset_type, "")
235
+
236
+ # Events
237
  msg.submit(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot])
238
  send_btn.click(respond, [msg, chatbot, system_prompt, max_length, temperature, top_p], [msg, chatbot])
 
239
  preset1.click(lambda: set_preset("comedian"), None, system_prompt)
240
  preset2.click(lambda: set_preset("teacher"), None, system_prompt)
241
  preset3.click(lambda: set_preset("friend"), None, system_prompt)
242
  preset4.click(lambda: set_preset("professional"), None, system_prompt)
 
243
  clear.click(lambda: None, None, chatbot, queue=False)
244
 
245
  if __name__ == "__main__":
246
+ demo.launch(share=True)