From c32cd490461fd1a55fc468103957236805cc212f Mon Sep 17 00:00:00 2001 From: Hadi Date: Tue, 29 Jul 2025 14:02:24 -0400 Subject: [PATCH] Add support for tool recreate --- aixplain/factories/tool_factory.py | 15 +++++++++++++++ aixplain/modules/model/integration.py | 5 +++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/aixplain/factories/tool_factory.py b/aixplain/factories/tool_factory.py index 8f746422..8a9e9160 100644 --- a/aixplain/factories/tool_factory.py +++ b/aixplain/factories/tool_factory.py @@ -17,6 +17,21 @@ class ToolFactory(ModelGetterMixin, ModelListMixin): backend_url = config.BACKEND_URL + + @classmethod + def recreate( + cls, + integration: Optional[Union[Text, Model]] = None, + tool: Optional[Union[Text, Model]] = None, + params: Optional[Union[BaseUtilityModelParams, BaseIndexParams, BaseAuthenticationParams]] = None, + data: Optional[Dict] = None, + **kwargs, + ) -> Model: + if data is None: + data = {} + data["assetId"] = tool.id if isinstance(tool, Model) else tool + return ToolFactory.create(integration, params, AuthenticationSchema.NO_AUTH, data ) + @classmethod def create( cls, diff --git a/aixplain/modules/model/integration.py b/aixplain/modules/model/integration.py index c602e807..c05798e0 100644 --- a/aixplain/modules/model/integration.py +++ b/aixplain/modules/model/integration.py @@ -73,6 +73,7 @@ def __init__( self.authentication_methods = json.loads([item for item in additional_info['attributes'] if item['name'] == 'auth_schemes'][0]['code']) + def connect(self, authentication_schema: AuthenticationSchema, args: Optional[BaseAuthenticationParams] = None, data: Optional[Dict] = None, **kwargs) -> ModelResponse: """Connect to the integration @@ -98,7 +99,7 @@ def connect(self, authentication_schema: AuthenticationSchema, args: Optional[Ba return self.run({"data": data}) if args is None: - args = build_connector_params(**kwargs) + args = build_connector_params(**kwargs) if authentication_schema.value not in self.authentication_methods: raise ValueError(f"Authentication schema {authentication_schema.value} is not supported for this integration. Supported authentication methods: {self.authentication_methods}") @@ -106,7 +107,7 @@ def connect(self, authentication_schema: AuthenticationSchema, args: Optional[Ba if data is None: data = {} - if authentication_schema not in [AuthenticationSchema.OAUTH2, AuthenticationSchema.OAUTH1, AuthenticationSchema.NO_AUTH]: + if authentication_schema not in [AuthenticationSchema.OAUTH2, AuthenticationSchema.OAUTH1]: required_params = json.loads([item for item in self.additional_info['attributes'] if item['name'] == authentication_schema.value + "-inputs"][0]['code']) required_params_names = [param['name'] for param in required_params] for param in required_params_names: