diff --git a/config.py b/config.py index 54e40a5..f4e1bc8 100644 --- a/config.py +++ b/config.py @@ -16,15 +16,13 @@ if USE_PROXY: "http": "socks5h://localhost:11284", "https": "socks5h://localhost:11284", } - print('网络代理状态:运行。') else: proxies = None - print('网络代理状态:未配置。无代理状态下很可能无法访问。') # [step 3]>> 以下配置可以优化体验,但大部分场合下并不需要修改 # 对话窗的高度 -CHATBOT_HEIGHT = 1117 +CHATBOT_HEIGHT = 1116 # 发送请求到OpenAI后,等待多久判定为超时 TIMEOUT_SECONDS = 25 diff --git a/functional_crazy.py b/functional_crazy.py index 2f91a32..456bdcb 100644 --- a/functional_crazy.py +++ b/functional_crazy.py @@ -18,7 +18,7 @@ def get_crazy_functionals(): from crazy_functions.代码重写为全英文_多线程 import 全项目切换英文 function_plugins = { - "请解析并解构此项目本身": { + "请解析并解构此项目本身(源码自译解)": { "AsButton": False, # 加入下拉菜单中 "Function": 解析项目本身 }, @@ -30,7 +30,7 @@ def get_crazy_functionals(): "Color": "stop", # 按钮颜色 "Function": 解析一个C项目的头文件 }, - "解析整个C++项目": { + "解析整个C++项目(.cpp/.h)": { "Color": "stop", # 按钮颜色 "AsButton": False, # 加入下拉菜单中 "Function": 解析一个C项目 diff --git a/main.py b/main.py index 08cf2fb..6ad9c28 100644 --- a/main.py +++ b/main.py @@ -54,7 +54,7 @@ with gr.Blocks(theme=set_theme, analytics_enabled=False, css=advanced_css) as de stopBtn = gr.Button("停止", variant="secondary"); stopBtn.style(size="sm") with gr.Row(): from check_proxy import check_proxy - statusDisplay = gr.Markdown(f"Tip: 按Enter提交, 按Shift+Enter换行。当前模型: {LLM_MODEL} \n {check_proxy(proxies)}") + status = gr.Markdown(f"Tip: 按Enter提交, 按Shift+Enter换行。当前模型: {LLM_MODEL} \n {check_proxy(proxies)}") with gr.Accordion("基础功能区", open=True) as area_basic_fn: with gr.Row(): for k in functional: @@ -93,8 +93,8 @@ with gr.Blocks(theme=set_theme, analytics_enabled=False, css=advanced_css) as de checkboxes.select(fn_area_visibility, [checkboxes], [area_basic_fn, area_crazy_fn] ) # 整理反复出现的控件句柄组合 input_combo = [txt, top_p, temperature, chatbot, history, system_prompt] - output_combo = [chatbot, history, statusDisplay] - predict_args = dict(fn=predict, inputs=input_combo, outputs=output_combo, show_progress=True) + output_combo = [chatbot, history, status] + predict_args = dict(fn=predict, inputs=input_combo, outputs=output_combo) empty_txt_args = dict(fn=lambda: "", inputs=[], outputs=[txt]) # 用于在提交后清空输入栏 # 提交按钮、重置按钮 cancel_handles.append(txt.submit(**predict_args)) #; txt.submit(**empty_txt_args) 在提交后清空输入栏 @@ -102,7 +102,7 @@ with gr.Blocks(theme=set_theme, analytics_enabled=False, css=advanced_css) as de resetBtn.click(lambda: ([], [], "已重置"), None, output_combo) # 基础功能区的回调函数注册 for k in functional: - click_handle = functional[k]["Button"].click(predict, [*input_combo, gr.State(True), gr.State(k)], output_combo, show_progress=True) + click_handle = functional[k]["Button"].click(predict, [*input_combo, gr.State(True), gr.State(k)], output_combo) cancel_handles.append(click_handle) # 文件上传区,接收文件后与chatbot的互动 file_upload.upload(on_file_uploaded, [file_upload, chatbot, txt], [chatbot, txt]) diff --git a/toolbox.py b/toolbox.py index 6c48cbb..363acb6 100644 --- a/toolbox.py +++ b/toolbox.py @@ -1,6 +1,6 @@ import markdown, mdtex2html, threading, importlib, traceback, importlib, inspect, re from show_math import convert as convert_math -from functools import wraps +from functools import wraps, lru_cache def get_reduce_token_percent(text): try: @@ -289,22 +289,33 @@ def on_report_generated(files, chatbot): chatbot.append(['汇总报告如何远程获取?', '汇总报告已经添加到右侧“文件上传区”(可能处于折叠状态),请查收。']) return report_files, chatbot +@lru_cache +def read_single_conf_with_lru_cache(arg): + try: r = getattr(importlib.import_module('config_private'), arg) + except: r = getattr(importlib.import_module('config'), arg) + # 在读取API_KEY时,检查一下是不是忘了改config + if arg=='API_KEY': + # 正确的 API_KEY 是 "sk-" + 48 位大小写字母数字的组合 + API_MATCH = re.match(r"sk-[a-zA-Z0-9]{48}$", r) + if API_MATCH: + print(f"[API_KEY] 您的 API_KEY 是: {r[:15]}*** API_KEY 导入成功") + else: + assert False, "正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合,请在config文件中修改API密钥, 添加海外代理之后再运行。" + \ + "(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)" + if arg=='proxies': + if r is None: + print('[PROXY] 网络代理状态:未配置。无代理状态下很可能无法访问。建议:检查USE_PROXY选项是否修改。') + else: + print('[PROXY] 网络代理状态:已配置。配置信息如下:', r) + assert isinstance(r, dict), 'proxies格式错误,请注意proxies选项的格式,不要遗漏括号。' + return r + def get_conf(*args): # 建议您复制一个config_private.py放自己的秘密, 如API和代理网址, 避免不小心传github被别人看到 res = [] for arg in args: - try: r = getattr(importlib.import_module('config_private'), arg) - except: r = getattr(importlib.import_module('config'), arg) + r = read_single_conf_with_lru_cache(arg) res.append(r) - # 在读取API_KEY时,检查一下是不是忘了改config - if arg=='API_KEY': - # 正确的 API_KEY 是 "sk-" + 48 位大小写字母数字的组合 - API_MATCH = re.match(r"sk-[a-zA-Z0-9]{48}$", r) - if API_MATCH: - print(f"您的 API_KEY 是: {r[:15]}*** \nAPI_KEY 导入成功") - else: - assert False, "正确的 API_KEY 是 'sk-' + '48 位大小写字母数字' 的组合,请在config文件中修改API密钥, 添加海外代理之后再运行。" + \ - "(如果您刚更新过代码,请确保旧版config_private文件中没有遗留任何新增键值)" return res def clear_line_break(txt):