feat: support fetch tool provider info

This commit is contained in:
Yeuoly 2024-11-06 17:30:50 +08:00
parent 6baa98f166
commit 28c9ec3f4f
No known key found for this signature in database
GPG Key ID: A66E7E320FB19F61
3 changed files with 57 additions and 4 deletions

View File

@ -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): class ToolBuiltinProviderDeleteApi(Resource):
@setup_required @setup_required
@login_required @login_required
@ -604,6 +617,7 @@ api.add_resource(ToolProviderListApi, "/workspaces/current/tool-providers")
# builtin tool provider # builtin tool provider
api.add_resource(ToolBuiltinProviderListToolsApi, "/workspaces/current/tool-provider/builtin/<path:provider>/tools") 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(ToolBuiltinProviderDeleteApi, "/workspaces/current/tool-provider/builtin/<path:provider>/delete")
api.add_resource(ToolBuiltinProviderUpdateApi, "/workspaces/current/tool-provider/builtin/<path:provider>/update") api.add_resource(ToolBuiltinProviderUpdateApi, "/workspaces/current/tool-provider/builtin/<path:provider>/update")
api.add_resource( api.add_resource(

View File

@ -3,7 +3,12 @@ from typing import Optional, Union
from pydantic import BaseModel, ConfigDict, Field 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.model_runtime.entities.model_entities import ModelType
from core.tools.entities.common_entities import I18nObject from core.tools.entities.common_entities import I18nObject
@ -140,7 +145,8 @@ class BasicProviderConfig(BaseModel):
SELECT = CommonParameterType.SELECT.value SELECT = CommonParameterType.SELECT.value
BOOLEAN = CommonParameterType.BOOLEAN.value BOOLEAN = CommonParameterType.BOOLEAN.value
APP_SELECTOR = CommonParameterType.APP_SELECTOR.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 @classmethod
def value_of(cls, value: str) -> "ProviderConfig.Type": def value_of(cls, value: str) -> "ProviderConfig.Type":
@ -168,7 +174,7 @@ class ProviderConfig(BasicProviderConfig):
value: str = Field(..., description="The value of the option") value: str = Field(..., description="The value of the option")
label: I18nObject = Field(..., description="The label 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 required: bool = False
default: Optional[Union[int, str]] = None default: Optional[Union[int, str]] = None
options: Optional[list[Option]] = None options: Optional[list[Option]] = None

View File

@ -62,6 +62,37 @@ class BuiltinToolManageService:
return result 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 @staticmethod
def list_builtin_provider_credentials_schema(provider_name: str, tenant_id: str): def list_builtin_provider_credentials_schema(provider_name: str, tenant_id: str):
""" """
@ -255,6 +286,7 @@ class BuiltinToolManageService:
@staticmethod @staticmethod
def _fetch_builtin_provider(provider_name: str, tenant_id: str) -> BuiltinToolProvider | None: def _fetch_builtin_provider(provider_name: str, tenant_id: str) -> BuiltinToolProvider | None:
try: try:
full_provider_name = provider_name
provider_id_entity = ToolProviderID(provider_name) provider_id_entity = ToolProviderID(provider_name)
provider_name = provider_id_entity.provider_name provider_name = provider_id_entity.provider_name
if provider_id_entity.organization != "langgenius": if provider_id_entity.organization != "langgenius":
@ -264,7 +296,8 @@ class BuiltinToolManageService:
db.session.query(BuiltinToolProvider) db.session.query(BuiltinToolProvider)
.filter( .filter(
BuiltinToolProvider.tenant_id == tenant_id, BuiltinToolProvider.tenant_id == tenant_id,
(BuiltinToolProvider.provider == provider_name) | (BuiltinToolProvider.provider == provider_name), (BuiltinToolProvider.provider == provider_name)
| (BuiltinToolProvider.provider == full_provider_name),
) )
.first() .first()
) )