Nyanfa commited on
Commit
5e547c5
·
verified ·
1 Parent(s): f26f88e

Add changes to font and icons

Browse files
Files changed (1) hide show
  1. app.py +96 -71
app.py CHANGED
@@ -30,7 +30,7 @@ def get_ai_response(prompt, chat_history):
30
  st.session_state.is_streaming = True
31
  st.session_state.response = ""
32
 
33
- with st.chat_message("ai"):
34
  penalty_kwargs = {
35
  "frequency_penalty" if penalty_type == "Frequency Penalty" else "presence_penalty": penalty_value
36
  }
@@ -91,7 +91,8 @@ inline_pattern = r"`([^`\n]+?)`"
91
  def display_messages():
92
  for i, message in enumerate(st.session_state.messages):
93
  name = "user" if message["role"] == "USER" else "ai"
94
- with st.chat_message(name):
 
95
  shown_message = message["text"].replace("\n", " \n")\
96
  .replace("<", "\\<")\
97
  .replace(">", "\\>")
@@ -154,80 +155,99 @@ def display_messages():
154
 
155
  # Add sidebar for advanced settings
156
  with st.sidebar:
157
- st.markdown("Help (Japanese): https://rentry.org/9hgneofz")
158
 
159
- # Copy Conversation History button
160
- log_text = ""
161
- for message in st.session_state.messages:
162
- if message["role"] == "USER":
163
- log_text += "<USER>\n"
164
- log_text += message["text"] + "\n\n"
165
- else:
166
- log_text += "<ASSISTANT>\n"
167
- log_text += message["text"] + "\n\n"
168
- log_text = log_text.rstrip("\n")
 
 
 
 
 
 
 
 
 
169
 
170
- # Encode the string to escape
171
- log_text_escaped = urllib.parse.quote(log_text)
172
-
173
- copy_log_button_html = f"""
174
- <button id="copy-log-btn" style='font-size: 1em; padding: 0.5em;' onclick='copyLog()'>Copy Conversation History</button>
 
 
 
 
 
175
 
176
- <script>
177
- function copyLog() {{
178
- navigator.clipboard.writeText(decodeURIComponent("{log_text_escaped}"));
179
- let copyBtn = document.getElementById("copy-log-btn");
180
- copyBtn.innerHTML = "Copied!";
181
- setTimeout(function(){{ copyBtn.innerHTML = "Copy Conversation History"; }}, 2000);
182
- }}
183
- </script>
184
- """
185
- html(copy_log_button_html, height=50)
186
-
187
- st.session_state.is_delete_mode = st.toggle("Enable Delete button")
188
 
189
- st.header("Advanced Settings")
190
- model = st.selectbox("Model", options=["command-r-plus", "command-r"], index=0)
191
- preamble = st.text_area("Preamble", height=200)
192
- temperature = st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.3, step=0.1)
193
- k = st.slider("Top-K", min_value=0, max_value=500, value=0, step=1)
194
- p = st.slider("Top-P", min_value=0.01, max_value=0.99, value=0.75, step=0.01)
195
- penalty_type = st.selectbox("Penalty Type", options=["Frequency Penalty", "Presence Penalty"])
196
- penalty_value = st.slider("Penalty Value", min_value=0.0, max_value=1.0, value=0.0, step=0.1)
197
-
198
- st.header("Restore History")
199
- history_input = st.text_area("Paste conversation history:", height=200)
200
- if st.button("Restore History"):
201
- st.session_state.messages = []
202
- messages = re.split(r"^(<USER>|<ASSISTANT>)\n", history_input, flags=re.MULTILINE)
203
- role = None
204
- text = ""
205
- for message in messages:
206
- if message.strip() in ["<USER>", "<ASSISTANT>"]:
207
- if role and text:
208
- st.session_state.messages.append({"role": role, "text": text.strip()})
209
- text = ""
210
- role = "USER" if message.strip() == "<USER>" else "CHATBOT"
 
 
 
 
 
 
 
 
 
211
  else:
212
- text += message
213
- if role and text:
214
- st.session_state.messages.append({"role": role, "text": text.strip()})
215
- st.rerun()
216
-
217
- st.header("Clear History")
218
- if st.button("Clear Chat History"):
219
- st.session_state.messages = []
220
- st.rerun()
 
 
 
 
221
 
222
- st.header("Change API Key")
223
- new_api_key = st.text_input("Enter new API Key", type="password")
224
- if st.button("Update API Key"):
225
- if new_api_key and new_api_key.isascii():
226
- st.session_state.api_key = new_api_key
227
- client = cohere.Client(api_key=new_api_key)
228
- st.success("API Key updated successfully!")
229
- else:
230
- st.warning("Please enter a valid API Key.")
231
 
232
  # After Stop generating
233
  if st.session_state.get("is_streaming"):
@@ -237,6 +257,11 @@ if st.session_state.get("is_streaming"):
237
  st.session_state.retry_flag = False
238
  st.rerun()
239
 
 
 
 
 
 
240
  display_messages()
241
 
242
  # After Retry
@@ -258,7 +283,7 @@ if prompt := st.chat_input("Enter your message here..."):
258
  .replace("<", "\\<")\
259
  .replace(">", "\\>")
260
 
261
- with st.chat_message("user"):
262
  st.write(shown_message)
263
 
264
  st.session_state.messages.append({"role": "USER", "text": prompt})
 
30
  st.session_state.is_streaming = True
31
  st.session_state.response = ""
32
 
33
+ with st.chat_message("ai", avatar=assistant_avatar):
34
  penalty_kwargs = {
35
  "frequency_penalty" if penalty_type == "Frequency Penalty" else "presence_penalty": penalty_value
36
  }
 
91
  def display_messages():
92
  for i, message in enumerate(st.session_state.messages):
93
  name = "user" if message["role"] == "USER" else "ai"
94
+ avatar = user_avatar if message["role"] == "USER" else assistant_avatar
95
+ with st.chat_message(name, avatar=avatar):
96
  shown_message = message["text"].replace("\n", " \n")\
97
  .replace("<", "\\<")\
98
  .replace(">", "\\>")
 
155
 
156
  # Add sidebar for advanced settings
157
  with st.sidebar:
158
+ settings_tab, appearance_tab = st.tabs(["Settings", "Appearance"])
159
 
160
+ with settings_tab:
161
+ st.markdown("Help (Japanese): https://rentry.org/9hgneofz")
162
+
163
+ # Copy Conversation History button
164
+ log_text = ""
165
+ for message in st.session_state.messages:
166
+ if message["role"] == "USER":
167
+ log_text += "<USER>\n"
168
+ log_text += message["text"] + "\n\n"
169
+ else:
170
+ log_text += "<ASSISTANT>\n"
171
+ log_text += message["text"] + "\n\n"
172
+ log_text = log_text.rstrip("\n")
173
+
174
+ # Encode the string to escape
175
+ log_text_escaped = urllib.parse.quote(log_text)
176
+
177
+ copy_log_button_html = f"""
178
+ <button id="copy-log-btn" style='font-size: 1em; padding: 0.5em;' onclick='copyLog()'>Copy Conversation History</button>
179
 
180
+ <script>
181
+ function copyLog() {{
182
+ navigator.clipboard.writeText(decodeURIComponent("{log_text_escaped}"));
183
+ let copyBtn = document.getElementById("copy-log-btn");
184
+ copyBtn.innerHTML = "Copied!";
185
+ setTimeout(function(){{ copyBtn.innerHTML = "Copy Conversation History"; }}, 2000);
186
+ }}
187
+ </script>
188
+ """
189
+ html(copy_log_button_html, height=50)
190
 
191
+ st.session_state.is_delete_mode = st.toggle("Enable Delete button")
192
+
193
+ st.header("Advanced Settings")
194
+ model = st.selectbox("Model", options=["command-r-plus", "command-r"], index=0)
195
+ preamble = st.text_area("Preamble", height=200)
196
+ temperature = st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.3, step=0.1)
197
+ k = st.slider("Top-K", min_value=0, max_value=500, value=0, step=1)
198
+ p = st.slider("Top-P", min_value=0.01, max_value=0.99, value=0.75, step=0.01)
199
+ penalty_type = st.selectbox("Penalty Type", options=["Frequency Penalty", "Presence Penalty"])
200
+ penalty_value = st.slider("Penalty Value", min_value=0.0, max_value=1.0, value=0.0, step=0.1)
 
 
201
 
202
+ st.header("Restore History")
203
+ history_input = st.text_area("Paste conversation history:", height=200)
204
+ if st.button("Restore History"):
205
+ st.session_state.messages = []
206
+ messages = re.split(r"^(<USER>|<ASSISTANT>)\n", history_input, flags=re.MULTILINE)
207
+ role = None
208
+ text = ""
209
+ for message in messages:
210
+ if message.strip() in ["<USER>", "<ASSISTANT>"]:
211
+ if role and text:
212
+ st.session_state.messages.append({"role": role, "text": text.strip()})
213
+ text = ""
214
+ role = "USER" if message.strip() == "<USER>" else "CHATBOT"
215
+ else:
216
+ text += message
217
+ if role and text:
218
+ st.session_state.messages.append({"role": role, "text": text.strip()})
219
+ st.rerun()
220
+
221
+ st.header("Clear History")
222
+ if st.button("Clear Chat History"):
223
+ st.session_state.messages = []
224
+ st.rerun()
225
+
226
+ st.header("Change API Key")
227
+ new_api_key = st.text_input("Enter new API Key", type="password")
228
+ if st.button("Update API Key"):
229
+ if new_api_key and new_api_key.isascii():
230
+ st.session_state.api_key = new_api_key
231
+ client = cohere.Client(api_key=new_api_key)
232
+ st.success("API Key updated successfully!")
233
  else:
234
+ st.warning("Please enter a valid API Key.")
235
+
236
+ with appearance_tab:
237
+ st.header("Font Selection")
238
+ font_options = {
239
+ "Zen Maru Gothic": "Zen Maru Gothic",
240
+ "Noto Sans JP": "Noto Sans JP",
241
+ "Sawarabi Mincho": "Sawarabi Mincho"
242
+ }
243
+ selected_font = st.selectbox("Choose a font", ["Default"] + list(font_options.keys()))
244
+
245
+ st.header("Change the user's icon")
246
+ user_avatar = st.file_uploader("Choose an image", type=["png", "jpg", "jpeg", "webp", "gif", "bmp", "svg",], key="user_avatar_uploader")
247
 
248
+ st.header("Change the assistant's icon")
249
+ assistant_avatar = st.file_uploader("Choose an image", type=["png", "jpg", "jpeg", "webp", "gif", "bmp", "svg",], key="assistant_avatar_uploader")
250
+
 
 
 
 
 
 
251
 
252
  # After Stop generating
253
  if st.session_state.get("is_streaming"):
 
257
  st.session_state.retry_flag = False
258
  st.rerun()
259
 
260
+ if selected_font != "Default":
261
+ with open("style.css") as css:
262
+ st.markdown(f'<style>{css.read()}</style>', unsafe_allow_html=True)
263
+ st.markdown(f'<style>body * {{ font-family: "{font_options[selected_font]}", serif !important; }}</style>', unsafe_allow_html=True)
264
+
265
  display_messages()
266
 
267
  # After Retry
 
283
  .replace("<", "\\<")\
284
  .replace(">", "\\>")
285
 
286
+ with st.chat_message("user", avatar=user_avatar):
287
  st.write(shown_message)
288
 
289
  st.session_state.messages.append({"role": "USER", "text": prompt})