feat: workflow new nodes (#4683)

Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: Patryk Garstecki <patryk20120@yahoo.pl>
Co-authored-by: Sebastian.W <thiner@gmail.com>
Co-authored-by: 呆萌闷油瓶 <253605712@qq.com>
Co-authored-by: takatost <takatost@users.noreply.github.com>
Co-authored-by: rechardwang <wh_goodjob@163.com>
Co-authored-by: Nite Knite <nkCoding@gmail.com>
Co-authored-by: Chenhe Gu <guchenhe@gmail.com>
Co-authored-by: Joshua <138381132+joshua20231026@users.noreply.github.com>
Co-authored-by: Weaxs <459312872@qq.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: leejoo0 <81673835+leejoo0@users.noreply.github.com>
Co-authored-by: JzoNg <jzongcode@gmail.com>
Co-authored-by: sino <sino2322@gmail.com>
Co-authored-by: Vikey Chen <vikeytk@gmail.com>
Co-authored-by: wanghl <Wang-HL@users.noreply.github.com>
Co-authored-by: Haolin Wang-汪皓临 <haolin.wang@atlaslovestravel.com>
Co-authored-by: Zixuan Cheng <61724187+Theysua@users.noreply.github.com>
Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com>
Co-authored-by: Bowen Liang <bowenliang@apache.org>
Co-authored-by: Bowen Liang <liangbowen@gf.com.cn>
Co-authored-by: fanghongtai <42790567+fanghongtai@users.noreply.github.com>
Co-authored-by: wxfanghongtai <wxfanghongtai@gf.com.cn>
Co-authored-by: Matri <qjp@bithuman.io>
Co-authored-by: Benjamin <benjaminx@gmail.com>
This commit is contained in:
zxhlyh 2024-05-27 21:57:08 +08:00 • committed by GitHub
commit 45deaee762
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
210 changed files with 9951 additions and 2223 deletions

View file

@ -284,6 +284,7 @@ const translation = {
'varName': 'Variable Name',
'labelName': 'Label Name',
'inputPlaceholder': 'Please input',
'content': 'Content',
'required': 'Required',
'errorMsg': {
varNameRequired: 'Variable name is required',

View file

@ -1,10 +1,12 @@
const translation = {
title: 'Tools',
createCustomTool: 'Create Custom Tool',
customToolTip: 'Learn more about Dify custom tools',
type: {
all: 'All',
builtIn: 'Built-in',
custom: 'Custom',
workflow: 'Workflow',
},
contribute: {
line1: 'I\'m interested in ',
@ -21,12 +23,26 @@ const translation = {
},
includeToolNum: '{{num}} tools included',
addTool: 'Add Tool',
addToolModal: {
type: 'type',
category: 'category',
add: 'add',
added: 'added',
manageInTools: 'Manage in Tools',
emptyTitle: 'No workflow tool available',
emptyTip: 'Go to "Workflow -> Publish as Tool"',
},
createTool: {
title: 'Create Custom Tool',
editAction: 'Configure',
editTitle: 'Edit Custom Tool',
name: 'Name',
toolNamePlaceHolder: 'Enter the tool name',
nameForToolCall: 'Tool call name',
nameForToolCallPlaceHolder: 'Used for machine recognition, such as getCurrentWeather, list_pets',
nameForToolCallTip: 'Only supports numbers, letters, and underscores.',
description: 'Description',
descriptionPlaceholder: 'Brief description of the tool\'s purpose, e.g., get the temperature for a specific location.',
schema: 'Schema',
schemaPlaceHolder: 'Enter your OpenAPI schema here',
viewSchemaSpec: 'View the OpenAPI-Swagger Specification',
@ -71,8 +87,24 @@ const translation = {
},
privacyPolicy: 'Privacy policy',
privacyPolicyPlaceholder: 'Please enter privacy policy',
toolInput: {
title: 'Tool Input',
name: 'Name',
required: 'Required',
method: 'Method',
methodSetting: 'Setting',
methodSettingTip: 'User fills in the tool configuration',
methodParameter: 'Parameter',
methodParameterTip: 'LLM fills during inference',
label: 'Tags',
labelPlaceholder: 'Choose tags(optional)',
description: 'Description',
descriptionPlaceholder: 'Description of the parameter\'s meaning',
},
customDisclaimer: 'Custom disclaimer',
customDisclaimerPlaceholder: 'Please enter custom disclaimer',
confirmTitle: 'Confirm to save ?',
confirmTip: 'Apps using this tool will be affected',
},
test: {
title: 'Test',
@ -112,6 +144,8 @@ const translation = {
toolRemoved: 'Tool removed',
notAuthorized: 'Tool not authorized',
howToGet: 'How to get',
openInStudio: 'Open in Studio',
toolNameUsageTip: 'Tool call name for agent reasoning and prompting',
}
export default translation

View file

@ -60,6 +60,13 @@ const translation = {
pasteHere: 'Paste Here',
pointerMode: 'Pointer Mode',
handMode: 'Hand Mode',
model: 'Model',
workflowAsTool: 'Workflow as Tool',
configureRequired: 'Configure Required',
configure: 'Configure',
manageInTools: 'Manage in Tools',
workflowAsToolTip: 'Tool reconfiguration is required after the workflow update.',
viewDetailInTracingPanel: 'View details',
},
errorMsg: {
fieldRequired: '{{field}} is required',
@ -78,12 +85,18 @@ const translation = {
testRun: 'Test Run ',
startRun: 'Start Run',
running: 'Running',
testRunIteration: 'Test Run Iteration',
back: 'Back',
iteration: 'Iteration',
},
tabs: {
'searchBlock': 'Search block',
'blocks': 'Blocks',
'builtInTool': 'Built-in Tool',
'customTool': 'Custom Tool',
'tools': 'Tools',
'allTool': 'All',
'builtInTool': 'Built-in',
'customTool': 'Custom',
'workflowTool': 'Workflow',
'question-understand': 'Question Understand',
'logic': 'Logic',
'transform': 'Transform',
@ -101,7 +114,11 @@ const translation = {
'code': 'Code',
'template-transform': 'Template',
'http-request': 'HTTP Request',
'variable-assigner': 'Variable Assigner',
'variable-assigner': 'Variable Aggregator',
'variable-aggregator': 'Variable Aggregator',
'iteration-start': 'Iteration Start',
'iteration': 'Iteration',
'parameter-extractor': 'Parameter Extractor',
},
blocksAbout: {
'start': 'Define the initial parameters for launching a workflow',
@ -114,7 +131,10 @@ const translation = {
'code': 'Execute a piece of Python or NodeJS code to implement custom logic',
'template-transform': 'Convert data to string using Jinja template syntax',
'http-request': 'Allow server requests to be sent over the HTTP protocol',
'variable-assigner': 'Assign variables in different branches to the same variable to achieve unified configuration of post-nodes',
'variable-assigner': 'Aggregate multi-branch variables into a single variable for unified configuration of downstream nodes.',
'variable-aggregator': 'Aggregate multi-branch variables into a single variable for unified configuration of downstream nodes.',
'iteration': 'Perform multiple steps on a list object until all results are outputted.',
'parameter-extractor': 'Use LLM to extract structured parameters from natural language for tool invocations or HTTP requests.',
},
operator: {
zoomIn: 'Zoom In',
@ -312,7 +332,6 @@ const translation = {
variableAssigner: {
title: 'Assign variables',
outputType: 'Output Type',
outputVarType: 'Output Variable Type',
varNotSet: 'Variable not set',
noVarTip: 'Add the variables to be assigned',
type: {
@ -321,9 +340,13 @@ const translation = {
object: 'Object',
array: 'Array',
},
aggregationGroup: 'Aggregation Group',
aggregationGroupTip: 'Enabling this feature allows the variable aggregator to aggregate multiple sets of variables.',
addGroup: 'Add Group',
outputVars: {
output: 'Assigned variable value',
varDescribe: '{{groupName}} output',
},
setAssignVariable: 'Set assign variable',
},
tool: {
toAuthorize: 'To authorize',
@ -352,8 +375,42 @@ const translation = {
topicPlaceholder: 'Write your topic name',
addClass: 'Add Class',
instruction: 'Instruction',
instructionTip: 'Input additional instructions to help the question classifier better understand how to categorize questions.',
instructionPlaceholder: 'Write your instruction',
},
parameterExtractor: {
inputVar: 'Input Variable',
extractParameters: 'Extract Parameters',
importFromTool: 'Import from tools',
addExtractParameter: 'Add Extract Parameter',
addExtractParameterContent: {
name: 'Name',
namePlaceholder: 'Extract Parameter Name',
type: 'Type',
typePlaceholder: 'Extract Parameter Type',
description: 'Description',
descriptionPlaceholder: 'Extract Parameter Description',
required: 'Required',
requiredContent: 'Required is only used as a reference for model inference, and not for mandatory validation of parameter output.',
},
extractParametersNotSet: 'Extract Parameters not setup',
instruction: 'Instruction',
instructionTip: 'Input additional instructions to help the parameter extractor understand how to extract parameters.',
advancedSetting: 'Advanced Setting',
reasoningMode: 'Reasoning Mode',
reasoningModeTip: 'You can choose the appropriate reasoning mode based on the model\'s ability to respond to instructions for function calling or prompts.',
isSuccess: 'Is Success.On success the value is 1, on failure the value is 0.',
errorReason: 'Error Reason',
},
iteration: {
deleteTitle: 'Delete Iteration Node?',
deleteDesc: 'Deleting the iteration node will delete all child nodes',
input: 'Input',
output: 'Output Variables',
iteration_one: '{{count}} Iteration',
iteration_other: '{{count}} Iterations',
currentIteration: 'Current Iteration',
},
},
tracing: {
stopBy: 'Stop by {{user}}',

View file

@ -281,6 +281,7 @@ const translation = {
'inputPlaceholder': '请输入',
'labelName': '显示名称',
'required': '必填',
'content': '内容',
'errorMsg': {
varNameRequired: '变量名称必填',
labelNameRequired: '显示名称必填',

View file

@ -1,10 +1,12 @@
const translation = {
title: '工具',
createCustomTool: '创建自定义工具',
customToolTip: '了解更多关于 Dify 自定义工具的信息',
type: {
all: '全部',
builtIn: '内置',
custom: '自定义',
workflow: '工作流',
},
contribute: {
line1: '我有兴趣为 ',
@ -21,12 +23,26 @@ const translation = {
},
includeToolNum: '包含 {{num}} 个工具',
addTool: '添加工具',
addToolModal: {
type: '类型',
category: '类别',
add: '添加',
added: '已添加',
manageInTools: '去工具列表管理',
emptyTitle: '没有可用的工作流工具',
emptyTip: '去 “工作流 -> 发布为工具” 添加',
},
createTool: {
title: '创建自定义工具',
editAction: '编辑',
editTitle: '编辑自定义工具',
name: '名称',
toolNamePlaceHolder: '输入工具名称',
nameForToolCall: '工具调用名称',
nameForToolCallPlaceHolder: '用于机器识别,如 getCurrentWeather, list_pets',
nameForToolCallTip: '仅支持数字、字母、下划线。',
description: '工具描述',
descriptionPlaceholder: '工具用途的简要描述,例如获取特定位置的温度。',
schema: 'Schema',
schemaPlaceHolder: '在此处输入您的 OpenAPI schema',
viewSchemaSpec: '查看 OpenAPI-Swagger 规范',
@ -71,8 +87,24 @@ const translation = {
},
privacyPolicy: '隐私协议',
privacyPolicyPlaceholder: '请输入隐私协议',
toolInput: {
title: '工具入参',
name: '名称',
required: '必须',
method: '方式',
methodSetting: '用户输入',
methodSettingTip: '用户在工具配置中填写',
methodParameter: 'LLM 填入',
methodParameterTip: 'LLM 在推理过程中填写',
label: '标签',
labelPlaceholder: '选择标签(可选)',
description: '描述',
descriptionPlaceholder: '参数意义的描述',
},
customDisclaimer: '自定义免责声明',
customDisclaimerPlaceholder: '请输入自定义免责声明',
confirmTitle: '确认保存?',
confirmTip: '发布新的工具版本可能会影响该工具已关联的应用',
},
test: {
title: '测试',
@ -112,6 +144,8 @@ const translation = {
toolRemoved: '工具已被移除',
notAuthorized: '工具未授权',
howToGet: '如何获取',
openInStudio: '在工作室中打开',
toolNameUsageTip: '工具调用名称,用于 Agent 推理和提示词',
}
export default translation

View file

@ -60,6 +60,13 @@ const translation = {
pasteHere: '粘贴到这里',
pointerMode: '指针模式',
handMode: '手模式',
model: '模型',
workflowAsTool: '发布为工具',
configureRequired: '需要进行配置',
configure: '配置',
manageInTools: '访问工具页',
workflowAsToolTip: '工作流更新后需要重新配置工具参数',
viewDetailInTracingPanel: '查看详细信息',
},
errorMsg: {
fieldRequired: '{{field}} 不能为空',
@ -78,12 +85,18 @@ const translation = {
testRun: '测试运行 ',
startRun: '开始运行',
running: '运行中',
testRunIteration: '测试运行迭代',
back: '返回',
iteration: '迭代',
},
tabs: {
'searchBlock': '搜索节点',
'blocks': '节点',
'builtInTool': '内置工具',
'customTool': '自定义工具',
'tools': '工具',
'allTool': '全部',
'builtInTool': '内置',
'customTool': '自定义',
'workflowTool': '工作流',
'question-understand': '问题理解',
'logic': '逻辑',
'transform': '转换',
@ -101,7 +114,11 @@ const translation = {
'code': '代码执行',
'template-transform': '模板转换',
'http-request': 'HTTP 请求',
'variable-assigner': '变量赋值',
'variable-assigner': '变量聚合器',
'variable-aggregator': '变量聚合器',
'iteration-start': '迭代开始',
'iteration': '迭代',
'parameter-extractor': '参数提取器',
},
blocksAbout: {
'start': '定义一个 workflow 流程启动的初始参数',
@ -114,7 +131,10 @@ const translation = {
'code': '执行一段 Python 或 NodeJS 代码实现自定义逻辑',
'template-transform': '使用 Jinja 模板语法将数据转换为字符串',
'http-request': '允许通过 HTTP 协议发送服务器请求',
'variable-assigner': '将不同分支中的变量指派给同一个变量,以实现后置节点统一配置',
'variable-assigner': '将多路分支的变量聚合为一个变量,以实现下游节点统一配置。',
'variable-aggregator': '将多路分支的变量聚合为一个变量,以实现下游节点统一配置。',
'iteration': '对列表对象执行多次步骤直至输出所有结果。',
'parameter-extractor': '利用 LLM 从自然语言内推理提取出结构化参数,用于后置的工具调用或 HTTP 请求。',
},
operator: {
zoomIn: '放大',
@ -312,7 +332,6 @@ const translation = {
variableAssigner: {
title: '变量赋值',
outputType: '输出类型',
outputVarType: '输出变量类型',
varNotSet: '未设置变量',
noVarTip: '添加需要赋值的变量',
type: {
@ -321,9 +340,13 @@ const translation = {
object: 'Object',
array: 'Array',
},
aggregationGroup: '聚合分组',
aggregationGroupTip: '开启该功能后,变量聚合器内可以同时聚合多组变量',
addGroup: '添加分组',
outputVars: {
output: '指派的变量值',
varDescribe: '{{groupName}}的输出变量',
},
setAssignVariable: '设置赋值变量',
},
tool: {
toAuthorize: '授权',
@ -352,8 +375,42 @@ const translation = {
topicPlaceholder: '在这里输入你的主题内容',
addClass: '添加分类',
instruction: '指令',
instructionTip: '你可以输入额外的附加指令,帮助问题分类器更好的理解如何分类',
instructionPlaceholder: '在这里输入你的指令',
},
parameterExtractor: {
inputVar: '输入变量',
extractParameters: '提取参数',
importFromTool: '从工具导入',
addExtractParameter: '添加提取参数',
addExtractParameterContent: {
name: '名称',
namePlaceholder: '提取参数名称',
type: '类型',
typePlaceholder: '提取参数类型',
description: '描述',
descriptionPlaceholder: '提取参数描述',
required: '必填',
requiredContent: '必填仅作为模型推理的参考,不用于参数输出的强制验证。',
},
extractParametersNotSet: '提取参数未设置',
instruction: '指令',
instructionTip: '你可以输入额外的附加指令,帮助参数提取器理解如何提取参数',
advancedSetting: '高级设置',
reasoningMode: '推理模式',
reasoningModeTip: '你可以根据模型对于 Function calling 或 Prompt 的指令响应能力选择合适的推理模式',
isSuccess: '是否成功。成功时值为 1,失败时值为 0。',
errorReason: '错误原因',
},
iteration: {
deleteTitle: '删除迭代节点?',
deleteDesc: '删除迭代节点将删除所有子节点',
input: '输入',
output: '输出变量',
iteration_one: '{{count}}个迭代',
iteration_other: '{{count}}个迭代',
currentIteration: '当前迭代',
},
},
tracing: {
stopBy: '由{{user}}终止',