Islam YAHIAOUI commited on
Commit
c41e5ec
β€’
1 Parent(s): 3eb54fe
Files changed (1) hide show
  1. app.py +157 -128
app.py CHANGED
@@ -1,91 +1,128 @@
1
- import json
2
  import gradio as gr
3
  from huggingface_hub import InferenceClient
4
  import os
5
-
6
- import requests
7
  from rag import run_rag
8
- """
9
- For more information on `huggingface_hub` Inference API support, please check the docs: https://huggingface.co/docs/huggingface_hub/v0.22.2/en/guides/inference
10
- """
11
-
12
  TOKEN = os.getenv("HF_TOKEN")
13
-
14
- client = InferenceClient("HuggingFaceH4/zephyr-7b-beta" , token="")
15
  system_message ="You are a capable and freindly assistant."
16
  history = []
17
  no_change_btn = gr.Button()
18
  enable_btn = gr.Button(interactive=True)
19
  disable_btn = gr.Button(interactive=False)
20
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  # ================================================================================================================================
 
22
  # ================================================================================================================================
23
- def initialiate_state():
24
- state = gr.State()
25
- state.history = list[tuple[str, str]]
26
- state.current_query = ""
27
- state.current_response = ""
28
- state.roles = ["user", "assistant"]
29
- return state
30
-
31
- def add_question(state, textbox):
32
- print(textbox)
33
- state.current_query = textbox.value
34
- state.current_response = ""
35
- state.history.append({"role": "user", "content": textbox.value})
36
- return state , textbox
37
-
38
- def add_response(state,chatbot, assistant_message):
39
- current_question = state.current_query
40
- state.current_response = assistant_message
41
- state.history.append({"role": "system", "content": assistant_message})
42
- chatbot.append((current_question , assistant_message))
43
- return state , assistant_message
44
-
45
 
46
  # ================================================================================================================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
 
 
 
 
 
 
 
 
 
 
48
  def chat(
49
- state,
50
  chatbot,
51
  message,
52
- # history: list[tuple[str, str]],
53
  max_tokens,
54
  temperature,
55
  top_p,
56
  ):
57
-
58
  print("Message: ", message)
59
- print("History: ", history)
60
  print("System Message: ", system_message)
61
  print("Max Tokens: ", max_tokens)
62
  print("Temperature: ", temperature)
63
  print("Top P: ", top_p)
64
-
65
  messages = [{"role": "system", "content": system_message}]
66
- history= state.history
 
 
 
 
67
  for val in history:
68
  messages.append(val)
69
-
70
-
71
- messages.append({"role": "user", "content": run_rag(message)})
72
  response = ""
73
- if state is None:
74
- state = gr.State()
75
- state.messages = [[("assistant", "")]]
76
 
77
- for message in client.chat_completion(
78
  messages,
79
-
80
  max_tokens=max_tokens,
81
- stream=False,
82
  temperature=temperature,
83
  top_p=top_p,
84
  ):
85
- token = message.choices[0].delta.content
 
86
  response += str(token)
87
- add_response(state,message , response)
88
- yield (state, response) + (enable_btn,) * 5
 
 
 
 
 
89
 
90
 
91
  # ================================================================================================================================
@@ -99,58 +136,51 @@ EXAMPLES = [
99
  [ "Tell me about the actual situation in Ukraine ?"],
100
  [ "Tell me about current situation in palestine ?"],
101
  ]
102
- max_new_tokens = gr.Slider(
103
- minimum=1,
104
- maximum=2048,
105
- value=1024,
106
- step=1,
107
- interactive=True,
108
- label="Max new tokens",
109
- )
110
- temperature = gr.Slider(
111
- minimum=0.1,
112
- maximum=0.9,
113
- value=0.6,
114
- step=0.1,
115
- visible=True,
116
- interactive=True,
117
- label="Temperature",
118
- info="Higher values will produce more diverse outputs.",
119
- )
120
- top_p = gr.Slider(
121
- minimum=0.1,
122
- maximum=1,
123
- value=0.9,
124
- step=0.05,
125
- visible=True,
126
- interactive=True,
127
- label="Top-p (nucleus sampling)",
128
- info="Higher values is equivalent to sampling more low-probability tokens.",
129
- )
130
  # ================================================================================================================================
131
-
132
 
133
 
134
-
135
- def upvote_last_response(state):
136
- return ("",) + (disable_btn,) * 3
137
-
138
- def downvote_last_response(state):
139
- return ("",) + (disable_btn,) * 3
140
-
141
- def flag_last_response(state):
142
- return ("",) + (disable_btn,) * 3
143
-
144
  block_css = """
145
  #buttons button {
146
  min-width: min(120px,100%);
147
  }
148
  """
149
  # ================================================================================================================================
 
 
 
 
 
150
 
151
-
152
- with gr.Blocks(title="CuMo", theme=theme, css=block_css) as demo:
153
- state = initialiate_state()
154
  gr.Markdown("Retrieval Augmented Generation (RAG) Chatbot" )
155
  with gr.Row():
156
  with gr.Column(scale=8):
@@ -162,16 +192,12 @@ with gr.Blocks(title="CuMo", theme=theme, css=block_css) as demo:
162
  )
163
  with gr.Row():
164
  with gr.Column(scale=8):
165
- # textbox.render()
166
- textbox = gr.Textbox(show_label=False,
167
- placeholder="Enter text and press ENTER",
168
- container=False,
169
- show_copy_button=True
170
- )
171
 
172
  with gr.Column(scale=1, min_width=100):
173
- submit_btn = gr.Button(value="Submit", variant="primary" )
174
-
 
175
  with gr.Row(elem_id="buttons") as button_row:
176
  upvote_btn = gr.Button(value="πŸ‘ Upvote", interactive=False)
177
  downvote_btn = gr.Button(value="πŸ‘Ž Downvote", interactive=False)
@@ -187,6 +213,7 @@ with gr.Blocks(title="CuMo", theme=theme, css=block_css) as demo:
187
  [f"Tell me about the actual situation in Ukraine ?"],
188
  [f"Tell me about current situation in palestinian ?"],
189
  ],inputs=[textbox], label="Examples")
 
190
  with gr.Accordion("Parameters", open=False) as parameter_row:
191
  temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.2, step=0.1, interactive=True, label="Temperature",)
192
  top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, interactive=True, label="Top P",)
@@ -195,35 +222,37 @@ with gr.Blocks(title="CuMo", theme=theme, css=block_css) as demo:
195
  # ================================================================================================================================
196
  btn_list = [upvote_btn, downvote_btn, flag_btn, regenerate_btn, clear_btn]
197
 
198
- upvote_btn.click(
199
- upvote_last_response,
200
- [state],
201
- [textbox, upvote_btn, downvote_btn, flag_btn]
202
- )
203
- downvote_btn.click(
204
- downvote_last_response,
205
- [state],
206
- [textbox, upvote_btn, downvote_btn, flag_btn]
207
- )
208
- flag_btn.click(
209
- flag_last_response,
210
- [state],
211
- [textbox, upvote_btn, downvote_btn, flag_btn]
212
- )
213
-
214
- submit_btn.click(
215
- add_question,
216
- [state, textbox],
217
- [state, textbox],
218
- ).then(
219
- chat,
220
- [state, chatbot, textbox , max_new_tokens , temperature ,top_p],
221
- [state, textbox] + btn_list,
222
-
223
- )
224
 
225
-
 
 
 
226
  # )
227
- # ================================================================================================================================
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
228
  demo.launch()
229
  # ================================================================================================================================
 
 
1
  import gradio as gr
2
  from huggingface_hub import InferenceClient
3
  import os
 
 
4
  from rag import run_rag
5
+
6
+ # ================================================================================================================================
 
 
7
  TOKEN = os.getenv("HF_TOKEN")
8
+ client = InferenceClient("HuggingFaceH4/zephyr-7b-beta" )
 
9
  system_message ="You are a capable and freindly assistant."
10
  history = []
11
  no_change_btn = gr.Button()
12
  enable_btn = gr.Button(interactive=True)
13
  disable_btn = gr.Button(interactive=False)
14
+ # ================================================================================================================================
15
+ class Int_State:
16
+ def __init__(self):
17
+ # initialise history of type list[tuple[str, str]]
18
+ self.history = []
19
+ self.current_query = ""
20
+ self.current_response = ""
21
+ self.roles = ["user", "system"]
22
+ print("State has been initialise")
23
+
24
+ def save_question(self, question):
25
+
26
+ self.current_query = question
27
+ self.current_response = ""
28
+ self.history.append({"role": "user", "content": question})
29
+ print("Question added ")
30
+
31
+ def save_response(self, assistant_message):
32
+ current_question = self.current_query
33
+ self.current_response = assistant_message
34
+ self.history.append({"role": "system", "content": assistant_message})
35
+ print("Response saved ")
36
+
37
+
38
+ def get_history(self):
39
+ return self.history
40
+
41
  # ================================================================================================================================
42
+ state = Int_State()
43
  # ================================================================================================================================
44
+ # def clear_chat(state):
45
+ # state.history = []
46
+ # return ("",) + (disable_btn,) * 3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
 
48
  # ================================================================================================================================
49
+ # def enable_buttons(btn_list ,upvote=False, downvote=False, flag=False, regenerate=False, clear=False):
50
+ # return [gr.Button(interactive=upvote), gr.Button(interactive=downvote), gr.Button(interactive=flag), gr.Button(interactive=regenerate), gr.Button(interactive=clear)]
51
+
52
+
53
+ # def disable_buttons(btn_list, upvote=True, downvote=True, flag=True, regenerate=False, clear=False):
54
+ # if upvote:
55
+ # btn_list[0] = disable_btn
56
+ # if downvote:
57
+ # btn_list[1] = disable_btn
58
+ # if flag:
59
+ # btn_list[2] = disable_btn
60
+ # if regenerate:
61
+ # btn_list[3] = disable_btn
62
+ # if clear:
63
+ # btn_list[4] = disable_btn
64
+ # return btn_list
65
+
66
+
67
+
68
+ # def upvote_last_response(btn_list):
69
+ # # upvote the last response
70
+ # print("Upvoted")
71
+ # return disable_buttons(btn_list)
72
 
73
+ # def downvote_last_response(btn_list):
74
+ # # downvote the last response
75
+ # print("Downvoted")
76
+ # return disable_buttons(btn_list)
77
+ # def flag_last_response(btn_list):
78
+ # # flag the last response
79
+ # print("Flagged")
80
+ # return disable_buttons(btn_list)
81
+
82
+
83
  def chat(
84
+
85
  chatbot,
86
  message,
 
87
  max_tokens,
88
  temperature,
89
  top_p,
90
  ):
 
91
  print("Message: ", message)
 
92
  print("System Message: ", system_message)
93
  print("Max Tokens: ", max_tokens)
94
  print("Temperature: ", temperature)
95
  print("Top P: ", top_p)
96
+ question= message
97
  messages = [{"role": "system", "content": system_message}]
98
+
99
+ history= state.get_history()
100
+ state.save_question(message)
101
+
102
+
103
  for val in history:
104
  messages.append(val)
105
+
106
+ messages.append({"role": "user", "content": message})
 
107
  response = ""
 
 
 
108
 
109
+ for msg in client.chat_completion(
110
  messages,
 
111
  max_tokens=max_tokens,
112
+ stream=True,
113
  temperature=temperature,
114
  top_p=top_p,
115
  ):
116
+
117
+ token = msg.choices[0].delta.content
118
  response += str(token)
119
+ # yield "" , chatbot
120
+ chatbot.append((question , response))
121
+ state.save_response(response)
122
+ # btn_list =enable_buttons(btn_list)
123
+ # yield "" , chatbot + (enable_btn,) * 5
124
+
125
+ yield "" , chatbot
126
 
127
 
128
  # ================================================================================================================================
 
136
  [ "Tell me about the actual situation in Ukraine ?"],
137
  [ "Tell me about current situation in palestine ?"],
138
  ]
139
+ # max_new_tokens = gr.Slider(
140
+ # minimum=1,
141
+ # maximum=2048,
142
+ # value=1024,
143
+ # step=1,
144
+ # interactive=True,
145
+ # label="Max new tokens",
146
+ # )
147
+ # temperature = gr.Slider(
148
+ # minimum=0.1,
149
+ # maximum=0.9,
150
+ # value=0.6,
151
+ # step=0.1,
152
+ # visible=True,
153
+ # interactive=True,
154
+ # label="Temperature",
155
+ # info="Higher values will produce more diverse outputs.",
156
+ # )
157
+ # top_p = gr.Slider(
158
+ # minimum=0.1,
159
+ # maximum=1,
160
+ # value=0.9,
161
+ # step=0.05,
162
+ # visible=True,
163
+ # interactive=True,
164
+ # label="Top-p (nucleus sampling)",
165
+ # info="Higher values is equivalent to sampling more low-probability tokens.",
166
+ # )
167
  # ================================================================================================================================
 
168
 
169
 
 
 
 
 
 
 
 
 
 
 
170
  block_css = """
171
  #buttons button {
172
  min-width: min(120px,100%);
173
  }
174
  """
175
  # ================================================================================================================================
176
+ textbox = gr.Textbox(show_label=False,
177
+ placeholder="Enter text and press ENTER",
178
+ container=False,
179
+ show_copy_button=True
180
+ )
181
 
182
+ with gr.Blocks(title="RAG", theme=theme, css=block_css) as demo:
183
+
 
184
  gr.Markdown("Retrieval Augmented Generation (RAG) Chatbot" )
185
  with gr.Row():
186
  with gr.Column(scale=8):
 
192
  )
193
  with gr.Row():
194
  with gr.Column(scale=8):
195
+ textbox.render()
 
 
 
 
 
196
 
197
  with gr.Column(scale=1, min_width=100):
198
+ submit_btn = gr.Button(value="Submit", variant="primary", interactive=True)
199
+
200
+
201
  with gr.Row(elem_id="buttons") as button_row:
202
  upvote_btn = gr.Button(value="πŸ‘ Upvote", interactive=False)
203
  downvote_btn = gr.Button(value="πŸ‘Ž Downvote", interactive=False)
 
213
  [f"Tell me about the actual situation in Ukraine ?"],
214
  [f"Tell me about current situation in palestinian ?"],
215
  ],inputs=[textbox], label="Examples")
216
+
217
  with gr.Accordion("Parameters", open=False) as parameter_row:
218
  temperature = gr.Slider(minimum=0.0, maximum=1.0, value=0.2, step=0.1, interactive=True, label="Temperature",)
219
  top_p = gr.Slider(minimum=0.0, maximum=1.0, value=0.7, step=0.1, interactive=True, label="Top P",)
 
222
  # ================================================================================================================================
223
  btn_list = [upvote_btn, downvote_btn, flag_btn, regenerate_btn, clear_btn]
224
 
225
+ # upvote_btn.click(
226
+ # upvote_last_response,
227
+ # [btn_list],
228
+ # [btn_list]
229
+ # )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
 
231
+ # downvote_btn.click(
232
+ # downvote_last_response,
233
+ # [btn_list],
234
+ # [btn_list]
235
  # )
236
+ # flag_btn.click(
237
+ # flag_last_response,
238
+ # [btn_list],
239
+ # [btn_list]
240
+ # )
241
+ # regenerate_btn.click(
242
+ # chat,
243
+ # [btn_list, chatbot, textbox, max_output_tokens, temperature, top_p],
244
+ # [textbox, chatbot , btn_list]
245
+ # )
246
+ # clear_btn.click(
247
+ # clear_chat,
248
+ # [disable_btn] * 5
249
+ # )
250
+ submit_btn.click(
251
+ chat ,
252
+ [chatbot, textbox , max_output_tokens, temperature, top_p],
253
+ [textbox ,chatbot]
254
+ )
255
+
256
+ # ================================================================================================================================
257
  demo.launch()
258
  # ================================================================================================================================