From e26154ef3a31c2758cfaa377b73470cb97105fb6 Mon Sep 17 00:00:00 2001 From: RockChinQ <1010553892@qq.com> Date: Mon, 4 Mar 2024 21:10:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9F=BA=E6=9C=AC=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- draft/README.md | 27 ++++++++++++++++++++++++ exts-src/basic/__init__.py | 9 ++++++++ exts-src/basic/basic_plugin/__init__.py | 9 ++++++++ exts/basic.zip | Bin 0 -> 890 bytes loader.py | 7 ++++++ 5 files changed, 52 insertions(+) create mode 100644 draft/README.md create mode 100644 exts-src/basic/__init__.py create mode 100644 exts-src/basic/basic_plugin/__init__.py create mode 100644 exts/basic.zip create mode 100644 loader.py diff --git a/draft/README.md b/draft/README.md new file mode 100644 index 0000000..5f66d6b --- /dev/null +++ b/draft/README.md @@ -0,0 +1,27 @@ +# QChatGPT 3.x 新扩展方式草案 + +## 背景 + +### 历史问题 + +在过去的实践中,QChatGPT 直接从 `plugins` 目录下加载所有`.py`文件,这些文件中可以自由自定义类和函数,并通过 QChatGPT 提供的 API 注册插件类。但在实践中,我们发现此种加载方式存在以下问题: + +#### 设计上的 + +- 插件类命名和插件包(目录)命名不符,造成混乱。 +- 一个插件内实际上可以注册多个插件类,未强制限定。 +- 插件需要的依赖由 QChatGPT 动态安装,这对网络环境较差的用户以及使用 Docker 的情况很不友好。 +- 通过源代码发布的插件代码,管理松散,不利于分发。 + +#### 加载逻辑上的 + +- 遍历插件目录下所有py模块,无统一的入口 + +### 未来需求 + +- QChatGPT 可能会以可执行文件的形式发布,这时动态安装依赖将不再可行。 +- 插件的发布和管理需要更加规范和统一的方式。 + +## 设计 + +在新的扩展方案中, \ No newline at end of file diff --git a/exts-src/basic/__init__.py b/exts-src/basic/__init__.py new file mode 100644 index 0000000..9a7d2f1 --- /dev/null +++ b/exts-src/basic/__init__.py @@ -0,0 +1,9 @@ +class PluginClass: + + name: str + + def __init__(self) -> None: + self.name = "Basic Plugin" + + def get_name(self) -> str: + return self.name \ No newline at end of file diff --git a/exts-src/basic/basic_plugin/__init__.py b/exts-src/basic/basic_plugin/__init__.py new file mode 100644 index 0000000..fb1dfdd --- /dev/null +++ b/exts-src/basic/basic_plugin/__init__.py @@ -0,0 +1,9 @@ +class PluginClass: + + name: str + + def __init__(self) -> None: + self.name = "Basic Plugin Inner" + + def get_name(self) -> str: + return self.name \ No newline at end of file diff --git a/exts/basic.zip b/exts/basic.zip new file mode 100644 index 0000000000000000000000000000000000000000..4d1ac470b666a10c71195bd2f04cd129cd008c82 GIT binary patch literal 890 zcmWIWW@h1H0D;m)DG^`>lwf0!VMt0W&P>)14dG;9j@|P#6@*JGxEUB(zA`c}u!sOv z2Eg^dT!^Y)7_J{|N_;_1X?kWJ#IVraPg6k{i(w!`IT)&ejuCEfs>lWMmH@FFcEjT1 zGxIV_;^XxSD#4D-0y+?c(aiNe=c%I?#&JT^_xzb+wvB6d>=0>C&^I){>a}pk5{^T@ zp1#2y{pZh|*6HlOuHkpq^K!_At-&8opZDI%bh??rBZ7a4|G_ZFlbRbXj3u+yHKoVJ zWla=1wB*Z`Nfi^ET09-P1=vKFPMae3RPhWmI7A?xs04bV)a>ogbf5?30kI(56X@ZC4wt$-m#Kk^LKo>JI$uZ+f1rk7)gMa|TTSpKLOB1Y+G=Ub> z$Yx=t2xPMy;AWwv51_$V(+0?qxKaniU|^zTSkl;w-C&e32ik!poj@FqEAo)-2m)FK b2?%s!K~aejCai2gH!-jPVFD=QFoAdg&YAKz literal 0 HcmV?d00001 diff --git a/loader.py b/loader.py new file mode 100644 index 0000000..0fc3ccb --- /dev/null +++ b/loader.py @@ -0,0 +1,7 @@ +import sys + +sys.path.insert(0, "exts/basic.zip") + +import basic + +print(basic.PluginClass().get_name()) \ No newline at end of file