fix: workflow tool no session_id

pull/20190/head
Will 1 year ago
parent cbfc32b11f
commit 22d6cec527

@ -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

Loading…
Cancel
Save