From adf93195e841b34feb6eb9030b409a8a97d06768 Mon Sep 17 00:00:00 2001 From: qingxu fu <505030475@qq.com> Date: Tue, 29 Aug 2023 23:25:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E4=BD=BF=E7=94=A8=E8=87=AA?= =?UTF-8?q?=E7=84=B6=E8=AF=AD=E8=A8=80=E8=B0=83=E5=BA=A6=E5=90=84=E4=B8=AA?= =?UTF-8?q?=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crazy_functional.py | 280 +++++++++++------------ crazy_functions/json_fns/pydantic_io.py | 2 +- crazy_functions/vt_fns/vt_call_plugin.py | 48 ++++ crazy_functions/虚空终端.py | 48 ++-- tests/test_plugins.py | 4 +- 5 files changed, 220 insertions(+), 162 deletions(-) create mode 100644 crazy_functions/vt_fns/vt_call_plugin.py diff --git a/crazy_functional.py b/crazy_functional.py index 491288e..e83dd59 100644 --- a/crazy_functional.py +++ b/crazy_functional.py @@ -2,7 +2,6 @@ from toolbox import HotReload # HotReload 的意思是热更新,修改函数 def get_crazy_functions(): - ###################### 第一组插件 ########################### from crazy_functions.读文章写摘要 import 读文章写摘要 from crazy_functions.生成函数注释 import 批量生成函数注释 from crazy_functions.解析项目源代码 import 解析项目本身 @@ -25,114 +24,8 @@ def get_crazy_functions(): from crazy_functions.对话历史存档 import 载入对话历史存档 from crazy_functions.对话历史存档 import 删除所有本地对话历史记录 from crazy_functions.辅助功能 import 清除缓存 - from crazy_functions.批量Markdown翻译 import Markdown英译中 - function_plugins = { - "解析整个Python项目": { - "Color": "stop", # 按钮颜色 - "Function": HotReload(解析一个Python项目) - }, - "载入对话历史存档(先上传存档或输入路径)": { - "Color": "stop", - "AsButton": False, - "Function": HotReload(载入对话历史存档) - }, - "删除所有本地对话历史记录(请谨慎操作)": { - "AsButton": False, - "Function": HotReload(删除所有本地对话历史记录) - }, - "清除所有缓存文件(请谨慎操作)": { - "Color": "stop", - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(清除缓存) - }, - "解析Jupyter Notebook文件": { - "Color": "stop", - "AsButton": False, - "Function": HotReload(解析ipynb文件), - "AdvancedArgs": True, # 调用时,唤起高级参数输入区(默认False) - "ArgsReminder": "若输入0,则不解析notebook中的Markdown块", # 高级参数输入区的显示提示 - }, - "批量总结Word文档": { - "Color": "stop", - "Function": HotReload(总结word文档) - }, - "解析整个C++项目头文件": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个C项目的头文件) - }, - "解析整个C++项目(.cpp/.hpp/.c/.h)": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个C项目) - }, - "解析整个Go项目": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个Golang项目) - }, - "解析整个Rust项目": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个Rust项目) - }, - "解析整个Java项目": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个Java项目) - }, - "解析整个前端项目(js,ts,css等)": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个前端项目) - }, - "解析整个Lua项目": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个Lua项目) - }, - "解析整个CSharp项目": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析一个CSharp项目) - }, - "读Tex论文写摘要": { - "Color": "stop", # 按钮颜色 - "Function": HotReload(读文章写摘要) - }, - "Markdown/Readme英译中": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 - "Color": "stop", - "Function": HotReload(Markdown英译中) - }, - "批量生成函数注释": { - "Color": "stop", # 按钮颜色 - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(批量生成函数注释) - }, - "保存当前的对话": { - "Function": HotReload(对话历史存档) - }, - "[多线程Demo] 解析此项目本身(源码自译解)": { - "AsButton": False, # 加入下拉菜单中 - "Function": HotReload(解析项目本身) - }, - # "[老旧的Demo] 把本项目源代码切换成全英文": { - # # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 - # "AsButton": False, # 加入下拉菜单中 - # "Function": HotReload(全项目切换英文) - # }, - "[插件demo] 历史上的今天": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 - "Function": HotReload(高阶功能模板函数) - }, - - } - ###################### 第二组插件 ########################### - # [第二组插件]: 经过充分测试 from crazy_functions.批量总结PDF文档 import 批量总结PDF文档 - # from crazy_functions.批量总结PDF文档pdfminer import 批量总结PDF文档pdfminer from crazy_functions.批量翻译PDF文档_多线程 import 批量翻译PDF文档 from crazy_functions.谷歌检索小助手 import 谷歌检索小助手 from crazy_functions.理解PDF文档内容 import 理解PDF文档内容标准文件输入 @@ -142,81 +35,185 @@ def get_crazy_functions(): from crazy_functions.Latex全文翻译 import Latex英译中 from crazy_functions.批量Markdown翻译 import Markdown中译英 - function_plugins.update({ + + function_plugins = { + "解析整个Python项目": { + "Color": "stop", + "AsButton": True, + "Info": "解析一个Python项目的所有源文件(.py) | 输入参数为路径", + "Function": HotReload(解析一个Python项目) + }, + "载入对话历史存档(先上传存档或输入路径)": { + "Color": "stop", + "AsButton": False, + "Info": "载入对话历史存档 | 输入参数为路径", + "Function": HotReload(载入对话历史存档) + }, + "删除所有本地对话历史记录(谨慎操作)": { + "AsButton": False, + "Info": "删除所有本地对话历史记录,谨慎操作 | 不需要输入参数", + "Function": HotReload(删除所有本地对话历史记录) + }, + "清除所有缓存文件(谨慎操作)": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "清除所有缓存文件,谨慎操作 | 不需要输入参数", + "Function": HotReload(清除缓存) + }, + "批量总结Word文档": { + "Color": "stop", + "AsButton": True, + "Info": "批量总结word文档 | 输入参数为路径", + "Function": HotReload(总结word文档) + }, + "解析整个C++项目头文件": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个C++项目的所有头文件(.h/.hpp) | 输入参数为路径", + "Function": HotReload(解析一个C项目的头文件) + }, + "解析整个C++项目(.cpp/.hpp/.c/.h)": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个C++项目的所有源文件(.cpp/.hpp/.c/.h)| 输入参数为路径", + "Function": HotReload(解析一个C项目) + }, + "解析整个Go项目": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个Go项目的所有源文件 | 输入参数为路径", + "Function": HotReload(解析一个Golang项目) + }, + "解析整个Rust项目": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个Rust项目的所有源文件 | 输入参数为路径", + "Function": HotReload(解析一个Rust项目) + }, + "解析整个Java项目": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个Java项目的所有源文件 | 输入参数为路径", + "Function": HotReload(解析一个Java项目) + }, + "解析整个前端项目(js,ts,css等)": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个前端项目的所有源文件(js,ts,css等) | 输入参数为路径", + "Function": HotReload(解析一个前端项目) + }, + "解析整个Lua项目": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个Lua项目的所有源文件 | 输入参数为路径", + "Function": HotReload(解析一个Lua项目) + }, + "解析整个CSharp项目": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Info": "解析一个CSharp项目的所有源文件 | 输入参数为路径", + "Function": HotReload(解析一个CSharp项目) + }, + "解析Jupyter Notebook文件": { + "Color": "stop", + "AsButton": False, + "Info": "解析Jupyter Notebook文件 | 输入参数为路径", + "Function": HotReload(解析ipynb文件), + "AdvancedArgs": True, # 调用时,唤起高级参数输入区(默认False) + "ArgsReminder": "若输入0,则不解析notebook中的Markdown块", # 高级参数输入区的显示提示 + }, + "读Tex论文写摘要": { + "Color": "stop", + "AsButton": True, + "Function": HotReload(读文章写摘要) + }, + "翻译README或.MD": { + "Color": "stop", + "AsButton": True, + "Info": "将Markdown翻译为中文 | 输入参数为路径或URL", + "Function": HotReload(Markdown英译中) + }, + "翻译Markdown或README(支持Github链接)": { + "Color": "stop", + "AsButton": False, + "Function": HotReload(Markdown英译中) + }, + "批量生成函数注释": { + "Color": "stop", + "AsButton": False, # 加入下拉菜单中 + "Function": HotReload(批量生成函数注释) + }, + "保存当前的对话": { + "AsButton": True, + "Info": "保存当前的对话 | 不需要输入参数", + "Function": HotReload(对话历史存档) + }, + "[多线程Demo] 解析此项目本身(源码自译解)": { + "AsButton": False, # 加入下拉菜单中 + "Function": HotReload(解析项目本身) + }, + "[插件demo] 历史上的今天": { + "AsButton": True, + "Function": HotReload(高阶功能模板函数) + }, "精准翻译PDF论文": { "Color": "stop", "AsButton": True, # 加入下拉菜单中 "Function": HotReload(批量翻译PDF文档) }, "询问多个GPT模型": { - "Color": "stop", # 按钮颜色 + "Color": "stop", + "AsButton": True, "Function": HotReload(同时问询) }, "批量总结PDF文档": { "Color": "stop", "AsButton": False, # 加入下拉菜单中 - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Function": HotReload(批量总结PDF文档) }, - # "[测试功能] 批量总结PDF文档pdfminer": { - # "Color": "stop", - # "AsButton": False, # 加入下拉菜单中 - # "Function": HotReload(批量总结PDF文档pdfminer) - # }, "谷歌学术检索助手(输入谷歌学术搜索页url)": { "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(谷歌检索小助手) }, "理解PDF文档内容 (模仿ChatPDF)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(理解PDF文档内容标准文件输入) }, "英文Latex项目全文润色(输入路径或上传压缩包)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(Latex英文润色) }, "英文Latex项目全文纠错(输入路径或上传压缩包)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(Latex英文纠错) }, "中文Latex项目全文润色(输入路径或上传压缩包)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(Latex中文润色) }, "Latex项目全文中译英(输入路径或上传压缩包)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(Latex中译英) }, "Latex项目全文英译中(输入路径或上传压缩包)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(Latex英译中) }, "批量Markdown中译英(输入路径或上传压缩包)": { - # HotReload 的意思是热更新,修改函数插件代码后,不需要重启程序,代码直接生效 "Color": "stop", "AsButton": False, # 加入下拉菜单中 "Function": HotReload(Markdown中译英) }, + } - - }) - - ###################### 第三组插件 ########################### - # [第三组插件]: 尚未充分测试的函数插件 - + # -=--=- 尚未充分测试的实验性插件 & 需要额外依赖的插件 -=--=- try: from crazy_functions.下载arxiv论文翻译摘要 import 下载arxiv论文并翻译摘要 function_plugins.update({ @@ -371,20 +368,6 @@ def get_crazy_functions(): except: print('Load function plugin failed') - # try: - # from crazy_functions.chatglm微调工具 import 微调数据集生成 - # function_plugins.update({ - # "黑盒模型学习: 微调数据集生成 (先上传数据集)": { - # "Color": "stop", - # "AsButton": False, - # "AdvancedArgs": True, - # "ArgsReminder": "针对数据集输入(如 绿帽子*深蓝色衬衫*黑色运动裤)给出指令,例如您可以将以下命令复制到下方: --llm_to_learn=azure-gpt-3.5 --prompt_prefix='根据下面的服装类型提示,想象一个穿着者,对这个人外貌、身处的环境、内心世界、过去经历进行描写。要求:100字以内,用第二人称。' --system_prompt=''", - # "Function": HotReload(微调数据集生成) - # } - # }) - # except: - # print('Load function plugin failed') - try: from crazy_functions.Latex输出PDF结果 import Latex英文纠错加PDF对比 function_plugins.update({ @@ -451,4 +434,17 @@ def get_crazy_functions(): except: print('Load function plugin failed') + # try: + # from crazy_functions.chatglm微调工具 import 微调数据集生成 + # function_plugins.update({ + # "黑盒模型学习: 微调数据集生成 (先上传数据集)": { + # "Color": "stop", + # "AsButton": False, + # "AdvancedArgs": True, + # "ArgsReminder": "针对数据集输入(如 绿帽子*深蓝色衬衫*黑色运动裤)给出指令,例如您可以将以下命令复制到下方: --llm_to_learn=azure-gpt-3.5 --prompt_prefix='根据下面的服装类型提示,想象一个穿着者,对这个人外貌、身处的环境、内心世界、过去经历进行描写。要求:100字以内,用第二人称。' --system_prompt=''", + # "Function": HotReload(微调数据集生成) + # } + # }) + # except: + # print('Load function plugin failed') return function_plugins diff --git a/crazy_functions/json_fns/pydantic_io.py b/crazy_functions/json_fns/pydantic_io.py index 15cfc94..db92412 100644 --- a/crazy_functions/json_fns/pydantic_io.py +++ b/crazy_functions/json_fns/pydantic_io.py @@ -90,7 +90,7 @@ class GptJsonIO(): try: logging.info(f'Repairing json:{response}') repair_prompt = self.generate_repair_prompt(broken_json = response, error=repr(e)) - result = self.generate_output(gpt_gen_fn(repair_prompt, self.generate_format_instructions())) + result = self.generate_output(gpt_gen_fn(repair_prompt, self.format_instructions)) logging.info('Repaire json success.') except Exception as e: # 没辙了,放弃治疗 diff --git a/crazy_functions/vt_fns/vt_call_plugin.py b/crazy_functions/vt_fns/vt_call_plugin.py new file mode 100644 index 0000000..1871010 --- /dev/null +++ b/crazy_functions/vt_fns/vt_call_plugin.py @@ -0,0 +1,48 @@ +from pydantic import BaseModel, Field +from typing import List +from toolbox import update_ui_lastest_msg, get_conf +from request_llm.bridge_all import predict_no_ui_long_connection +from crazy_functions.json_fns.pydantic_io import GptJsonIO +import copy, json, pickle, os, sys + +def read_avail_plugin_enum(): + from crazy_functional import get_crazy_functions + plugin_arr = get_crazy_functions() + # remove plugins with out explaination + plugin_arr = {k:v for k, v in plugin_arr.items() if 'Info' in v} + plugin_arr_info = {"F{:04d}".format(i):v["Info"] for i, v in enumerate(plugin_arr.values(), start=1)} + plugin_arr_dict = {"F{:04d}".format(i):v for i, v in enumerate(plugin_arr.values(), start=1)} + prompt = json.dumps(plugin_arr_info, ensure_ascii=False, indent=2) + prompt = "\n\nThe defination of PluginEnum:\nPluginEnum=" + prompt + return prompt, plugin_arr_dict + +def execute_plugin(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_intention): + plugin_arr_enum_prompt, plugin_arr_dict = read_avail_plugin_enum() + class Plugin(BaseModel): + plugin_selection: str = Field(description="The most related plugin from one of the PluginEnum.", default="F0000000000000") + plugin_arg: str = Field(description="The argument of the plugin. A path or url or empty.", default="") + + # ⭐ ⭐ ⭐ 选择插件 + yield from update_ui_lastest_msg(lastmsg=f"正在执行任务: {txt}\n\n查找可用插件中...", chatbot=chatbot, history=history, delay=0) + gpt_json_io = GptJsonIO(Plugin) + gpt_json_io.format_instructions += plugin_arr_enum_prompt + inputs = "Choose the correct plugin and extract plugin_arg, the user requirement is: \n\n" + \ + ">>" + txt + '\n\n' + \ + gpt_json_io.format_instructions + run_gpt_fn = lambda inputs, sys_prompt: predict_no_ui_long_connection( + inputs=inputs, llm_kwargs=llm_kwargs, history=[], sys_prompt=sys_prompt, observe_window=[]) + plugin_sel = gpt_json_io.generate_output_auto_repair(run_gpt_fn(inputs, ""), run_gpt_fn) + + if plugin_sel.plugin_selection in plugin_arr_dict: + # ⭐ ⭐ ⭐ 执行插件 + plugin = plugin_arr_dict[plugin_sel.plugin_selection] + fn = plugin['Function'] + fn_name = fn.__name__ + msg = f'正在调用插件: {fn_name}\n\n插件说明:{plugin["Info"]}' + yield from update_ui_lastest_msg(lastmsg=msg, chatbot=chatbot, history=history, delay=2) + yield from fn(plugin_sel.plugin_arg, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, -1) + return + else: + msg = f'找不到合适插件执行该任务' + yield from update_ui_lastest_msg(lastmsg=msg, chatbot=chatbot, history=history, delay=2) + return \ No newline at end of file diff --git a/crazy_functions/虚空终端.py b/crazy_functions/虚空终端.py index 272bc9a..e60ccfe 100644 --- a/crazy_functions/虚空终端.py +++ b/crazy_functions/虚空终端.py @@ -8,24 +8,17 @@ from crazy_functions.crazy_utils import input_clipping from crazy_functions.json_fns.pydantic_io import GptJsonIO from crazy_functions.vt_fns.vt_modify_config import modify_configuration_hot from crazy_functions.vt_fns.vt_modify_config import modify_configuration_reboot +from crazy_functions.vt_fns.vt_call_plugin import execute_plugin from enum import Enum import copy, json, pickle, os, sys -class IntentionEnum(str, Enum): - ModifyConfiguration = 'ModifyConfiguration' - ExecutePlugin = 'ExecutePlugin' - Chat = 'Chat' class UserIntention(BaseModel): user_prompt: str = Field(description="the content of user input", default="") - intention_type: IntentionEnum = Field(description="the type of user intention", default=IntentionEnum.Chat) + intention_type: str = Field(description="the type of user intention, choose from ['ModifyConfiguration', 'ExecutePlugin', 'Chat']", default="Chat") user_provide_file: bool = Field(description="whether the user provides a path to a file", default=False) user_provide_url: bool = Field(description="whether the user provides a url", default=False) -def execute_plugin(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_intention): - # 没写完 - pass - def chat(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_intention): gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive( inputs=txt, inputs_show_user=txt, @@ -37,6 +30,21 @@ def chat(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_i yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 pass +def analyze_with_rule(txt): + user_intention = UserIntention() + user_intention.user_prompt = txt + is_certain = False + + if '调用插件' in txt: + is_certain = True + user_intention.intention_type = 'ExecutePlugin' + + if '修改配置' in txt: + is_certain = True + user_intention.intention_type = 'ModifyConfiguration' + + return is_certain, user_intention + @CatchException def 自动终端(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port): """ @@ -63,23 +71,27 @@ def 自动终端(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt chatbot._cookies['vt_state'] = pickle.dumps(state) # ⭐ ⭐ ⭐ 分析用户意图 - yield from update_ui_lastest_msg(lastmsg=f"正在执行任务: {txt}\n\n分析用户意图中", chatbot=chatbot, history=history, delay=0) - gpt_json_io = GptJsonIO(UserIntention) - inputs = "Analyze the intention of the user according to following user input: \n\n" + txt + '\n\n' + gpt_json_io.format_instructions - run_gpt_fn = lambda inputs, sys_prompt: predict_no_ui_long_connection( - inputs=inputs, llm_kwargs=llm_kwargs, history=[], sys_prompt=sys_prompt, observe_window=[]) - user_intention = gpt_json_io.generate_output_auto_repair(run_gpt_fn(inputs, ""), run_gpt_fn) + is_certain, user_intention = analyze_with_rule(txt) + if not is_certain: + yield from update_ui_lastest_msg(lastmsg=f"正在执行任务: {txt}\n\n分析用户意图中", chatbot=chatbot, history=history, delay=0) + gpt_json_io = GptJsonIO(UserIntention) + inputs = "Analyze the intention of the user according to following user input: \n\n" + txt + '\n\n' + gpt_json_io.format_instructions + run_gpt_fn = lambda inputs, sys_prompt: predict_no_ui_long_connection( + inputs=inputs, llm_kwargs=llm_kwargs, history=[], sys_prompt=sys_prompt, observe_window=[]) + user_intention = gpt_json_io.generate_output_auto_repair(run_gpt_fn(inputs, ""), run_gpt_fn) + else: + pass # 用户意图: 修改本项目的配置 - if user_intention.intention_type == IntentionEnum.ModifyConfiguration: + if user_intention.intention_type == 'ModifyConfiguration': yield from modify_configuration_reboot(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_intention) # 用户意图: 调度插件 - if user_intention.intention_type == IntentionEnum.ExecutePlugin: + if user_intention.intention_type == 'ExecutePlugin': yield from execute_plugin(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_intention) # 用户意图: 聊天 - if user_intention.intention_type == IntentionEnum.Chat: + if user_intention.intention_type == 'Chat': yield from chat(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_intention) # update_vt_state() diff --git a/tests/test_plugins.py b/tests/test_plugins.py index 3c31cbb..2207f71 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -9,7 +9,9 @@ validate_path() # 返回项目根路径 from tests.test_utils import plugin_test if __name__ == "__main__": - plugin_test(plugin='crazy_functions.虚空终端->自动终端', main_input='修改api-key为sk-jhoejriotherjep') + # plugin_test(plugin='crazy_functions.虚空终端->自动终端', main_input='修改api-key为sk-jhoejriotherjep') + + plugin_test(plugin='crazy_functions.虚空终端->自动终端', main_input='调用插件,对C:/Users/fuqingxu/Desktop/旧文件/gpt/chatgpt_academic/crazy_functions/latex_fns中的python文件进行解析') # plugin_test(plugin='crazy_functions.命令行助手->命令行助手', main_input='查看当前的docker容器列表')