diff --git a/.gitignore b/.gitignore index 4fb8a7df..6d0e0cce 100644 --- a/.gitignore +++ b/.gitignore @@ -154,5 +154,5 @@ flagged request_llms/ChatGLM-6b-onnx-u8s8 .pre-commit-config.yaml themes/common.js.min.*.js -test* +test.html objdump* \ No newline at end of file diff --git a/crazy_functions/Conversation_To_File.py b/crazy_functions/Conversation_To_File.py index 972f4ac0..24f94b36 100644 --- a/crazy_functions/Conversation_To_File.py +++ b/crazy_functions/Conversation_To_File.py @@ -217,6 +217,4 @@ def 删除所有本地对话历史记录(txt, llm_kwargs, plugin_kwargs, chatbot os.remove(f) chatbot.append([f"删除所有历史对话文件", f"已删除
{local_history}"]) yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 - return - - + return \ No newline at end of file diff --git a/crazy_functions/Latex_Function.py b/crazy_functions/Latex_Function.py index 310ecc7e..ba03cf12 100644 --- a/crazy_functions/Latex_Function.py +++ b/crazy_functions/Latex_Function.py @@ -545,4 +545,4 @@ def PDF翻译中文并重新编译PDF(txt, llm_kwargs, plugin_kwargs, chatbot, h promote_file_to_downloadzone(file=zip_res, chatbot=chatbot) # <-------------- we are done -------------> - return success + return success \ No newline at end of file diff --git a/crazy_functions/latex_fns/latex_pickle_io.py b/crazy_functions/latex_fns/latex_pickle_io.py index 744f982f..451d735b 100644 --- a/crazy_functions/latex_fns/latex_pickle_io.py +++ b/crazy_functions/latex_fns/latex_pickle_io.py @@ -16,8 +16,12 @@ class SafeUnpickler(pickle.Unpickler): def find_class(self, module, name): # 只允许特定的类进行反序列化 self.safe_classes = self.get_safe_classes() - if f'{module}.{name}' in self.safe_classes: - return self.safe_classes[f'{module}.{name}'] + match_class_name = None + for class_name in self.safe_classes.keys(): + if (class_name in f'{module}.{name}'): + match_class_name = class_name + if match_class_name is not None: + return self.safe_classes[match_class_name] # 如果尝试加载未授权的类,则抛出异常 raise pickle.UnpicklingError(f"Attempted to deserialize unauthorized class '{name}' from module '{module}'") diff --git a/shared_utils/advanced_markdown_format.py b/shared_utils/advanced_markdown_format.py index a487f1eb..9740d893 100644 --- a/shared_utils/advanced_markdown_format.py +++ b/shared_utils/advanced_markdown_format.py @@ -473,4 +473,4 @@ def format_io(self, y): # 输出部分 None if gpt_reply is None else markdown_convertion(gpt_reply), ) - return y + return y \ No newline at end of file diff --git a/shared_utils/fastapi_server.py b/shared_utils/fastapi_server.py index fdc4c6a2..17101392 100644 --- a/shared_utils/fastapi_server.py +++ b/shared_utils/fastapi_server.py @@ -69,7 +69,6 @@ def validate_path_safety(path_or_url, user): raise FriendlyException(f"输入文件的路径 ({path_or_url}) 存在,但属于其他用户。请将文件上传后再执行该任务。") # return False return True - def _authorize_user(path_or_url, request, gradio_app): from toolbox import get_conf, default_user_name PATH_PRIVATE_UPLOAD, PATH_LOGGING = get_conf('PATH_PRIVATE_UPLOAD', 'PATH_LOGGING') @@ -284,4 +283,4 @@ def start_app(app_block, CONCURRENT_COUNT, AUTHENTICATION, PORT, SSL_KEYFILE, SS } requests.get(f"{app_block.local_url}startup-events", verify=app_block.ssl_verify, proxies=forbid_proxies) app_block.is_running = True - app_block.block_thread() + app_block.block_thread() \ No newline at end of file diff --git a/tests/test_safe_pickle.py b/tests/test_safe_pickle.py new file mode 100644 index 00000000..01f69562 --- /dev/null +++ b/tests/test_safe_pickle.py @@ -0,0 +1,17 @@ +def validate_path(): + import os, sys + os.path.dirname(__file__) + root_dir_assume = os.path.abspath(os.path.dirname(__file__) + "/..") + os.chdir(root_dir_assume) + sys.path.append(root_dir_assume) +validate_path() # validate path so you can run from base directory + +from crazy_functions.latex_fns.latex_pickle_io import objdump, objload +from crazy_functions.latex_fns.latex_actions import LatexPaperFileGroup, LatexPaperSplit +pfg = LatexPaperFileGroup() +pfg.get_token_num = None +pfg.target = "target_elem" +x = objdump(pfg) +t = objload() + +print(t.target) \ No newline at end of file diff --git a/tests/test_save_chat_to_html.py b/tests/test_save_chat_to_html.py new file mode 100644 index 00000000..8f69a266 --- /dev/null +++ b/tests/test_save_chat_to_html.py @@ -0,0 +1,102 @@ +def validate_path(): + import os, sys + os.path.dirname(__file__) + root_dir_assume = os.path.abspath(os.path.dirname(__file__) + "/..") + os.chdir(root_dir_assume) + sys.path.append(root_dir_assume) +validate_path() # validate path so you can run from base directory + +def write_chat_to_file(chatbot, history=None, file_name=None): + """ + 将对话记录history以Markdown格式写入文件中。如果没有指定文件名,则使用当前时间生成文件名。 + """ + import os + import time + from themes.theme import advanced_css + # debug + import pickle + # def objdump(obj, file="objdump.tmp"): + # with open(file, "wb+") as f: + # pickle.dump(obj, f) + # return + + def objload(file="objdump.tmp"): + import os + if not os.path.exists(file): + return + with open(file, "rb") as f: + return pickle.load(f) + # objdump((chatbot, history)) + chatbot, history = objload() + + with open("test.html", 'w', encoding='utf8') as f: + from textwrap import dedent + form = dedent(""" + 对话存档 + +
+
+
+ {CHAT_PREVIEW} +
+
+
对话(原始数据)
+ {HISTORY_PREVIEW} +
+
+
+ + """) + + qa_from = dedent(""" +
+
{QUESTION}
+
+
{ANSWER}
+
+ """) + + history_from = dedent(""" +
+
{ENTRY}
+
+ """) + CHAT_PREVIEW_BUF = "" + for i, contents in enumerate(chatbot): + question, answer = contents[0], contents[1] + if question is None: question = "" + try: question = str(question) + except: question = "" + if answer is None: answer = "" + try: answer = str(answer) + except: answer = "" + CHAT_PREVIEW_BUF += qa_from.format(QUESTION=question, ANSWER=answer) + + HISTORY_PREVIEW_BUF = "" + for h in history: + HISTORY_PREVIEW_BUF += history_from.format(ENTRY=h) + html_content = form.format(CHAT_PREVIEW=CHAT_PREVIEW_BUF, HISTORY_PREVIEW=HISTORY_PREVIEW_BUF, CSS=advanced_css) + + + from bs4 import BeautifulSoup + soup = BeautifulSoup(html_content, 'lxml') + + # 提取QaBox信息 + qa_box_list = [] + qa_boxes = soup.find_all("div", class_="QaBox") + for box in qa_boxes: + question = box.find("div", class_="Question").get_text(strip=False) + answer = box.find("div", class_="Answer").get_text(strip=False) + qa_box_list.append({"Question": question, "Answer": answer}) + + # 提取historyBox信息 + history_box_list = [] + history_boxes = soup.find_all("div", class_="historyBox") + for box in history_boxes: + entry = box.find("div", class_="entry").get_text(strip=False) + history_box_list.append(entry) + + print('') + + +write_chat_to_file(None, None, None) \ No newline at end of file diff --git a/toolbox.py b/toolbox.py index 4794f054..a4b0821b 100644 --- a/toolbox.py +++ b/toolbox.py @@ -1,3 +1,4 @@ + import importlib import time import inspect