re-format code to with pre-commit

This commit is contained in:
qingxu fu 2023-12-31 19:30:32 +08:00
parent 60ba712131
commit 480516380d
52 changed files with 439 additions and 326 deletions

View File

@ -69,9 +69,3 @@ body:
attributes: attributes:
label: Terminal Traceback & Material to Help Reproduce Bugs | 终端traceback如有 + 帮助我们复现的测试材料样本(如有) label: Terminal Traceback & Material to Help Reproduce Bugs | 终端traceback如有 + 帮助我们复现的测试材料样本(如有)
description: Terminal Traceback & Material to Help Reproduce Bugs | 终端traceback如有 + 帮助我们复现的测试材料样本(如有) description: Terminal Traceback & Material to Help Reproduce Bugs | 终端traceback如有 + 帮助我们复现的测试材料样本(如有)

View File

@ -21,8 +21,3 @@ body:
attributes: attributes:
label: Feature Request | 功能请求 label: Feature Request | 功能请求
description: Feature Request | 功能请求 description: Feature Request | 功能请求

1
.gitignore vendored
View File

@ -152,3 +152,4 @@ request_llms/moss
media media
flagged flagged
request_llms/ChatGLM-6b-onnx-u8s8 request_llms/ChatGLM-6b-onnx-u8s8
.pre-commit-config.yaml

View File

@ -229,4 +229,3 @@ services:
# 不使用代理网络拉取最新代码 # 不使用代理网络拉取最新代码
command: > command: >
bash -c "python3 -u main.py" bash -c "python3 -u main.py"

View File

@ -1,2 +1 @@
# 此Dockerfile不再维护请前往docs/GithubAction+ChatGLM+Moss # 此Dockerfile不再维护请前往docs/GithubAction+ChatGLM+Moss

View File

@ -341,4 +341,3 @@ https://github.com/oobabooga/one-click-installers
# المزيد: # المزيد:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -355,4 +355,3 @@ https://github.com/oobabooga/one-click-installers
# More: # More:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -354,4 +354,3 @@ https://github.com/oobabooga/one-click-installers
# Plus # Plus
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -361,4 +361,3 @@ https://github.com/oobabooga/one-click-installers
# Weitere: # Weitere:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -358,4 +358,3 @@ https://github.com/oobabooga/one-click-installers
# Altre risorse: # Altre risorse:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -342,4 +342,3 @@ https://github.com/oobabooga/one-click-installers
# その他: # その他:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -361,4 +361,3 @@ https://github.com/oobabooga/one-click-installers
# 더보기: # 더보기:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -355,4 +355,3 @@ https://github.com/oobabooga/instaladores-de-um-clique
# Mais: # Mais:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -358,4 +358,3 @@ https://github.com/oobabooga/one-click-installers
# Больше: # Больше:
https://github.com/gradio-app/gradio https://github.com/gradio-app/gradio
https://github.com/fghrsh/live2d_demo https://github.com/fghrsh/live2d_demo

View File

@ -7,13 +7,27 @@ sample = """
""" """
import re import re
def preprocess_newbing_out(s): def preprocess_newbing_out(s):
pattern = r'\^(\d+)\^' # 匹配^数字^ pattern = r"\^(\d+)\^" # 匹配^数字^
pattern2 = r'\[(\d+)\]' # 匹配^数字^ pattern2 = r"\[(\d+)\]" # 匹配^数字^
sub = lambda m: '\['+m.group(1)+'\]' # 将匹配到的数字作为替换值
def sub(m):
return "\\[" + m.group(1) + "\\]" # 将匹配到的数字作为替换值
result = re.sub(pattern, sub, s) # 替换操作 result = re.sub(pattern, sub, s) # 替换操作
if '[1]' in result: if "[1]" in result:
result += '<br/><hr style="border-top: dotted 1px #44ac5c;"><br/><small>' + "<br/>".join([re.sub(pattern2, sub, r) for r in result.split('\n') if r.startswith('[')]) + '</small>' result += (
'<br/><hr style="border-top: dotted 1px #44ac5c;"><br/><small>'
+ "<br/>".join(
[
re.sub(pattern2, sub, r)
for r in result.split("\n")
if r.startswith("[")
]
)
+ "</small>"
)
return result return result
@ -28,37 +42,39 @@ def close_up_code_segment_during_stream(gpt_reply):
str: 返回一个新的字符串将输出代码片段的后面的```补上 str: 返回一个新的字符串将输出代码片段的后面的```补上
""" """
if '```' not in gpt_reply: if "```" not in gpt_reply:
return gpt_reply return gpt_reply
if gpt_reply.endswith('```'): if gpt_reply.endswith("```"):
return gpt_reply return gpt_reply
# 排除了以上两个情况,我们 # 排除了以上两个情况,我们
segments = gpt_reply.split('```') segments = gpt_reply.split("```")
n_mark = len(segments) - 1 n_mark = len(segments) - 1
if n_mark % 2 == 1: if n_mark % 2 == 1:
# print('输出代码片段中!') # print('输出代码片段中!')
return gpt_reply+'\n```' return gpt_reply + "\n```"
else: else:
return gpt_reply return gpt_reply
import markdown import markdown
from latex2mathml.converter import convert as tex2mathml from latex2mathml.converter import convert as tex2mathml
from functools import wraps, lru_cache
def markdown_convertion(txt): def markdown_convertion(txt):
""" """
将Markdown格式的文本转换为HTML格式如果包含数学公式则先将公式转换为HTML格式 将Markdown格式的文本转换为HTML格式如果包含数学公式则先将公式转换为HTML格式
""" """
pre = '<div class="markdown-body">' pre = '<div class="markdown-body">'
suf = '</div>' suf = "</div>"
if txt.startswith(pre) and txt.endswith(suf): if txt.startswith(pre) and txt.endswith(suf):
# print('警告,输入了已经经过转化的字符串,二次转化可能出问题') # print('警告,输入了已经经过转化的字符串,二次转化可能出问题')
return txt # 已经被转化过,不需要再次转化 return txt # 已经被转化过,不需要再次转化
markdown_extension_configs = { markdown_extension_configs = {
'mdx_math': { "mdx_math": {
'enable_dollar_delimiter': True, "enable_dollar_delimiter": True,
'use_gitlab_delimiters': False, "use_gitlab_delimiters": False,
}, },
} }
find_equation_pattern = r'<script type="math/tex(?:.*?)>(.*?)</script>' find_equation_pattern = r'<script type="math/tex(?:.*?)>(.*?)</script>'
@ -72,19 +88,19 @@ def markdown_convertion(txt):
def replace_math_no_render(match): def replace_math_no_render(match):
content = match.group(1) content = match.group(1)
if 'mode=display' in match.group(0): if "mode=display" in match.group(0):
content = content.replace('\n', '</br>') content = content.replace("\n", "</br>")
return f"<font color=\"#00FF00\">$$</font><font color=\"#FF00FF\">{content}</font><font color=\"#00FF00\">$$</font>" return f'<font color="#00FF00">$$</font><font color="#FF00FF">{content}</font><font color="#00FF00">$$</font>'
else: else:
return f"<font color=\"#00FF00\">$</font><font color=\"#FF00FF\">{content}</font><font color=\"#00FF00\">$</font>" return f'<font color="#00FF00">$</font><font color="#FF00FF">{content}</font><font color="#00FF00">$</font>'
def replace_math_render(match): def replace_math_render(match):
content = match.group(1) content = match.group(1)
if 'mode=display' in match.group(0): if "mode=display" in match.group(0):
if '\\begin{aligned}' in content: if "\\begin{aligned}" in content:
content = content.replace('\\begin{aligned}', '\\begin{array}') content = content.replace("\\begin{aligned}", "\\begin{array}")
content = content.replace('\\end{aligned}', '\\end{array}') content = content.replace("\\end{aligned}", "\\end{array}")
content = content.replace('&', ' ') content = content.replace("&", " ")
content = tex2mathml_catch_exception(content, display="block") content = tex2mathml_catch_exception(content, display="block")
return content return content
else: else:
@ -94,37 +110,58 @@ def markdown_convertion(txt):
""" """
解决一个mdx_math的bug$包裹begin命令时多余<script> 解决一个mdx_math的bug$包裹begin命令时多余<script>
""" """
content = content.replace('<script type="math/tex">\n<script type="math/tex; mode=display">', '<script type="math/tex; mode=display">') content = content.replace(
content = content.replace('</script>\n</script>', '</script>') '<script type="math/tex">\n<script type="math/tex; mode=display">',
'<script type="math/tex; mode=display">',
)
content = content.replace("</script>\n</script>", "</script>")
return content return content
if ("$" in txt) and ("```" not in txt): # 有$标识的公式符号,且没有代码段```的标识
if ('$' in txt) and ('```' not in txt): # 有$标识的公式符号,且没有代码段```的标识
# convert everything to html format # convert everything to html format
split = markdown.markdown(text='---') split = markdown.markdown(text="---")
convert_stage_1 = markdown.markdown(text=txt, extensions=['mdx_math', 'fenced_code', 'tables', 'sane_lists'], extension_configs=markdown_extension_configs) convert_stage_1 = markdown.markdown(
text=txt,
extensions=["mdx_math", "fenced_code", "tables", "sane_lists"],
extension_configs=markdown_extension_configs,
)
convert_stage_1 = markdown_bug_hunt(convert_stage_1) convert_stage_1 = markdown_bug_hunt(convert_stage_1)
# re.DOTALL: Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline. Corresponds to the inline flag (?s). # re.DOTALL: Make the '.' special character match any character at all, including a newline; without this flag, '.' will match anything except a newline. Corresponds to the inline flag (?s).
# 1. convert to easy-to-copy tex (do not render math) # 1. convert to easy-to-copy tex (do not render math)
convert_stage_2_1, n = re.subn(find_equation_pattern, replace_math_no_render, convert_stage_1, flags=re.DOTALL) convert_stage_2_1, n = re.subn(
find_equation_pattern,
replace_math_no_render,
convert_stage_1,
flags=re.DOTALL,
)
# 2. convert to rendered equation # 2. convert to rendered equation
convert_stage_2_2, n = re.subn(find_equation_pattern, replace_math_render, convert_stage_1, flags=re.DOTALL) convert_stage_2_2, n = re.subn(
find_equation_pattern, replace_math_render, convert_stage_1, flags=re.DOTALL
)
# cat them together # cat them together
return pre + convert_stage_2_1 + f'{split}' + convert_stage_2_2 + suf return pre + convert_stage_2_1 + f"{split}" + convert_stage_2_2 + suf
else: else:
return pre + markdown.markdown(txt, extensions=['fenced_code', 'codehilite', 'tables', 'sane_lists']) + suf return (
pre
+ markdown.markdown(
txt, extensions=["fenced_code", "codehilite", "tables", "sane_lists"]
)
+ suf
)
sample = preprocess_newbing_out(sample) sample = preprocess_newbing_out(sample)
sample = close_up_code_segment_during_stream(sample) sample = close_up_code_segment_during_stream(sample)
sample = markdown_convertion(sample) sample = markdown_convertion(sample)
with open('tmp.html', 'w', encoding='utf8') as f: with open("tmp.html", "w", encoding="utf8") as f:
f.write(""" f.write(
"""
<head> <head>
<title>My Website</title> <title>My Website</title>
<link rel="stylesheet" type="text/css" href="style.css"> <link rel="stylesheet" type="text/css" href="style.css">
</head> </head>
""") """
)
f.write(sample) f.write(sample)

View File

@ -61,4 +61,3 @@ VI 两种音频监听模式切换时,需要刷新页面才有效。
VII 非localhost运行+非https情况下无法打开录音功能的坑https://blog.csdn.net/weixin_39461487/article/details/109594434 VII 非localhost运行+非https情况下无法打开录音功能的坑https://blog.csdn.net/weixin_39461487/article/details/109594434
## 5.点击函数插件区“实时音频采集” 或者其他音频交互功能 ## 5.点击函数插件区“实时音频采集” 或者其他音频交互功能

View File

@ -5,4 +5,3 @@ accelerate
matplotlib matplotlib
huggingface_hub huggingface_hub
triton triton

View File

@ -3,11 +3,13 @@
# """ # """
def validate_path(): def validate_path():
import os, sys import os, sys
dir_name = os.path.dirname(__file__)
root_dir_assume = os.path.abspath(os.path.dirname(__file__) + '/..') os.path.dirname(__file__)
root_dir_assume = os.path.abspath(os.path.dirname(__file__) + "/..")
os.chdir(root_dir_assume) os.chdir(root_dir_assume)
sys.path.append(root_dir_assume) sys.path.append(root_dir_assume)
validate_path() # validate path so you can run from base directory validate_path() # validate path so you can run from base directory
if __name__ == "__main__": if __name__ == "__main__":
# from request_llms.bridge_newbingfree import predict_no_ui_long_connection # from request_llms.bridge_newbingfree import predict_no_ui_long_connection
@ -19,18 +21,18 @@ if __name__ == "__main__":
# from request_llms.bridge_deepseekcoder import predict_no_ui_long_connection # from request_llms.bridge_deepseekcoder import predict_no_ui_long_connection
# from request_llms.bridge_qwen_7B import predict_no_ui_long_connection # from request_llms.bridge_qwen_7B import predict_no_ui_long_connection
from request_llms.bridge_qwen_local import predict_no_ui_long_connection from request_llms.bridge_qwen_local import predict_no_ui_long_connection
# from request_llms.bridge_spark import predict_no_ui_long_connection # from request_llms.bridge_spark import predict_no_ui_long_connection
# from request_llms.bridge_zhipu import predict_no_ui_long_connection # from request_llms.bridge_zhipu import predict_no_ui_long_connection
# from request_llms.bridge_chatglm3 import predict_no_ui_long_connection # from request_llms.bridge_chatglm3 import predict_no_ui_long_connection
llm_kwargs = { llm_kwargs = {
'max_length': 4096, "max_length": 4096,
'top_p': 1, "top_p": 1,
'temperature': 1, "temperature": 1,
} }
result = predict_no_ui_long_connection( inputs="请问什么是质子?", result = predict_no_ui_long_connection(
llm_kwargs=llm_kwargs, inputs="请问什么是质子?", llm_kwargs=llm_kwargs, history=["你好", "我好!"], sys_prompt=""
history=["你好", "我好!"], )
sys_prompt="") print("final result:", result)
print('final result:', result)

View File

@ -29,16 +29,20 @@ md = """
请随时告诉我您的需求我会尽力提供帮助如果您有任何问题或需要解答的议题请随时提问 请随时告诉我您的需求我会尽力提供帮助如果您有任何问题或需要解答的议题请随时提问
""" """
def validate_path(): def validate_path():
import os, sys import os, sys
dir_name = os.path.dirname(__file__)
root_dir_assume = os.path.abspath(os.path.dirname(__file__) + '/..') os.path.dirname(__file__)
root_dir_assume = os.path.abspath(os.path.dirname(__file__) + "/..")
os.chdir(root_dir_assume) os.chdir(root_dir_assume)
sys.path.append(root_dir_assume) sys.path.append(root_dir_assume)
validate_path() # validate path so you can run from base directory validate_path() # validate path so you can run from base directory
from toolbox import markdown_convertion from toolbox import markdown_convertion
html = markdown_convertion(md) html = markdown_convertion(md)
print(html) print(html)
with open('test.html', 'w', encoding='utf-8') as f: with open("test.html", "w", encoding="utf-8") as f:
f.write(html) f.write(html)

View File

@ -4,16 +4,28 @@
import os, sys import os, sys
def validate_path(): dir_name = os.path.dirname(__file__); root_dir_assume = os.path.abspath(dir_name + '/..'); os.chdir(root_dir_assume); sys.path.append(root_dir_assume)
def validate_path():
dir_name = os.path.dirname(__file__)
root_dir_assume = os.path.abspath(dir_name + "/..")
os.chdir(root_dir_assume)
sys.path.append(root_dir_assume)
validate_path() # 返回项目根路径 validate_path() # 返回项目根路径
if __name__ == "__main__": if __name__ == "__main__":
from tests.test_utils import plugin_test from tests.test_utils import plugin_test
# plugin_test(plugin='crazy_functions.函数动态生成->函数动态生成', main_input='交换图像的蓝色通道和红色通道', advanced_arg={"file_path_arg": "./build/ants.jpg"}) # plugin_test(plugin='crazy_functions.函数动态生成->函数动态生成', main_input='交换图像的蓝色通道和红色通道', advanced_arg={"file_path_arg": "./build/ants.jpg"})
# plugin_test(plugin='crazy_functions.Latex输出PDF结果->Latex翻译中文并重新编译PDF', main_input="2307.07522") # plugin_test(plugin='crazy_functions.Latex输出PDF结果->Latex翻译中文并重新编译PDF', main_input="2307.07522")
plugin_test(plugin='crazy_functions.Latex输出PDF结果->Latex翻译中文并重新编译PDF', main_input="G:/SEAFILE_LOCAL/50503047/我的资料库/学位/paperlatex/aaai/Fu_8368_with_appendix") plugin_test(
plugin="crazy_functions.Latex输出PDF结果->Latex翻译中文并重新编译PDF",
main_input="G:/SEAFILE_LOCAL/50503047/我的资料库/学位/paperlatex/aaai/Fu_8368_with_appendix",
)
# plugin_test(plugin='crazy_functions.虚空终端->虚空终端', main_input='修改api-key为sk-jhoejriotherjep') # plugin_test(plugin='crazy_functions.虚空终端->虚空终端', main_input='修改api-key为sk-jhoejriotherjep')
@ -61,4 +73,3 @@ if __name__ == "__main__":
# advanced_arg = {"advanced_arg":"--pre_seq_len=128 --learning_rate=2e-2 --num_gpus=1 --json_dataset='t_code.json' --ptuning_directory='/home/hmp/ChatGLM2-6B/ptuning' " } # advanced_arg = {"advanced_arg":"--pre_seq_len=128 --learning_rate=2e-2 --num_gpus=1 --json_dataset='t_code.json' --ptuning_directory='/home/hmp/ChatGLM2-6B/ptuning' " }
# plugin_test(plugin='crazy_functions.chatglm微调工具->启动微调', main_input='build/dev.json', advanced_arg=advanced_arg) # plugin_test(plugin='crazy_functions.chatglm微调工具->启动微调', main_input='build/dev.json', advanced_arg=advanced_arg)

View File

@ -9,45 +9,52 @@ from functools import wraps
import sys import sys
import os import os
def chat_to_markdown_str(chat): def chat_to_markdown_str(chat):
result = "" result = ""
for i, cc in enumerate(chat): for i, cc in enumerate(chat):
result += f'\n\n{cc[0]}\n\n{cc[1]}' result += f"\n\n{cc[0]}\n\n{cc[1]}"
if i != len(chat)-1: if i != len(chat) - 1:
result += '\n\n---' result += "\n\n---"
return result return result
def silence_stdout(func): def silence_stdout(func):
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
_original_stdout = sys.stdout _original_stdout = sys.stdout
sys.stdout = open(os.devnull, 'w') sys.stdout = open(os.devnull, "w")
sys.stdout.reconfigure(encoding='utf-8') sys.stdout.reconfigure(encoding="utf-8")
for q in func(*args, **kwargs): for q in func(*args, **kwargs):
sys.stdout = _original_stdout sys.stdout = _original_stdout
yield q yield q
sys.stdout = open(os.devnull, 'w') sys.stdout = open(os.devnull, "w")
sys.stdout.reconfigure(encoding='utf-8') sys.stdout.reconfigure(encoding="utf-8")
sys.stdout.close() sys.stdout.close()
sys.stdout = _original_stdout sys.stdout = _original_stdout
return wrapper return wrapper
def silence_stdout_fn(func): def silence_stdout_fn(func):
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
_original_stdout = sys.stdout _original_stdout = sys.stdout
sys.stdout = open(os.devnull, 'w') sys.stdout = open(os.devnull, "w")
sys.stdout.reconfigure(encoding='utf-8') sys.stdout.reconfigure(encoding="utf-8")
result = func(*args, **kwargs) result = func(*args, **kwargs)
sys.stdout.close() sys.stdout.close()
sys.stdout = _original_stdout sys.stdout = _original_stdout
return result return result
return wrapper return wrapper
class VoidTerminal():
class VoidTerminal:
def __init__(self) -> None: def __init__(self) -> None:
pass pass
vt = VoidTerminal() vt = VoidTerminal()
vt.get_conf = silence_stdout_fn(get_conf) vt.get_conf = silence_stdout_fn(get_conf)
vt.set_conf = silence_stdout_fn(set_conf) vt.set_conf = silence_stdout_fn(set_conf)
@ -56,9 +63,27 @@ vt.get_plugin_handle = silence_stdout_fn(get_plugin_handle)
vt.get_plugin_default_kwargs = silence_stdout_fn(get_plugin_default_kwargs) vt.get_plugin_default_kwargs = silence_stdout_fn(get_plugin_default_kwargs)
vt.get_chat_handle = silence_stdout_fn(get_chat_handle) vt.get_chat_handle = silence_stdout_fn(get_chat_handle)
vt.get_chat_default_kwargs = silence_stdout_fn(get_chat_default_kwargs) vt.get_chat_default_kwargs = silence_stdout_fn(get_chat_default_kwargs)
vt.chat_to_markdown_str = (chat_to_markdown_str) vt.chat_to_markdown_str = chat_to_markdown_str
proxies, WEB_PORT, LLM_MODEL, CONCURRENT_COUNT, AUTHENTICATION, CHATBOT_HEIGHT, LAYOUT, API_KEY = \ (
vt.get_conf('proxies', 'WEB_PORT', 'LLM_MODEL', 'CONCURRENT_COUNT', 'AUTHENTICATION', 'CHATBOT_HEIGHT', 'LAYOUT', 'API_KEY') proxies,
WEB_PORT,
LLM_MODEL,
CONCURRENT_COUNT,
AUTHENTICATION,
CHATBOT_HEIGHT,
LAYOUT,
API_KEY,
) = vt.get_conf(
"proxies",
"WEB_PORT",
"LLM_MODEL",
"CONCURRENT_COUNT",
"AUTHENTICATION",
"CHATBOT_HEIGHT",
"LAYOUT",
"API_KEY",
)
def plugin_test(main_input, plugin, advanced_arg=None, debug=True): def plugin_test(main_input, plugin, advanced_arg=None, debug=True):
from rich.live import Live from rich.live import Live
@ -69,9 +94,9 @@ def plugin_test(main_input, plugin, advanced_arg=None, debug=True):
plugin = vt.get_plugin_handle(plugin) plugin = vt.get_plugin_handle(plugin)
plugin_kwargs = vt.get_plugin_default_kwargs() plugin_kwargs = vt.get_plugin_default_kwargs()
plugin_kwargs['main_input'] = main_input plugin_kwargs["main_input"] = main_input
if advanced_arg is not None: if advanced_arg is not None:
plugin_kwargs['plugin_kwargs'] = advanced_arg plugin_kwargs["plugin_kwargs"] = advanced_arg
if debug: if debug:
my_working_plugin = (plugin)(**plugin_kwargs) my_working_plugin = (plugin)(**plugin_kwargs)
else: else:

View File

@ -4,14 +4,25 @@
import os, sys import os, sys
def validate_path(): dir_name = os.path.dirname(__file__); root_dir_assume = os.path.abspath(dir_name + '/..'); os.chdir(root_dir_assume); sys.path.append(root_dir_assume)
def validate_path():
dir_name = os.path.dirname(__file__)
root_dir_assume = os.path.abspath(dir_name + "/..")
os.chdir(root_dir_assume)
sys.path.append(root_dir_assume)
validate_path() # 返回项目根路径 validate_path() # 返回项目根路径
if __name__ == "__main__": if __name__ == "__main__":
from tests.test_utils import plugin_test from tests.test_utils import plugin_test
plugin_test(plugin='crazy_functions.知识库问答->知识库文件注入', main_input="./README.md") plugin_test(plugin="crazy_functions.知识库问答->知识库文件注入", main_input="./README.md")
plugin_test(plugin='crazy_functions.知识库问答->读取知识库作答', main_input="What is the installation method") plugin_test(
plugin="crazy_functions.知识库问答->读取知识库作答",
main_input="What is the installation method",
)
plugin_test(plugin='crazy_functions.知识库问答->读取知识库作答', main_input="远程云服务器部署?") plugin_test(plugin="crazy_functions.知识库问答->读取知识库作答", main_input="远程云服务器部署?")

View File

@ -479,4 +479,3 @@
.dark .codehilite .vi { color: #89DDFF } /* Name.Variable.Instance */ .dark .codehilite .vi { color: #89DDFF } /* Name.Variable.Instance */
.dark .codehilite .vm { color: #82AAFF } /* Name.Variable.Magic */ .dark .codehilite .vm { color: #82AAFF } /* Name.Variable.Magic */
.dark .codehilite .il { color: #F78C6C } /* Literal.Number.Integer.Long */ .dark .codehilite .il { color: #F78C6C } /* Literal.Number.Integer.Long */

View File

@ -1,18 +1,26 @@
import os import os
import gradio as gr import gradio as gr
from toolbox import get_conf from toolbox import get_conf
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf('CODE_HIGHLIGHT', 'ADD_WAIFU', 'LAYOUT')
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf("CODE_HIGHLIGHT", "ADD_WAIFU", "LAYOUT")
theme_dir = os.path.dirname(__file__) theme_dir = os.path.dirname(__file__)
def adjust_theme():
def adjust_theme():
try: try:
color_er = gr.themes.utils.colors.fuchsia color_er = gr.themes.utils.colors.fuchsia
set_theme = gr.themes.Default( set_theme = gr.themes.Default(
primary_hue=gr.themes.utils.colors.orange, primary_hue=gr.themes.utils.colors.orange,
neutral_hue=gr.themes.utils.colors.gray, neutral_hue=gr.themes.utils.colors.gray,
font=["Helvetica", "Microsoft YaHei", "ui-sans-serif", "sans-serif", "system-ui"], font=[
font_mono=["ui-monospace", "Consolas", "monospace"]) "Helvetica",
"Microsoft YaHei",
"ui-sans-serif",
"sans-serif",
"system-ui",
],
font_mono=["ui-monospace", "Consolas", "monospace"],
)
set_theme.set( set_theme.set(
# Colors # Colors
input_background_fill_dark="*neutral_800", input_background_fill_dark="*neutral_800",
@ -59,7 +67,7 @@ def adjust_theme():
button_cancel_text_color_dark="white", button_cancel_text_color_dark="white",
) )
with open(os.path.join(theme_dir, 'common.js'), 'r', encoding='utf8') as f: with open(os.path.join(theme_dir, "common.js"), "r", encoding="utf8") as f:
js = f"<script>{f.read()}</script>" js = f"<script>{f.read()}</script>"
# 添加一个萌萌的看板娘 # 添加一个萌萌的看板娘
@ -69,21 +77,26 @@ def adjust_theme():
<script src="file=docs/waifu_plugin/jquery-ui.min.js"></script> <script src="file=docs/waifu_plugin/jquery-ui.min.js"></script>
<script src="file=docs/waifu_plugin/autoload.js"></script> <script src="file=docs/waifu_plugin/autoload.js"></script>
""" """
if not hasattr(gr, 'RawTemplateResponse'): if not hasattr(gr, "RawTemplateResponse"):
gr.RawTemplateResponse = gr.routes.templates.TemplateResponse gr.RawTemplateResponse = gr.routes.templates.TemplateResponse
gradio_original_template_fn = gr.RawTemplateResponse gradio_original_template_fn = gr.RawTemplateResponse
def gradio_new_template_fn(*args, **kwargs): def gradio_new_template_fn(*args, **kwargs):
res = gradio_original_template_fn(*args, **kwargs) res = gradio_original_template_fn(*args, **kwargs)
res.body = res.body.replace(b'</html>', f'{js}</html>'.encode("utf8")) res.body = res.body.replace(b"</html>", f"{js}</html>".encode("utf8"))
res.init_headers() res.init_headers()
return res return res
gr.routes.templates.TemplateResponse = gradio_new_template_fn # override gradio template
gr.routes.templates.TemplateResponse = (
gradio_new_template_fn # override gradio template
)
except: except:
set_theme = None set_theme = None
print('gradio版本较旧, 不能自定义字体和颜色') print("gradio版本较旧, 不能自定义字体和颜色")
return set_theme return set_theme
with open(os.path.join(theme_dir, 'contrast.css'), "r", encoding="utf-8") as f:
with open(os.path.join(theme_dir, "contrast.css"), "r", encoding="utf-8") as f:
advanced_css = f.read() advanced_css = f.read()
with open(os.path.join(theme_dir, 'common.css'), "r", encoding="utf-8") as f: with open(os.path.join(theme_dir, "common.css"), "r", encoding="utf-8") as f:
advanced_css += f.read() advanced_css += f.read()

View File

@ -303,4 +303,3 @@
.dark .codehilite .vi { color: #89DDFF } /* Name.Variable.Instance */ .dark .codehilite .vi { color: #89DDFF } /* Name.Variable.Instance */
.dark .codehilite .vm { color: #82AAFF } /* Name.Variable.Magic */ .dark .codehilite .vm { color: #82AAFF } /* Name.Variable.Magic */
.dark .codehilite .il { color: #F78C6C } /* Literal.Number.Integer.Long */ .dark .codehilite .il { color: #F78C6C } /* Literal.Number.Integer.Long */

View File

@ -1,17 +1,26 @@
import os import os
import gradio as gr import gradio as gr
from toolbox import get_conf from toolbox import get_conf
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf('CODE_HIGHLIGHT', 'ADD_WAIFU', 'LAYOUT')
theme_dir = os.path.dirname(__file__)
def adjust_theme():
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf("CODE_HIGHLIGHT", "ADD_WAIFU", "LAYOUT")
theme_dir = os.path.dirname(__file__)
def adjust_theme():
try: try:
color_er = gr.themes.utils.colors.fuchsia color_er = gr.themes.utils.colors.fuchsia
set_theme = gr.themes.Default( set_theme = gr.themes.Default(
primary_hue=gr.themes.utils.colors.orange, primary_hue=gr.themes.utils.colors.orange,
neutral_hue=gr.themes.utils.colors.gray, neutral_hue=gr.themes.utils.colors.gray,
font=["Helvetica", "Microsoft YaHei", "ui-sans-serif", "sans-serif", "system-ui"], font=[
font_mono=["ui-monospace", "Consolas", "monospace"]) "Helvetica",
"Microsoft YaHei",
"ui-sans-serif",
"sans-serif",
"system-ui",
],
font_mono=["ui-monospace", "Consolas", "monospace"],
)
set_theme.set( set_theme.set(
# Colors # Colors
input_background_fill_dark="*neutral_800", input_background_fill_dark="*neutral_800",
@ -58,7 +67,7 @@ def adjust_theme():
button_cancel_text_color_dark="white", button_cancel_text_color_dark="white",
) )
with open(os.path.join(theme_dir, 'common.js'), 'r', encoding='utf8') as f: with open(os.path.join(theme_dir, "common.js"), "r", encoding="utf8") as f:
js = f"<script>{f.read()}</script>" js = f"<script>{f.read()}</script>"
# 添加一个萌萌的看板娘 # 添加一个萌萌的看板娘
@ -68,21 +77,26 @@ def adjust_theme():
<script src="file=docs/waifu_plugin/jquery-ui.min.js"></script> <script src="file=docs/waifu_plugin/jquery-ui.min.js"></script>
<script src="file=docs/waifu_plugin/autoload.js"></script> <script src="file=docs/waifu_plugin/autoload.js"></script>
""" """
if not hasattr(gr, 'RawTemplateResponse'): if not hasattr(gr, "RawTemplateResponse"):
gr.RawTemplateResponse = gr.routes.templates.TemplateResponse gr.RawTemplateResponse = gr.routes.templates.TemplateResponse
gradio_original_template_fn = gr.RawTemplateResponse gradio_original_template_fn = gr.RawTemplateResponse
def gradio_new_template_fn(*args, **kwargs): def gradio_new_template_fn(*args, **kwargs):
res = gradio_original_template_fn(*args, **kwargs) res = gradio_original_template_fn(*args, **kwargs)
res.body = res.body.replace(b'</html>', f'{js}</html>'.encode("utf8")) res.body = res.body.replace(b"</html>", f"{js}</html>".encode("utf8"))
res.init_headers() res.init_headers()
return res return res
gr.routes.templates.TemplateResponse = gradio_new_template_fn # override gradio template
gr.routes.templates.TemplateResponse = (
gradio_new_template_fn # override gradio template
)
except: except:
set_theme = None set_theme = None
print('gradio版本较旧, 不能自定义字体和颜色') print("gradio版本较旧, 不能自定义字体和颜色")
return set_theme return set_theme
with open(os.path.join(theme_dir, 'default.css'), "r", encoding="utf-8") as f:
with open(os.path.join(theme_dir, "default.css"), "r", encoding="utf-8") as f:
advanced_css = f.read() advanced_css = f.read()
with open(os.path.join(theme_dir, 'common.css'), "r", encoding="utf-8") as f: with open(os.path.join(theme_dir, "common.css"), "r", encoding="utf-8") as f:
advanced_css += f.read() advanced_css += f.read()

View File

@ -2,29 +2,36 @@ import logging
import os import os
import gradio as gr import gradio as gr
from toolbox import get_conf, ProxyNetworkActivate from toolbox import get_conf, ProxyNetworkActivate
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf('CODE_HIGHLIGHT', 'ADD_WAIFU', 'LAYOUT')
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf("CODE_HIGHLIGHT", "ADD_WAIFU", "LAYOUT")
theme_dir = os.path.dirname(__file__) theme_dir = os.path.dirname(__file__)
def dynamic_set_theme(THEME): def dynamic_set_theme(THEME):
set_theme = gr.themes.ThemeClass() set_theme = gr.themes.ThemeClass()
with ProxyNetworkActivate('Download_Gradio_Theme'): with ProxyNetworkActivate("Download_Gradio_Theme"):
logging.info('正在下载Gradio主题请稍等。') logging.info("正在下载Gradio主题请稍等。")
if THEME.startswith('Huggingface-'): THEME = THEME.lstrip('Huggingface-') if THEME.startswith("Huggingface-"):
if THEME.startswith('huggingface-'): THEME = THEME.lstrip('huggingface-') THEME = THEME.lstrip("Huggingface-")
if THEME.startswith("huggingface-"):
THEME = THEME.lstrip("huggingface-")
set_theme = set_theme.from_hub(THEME.lower()) set_theme = set_theme.from_hub(THEME.lower())
return set_theme return set_theme
def adjust_theme(): def adjust_theme():
try: try:
set_theme = gr.themes.ThemeClass() set_theme = gr.themes.ThemeClass()
with ProxyNetworkActivate('Download_Gradio_Theme'): with ProxyNetworkActivate("Download_Gradio_Theme"):
logging.info('正在下载Gradio主题请稍等。') logging.info("正在下载Gradio主题请稍等。")
THEME = get_conf('THEME') THEME = get_conf("THEME")
if THEME.startswith('Huggingface-'): THEME = THEME.lstrip('Huggingface-') if THEME.startswith("Huggingface-"):
if THEME.startswith('huggingface-'): THEME = THEME.lstrip('huggingface-') THEME = THEME.lstrip("Huggingface-")
if THEME.startswith("huggingface-"):
THEME = THEME.lstrip("huggingface-")
set_theme = set_theme.from_hub(THEME.lower()) set_theme = set_theme.from_hub(THEME.lower())
with open(os.path.join(theme_dir, 'common.js'), 'r', encoding='utf8') as f: with open(os.path.join(theme_dir, "common.js"), "r", encoding="utf8") as f:
js = f"<script>{f.read()}</script>" js = f"<script>{f.read()}</script>"
# 添加一个萌萌的看板娘 # 添加一个萌萌的看板娘
@ -34,20 +41,26 @@ def adjust_theme():
<script src="file=docs/waifu_plugin/jquery-ui.min.js"></script> <script src="file=docs/waifu_plugin/jquery-ui.min.js"></script>
<script src="file=docs/waifu_plugin/autoload.js"></script> <script src="file=docs/waifu_plugin/autoload.js"></script>
""" """
if not hasattr(gr, 'RawTemplateResponse'): if not hasattr(gr, "RawTemplateResponse"):
gr.RawTemplateResponse = gr.routes.templates.TemplateResponse gr.RawTemplateResponse = gr.routes.templates.TemplateResponse
gradio_original_template_fn = gr.RawTemplateResponse gradio_original_template_fn = gr.RawTemplateResponse
def gradio_new_template_fn(*args, **kwargs): def gradio_new_template_fn(*args, **kwargs):
res = gradio_original_template_fn(*args, **kwargs) res = gradio_original_template_fn(*args, **kwargs)
res.body = res.body.replace(b'</html>', f'{js}</html>'.encode("utf8")) res.body = res.body.replace(b"</html>", f"{js}</html>".encode("utf8"))
res.init_headers() res.init_headers()
return res return res
gr.routes.templates.TemplateResponse = gradio_new_template_fn # override gradio template
except Exception as e: gr.routes.templates.TemplateResponse = (
gradio_new_template_fn # override gradio template
)
except Exception:
set_theme = None set_theme = None
from toolbox import trimmed_format_exc from toolbox import trimmed_format_exc
logging.error('gradio版本较旧, 不能自定义字体和颜色:', trimmed_format_exc())
logging.error("gradio版本较旧, 不能自定义字体和颜色:", trimmed_format_exc())
return set_theme return set_theme
with open(os.path.join(theme_dir, 'common.css'), "r", encoding="utf-8") as f:
with open(os.path.join(theme_dir, "common.css"), "r", encoding="utf-8") as f:
advanced_css = f.read() advanced_css = f.read()

View File

@ -1,9 +1,11 @@
import os import os
import gradio as gr import gradio as gr
from toolbox import get_conf from toolbox import get_conf
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf('CODE_HIGHLIGHT', 'ADD_WAIFU', 'LAYOUT')
CODE_HIGHLIGHT, ADD_WAIFU, LAYOUT = get_conf("CODE_HIGHLIGHT", "ADD_WAIFU", "LAYOUT")
theme_dir = os.path.dirname(__file__) theme_dir = os.path.dirname(__file__)
def adjust_theme(): def adjust_theme():
try: try:
set_theme = gr.themes.Soft( set_theme = gr.themes.Soft(
@ -50,7 +52,6 @@ def adjust_theme():
c900="#2B2B2B", c900="#2B2B2B",
c950="#171717", c950="#171717",
), ),
radius_size=gr.themes.sizes.radius_sm, radius_size=gr.themes.sizes.radius_sm,
).set( ).set(
button_primary_background_fill="*primary_500", button_primary_background_fill="*primary_500",
@ -75,7 +76,7 @@ def adjust_theme():
chatbot_code_background_color_dark="*neutral_950", chatbot_code_background_color_dark="*neutral_950",
) )
with open(os.path.join(theme_dir, 'common.js'), 'r', encoding='utf8') as f: with open(os.path.join(theme_dir, "common.js"), "r", encoding="utf8") as f:
js = f"<script>{f.read()}</script>" js = f"<script>{f.read()}</script>"
# 添加一个萌萌的看板娘 # 添加一个萌萌的看板娘
@ -86,24 +87,29 @@ def adjust_theme():
<script src="file=docs/waifu_plugin/autoload.js"></script> <script src="file=docs/waifu_plugin/autoload.js"></script>
""" """
with open(os.path.join(theme_dir, 'green.js'), 'r', encoding='utf8') as f: with open(os.path.join(theme_dir, "green.js"), "r", encoding="utf8") as f:
js += f"<script>{f.read()}</script>" js += f"<script>{f.read()}</script>"
if not hasattr(gr, 'RawTemplateResponse'): if not hasattr(gr, "RawTemplateResponse"):
gr.RawTemplateResponse = gr.routes.templates.TemplateResponse gr.RawTemplateResponse = gr.routes.templates.TemplateResponse
gradio_original_template_fn = gr.RawTemplateResponse gradio_original_template_fn = gr.RawTemplateResponse
def gradio_new_template_fn(*args, **kwargs): def gradio_new_template_fn(*args, **kwargs):
res = gradio_original_template_fn(*args, **kwargs) res = gradio_original_template_fn(*args, **kwargs)
res.body = res.body.replace(b'</html>', f'{js}</html>'.encode("utf8")) res.body = res.body.replace(b"</html>", f"{js}</html>".encode("utf8"))
res.init_headers() res.init_headers()
return res return res
gr.routes.templates.TemplateResponse = gradio_new_template_fn # override gradio template
gr.routes.templates.TemplateResponse = (
gradio_new_template_fn # override gradio template
)
except: except:
set_theme = None set_theme = None
print('gradio版本较旧, 不能自定义字体和颜色') print("gradio版本较旧, 不能自定义字体和颜色")
return set_theme return set_theme
with open(os.path.join(theme_dir, 'green.css'), "r", encoding="utf-8") as f:
with open(os.path.join(theme_dir, "green.css"), "r", encoding="utf-8") as f:
advanced_css = f.read() advanced_css = f.read()
with open(os.path.join(theme_dir, 'common.css'), "r", encoding="utf-8") as f: with open(os.path.join(theme_dir, "common.css"), "r", encoding="utf-8") as f:
advanced_css += f.read() advanced_css += f.read()

View File

@ -10,29 +10,33 @@ from toolbox import get_conf
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
""" """
def load_dynamic_theme(THEME): def load_dynamic_theme(THEME):
adjust_dynamic_theme = None adjust_dynamic_theme = None
if THEME == 'Chuanhu-Small-and-Beautiful': if THEME == "Chuanhu-Small-and-Beautiful":
from .green import adjust_theme, advanced_css from .green import adjust_theme, advanced_css
theme_declaration = "<h2 align=\"center\" class=\"small\">[Chuanhu-Small-and-Beautiful主题]</h2>"
elif THEME == 'High-Contrast': theme_declaration = (
'<h2 align="center" class="small">[Chuanhu-Small-and-Beautiful主题]</h2>'
)
elif THEME == "High-Contrast":
from .contrast import adjust_theme, advanced_css from .contrast import adjust_theme, advanced_css
theme_declaration = "" theme_declaration = ""
elif '/' in THEME: elif "/" in THEME:
from .gradios import adjust_theme, advanced_css from .gradios import adjust_theme, advanced_css
from .gradios import dynamic_set_theme from .gradios import dynamic_set_theme
adjust_dynamic_theme = dynamic_set_theme(THEME) adjust_dynamic_theme = dynamic_set_theme(THEME)
theme_declaration = "" theme_declaration = ""
else: else:
from .default import adjust_theme, advanced_css from .default import adjust_theme, advanced_css
theme_declaration = "" theme_declaration = ""
return adjust_theme, advanced_css, theme_declaration, adjust_dynamic_theme return adjust_theme, advanced_css, theme_declaration, adjust_dynamic_theme
adjust_theme, advanced_css, theme_declaration, _ = load_dynamic_theme(get_conf('THEME'))
adjust_theme, advanced_css, theme_declaration, _ = load_dynamic_theme(get_conf("THEME"))
""" """
@ -42,26 +46,26 @@ cookie相关工具函数
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
""" """
def init_cookie(cookies, chatbot): def init_cookie(cookies, chatbot):
# 为每一位访问的用户赋予一个独一无二的uuid编码 # 为每一位访问的用户赋予一个独一无二的uuid编码
cookies.update({'uuid': uuid.uuid4()}) cookies.update({"uuid": uuid.uuid4()})
return cookies return cookies
def to_cookie_str(d): def to_cookie_str(d):
# Pickle the dictionary and encode it as a string # Pickle the dictionary and encode it as a string
pickled_dict = pickle.dumps(d) pickled_dict = pickle.dumps(d)
cookie_value = base64.b64encode(pickled_dict).decode('utf-8') cookie_value = base64.b64encode(pickled_dict).decode("utf-8")
return cookie_value return cookie_value
def from_cookie_str(c): def from_cookie_str(c):
# Decode the base64-encoded string and unpickle it into a dictionary # Decode the base64-encoded string and unpickle it into a dictionary
pickled_dict = base64.b64decode(c.encode('utf-8')) pickled_dict = base64.b64decode(c.encode("utf-8"))
return pickle.loads(pickled_dict) return pickle.loads(pickled_dict)
""" """
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
3 部分 3 部分
@ -114,5 +118,3 @@ js_code_for_persistent_cookie_init = """(persistent_cookie) => {
return getCookie("persistent_cookie"); return getCookie("persistent_cookie");
} }
""" """