From d2dd5d3eb176b558bd90452a5460017961dcff49 Mon Sep 17 00:00:00 2001 From: binary-husky Date: Mon, 11 Nov 2024 15:35:01 +0000 Subject: [PATCH] construct idea --- crazy_functions/Dynamic_Load_Plugin.py | 62 ++++++++++++++++++++++++++ docs/plugin_with_secondary_menu.md | 13 ++++++ 2 files changed, 75 insertions(+) create mode 100644 crazy_functions/Dynamic_Load_Plugin.py diff --git a/crazy_functions/Dynamic_Load_Plugin.py b/crazy_functions/Dynamic_Load_Plugin.py new file mode 100644 index 00000000..0e5f8c8a --- /dev/null +++ b/crazy_functions/Dynamic_Load_Plugin.py @@ -0,0 +1,62 @@ + +from toolbox import get_conf, update_ui +from crazy_functions.Image_Generate import 图片生成_DALLE2, 图片生成_DALLE3, 图片修改_DALLE2 +from crazy_functions.plugin_template.plugin_class_template import GptAcademicPluginTemplate, ArgProperty + + + +def update_js_plugin_info(): + # encode_plugin_info + ... + + + +class ImageGen_Wrap(GptAcademicPluginTemplate): + def __init__(self): + """ + 请注意`execute`会执行在不同的线程中,因此您在定义和使用类变量时,应当慎之又慎! + """ + pass + + def define_arg_selection_menu(self): + """ + 定义插件的二级选项菜单 + + 第一个参数,名称`main_input`,参数`type`声明这是一个文本框,文本框上方显示`title`,文本框内部显示`description`,`default_value`为默认值; + 第二个参数,名称`advanced_arg`,参数`type`声明这是一个文本框,文本框上方显示`title`,文本框内部显示`description`,`default_value`为默认值; + + """ + gui_definition = { + "main_input": + ArgProperty(title="输入图片描述", description="需要生成图像的文本描述,尽量使用英文", default_value="", type="string").model_dump_json(), # 主输入,自动从输入框同步 + "model_name": + ArgProperty(title="模型", options=["DALLE2", "DALLE3"], default_value="DALLE3", description="无", type="dropdown").model_dump_json(), + "resolution": + ArgProperty(title="分辨率", options=["256x256(限DALLE2)", "512x512(限DALLE2)", "1024x1024", "1792x1024(限DALLE3)", "1024x1792(限DALLE3)"], default_value="1024x1024", description="无", type="dropdown").model_dump_json(), + "quality (仅DALLE3生效)": + ArgProperty(title="质量", options=["standard", "hd"], default_value="standard", description="无", type="dropdown").model_dump_json(), + "style (仅DALLE3生效)": + ArgProperty(title="风格", options=["vivid", "natural"], default_value="vivid", description="无", type="dropdown").model_dump_json(), + } + return gui_definition + + def execute(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request): + """ + 执行插件 + """ + # 分辨率 + resolution = plugin_kwargs["resolution"].replace("(限DALLE2)", "").replace("(限DALLE3)", "") + + if plugin_kwargs["model_name"] == "DALLE2": + plugin_kwargs["advanced_arg"] = resolution + yield from 图片生成_DALLE2(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request) + + elif plugin_kwargs["model_name"] == "DALLE3": + quality = plugin_kwargs["quality (仅DALLE3生效)"] + style = plugin_kwargs["style (仅DALLE3生效)"] + plugin_kwargs["advanced_arg"] = f"{resolution}-{quality}-{style}" + yield from 图片生成_DALLE3(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, user_request) + + else: + chatbot.append([None, "抱歉,找不到该模型"]) + yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 diff --git a/docs/plugin_with_secondary_menu.md b/docs/plugin_with_secondary_menu.md index 46616659..2bb83515 100644 --- a/docs/plugin_with_secondary_menu.md +++ b/docs/plugin_with_secondary_menu.md @@ -149,6 +149,19 @@ DEFINE_ARG_INPUT_INTERFACE = json.dumps(define_arg_selection) return base64.b64encode(DEFINE_ARG_INPUT_INTERFACE.encode('utf-8')).decode('utf-8') ``` +1-2. 预留4个动态插件按钮(常规状态隐藏) + +点击 “+插件按钮”:跳转到插件市场 + +点击 加载插件: + - 下载文件 + - 注册 exe_dynamic_plugin开始执行 + - 执行浏览器js函数 + +点击动态插件按钮 + - js: 检查register_advanced_plugin_init_code_arr,如果为空,提示 + - 如果非空,先跳二级菜单,设定诸元后,执行一个隐藏的按钮 -- 关联 exe_dynamic_plugin + - exe_dynamic_plugin开始执行 2. 用户加载阶段(主javascript程序`common.js`中),浏览器加载`register_advanced_plugin_init_code_arr`,存入本地的字典`advanced_plugin_init_code_lib`: