From 22d6cec5271a00d7430f9ddccf66d0c9ba9a9e1e Mon Sep 17 00:00:00 2001 From: Will Date: Mon, 26 May 2025 10:07:42 +0800 Subject: [PATCH] fix: workflow tool no session_id --- api/core/tools/workflow_as_tool/tool.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/api/core/tools/workflow_as_tool/tool.py b/api/core/tools/workflow_as_tool/tool.py index 57c93d1d45..d15066f948 100644 --- a/api/core/tools/workflow_as_tool/tool.py +++ b/api/core/tools/workflow_as_tool/tool.py @@ -1,10 +1,11 @@ import json import logging from collections.abc import Generator -from typing import Any, Optional, cast +from typing import Any, Optional, Union, 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 @@ -89,7 +90,7 @@ class WorkflowTool(Tool): result = generator.generate( app_model=app, workflow=workflow, - user=cast("Account | EndUser", current_user), + user=self._get_user(user_id, self.runtime.invoke_from), args={"inputs": tool_parameters, "files": files}, invoke_from=self.runtime.invoke_from, streaming=False, @@ -113,6 +114,19 @@ class WorkflowTool(Tool): yield self.create_text_message(json.dumps(outputs, ensure_ascii=False)) yield self.create_json_message(outputs) + def _get_user(self, user_id: str, invoke_from: InvokeFrom) -> Union[EndUser, Account]: + """ + get the user by user id + """ + if invoke_from in {InvokeFrom.SERVICE_API, InvokeFrom.WEB_APP}: + user = db.session.query(EndUser).filter(EndUser.id == user_id).first() + else: + user = cast(Account, current_user) + if not user: + raise ValueError("user not found") + + return user + def fork_tool_runtime(self, runtime: ToolRuntime) -> "WorkflowTool": """ fork a new tool with metadata