diff --git a/crazy_functional.py b/crazy_functional.py index 99a73b43..80c1850d 100644 --- a/crazy_functional.py +++ b/crazy_functional.py @@ -15,6 +15,7 @@ def get_crazy_functions(): from crazy_functions.解析项目源代码 import 解析一个Java项目 from crazy_functions.解析项目源代码 import 解析一个前端项目 from crazy_functions.高级功能函数模板 import 高阶功能模板函数 + from crazy_functions.高级功能函数模板 import Demo_Wrap from crazy_functions.Latex全文润色 import Latex英文润色 from crazy_functions.询问多个大语言模型 import 同时问询 from crazy_functions.解析项目源代码 import 解析一个Lua项目 @@ -208,7 +209,8 @@ def get_crazy_functions(): "Group": "对话", "AsButton": True, "Info": "查看历史上的今天事件 (这是一个面向开发者的插件Demo) | 不需要输入参数", - "Function": HotReload(高阶功能模板函数), + "Function": None, + "Class": Demo_Wrap, }, "精准翻译PDF论文": { "Group": "学术", diff --git a/crazy_functions/Latex_Function_Wrap.py b/crazy_functions/Latex_Function_Wrap.py index 3736da57..69391b5e 100644 --- a/crazy_functions/Latex_Function_Wrap.py +++ b/crazy_functions/Latex_Function_Wrap.py @@ -5,6 +5,9 @@ from crazy_functions.plugin_template.plugin_class_template import GptAcademicPlu class Arxiv_Localize(GptAcademicPluginTemplate): def __init__(self): + """ + 请注意`execute`会执行在不同的线程中,因此您在定义和使用类变量时,应当慎之又慎! + """ pass def define_arg_selection_menu(self): @@ -26,7 +29,9 @@ class Arxiv_Localize(GptAcademicPluginTemplate): return gui_definition def execute(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): - + """ + 执行插件 + """ allow_cache = plugin_kwargs["allow_cache"] advanced_arg = plugin_kwargs["advanced_arg"] diff --git a/crazy_functions/PDF_Translate_Wrap.py b/crazy_functions/PDF_Translate_Wrap.py index 88a97bcf..898f0695 100644 --- a/crazy_functions/PDF_Translate_Wrap.py +++ b/crazy_functions/PDF_Translate_Wrap.py @@ -4,6 +4,9 @@ from .PDF_Translate import 批量翻译PDF文档 class PDF_Tran(GptAcademicPluginTemplate): def __init__(self): + """ + 请注意`execute`会执行在不同的线程中,因此您在定义和使用类变量时,应当慎之又慎! + """ pass def define_arg_selection_menu(self): @@ -21,6 +24,9 @@ class PDF_Tran(GptAcademicPluginTemplate): return gui_definition def execute(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): + """ + 执行插件 + """ main_input = plugin_kwargs["main_input"] additional_prompt = plugin_kwargs["additional_prompt"] pdf_parse_method = plugin_kwargs["pdf_parse_method"] diff --git a/crazy_functions/plugin_template/plugin_class_template.py b/crazy_functions/plugin_template/plugin_class_template.py index d06d127d..95884266 100644 --- a/crazy_functions/plugin_template/plugin_class_template.py +++ b/crazy_functions/plugin_template/plugin_class_template.py @@ -8,7 +8,7 @@ class ArgProperty(BaseModel): # PLUGIN_ARG_MENU description: str = Field(description="The description", default="") default_value: str|float = Field(description="The default value", default="") type: str = Field(description="The type", default="") # currently we support ['string', 'dropdown'] - options: List[str] = Field(default=[], description="List of options available for the argument") + options: List[str] = Field(default=[], description="List of options available for the argument") # only used when type is 'dropdown' class GptAcademicPluginTemplate(): def __init__(self): @@ -17,6 +17,7 @@ class GptAcademicPluginTemplate(): # which may be accessed by multiple threads pass + def define_arg_selection_menu(self): """ An example as below: @@ -41,17 +42,10 @@ class GptAcademicPluginTemplate(): if len(define_arg_selection.keys()) > 8: raise ValueError("You can only have up to 8 arguments in the define_arg_selection") - if "main_input" not in define_arg_selection: - raise ValueError("You must have a 'main_input' in the define_arg_selection") + # if "main_input" not in define_arg_selection: + # raise ValueError("You must have a 'main_input' in the define_arg_selection") DEFINE_ARG_INPUT_INTERFACE = json.dumps(define_arg_selection) - # return dedent(""" - # ()=>generate_menu("{GUI_JS}", "{BTN_NAME}") - # """.format( - # GUI_JS=base64.b64encode(DEFINE_ARG_INPUT_INTERFACE.encode('utf-8')).decode('utf-8'), - # BTN_NAME=btnName - # ) - # ) return base64.b64encode(DEFINE_ARG_INPUT_INTERFACE.encode('utf-8')).decode('utf-8') def execute(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): diff --git a/crazy_functions/高级功能函数模板.py b/crazy_functions/高级功能函数模板.py index f75f0e8d..5993f9a2 100644 --- a/crazy_functions/高级功能函数模板.py +++ b/crazy_functions/高级功能函数模板.py @@ -2,6 +2,10 @@ from toolbox import CatchException, update_ui from crazy_functions.crazy_utils import request_gpt_model_in_new_thread_with_ui_alive import datetime +#################################################################################################################### +# Demo 1: 一个非常简单的插件 ######################################################################################### +#################################################################################################################### + 高阶功能模板函数示意图 = f""" ```mermaid flowchart TD @@ -26,7 +30,7 @@ flowchart TD """ @CatchException -def 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): +def 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request, num_day=5): """ # 高阶功能模板函数示意图:https://mermaid.live/edit#pako:eNptk1tvEkEYhv8KmattQpvlvOyFCcdeeaVXuoYssBwie8gyhCIlqVoLhrbbtAWNUpEGUkyMEDW2Fmn_DDOL_8LZHdOwxrnamX3f7_3mmZk6yKhZCfAgV1KrmYKoQ9fDuKC4yChX0nld1Aou1JzjznQ5fWmejh8LYHW6vG2a47YAnlCLNSIRolnenKBXI_zRIBrcuqRT890u7jZx7zMDt-AaMbnW1--5olGiz2sQjwfoQxsZL0hxplSSU0-rop4vrzmKR6O2JxYjHmwcL2Y_HDatVMkXlf86YzHbGY9bO5j8XE7O8Nsbc3iNB3ukL2SMcH-XIQBgWoVOZzxuOxOJOyc63EPGV6ZQLENVrznViYStTiaJ2vw2M2d9bByRnOXkgCnXylCSU5quyto_IcmkbdvctELmJ-j1ASW3uB3g5xOmKqVTmqr_Na3AtuS_dtBFm8H90XJyHkDDT7S9xXWb4HGmRChx64AOL5HRpUm411rM5uh4H78Z4V7fCZzytjZz2seto9XaNPFue07clLaVZF8UNLygJ-VES8lah_n-O-5Ozc7-77NzJ0-K0yr0ZYrmHdqAk50t2RbA4qq9uNohBASw7YpSgaRkLWCCAtxAlnRZLGbJba9bPwUAC5IsCYAnn1kpJ1ZKUACC0iBSsQLVBzUlA3ioVyQ3qGhZEUrxokiehAz4nFgqk1VNVABfB1uAD_g2_AGPl-W8nMcbCvsDblADfNCz4feyobDPy3rYEMtxwYYbPFNVUoHdCPmDHBv2cP4AMfrCbiBli-Q-3afv0X6WdsIjW2-10fgDy1SAig @@ -43,7 +47,7 @@ def 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, s "您正在调用插件:历史上的今天", "[Local Message] 请注意,您正在调用一个[函数插件]的模板,该函数面向希望实现更多有趣功能的开发者,它可以作为创建新功能函数的模板(该函数只有20多行代码)。此外我们也提供可同步处理大量文件的多线程Demo供您参考。您若希望分享新的功能模组,请不吝PR!" + 高阶功能模板函数示意图)) yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 # 由于请求gpt需要一段时间,我们先及时地做一次界面更新 - for i in range(5): + for i in range(int(num_day)): currentMonth = (datetime.date.today() + datetime.timedelta(days=i)).month currentDay = (datetime.date.today() + datetime.timedelta(days=i)).day i_say = f'历史中哪些事件发生在{currentMonth}月{currentDay}日?列举两条并发送相关图片。发送图片时,请使用Markdown,将Unsplash API中的PUT_YOUR_QUERY_HERE替换成描述该事件的一个最重要的单词。' @@ -59,6 +63,56 @@ def 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, s + + + +#################################################################################################################### +# Demo 2: 一个带二级菜单的插件 ####################################################################################### +#################################################################################################################### + +from crazy_functions.plugin_template.plugin_class_template import GptAcademicPluginTemplate, ArgProperty +class Demo_Wrap(GptAcademicPluginTemplate): + def __init__(self): + """ + 请注意`execute`会执行在不同的线程中,因此您在定义和使用类变量时,应当慎之又慎! + """ + pass + + def define_arg_selection_menu(self): + """ + 定义插件的二级选项菜单 + """ + gui_definition = { + "num_day": + ArgProperty(title="日期选择", options=["仅今天", "未来3天", "未来5天"], default_value="未来3天", description="无", type="dropdown").model_dump_json(), + } + return gui_definition + + def execute(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): + """ + 执行插件 + """ + num_day = plugin_kwargs["num_day"] + if num_day == "仅今天": num_day = 1 + if num_day == "未来3天": num_day = 3 + if num_day == "未来5天": num_day = 5 + yield from 高阶功能模板函数(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request, num_day=num_day) + + + + + + + + + + + + +#################################################################################################################### +# Demo 3: 绘制脑图的Demo ############################################################################################ +#################################################################################################################### + PROMPT = """ 请你给出围绕“{subject}”的逻辑关系图,使用mermaid语法,mermaid语法举例: ```mermaid