diff --git a/api/controllers/console/app/workflow.py b/api/controllers/console/app/workflow.py index 2f7668566f..500631d2af 100644 --- a/api/controllers/console/app/workflow.py +++ b/api/controllers/console/app/workflow.py @@ -980,10 +980,8 @@ class DraftWorkflowTriggerRunApi(Resource): ) except InvokeRateLimitError as ex: raise InvokeRateLimitHttpError(ex.description) - except ValueError as e: - raise e except PluginInvokeError as e: - raise e + raise ValueError(e.to_user_friendly_error()) except Exception as e: logger.exception("Error polling trigger debug event") raise e @@ -1040,11 +1038,8 @@ class DraftWorkflowTriggerNodeApi(Resource): node_id=node_id, ) event = poller.poll() - except ValueError as e: - logger.exception("Error polling trigger debug event") - raise e except PluginInvokeError as e: - raise e + raise ValueError(e.to_user_friendly_error()) except Exception as e: logger.exception("Error polling trigger debug event") raise e @@ -1119,10 +1114,8 @@ class DraftWorkflowTriggerRunAllApi(Resource): user_id=current_user.id, node_ids=node_ids, ) - except ValueError as e: - raise e except PluginInvokeError as e: - raise e + raise ValueError(e.to_user_friendly_error()) except Exception as e: logger.exception("Error polling trigger debug event") raise e diff --git a/api/core/plugin/impl/exc.py b/api/core/plugin/impl/exc.py index 23a69bd92f..5738c22ced 100644 --- a/api/core/plugin/impl/exc.py +++ b/api/core/plugin/impl/exc.py @@ -58,6 +58,20 @@ class PluginInvokeError(PluginDaemonClientSideError): except Exception: return self.description + def to_user_friendly_error(self, plugin_name: str = "currently running plugin") -> str: + """ + Convert the error to a user-friendly error message. + + :param plugin_name: The name of the plugin that caused the error. + :return: A user-friendly error message. + """ + return ( + f"An error occurred in the {plugin_name}, " + f"please contact the author of {plugin_name} for help, " + f"error type: {self.get_error_type()}, " + f"error details: {self.get_error_message()}" + ) + class PluginUniqueIdentifierError(PluginDaemonClientSideError): description: str = "Unique Identifier Error" diff --git a/api/core/trigger/trigger_manager.py b/api/core/trigger/trigger_manager.py index 74b3bb0b92..2dc3abf44a 100644 --- a/api/core/trigger/trigger_manager.py +++ b/api/core/trigger/trigger_manager.py @@ -190,7 +190,9 @@ class TriggerManager: if e.get_error_type() == "EventIgnoreError": return TriggerInvokeEventResponse(variables={}, cancelled=True) logger.exception("Failed to invoke trigger event") - raise TriggerPluginInvokeError(description=e.get_error_message()) from e + raise TriggerPluginInvokeError( + description=e.to_user_friendly_error(plugin_name=provider.entity.identity.name) + ) from e @classmethod def subscribe_trigger( diff --git a/api/core/workflow/nodes/tool/tool_node.py b/api/core/workflow/nodes/tool/tool_node.py index cd0094f531..792f2d98e3 100644 --- a/api/core/workflow/nodes/tool/tool_node.py +++ b/api/core/workflow/nodes/tool/tool_node.py @@ -160,10 +160,7 @@ class ToolNode(Node): status=WorkflowNodeExecutionStatus.FAILED, inputs=parameters_for_log, metadata={WorkflowNodeExecutionMetadataKey.TOOL_INFO: tool_info}, - error="An error occurred in the plugin, " - f"please contact the author of {node_data.provider_name} for help, " - f"error type: {e.get_error_type()}, " - f"error details: {e.get_error_message()}", + error=e.to_user_friendly_error(plugin_name=node_data.provider_name), error_type=type(e).__name__, ) )