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 core.workflow.workflow_entry import WorkflowEntry
from extensions.ext_database import db from extensions.ext_database import db
from models.enums import UserFrom from models.enums import UserFrom
from models.model import App, EndUser from models.model import Account, App, EndUser
from models.workflow import WorkflowType from models.workflow import Workflow, WorkflowType
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -54,6 +54,7 @@ class WorkflowAppRunner(WorkflowBasedAppRunner):
app_config = cast(WorkflowAppConfig, app_config) app_config = cast(WorkflowAppConfig, app_config)
user_id = None user_id = None
user_email = None
if self.application_generate_entity.invoke_from in {InvokeFrom.WEB_APP, InvokeFrom.SERVICE_API}: 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() end_user = db.session.query(EndUser).filter(EndUser.id == self.application_generate_entity.user_id).first()
if end_user: if end_user:
@ -61,6 +62,13 @@ class WorkflowAppRunner(WorkflowBasedAppRunner):
else: else:
user_id = self.application_generate_entity.user_id 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() app_record = db.session.query(App).filter(App.id == app_config.app_id).first()
if not app_record: if not app_record:
raise ValueError("App not found") raise ValueError("App not found")
@ -98,10 +106,12 @@ class WorkflowAppRunner(WorkflowBasedAppRunner):
system_inputs = { system_inputs = {
SystemVariableKey.FILES: files, SystemVariableKey.FILES: files,
SystemVariableKey.USER_ID: user_id, SystemVariableKey.USER_ID: user_id,
SystemVariableKey.USER_EMAIL: user_email,
SystemVariableKey.APP_ID: app_config.app_id, SystemVariableKey.APP_ID: app_config.app_id,
SystemVariableKey.WORKFLOW_ID: app_config.workflow_id, SystemVariableKey.WORKFLOW_ID: app_config.workflow_id,
SystemVariableKey.WORKFLOW_EXECUTION_ID: self.application_generate_entity.workflow_execution_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( variable_pool = VariablePool(
system_variables=system_inputs, system_variables=system_inputs,

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

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

@ -1,7 +1,7 @@
from enum import StrEnum from enum import Enum
class SystemVariableKey(StrEnum): class SystemVariableKey(str, Enum):
""" """
System Variables. System Variables.
""" """
@ -10,6 +10,7 @@ class SystemVariableKey(StrEnum):
FILES = "files" FILES = "files"
CONVERSATION_ID = "conversation_id" CONVERSATION_ID = "conversation_id"
USER_ID = "user_id" USER_ID = "user_id"
USER_EMAIL = "user_email"
DIALOGUE_COUNT = "dialogue_count" DIALOGUE_COUNT = "dialogue_count"
APP_ID = "app_id" APP_ID = "app_id"
WORKFLOW_ID = "workflow_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', variable: 'sys.user_id',
type: VarType.string, type: VarType.string,
}) })
res.vars.push({
variable: 'sys.user_email',
type: VarType.string,
})
res.vars.push({ res.vars.push({
variable: 'sys.files', variable: 'sys.files',
type: VarType.arrayFile, type: VarType.arrayFile,

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

Loading…
Cancel
Save