Keldos commited on
Commit
0e763ee
·
1 Parent(s): 856fe04

fix: 修复显示raw message中latex也被渲染的问题

Browse files
Files changed (3) hide show
  1. ChuanhuChatbot.py +1 -1
  2. assets/custom.js +7 -16
  3. modules/utils.py +4 -3
ChuanhuChatbot.py CHANGED
@@ -52,7 +52,7 @@ with gr.Blocks(css=customCSS, theme=small_and_beautiful_theme) as demo:
52
  with gr.Row(equal_height=True):
53
  with gr.Column(scale=5):
54
  with gr.Row():
55
- chatbot = gr.Chatbot(label="Chuanhu Chat", elem_id="chuanhu_chatbot", latex_delimiters=latex_delimiters_set, height=700, show_copy_button=True)
56
  with gr.Row():
57
  with gr.Column(min_width=225, scale=12):
58
  user_input = gr.Textbox(
 
52
  with gr.Row(equal_height=True):
53
  with gr.Column(scale=5):
54
  with gr.Row():
55
+ chatbot = gr.Chatbot(label="Chuanhu Chat", elem_id="chuanhu_chatbot", latex_delimiters=latex_delimiters_set, height=700)
56
  with gr.Row():
57
  with gr.Column(min_width=225, scale=12):
58
  user_input = gr.Textbox(
assets/custom.js CHANGED
@@ -407,7 +407,7 @@ function setSliderRange() {
407
  function addChuanhuButton(botElement) {
408
  var rawMessage = botElement.querySelector('.raw-message');
409
  var mdMessage = botElement.querySelector('.md-message');
410
- var gradioCopyMsgBtn = botElement.querySelector('div.icon-button>button[title="copy"]'); // 获取 gradio 的 copy button,它可以读取真正的原始 message
411
  if (!rawMessage) {
412
  var buttons = botElement.querySelectorAll('button.chuanhu-btn');
413
  for (var i = 0; i < buttons.length; i++) {
@@ -433,20 +433,7 @@ function addChuanhuButton(botElement) {
433
  const textToCopy = rawMessage.innerText;
434
  try {
435
  if ("clipboard" in navigator) {
436
- gradioCopyMsgBtn.click();
437
- try {
438
- // try to copy from gradio's clipboard, which is really raw message
439
- const gradio_clipboard_content = await navigator.clipboard.readText();
440
- const regex = /<!-- SOO IN MESSAGE --><div class="really-raw hideM">([\s\S]*?)\n<\/div><!-- EOO IN MESSAGE -->/;
441
- const real_raw_message = gradio_clipboard_content.match(regex)[1];
442
- const after_agent_prefix = str.replace(/<!-- S O PREFIX --><p class="agent-prefix">(.+?)<\/p><!-- E O PREFIX -->/g, '$1\n');
443
- await navigator.clipboard.writeText(after_agent_prefix)
444
- // console.log("Copied from gradio's clipboard");
445
- } catch (error) {
446
- await navigator.clipboard.writeText(textToCopy);
447
- // console.log("Copied from rawtext clipboard");
448
- }
449
- // await navigator.clipboard.writeText(textToCopy);
450
  copyButton.innerHTML = copiedIcon;
451
  setTimeout(() => {
452
  copyButton.innerHTML = copyIcon;
@@ -501,7 +488,11 @@ function renderMarkdownText(message) {
501
  }
502
  function removeMarkdownText(message) {
503
  var rawDiv = message.querySelector('.raw-message');
504
- if (rawDiv) rawDiv.classList.remove('hideM');
 
 
 
 
505
  var mdDiv = message.querySelector('.md-message');
506
  if (mdDiv) mdDiv.classList.add('hideM');
507
  }
 
407
  function addChuanhuButton(botElement) {
408
  var rawMessage = botElement.querySelector('.raw-message');
409
  var mdMessage = botElement.querySelector('.md-message');
410
+ // var gradioCopyMsgBtn = botElement.querySelector('div.icon-button>button[title="copy"]'); // 获取 gradio 的 copy button,它可以读取真正的原始 message
411
  if (!rawMessage) {
412
  var buttons = botElement.querySelectorAll('button.chuanhu-btn');
413
  for (var i = 0; i < buttons.length; i++) {
 
433
  const textToCopy = rawMessage.innerText;
434
  try {
435
  if ("clipboard" in navigator) {
436
+ await navigator.clipboard.writeText(textToCopy);
 
 
 
 
 
 
 
 
 
 
 
 
 
437
  copyButton.innerHTML = copiedIcon;
438
  setTimeout(() => {
439
  copyButton.innerHTML = copyIcon;
 
488
  }
489
  function removeMarkdownText(message) {
490
  var rawDiv = message.querySelector('.raw-message');
491
+ if (rawDiv) {
492
+ rawPre = rawDiv.querySelector('pre');
493
+ if (rawPre) rawDiv.innerHTML = rawPre.innerHTML;
494
+ rawDiv.classList.remove('hideM');
495
+ }
496
  var mdDiv = message.querySelector('.md-message');
497
  if (mdDiv) mdDiv.classList.add('hideM');
498
  }
modules/utils.py CHANGED
@@ -235,8 +235,8 @@ def convert_bot_before_marked(chat_message):
235
  if '<div class="md-message">' in chat_message:
236
  return chat_message
237
  else:
238
- raw = f'<div class="raw-message hideM">{clip_rawtext(chat_message)}</div>'
239
- really_raw = f'{START_OF_OUTPUT_MARK}<div class="really-raw hideM">{clip_rawtext(chat_message, need_escape=False)}\n</div>{END_OF_OUTPUT_MARK}'
240
 
241
  code_block_pattern = re.compile(r"```(.*?)(?:```|$)", re.DOTALL)
242
  code_blocks = code_block_pattern.findall(chat_message)
@@ -250,7 +250,7 @@ def convert_bot_before_marked(chat_message):
250
  result.append(code)
251
  result = "".join(result)
252
  md = f'<div class="md-message">{result}\n</div>'
253
- return raw + md + really_raw
254
 
255
  def convert_user_before_marked(chat_message):
256
  if '<div class="user-message">' in chat_message:
@@ -283,6 +283,7 @@ def escape_markdown(text):
283
  '|': '&#124;',
284
  '$': '&#36;',
285
  ':': '&#58;',
 
286
  }
287
  text = text.replace(' ', '&nbsp;&nbsp;&nbsp;&nbsp;')
288
  return ''.join(escape_chars.get(c, c) for c in text)
 
235
  if '<div class="md-message">' in chat_message:
236
  return chat_message
237
  else:
238
+ raw = f'<div class="raw-message hideM"><pre>{clip_rawtext(chat_message)}</pre></div>'
239
+ # really_raw = f'{START_OF_OUTPUT_MARK}<div class="really-raw hideM">{clip_rawtext(chat_message, need_escape=False)}\n</div>{END_OF_OUTPUT_MARK}'
240
 
241
  code_block_pattern = re.compile(r"```(.*?)(?:```|$)", re.DOTALL)
242
  code_blocks = code_block_pattern.findall(chat_message)
 
250
  result.append(code)
251
  result = "".join(result)
252
  md = f'<div class="md-message">{result}\n</div>'
253
+ return raw + md
254
 
255
  def convert_user_before_marked(chat_message):
256
  if '<div class="user-message">' in chat_message:
 
283
  '|': '&#124;',
284
  '$': '&#36;',
285
  ':': '&#58;',
286
+ '\n': '<br>',
287
  }
288
  text = text.replace(' ', '&nbsp;&nbsp;&nbsp;&nbsp;')
289
  return ''.join(escape_chars.get(c, c) for c in text)