Spaces:
Running
Running
Update app.py
Browse filesAdded latex math handling to deepseek models
app.py
CHANGED
|
@@ -24,6 +24,7 @@ import pytz
|
|
| 24 |
import math
|
| 25 |
import numpy as np
|
| 26 |
# import matplotlib.pyplot as plt
|
|
|
|
| 27 |
|
| 28 |
|
| 29 |
load_dotenv(override=True)
|
|
@@ -90,6 +91,31 @@ def date_from_utime(utime):
|
|
| 90 |
eastern = pytz.timezone('US/Eastern')
|
| 91 |
return dt.astimezone(eastern).strftime('%Y-%m-%d')
|
| 92 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
def stock_list():
|
| 94 |
rv = ''
|
| 95 |
with open(stock_data_path, 'rt') as fp:
|
|
@@ -698,6 +724,8 @@ def chat(prompt, user_window, pwd_window, past, response, gptModel, uploaded_ima
|
|
| 698 |
elif prompt.lower().startswith('puzzle'):
|
| 699 |
chatType = 'logic'
|
| 700 |
prompt = prompt[6:]
|
|
|
|
|
|
|
| 701 |
past.append({"role":"user", "content":prompt})
|
| 702 |
gen_image = (uploaded_image_file != '')
|
| 703 |
if chatType in special_chat_types:
|
|
@@ -732,6 +760,9 @@ def chat(prompt, user_window, pwd_window, past, response, gptModel, uploaded_ima
|
|
| 732 |
return [past, msg, None, gptModel, uploaded_image_file, plot]
|
| 733 |
if not chatType in special_chat_types:
|
| 734 |
reply = completion.choices[0].message.content
|
|
|
|
|
|
|
|
|
|
| 735 |
final_text = reply
|
| 736 |
if deepseek:
|
| 737 |
loc1 = reply.find('<think>')
|
|
@@ -739,11 +770,11 @@ def chat(prompt, user_window, pwd_window, past, response, gptModel, uploaded_ima
|
|
| 739 |
loc2 = reply.find('</think>')
|
| 740 |
if loc2 > loc1:
|
| 741 |
final_text = reply[loc2 + 8:]
|
| 742 |
-
reply = reply.replace('<think>','Thinking
|
| 743 |
tokens_in = completion.usage.prompt_tokens
|
| 744 |
tokens_out = completion.usage.completion_tokens
|
| 745 |
tokens = completion.usage.total_tokens
|
| 746 |
-
response += md("\n\
|
| 747 |
if isBoss:
|
| 748 |
response += md(f"\n{reporting_model}: tokens in/out = {tokens_in}/{tokens_out}")
|
| 749 |
if tokens > 40000:
|
|
|
|
| 24 |
import math
|
| 25 |
import numpy as np
|
| 26 |
# import matplotlib.pyplot as plt
|
| 27 |
+
from pylatexenc.latex2text import LatexNodes2Text
|
| 28 |
|
| 29 |
|
| 30 |
load_dotenv(override=True)
|
|
|
|
| 91 |
eastern = pytz.timezone('US/Eastern')
|
| 92 |
return dt.astimezone(eastern).strftime('%Y-%m-%d')
|
| 93 |
|
| 94 |
+
def convert_latex_math(text):
|
| 95 |
+
lines = text.split('\n')
|
| 96 |
+
start_line = False
|
| 97 |
+
out_txt = ''
|
| 98 |
+
for line in lines:
|
| 99 |
+
if len(line) == 0:
|
| 100 |
+
out_txt += '\n'
|
| 101 |
+
continue
|
| 102 |
+
else:
|
| 103 |
+
if line == r'\]':
|
| 104 |
+
continue
|
| 105 |
+
if line == r'\[':
|
| 106 |
+
start_line = True
|
| 107 |
+
continue
|
| 108 |
+
if start_line:
|
| 109 |
+
line = '\n' + LatexNodes2Text().latex_to_text(line.strip())
|
| 110 |
+
start_line = False
|
| 111 |
+
if line.startswith(r'\['):
|
| 112 |
+
loc = line.find(r'\]')
|
| 113 |
+
if loc > 0:
|
| 114 |
+
latex_code = line[2:loc]
|
| 115 |
+
line = '\n' + LatexNodes2Text().latex_to_text(latex_code)
|
| 116 |
+
out_txt += (line + '\n')
|
| 117 |
+
return out_txt
|
| 118 |
+
|
| 119 |
def stock_list():
|
| 120 |
rv = ''
|
| 121 |
with open(stock_data_path, 'rt') as fp:
|
|
|
|
| 724 |
elif prompt.lower().startswith('puzzle'):
|
| 725 |
chatType = 'logic'
|
| 726 |
prompt = prompt[6:]
|
| 727 |
+
if deepseek:
|
| 728 |
+
prompt = prompt + '. Do not use Latex for math expressions.'
|
| 729 |
past.append({"role":"user", "content":prompt})
|
| 730 |
gen_image = (uploaded_image_file != '')
|
| 731 |
if chatType in special_chat_types:
|
|
|
|
| 760 |
return [past, msg, None, gptModel, uploaded_image_file, plot]
|
| 761 |
if not chatType in special_chat_types:
|
| 762 |
reply = completion.choices[0].message.content
|
| 763 |
+
# if 'groq' in reporting_model:
|
| 764 |
+
if deepseek:
|
| 765 |
+
reply = convert_latex_math(reply)
|
| 766 |
final_text = reply
|
| 767 |
if deepseek:
|
| 768 |
loc1 = reply.find('<think>')
|
|
|
|
| 770 |
loc2 = reply.find('</think>')
|
| 771 |
if loc2 > loc1:
|
| 772 |
final_text = reply[loc2 + 8:]
|
| 773 |
+
reply = reply.replace('<think>','\n***Thinking***\n').replace('</think>','\n***Done thinking***\n')
|
| 774 |
tokens_in = completion.usage.prompt_tokens
|
| 775 |
tokens_out = completion.usage.completion_tokens
|
| 776 |
tokens = completion.usage.total_tokens
|
| 777 |
+
response += md("\n\n***YOU***: " + prompt + "\n***GPT***: " + reply)
|
| 778 |
if isBoss:
|
| 779 |
response += md(f"\n{reporting_model}: tokens in/out = {tokens_in}/{tokens_out}")
|
| 780 |
if tokens > 40000:
|