From 28c9ec3f4f66a4387e30764c5dbfc12d1417681f Mon Sep 17 00:00:00 2001 From: Yeuoly Date: Wed, 6 Nov 2024 17:30:50 +0800 Subject: [PATCH] feat: support fetch tool provider info --- .../console/workspace/tool_providers.py | 14 ++++++++ api/core/entities/provider_entities.py | 12 +++++-- .../tools/builtin_tools_manage_service.py | 35 ++++++++++++++++++- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/api/controllers/console/workspace/tool_providers.py b/api/controllers/console/workspace/tool_providers.py index 910b991de1..ad8dee09f9 100644 --- a/api/controllers/console/workspace/tool_providers.py +++ b/api/controllers/console/workspace/tool_providers.py @@ -61,6 +61,19 @@ class ToolBuiltinProviderListToolsApi(Resource): ) +class ToolBuiltinProviderInfoApi(Resource): + @setup_required + @login_required + @account_initialization_required + def get(self, provider): + user = current_user + + user_id = user.id + tenant_id = user.current_tenant_id + + return jsonable_encoder(BuiltinToolManageService.get_builtin_tool_provider_info(user_id, tenant_id, provider)) + + class ToolBuiltinProviderDeleteApi(Resource): @setup_required @login_required @@ -604,6 +617,7 @@ api.add_resource(ToolProviderListApi, "/workspaces/current/tool-providers") # builtin tool provider api.add_resource(ToolBuiltinProviderListToolsApi, "/workspaces/current/tool-provider/builtin//tools") +api.add_resource(ToolBuiltinProviderInfoApi, "/workspaces/current/tool-provider/builtin//info") api.add_resource(ToolBuiltinProviderDeleteApi, "/workspaces/current/tool-provider/builtin//delete") api.add_resource(ToolBuiltinProviderUpdateApi, "/workspaces/current/tool-provider/builtin//update") api.add_resource( diff --git a/api/core/entities/provider_entities.py b/api/core/entities/provider_entities.py index 76fcff149e..b5de05d2fb 100644 --- a/api/core/entities/provider_entities.py +++ b/api/core/entities/provider_entities.py @@ -3,7 +3,12 @@ from typing import Optional, Union from pydantic import BaseModel, ConfigDict, Field -from core.entities.parameter_entities import AppSelectorScope, CommonParameterType, ModelSelectorScope +from core.entities.parameter_entities import ( + AppSelectorScope, + CommonParameterType, + ModelSelectorScope, + ToolSelectorScope, +) from core.model_runtime.entities.model_entities import ModelType from core.tools.entities.common_entities import I18nObject @@ -140,7 +145,8 @@ class BasicProviderConfig(BaseModel): SELECT = CommonParameterType.SELECT.value BOOLEAN = CommonParameterType.BOOLEAN.value APP_SELECTOR = CommonParameterType.APP_SELECTOR.value - MODEL_CONFIG = CommonParameterType.MODEL_CONFIG.value + MODEL_SELECTOR = CommonParameterType.MODEL_SELECTOR.value + TOOL_SELECTOR = CommonParameterType.TOOL_SELECTOR.value @classmethod def value_of(cls, value: str) -> "ProviderConfig.Type": @@ -168,7 +174,7 @@ class ProviderConfig(BasicProviderConfig): value: str = Field(..., description="The value of the option") label: I18nObject = Field(..., description="The label of the option") - scope: AppSelectorScope | ModelSelectorScope | None = None + scope: AppSelectorScope | ModelSelectorScope | ToolSelectorScope | None = None required: bool = False default: Optional[Union[int, str]] = None options: Optional[list[Option]] = None diff --git a/api/services/tools/builtin_tools_manage_service.py b/api/services/tools/builtin_tools_manage_service.py index 35cc59b22e..3acae74db6 100644 --- a/api/services/tools/builtin_tools_manage_service.py +++ b/api/services/tools/builtin_tools_manage_service.py @@ -62,6 +62,37 @@ class BuiltinToolManageService: return result + @staticmethod + def get_builtin_tool_provider_info(user_id: str, tenant_id: str, provider: str): + """ + get builtin tool provider info + """ + provider_controller = ToolManager.get_builtin_provider(provider, tenant_id) + tool_provider_configurations = ProviderConfigEncrypter( + tenant_id=tenant_id, + config=[x.to_basic_provider_config() for x in provider_controller.get_credentials_schema()], + provider_type=provider_controller.provider_type.value, + provider_identity=provider_controller.entity.identity.name, + ) + # check if user has added the provider + builtin_provider = BuiltinToolManageService._fetch_builtin_provider(provider, tenant_id) + + credentials = {} + if builtin_provider is not None: + # get credentials + credentials = builtin_provider.credentials + credentials = tool_provider_configurations.decrypt(credentials) + + entity = ToolTransformService.builtin_provider_to_user_provider( + provider_controller=provider_controller, + db_provider=builtin_provider, + decrypt_credentials=True, + ) + + entity.original_credentials = {} + + return entity + @staticmethod def list_builtin_provider_credentials_schema(provider_name: str, tenant_id: str): """ @@ -255,6 +286,7 @@ class BuiltinToolManageService: @staticmethod def _fetch_builtin_provider(provider_name: str, tenant_id: str) -> BuiltinToolProvider | None: try: + full_provider_name = provider_name provider_id_entity = ToolProviderID(provider_name) provider_name = provider_id_entity.provider_name if provider_id_entity.organization != "langgenius": @@ -264,7 +296,8 @@ class BuiltinToolManageService: db.session.query(BuiltinToolProvider) .filter( BuiltinToolProvider.tenant_id == tenant_id, - (BuiltinToolProvider.provider == provider_name) | (BuiltinToolProvider.provider == provider_name), + (BuiltinToolProvider.provider == provider_name) + | (BuiltinToolProvider.provider == full_provider_name), ) .first() )