feat(tool): update tool provider methods to handle optional credentials and name

This commit is contained in:
Harry 2025-07-11 22:10:13 +08:00
parent 31e1261ae2
commit 5090f63df5
2 changed files with 19 additions and 10 deletions

View File

@ -168,8 +168,8 @@ class ToolBuiltinProviderUpdateApi(Resource):
parser = reqparse.RequestParser()
parser.add_argument("credential_id", type=str, required=True, nullable=False, location="json")
parser.add_argument("credentials", type=dict, required=True, nullable=False, location="json")
parser.add_argument("name", type=str, required=True, nullable=False, location="json")
parser.add_argument("credentials", type=dict, required=False, nullable=True, location="json")
parser.add_argument("name", type=str, required=False, nullable=True, location="json")
args = parser.parse_args()
@ -178,9 +178,9 @@ class ToolBuiltinProviderUpdateApi(Resource):
user_id=user_id,
tenant_id=tenant_id,
provider=provider,
credentials=args["credentials"],
credential_id=args["credential_id"],
name=args["name"],
credentials=args.get("credentials", None),
name=args.get("name", ""),
)
session.commit()
return result

View File

@ -121,7 +121,12 @@ class BuiltinToolManageService:
@staticmethod
def update_builtin_tool_provider(
user_id: str, tenant_id: str, provider: str, credentials: dict, credential_id: str, name: str | None = None
user_id: str,
tenant_id: str,
provider: str,
credential_id: str,
credentials: dict | None = None,
name: str | None = None,
):
"""
update builtin tool provider
@ -140,7 +145,7 @@ class BuiltinToolManageService:
raise ValueError(f"you have not added provider {provider}")
try:
if CredentialType.of(db_provider.credential_type).is_editable():
if CredentialType.of(db_provider.credential_type).is_editable() and credentials:
provider_controller = ToolManager.get_builtin_provider(provider, tenant_id)
if not provider_controller.need_credentials:
raise ValueError(f"provider {provider} does not need credentials")
@ -164,7 +169,7 @@ class BuiltinToolManageService:
cache.delete()
# update name if provided
if name is not None and name not in {"", db_provider.name}:
if name:
# check if the name is already used
if (
session.query(BuiltinToolProvider)
@ -345,12 +350,16 @@ class BuiltinToolManageService:
default_provider = providers[0]
default_provider.is_default = True
provider_controller = ToolManager.get_builtin_provider(default_provider.provider, tenant_id)
encrypter, _ = BuiltinToolManageService.create_tool_encrypter(
tenant_id, default_provider, default_provider.provider, provider_controller
)
credentials: list[ToolProviderCredentialApiEntity] = []
encrypters = {}
for provider in providers:
credential_type = provider.credential_type
if credential_type not in encrypters:
encrypters[credential_type] = BuiltinToolManageService.create_tool_encrypter(
tenant_id, provider, provider.provider, provider_controller
)[0]
encrypter = encrypters[credential_type]
decrypt_credential = encrypter.mask_tool_credentials(encrypter.decrypt(provider.credentials))
credential_entity = ToolTransformService.convert_builtin_provider_to_credential_entity(
provider=provider,