From 2223dfb26679f32dff0fb7dddbaa43193c202445 Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Fri, 20 Sep 2024 15:08:39 +0800 Subject: [PATCH] feat: get debugging key --- api/controllers/console/__init__.py | 2 +- api/controllers/console/workspace/plugin.py | 27 +++++++++++++++++++ api/core/plugin/manager/base.py | 6 ++--- api/core/plugin/manager/debugging.py | 2 +- api/core/plugin/manager/tool.py | 6 ++++- .../plugin/plugin_debugging_service.py | 8 ++++++ 6 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 api/controllers/console/workspace/plugin.py create mode 100644 api/services/plugin/plugin_debugging_service.py diff --git a/api/controllers/console/__init__.py b/api/controllers/console/__init__.py index eb7c1464d3..f36703192a 100644 --- a/api/controllers/console/__init__.py +++ b/api/controllers/console/__init__.py @@ -56,4 +56,4 @@ from .explore import ( from .tag import tags # Import workspace controllers -from .workspace import account, load_balancing_config, members, model_providers, models, tool_providers, workspace +from .workspace import account, load_balancing_config, members, model_providers, models, tool_providers, workspace, plugin diff --git a/api/controllers/console/workspace/plugin.py b/api/controllers/console/workspace/plugin.py new file mode 100644 index 0000000000..c3e89321d6 --- /dev/null +++ b/api/controllers/console/workspace/plugin.py @@ -0,0 +1,27 @@ +from flask_login import current_user +from flask_restful import Resource +from werkzeug.exceptions import Forbidden + +from controllers.console import api +from controllers.console.setup import setup_required +from controllers.console.wraps import account_initialization_required +from libs.login import login_required +from services.plugin.plugin_debugging_service import PluginDebuggingService + + +class PluginDebuggingKeyApi(Resource): + @setup_required + @login_required + @account_initialization_required + def get(self): + user = current_user + if not user.is_admin_or_owner: + raise Forbidden() + + tenant_id = user.current_tenant_id + return { + "key": PluginDebuggingService.get_plugin_debugging_key(tenant_id) + } + + +api.add_resource(PluginDebuggingKeyApi, "/workspaces/current/plugin/debugging-key") \ No newline at end of file diff --git a/api/core/plugin/manager/base.py b/api/core/plugin/manager/base.py index b26ab851c7..704afe71d1 100644 --- a/api/core/plugin/manager/base.py +++ b/api/core/plugin/manager/base.py @@ -10,7 +10,7 @@ from configs import dify_config from core.plugin.entities.plugin_daemon import PluginDaemonBasicResponse plugin_daemon_inner_api_baseurl = dify_config.PLUGIN_API_URL -plugin_daemon_inner_api_key = dify_config.INNER_API_KEY_FOR_PLUGIN +plugin_daemon_inner_api_key = dify_config.PLUGIN_API_KEY T = TypeVar("T", bound=(BaseModel | dict)) @@ -69,9 +69,9 @@ class BasePluginManager: response = self._request(method, path, headers, data) rep = PluginDaemonBasicResponse[type](**response.json()) if rep.code != 0: - raise Exception(f"got error from plugin daemon: {rep.message}, code: {rep.code}") + raise ValueError(f"got error from plugin daemon: {rep.message}, code: {rep.code}") if rep.data is None: - raise Exception("got empty data from plugin daemon") + raise ValueError("got empty data from plugin daemon") return rep.data diff --git a/api/core/plugin/manager/debugging.py b/api/core/plugin/manager/debugging.py index 6b26e3ad67..fb6bad7fa3 100644 --- a/api/core/plugin/manager/debugging.py +++ b/api/core/plugin/manager/debugging.py @@ -12,6 +12,6 @@ class PluginDebuggingManager(BasePluginManager): class Response(BaseModel): key: str - response = self._request_with_plugin_daemon_response("POST", f"/plugin/{tenant_id}/debugging/key", Response) + response = self._request_with_plugin_daemon_response("POST", f"plugin/{tenant_id}/debugging/key", Response) return response.key diff --git a/api/core/plugin/manager/tool.py b/api/core/plugin/manager/tool.py index 83517f1caf..10ce33d5e7 100644 --- a/api/core/plugin/manager/tool.py +++ b/api/core/plugin/manager/tool.py @@ -2,4 +2,8 @@ from core.plugin.manager.base import BasePluginManager class PluginToolManager(BasePluginManager): - pass \ No newline at end of file + def fetch_tool_providers(self, asset_id: str) -> list[str]: + """ + Fetch tool providers for the given asset. + """ + response = self._request('GET', f'/plugin/asset/{asset_id}') \ No newline at end of file diff --git a/api/services/plugin/plugin_debugging_service.py b/api/services/plugin/plugin_debugging_service.py new file mode 100644 index 0000000000..2bf24e6de8 --- /dev/null +++ b/api/services/plugin/plugin_debugging_service.py @@ -0,0 +1,8 @@ +from core.plugin.manager.debugging import PluginDebuggingManager + + +class PluginDebuggingService: + @staticmethod + def get_plugin_debugging_key(tenant_id: str) -> str: + manager = PluginDebuggingManager() + return manager.get_debugging_key(tenant_id)