增加本地存储(未完成)

This commit is contained in:
yuruo
2024-03-10 08:25:56 +08:00
parent 558c3dec37
commit 391a43f8de
12 changed files with 98 additions and 46 deletions

View File

@@ -9,7 +9,7 @@ from pages.edit_action_list_view import GlobalUtil, ActionListViewItem
from utils.qt_util import QtUtil
class FunctionBase:
class ActionBase:
name = ""
description = ""
args_schema: Type[BaseModel]
@@ -18,14 +18,14 @@ class FunctionBase:
self.__config_ui = None
self.tool = None
self.__ui_name_and_link_edit = {}
self.tool_arg = {}
self.action_arg = {}
self.action_pos = None
def run(self, *args, **kwargs):
raise TypeError("Not realize run function")
def run_with_out_arg(self):
return self.run(**self.tool_arg)
return self.run(**self.action_arg)
def convert_langchain_tool(self):
return StructuredTool.from_function(
@@ -62,7 +62,7 @@ class FunctionBase:
def __save_button_clicked(self):
for arg_name in self.__ui_name_and_link_edit:
self.tool_arg[arg_name] = self.__ui_name_and_link_edit[arg_name].text()
self.action_arg[arg_name] = self.__ui_name_and_link_edit[arg_name].text()
# 如果双击应用列表打开的配置页面,保存后向应用列表最后插入
if self.action_pos is None:
self.action_pos = GlobalUtil.action_list_global.count()

19
actions/action_list.py Normal file
View File

@@ -0,0 +1,19 @@
from actions.llm_func import LLMAction
from actions.open_application_func import OpenApplicationFunc
from actions.open_browser_url_func import OpenBrowserUrlAction
from actions.search_engine_func import SearchEngineFunc
class ActionList:
funcs = [OpenApplicationFunc(), OpenBrowserUrlAction(), SearchEngineFunc(), LLMAction()]
@classmethod
def get_funcs(cls):
return cls.funcs
@classmethod
def get_fuc_by_name(cls, name):
for i in cls.funcs:
if i.name == name:
return i
return None

View File

@@ -1,8 +1,6 @@
from langchain_core.messages import SystemMessage, HumanMessage
from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from functions.function_base import FunctionBase
from actions.action_base import ActionBase
from utils.llm_util import LLMUtil
@@ -10,7 +8,7 @@ class LLMInput(BaseModel):
question: str = Field(description="需要问的问题", title="问题内容")
class LLMFunc(FunctionBase):
class LLMAction(ActionBase):
name = "大模型问答"
description = "利用大模型进行回答"
args_schema = LLMInput

View File

@@ -3,14 +3,14 @@ from typing import Type
from pydantic import BaseModel, Field
from functions.function_base import FunctionBase
from actions.action_base import ActionBase
class OpenApplicationInput(BaseModel):
path: str = Field(description="要查询的关键词", title="应用路径")
class OpenApplicationFunc(FunctionBase):
class OpenApplicationAction(ActionBase):
name = "打开应用"
description = "打开指定目录的应用"
args_schema: Type[BaseModel] = OpenApplicationInput

View File

@@ -1,8 +1,6 @@
import subprocess
from pydantic import BaseModel, Field
from data_class.search_data import SearchData
from functions.function_base import FunctionBase
from actions.action_base import ActionBase
from utils.selenium_util import SeleniumUtil
@@ -10,7 +8,7 @@ class OpenBrowserUrlInput(BaseModel):
url: str = Field(description="要访问的网址", title="网址")
class OpenBrowserUrlFunc(FunctionBase):
class OpenBrowserUrlAction(ActionBase):
name = "打开网页"
description = "打开指定网址的页面"
args_schema = OpenBrowserUrlInput

View File

@@ -1,8 +1,8 @@
from pydantic import BaseModel, Field
from selenium.webdriver.common.by import By
from actions.action_base import ActionBase
from data_class.search_data import SearchData
from functions.function_base import FunctionBase
from utils.selenium_util import SeleniumUtil
@@ -11,7 +11,7 @@ class SearchInput(BaseModel):
# 利用搜索引擎搜索关键词
class SearchEngineFunc(FunctionBase):
class SearchEngineAction(ActionBase):
name = "百度搜索内容"
description = "利用搜索引擎搜索关键词,得到结果列表"
args_schema = SearchInput

View File

@@ -1,19 +0,0 @@
from functions.llm_func import LLMFunc
from functions.open_application_func import OpenApplicationFunc
from functions.open_browser_url_func import OpenBrowserUrlFunc
from functions.search_engine_func import SearchEngineFunc
class FunctionList:
funcs = [OpenApplicationFunc(), OpenBrowserUrlFunc(), SearchEngineFunc(), LLMFunc()]
@classmethod
def get_funcs(cls):
return cls.funcs
@classmethod
def get_fuc_by_name(cls, name):
for i in cls.funcs:
if i.name == name:
return i
return None

View File

@@ -1,3 +1,5 @@
import pickle
from PyQt6.QtCore import Qt, QMimeData, QByteArray, QPoint
from PyQt6.QtGui import QDrag
from PyQt6.QtWidgets import QListWidget, QListWidgetItem, QApplication, QStyle
@@ -17,6 +19,10 @@ class ActionListView(QListWidget):
def __init__(self):
super().__init__()
# 在func上的信息
self.func_list_pos = [-1, -1]
self.func_name = ""
self.func_description = ""
self.setAcceptDrops(True)
# 拖动到当前位置对应的元素序号
self.the_highlighted_row = -2
@@ -29,6 +35,15 @@ class ActionListView(QListWidget):
self.the_insert_row = 1
# 不到一半行高offset() = 19 = 40 / 2 - 1其中40是行高
self.offset = 19
self.init()
def init(self):
self.setStyleSheet(
"QListView{background:rgb(245, 245, 247); border:0px; margin:0px 0px 0px 0px;}"
"QListView::Item{height:40px; border:0px; padding-left:14px; color:rgba(200, 40, 40, 255);}"
"QListView::Item:hover{color:rgba(40, 40, 200, 255); padding-left:14px;}"
"QListView::Item:selected{color:rgba(40, 40, 200, 255); padding-left:15px;}")
self.setItemDelegate(StyledItemDelegate())
# 记录拖拽初始位置
def mousePressEvent(self, e):
@@ -151,8 +166,8 @@ class ActionListView(QListWidget):
return
# 向指定行插入数据
item_data = e.mimeData().data(self.my_mime_type)
from functions.function_list import FunctionList
function = FunctionList.get_fuc_by_name(item_data)
from actions.action_list import ActionList
function = ActionList.get_fuc_by_name(item_data)
function.action_pos = self.the_insert_row
function.config_page_show()
# self.insertItem(self.the_insert_row, ActionListViewItem(function))
@@ -164,14 +179,40 @@ class ActionListView(QListWidget):
class GlobalUtil:
action_list_global: ActionListView
action_list_global: [ActionListView]
@classmethod
def read_from_local(cls):
with open("./cache", "rb") as file:
cls.action_list_global = pickle.load(file)["action_list_global"]
return cls.action_list_global
@classmethod
def init(cls):
cls.action_list_global = ActionListView()
cls.action_list_global.setStyleSheet(
"QListView{background:rgb(245, 245, 247); border:0px; margin:0px 0px 0px 0px;}"
"QListView::Item{height:40px; border:0px; padding-left:14px; color:rgba(200, 40, 40, 255);}"
"QListView::Item:hover{color:rgba(40, 40, 200, 255); padding-left:14px;}"
"QListView::Item:selected{color:rgba(40, 40, 200, 255); padding-left:15px;}")
cls.action_list_global.setItemDelegate(StyledItemDelegate())
# 根据配置文件的配置,从本地文件中或者网上读取
from utils.config import Config
config = Config()
cls.action_list_global = []
if config.DATA_POSITION == "local":
action_list_json = cls.read_from_local()
elif config.DATA_POSITION == "remote":
action_list_json = []
else:
action_list_json = []
# 生成ActionListView
for action_json in action_list_json:
action_list_view = ActionListView()
action_list_view.func_list_pos = action_json["func_list_pos"]
action_list_view.func_name = action_json["func_name"]
action_list_view.func_description = action_json["func_description"]
for item in action_json["action_items"]:
action_name = item["action_name"]
action_arg = item["action_arg"]
action_pos = item["action_pos"]
from actions.action_list import ActionList
from actions.action_base import ActionBase
action: ActionBase = ActionList.get_fuc_by_name(action_name)()
action.action_pos = action_pos
action.action_arg = action_arg
action_list_view.insertItem(item["row"], ActionListViewItem(action))
cls.action_list_global.append(action_list_view)

View File

@@ -11,11 +11,24 @@ class EditPage(BasePage):
self.ui.function_list_layout.addWidget(function_list_view)
self.ui.ListViewLayout.addWidget(GlobalUtil.action_list_global)
self.ui.run_button.clicked.connect(self.__run_button_click)
self.ui.save_button.clicked.connect()
self.ui.cancel_button.clicked.connect()
# 设置间距
self.ui.ListViewLayout.setStretch(0, 1)
self.ui.ListViewLayout.setStretch(1, 2)
self.ui.ListViewLayout.setStretch(2, 10)
def __save_button_click(self):
GlobalUtil.action_list_global
self.ui.hide()
self.func = FunctionListView()
self.func.show()
def __cancel_button_click(self):
self.ui.hide()
self.func = FunctionListView()
self.func.show()
def __run_button_click(self):
GlobalUtil.action_list_global.model()
for index in range(GlobalUtil.action_list_global.count()):

View File

@@ -12,9 +12,11 @@ class Config:
self.OPEN_AI = self.config["openai"]
self.BROWSER = self.config["browser"]
self.LEAN_CLOUD = self.config["leancloud"]
self.DATA_POSITION = self.config["data_position"]
@staticmethod
# Load content from a yaml file and return as variables
def _load_config(self, file_path):
def _load_config(file_path):
with open(file_path, 'r') as file:
config = yaml.safe_load(file)
return config