Bläddra i källkod

feat: support fetch tool provider info

Yeuoly 6 månader sedan
förälder
incheckning
28c9ec3f4f

+ 14 - 0
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/<path:provider>/tools")
+api.add_resource(ToolBuiltinProviderInfoApi, "/workspaces/current/tool-provider/builtin/<path:provider>/info")
 api.add_resource(ToolBuiltinProviderDeleteApi, "/workspaces/current/tool-provider/builtin/<path:provider>/delete")
 api.add_resource(ToolBuiltinProviderUpdateApi, "/workspaces/current/tool-provider/builtin/<path:provider>/update")
 api.add_resource(

+ 9 - 3
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

+ 34 - 1
api/services/tools/builtin_tools_manage_service.py

@@ -63,6 +63,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):
         """
         list builtin provider credentials schema
@@ -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()
             )