diff --git a/api/core/tools/workflow_as_tool/tool.py b/api/core/tools/workflow_as_tool/tool.py index 57c93d1d45..eea11f23a0 100644 --- a/api/core/tools/workflow_as_tool/tool.py +++ b/api/core/tools/workflow_as_tool/tool.py @@ -5,6 +5,7 @@ from typing import Any, Optional, cast from flask_login import current_user +from core.app.entities.app_invoke_entities import InvokeFrom from core.file import FILE_MODEL_IDENTITY, File, FileTransferMethod from core.tools.__base.tool import Tool from core.tools.__base.tool_runtime import ToolRuntime @@ -86,10 +87,12 @@ class WorkflowTool(Tool): assert self.runtime is not None assert self.runtime.invoke_from is not None + invoke_user = current_user if self.runtime.invoke_from != InvokeFrom.SERVICE_API else self._get_user(user_id) + result = generator.generate( app_model=app, workflow=workflow, - user=cast("Account | EndUser", current_user), + user=cast("Account | EndUser", invoke_user), args={"inputs": tool_parameters, "files": files}, invoke_from=self.runtime.invoke_from, streaming=False, @@ -113,6 +116,19 @@ class WorkflowTool(Tool): yield self.create_text_message(json.dumps(outputs, ensure_ascii=False)) yield self.create_json_message(outputs) + @classmethod + def _get_user(cls, user_id: str) -> EndUser: + """ + get the user by user id + """ + + user = db.session.query(EndUser).filter(EndUser.id == user_id).first() + + if not user: + raise ValueError("user not found") + + return user + def fork_tool_runtime(self, runtime: ToolRuntime) -> "WorkflowTool": """ fork a new tool with metadata