support sys.user_email

pull/21735/head
58 11 months ago committed by qiaofenlin
parent 3acaa59885
commit c123d4015b

@ -16,8 +16,8 @@ from core.workflow.variable_loader import VariableLoader
from core.workflow.workflow_entry import WorkflowEntry
from extensions.ext_database import db
from models.enums import UserFrom
from models.model import App, EndUser
from models.workflow import WorkflowType
from models.model import Account, App, EndUser
from models.workflow import Workflow, WorkflowType
logger = logging.getLogger(__name__)
@ -54,6 +54,7 @@ class WorkflowAppRunner(WorkflowBasedAppRunner):
app_config = cast(WorkflowAppConfig, app_config)
user_id = None
user_email = None
if self.application_generate_entity.invoke_from in {InvokeFrom.WEB_APP, InvokeFrom.SERVICE_API}:
end_user = db.session.query(EndUser).filter(EndUser.id == self.application_generate_entity.user_id).first()
if end_user:
@ -61,6 +62,13 @@ class WorkflowAppRunner(WorkflowBasedAppRunner):
else:
user_id = self.application_generate_entity.user_id
# 获取 workflow 创建者邮箱
workflow_obj = db.session.query(Workflow).filter(Workflow.id == app_config.workflow_id).first()
if workflow_obj:
creator_account = db.session.query(Account).filter(Account.id == workflow_obj.created_by).first()
if creator_account:
user_email = creator_account.email
app_record = db.session.query(App).filter(App.id == app_config.app_id).first()
if not app_record:
raise ValueError("App not found")
@ -98,10 +106,12 @@ class WorkflowAppRunner(WorkflowBasedAppRunner):
system_inputs = {
SystemVariableKey.FILES: files,
SystemVariableKey.USER_ID: user_id,
SystemVariableKey.USER_EMAIL: user_email,
SystemVariableKey.APP_ID: app_config.app_id,
SystemVariableKey.WORKFLOW_ID: app_config.workflow_id,
SystemVariableKey.WORKFLOW_EXECUTION_ID: self.application_generate_entity.workflow_execution_id,
}
logger.info(f"[sys.user_email debug] system_inputs={system_inputs}")
variable_pool = VariablePool(
system_variables=system_inputs,

@ -98,10 +98,12 @@ class WorkflowAppGenerateTaskPipeline:
self._user_id = user.id
user_session_id = user.session_id
self._created_by_role = CreatorUserRole.END_USER
user_email = user.email if hasattr(user, 'email') else None
elif isinstance(user, Account):
self._user_id = user.id
user_session_id = user.id
self._created_by_role = CreatorUserRole.ACCOUNT
user_email = user.email
else:
raise ValueError(f"Invalid user type: {type(user)}")
@ -110,6 +112,7 @@ class WorkflowAppGenerateTaskPipeline:
workflow_system_variables={
SystemVariableKey.FILES: application_generate_entity.files,
SystemVariableKey.USER_ID: user_session_id,
SystemVariableKey.USER_EMAIL: user_email,
SystemVariableKey.APP_ID: application_generate_entity.app_config.app_id,
SystemVariableKey.WORKFLOW_ID: workflow.id,
SystemVariableKey.WORKFLOW_EXECUTION_ID: application_generate_entity.workflow_execution_id,

@ -220,6 +220,7 @@ class WorkflowAppGenerateEntity(AppGenerateEntity):
# app config
app_config: WorkflowUIBasedAppConfig
workflow_execution_id: str
user_email: Optional[str] = None
class SingleIterationRunEntity(BaseModel):
"""

@ -1,7 +1,7 @@
from enum import StrEnum
from enum import Enum
class SystemVariableKey(StrEnum):
class SystemVariableKey(str, Enum):
"""
System Variables.
"""
@ -10,6 +10,7 @@ class SystemVariableKey(StrEnum):
FILES = "files"
CONVERSATION_ID = "conversation_id"
USER_ID = "user_id"
USER_EMAIL = "user_email"
DIALOGUE_COUNT = "dialogue_count"
APP_ID = "app_id"
WORKFLOW_ID = "workflow_id"

@ -0,0 +1,24 @@
import logging
from flask import Flask, request
app = Flask(__name__)
# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.route('/hello', methods=['GET', 'POST'])
def hello():
# 获取所有请求参数包括GET和POST
params = request.args.to_dict()
if request.method == 'POST':
params.update(request.form.to_dict())
# 也可以处理JSON body
if request.is_json:
params.update(request.get_json() or {})
logger.info(f"Request params: {params}")
return {'message': 'Hello, world!', 'params': params}
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5010)

@ -209,6 +209,10 @@ const formatItem = (
variable: 'sys.user_id',
type: VarType.string,
})
res.vars.push({
variable: 'sys.user_email',
type: VarType.string,
})
res.vars.push({
variable: 'sys.files',
type: VarType.arrayFile,

@ -122,6 +122,17 @@ const Panel: FC<NodePanelProps<StartNodeType>> = ({
</div>
}
/>
<VarItem
readonly
payload={{
variable: 'sys.user_email',
} as any}
rightContent={
<div className='text-xs font-normal text-text-tertiary'>
String
</div>
}
/>
<VarItem
readonly
payload={{

Loading…
Cancel
Save