From e96f5dfe180b53b5f1c36cf45a14c706fd2e86dc Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Thu, 18 Jul 2024 14:05:52 +0800 Subject: [PATCH] perf: system template avatar --- .../core/workflow/template/system/aiChat.ts | 2 +- .../template/system/assignedAnswer.ts | 2 +- .../template/system/classifyQuestion/index.ts | 2 +- .../template/system/contextExtract/index.ts | 2 +- .../template/system/customFeedback.ts | 2 +- .../workflow/template/system/datasetConcat.ts | 2 +- .../workflow/template/system/datasetSearch.ts | 2 +- .../core/workflow/template/system/http468.ts | 2 +- .../workflow/template/system/ifElse/index.ts | 2 +- .../core/workflow/template/system/laf.ts | 2 +- .../workflow/template/system/pluginInput.ts | 2 +- .../workflow/template/system/pluginOutput.ts | 2 +- .../template/system/queryExtension.ts | 2 +- .../workflow/template/system/runApp/index.ts | 2 +- .../workflow/template/system/sandbox/index.ts | 2 +- .../core/workflow/template/system/stopTool.ts | 2 +- .../workflow/template/system/systemConfig.ts | 2 +- .../workflow/template/system/textEditor.ts | 2 +- .../core/workflow/template/system/tools.ts | 2 +- .../template/system/variableUpdate/index.tsx | 2 +- .../workflow/template/system/workflowStart.ts | 2 +- .../src/duckduckgo/search/template.json | 2 +- .../src/duckduckgo/searchImg/template.json | 2 +- .../src/duckduckgo/searchNews/template.json | 2 +- .../src/duckduckgo/searchVideo/template.json | 2 +- packages/plugins/src/duckduckgo/template.json | 6 +- packages/plugins/src/fetchUrl/template.json | 2 +- packages/plugins/src/getTime/template.json | 2 +- .../plugins/src/mathExprVal/template.json | 2 +- .../web/components/common/Avatar/index.tsx | 2 +- .../web/components/common/Icon/constants.ts | 39 ++++++++ .../icons/core/workflow/template/FileRead.svg | 10 ++ .../icons/core/workflow/template/aiChat.svg | 10 ++ .../icons/core/workflow/template/codeRun.svg | 10 ++ .../core/workflow/template/customFeedback.svg | 10 ++ .../core/workflow/template/datasetConcat.svg | 10 ++ .../core/workflow/template/datasetSearch.svg | 13 +++ .../core/workflow/template/duckduckgo.svg | 1 + .../core/workflow/template/extractJson.svg | 11 +++ .../icons/core/workflow/template/fetchUrl.svg | 10 ++ .../icons/core/workflow/template/getTime.svg | 12 +++ .../core/workflow/template/httpRequest.svg | 10 ++ .../icons/core/workflow/template/ifelse.svg | 10 ++ .../core/workflow/template/lafDispatch.svg | 10 ++ .../icons/core/workflow/template/mathCall.svg | 10 ++ .../core/workflow/template/pluginOutput.svg | 13 +++ .../core/workflow/template/queryExtension.svg | 10 ++ .../workflow/template/questionClassify.svg | 12 +++ .../icons/core/workflow/template/reply.svg | 10 ++ .../icons/core/workflow/template/runApp.svg | 13 +++ .../icons/core/workflow/template/stopTool.svg | 10 ++ .../core/workflow/template/systemConfig.svg | 10 ++ .../core/workflow/template/textConcat.svg | 11 +++ .../icons/core/workflow/template/toolCall.svg | 13 +++ .../core/workflow/template/variableUpdate.svg | 12 +++ .../core/workflow/template/workflowStart.svg | 10 ++ .../web/components/common/MyModal/index.tsx | 17 ++-- .../components/common/Tabs/LightRowTabs.tsx | 10 +- packages/web/i18n/en/app.json | 5 +- packages/web/i18n/zh/app.json | 5 +- .../app/public/imgs/app/inputGuide-icon.svg | 2 +- .../app/public/imgs/app/nextQuestion-icon.svg | 2 +- projects/app/public/imgs/app/welcome-icon.svg | 2 +- .../app/public/imgs/workflow/fetchUrl.png | Bin 9352 -> 0 bytes .../app/public/imgs/workflow/fetchUrl.svg | 2 +- .../public/imgs/workflow/getCurrentTime.png | Bin 9634 -> 0 bytes .../public/imgs/workflow/getCurrentTime.svg | 2 +- .../app/public/imgs/workflow/mathExprEval.png | Bin 1227 -> 0 bytes .../app/public/imgs/workflow/mathExprEval.svg | 2 +- .../core/chat/components/AIResponseBox.tsx | 6 +- .../chat/components/WholeResponseModal.tsx | 21 ++-- .../detail/components/SimpleApp/EditForm.tsx | 22 ++++- .../SimpleApp/components/ToolSelectModal.tsx | 41 ++++---- .../app/detail/components/Workflow/Header.tsx | 1 - .../Flow/NodeTemplatesModal.tsx | 54 +++++----- .../Flow/nodes/render/NodeCard.tsx | 2 +- .../RenderInput/templates/Reference.tsx | 4 +- .../pages/app/list/components/CreateModal.tsx | 2 +- projects/app/src/web/core/app/templates.ts | 92 +++++++++--------- projects/app/src/web/core/workflow/utils.ts | 1 + 80 files changed, 490 insertions(+), 169 deletions(-) create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/FileRead.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/aiChat.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/codeRun.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/customFeedback.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/datasetConcat.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/datasetSearch.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/duckduckgo.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/extractJson.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/fetchUrl.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/getTime.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/httpRequest.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/ifelse.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/lafDispatch.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/mathCall.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/pluginOutput.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/queryExtension.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/questionClassify.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/reply.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/runApp.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/stopTool.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/systemConfig.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/textConcat.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/toolCall.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/variableUpdate.svg create mode 100644 packages/web/components/common/Icon/icons/core/workflow/template/workflowStart.svg delete mode 100644 projects/app/public/imgs/workflow/fetchUrl.png delete mode 100644 projects/app/public/imgs/workflow/getCurrentTime.png delete mode 100644 projects/app/public/imgs/workflow/mathExprEval.png diff --git a/packages/global/core/workflow/template/system/aiChat.ts b/packages/global/core/workflow/template/system/aiChat.ts index 45e8f3120d6..e100e39fd06 100644 --- a/packages/global/core/workflow/template/system/aiChat.ts +++ b/packages/global/core/workflow/template/system/aiChat.ts @@ -26,7 +26,7 @@ export const AiChatModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.chatNode, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', name: 'AI 对话', intro: 'AI 大模型对话', showStatus: true, diff --git a/packages/global/core/workflow/template/system/assignedAnswer.ts b/packages/global/core/workflow/template/system/assignedAnswer.ts index 5a8998eecdb..6850eb58496 100644 --- a/packages/global/core/workflow/template/system/assignedAnswer.ts +++ b/packages/global/core/workflow/template/system/assignedAnswer.ts @@ -13,7 +13,7 @@ export const AssignedAnswerModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.answerNode, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/reply.png', + avatar: 'core/workflow/template/reply', name: '指定回复', intro: '该模块可以直接回复一段指定的内容。常用于引导、提示。非字符串内容传入时,会转成字符串进行输出。', diff --git a/packages/global/core/workflow/template/system/classifyQuestion/index.ts b/packages/global/core/workflow/template/system/classifyQuestion/index.ts index 8a587fa10b5..7d378fbab51 100644 --- a/packages/global/core/workflow/template/system/classifyQuestion/index.ts +++ b/packages/global/core/workflow/template/system/classifyQuestion/index.ts @@ -25,7 +25,7 @@ export const ClassifyQuestionModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.classifyQuestion, sourceHandle: getHandleConfig(false, false, false, false), targetHandle: getHandleConfig(true, false, true, true), - avatar: '/imgs/workflow/cq.png', + avatar: 'core/workflow/template/questionClassify', name: '问题分类', intro: `根据用户的历史记录和当前问题判断该次提问的类型。可以添加多组问题类型,下面是一个模板例子:\n类型1: 打招呼\n类型2: 关于商品“使用”问题\n类型3: 关于商品“购买”问题\n类型4: 其他问题`, showStatus: true, diff --git a/packages/global/core/workflow/template/system/contextExtract/index.ts b/packages/global/core/workflow/template/system/contextExtract/index.ts index 146fd6740a5..4b6eb42d646 100644 --- a/packages/global/core/workflow/template/system/contextExtract/index.ts +++ b/packages/global/core/workflow/template/system/contextExtract/index.ts @@ -20,7 +20,7 @@ export const ContextExtractModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.contentExtract, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/extract.png', + avatar: 'core/workflow/template/extractJson', name: '文本内容提取', intro: '可从文本中提取指定的数据,例如:sql语句、搜索关键词、代码等', showStatus: true, diff --git a/packages/global/core/workflow/template/system/customFeedback.ts b/packages/global/core/workflow/template/system/customFeedback.ts index cd7374ef649..fb8740c2806 100644 --- a/packages/global/core/workflow/template/system/customFeedback.ts +++ b/packages/global/core/workflow/template/system/customFeedback.ts @@ -13,7 +13,7 @@ export const CustomFeedbackNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.customFeedback, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/customFeedback.svg', + avatar: 'core/workflow/template/customFeedback', name: '自定义反馈', intro: '该模块被触发时,会给当前的对话记录增加一条反馈。可用于自动记录对话效果等。', version: '486', diff --git a/packages/global/core/workflow/template/system/datasetConcat.ts b/packages/global/core/workflow/template/system/datasetConcat.ts index 7355eb48c89..2b608cad3e4 100644 --- a/packages/global/core/workflow/template/system/datasetConcat.ts +++ b/packages/global/core/workflow/template/system/datasetConcat.ts @@ -37,7 +37,7 @@ export const DatasetConcatModule: FlowNodeTemplateType = { templateType: FlowNodeTemplateTypeEnum.other, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/concat.svg', + avatar: 'core/workflow/template/datasetConcat', name: '知识库搜索引用合并', intro: '可以将多个知识库搜索结果进行合并输出。使用 RRF 的合并方式进行最终排序输出。', showStatus: false, diff --git a/packages/global/core/workflow/template/system/datasetSearch.ts b/packages/global/core/workflow/template/system/datasetSearch.ts index caacb90523f..1e4f18a60da 100644 --- a/packages/global/core/workflow/template/system/datasetSearch.ts +++ b/packages/global/core/workflow/template/system/datasetSearch.ts @@ -23,7 +23,7 @@ export const DatasetSearchModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.datasetSearchNode, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/db.png', + avatar: 'core/workflow/template/datasetSearch', name: '知识库搜索', intro: Dataset_SEARCH_DESC, showStatus: true, diff --git a/packages/global/core/workflow/template/system/http468.ts b/packages/global/core/workflow/template/system/http468.ts index 5a980fd8a1b..c7846f7868f 100644 --- a/packages/global/core/workflow/template/system/http468.ts +++ b/packages/global/core/workflow/template/system/http468.ts @@ -20,7 +20,7 @@ export const HttpNode468: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.httpRequest468, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/http.png', + avatar: 'core/workflow/template/httpRequest', name: 'HTTP 请求', intro: '可以发出一个 HTTP 请求,实现更为复杂的操作(联网搜索、数据库查询等)', showStatus: true, diff --git a/packages/global/core/workflow/template/system/ifElse/index.ts b/packages/global/core/workflow/template/system/ifElse/index.ts index 39b7b41202b..1da8dcb3268 100644 --- a/packages/global/core/workflow/template/system/ifElse/index.ts +++ b/packages/global/core/workflow/template/system/ifElse/index.ts @@ -18,7 +18,7 @@ export const IfElseNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.ifElseNode, sourceHandle: getHandleConfig(false, false, false, false), targetHandle: getHandleConfig(true, false, true, true), - avatar: '/imgs/workflow/ifElse.svg', + avatar: 'core/workflow/template/ifelse', name: '判断器', intro: '根据一定的条件,执行不同的分支。', showStatus: true, diff --git a/packages/global/core/workflow/template/system/laf.ts b/packages/global/core/workflow/template/system/laf.ts index 4e05c54bfcb..e5466bc6d2d 100644 --- a/packages/global/core/workflow/template/system/laf.ts +++ b/packages/global/core/workflow/template/system/laf.ts @@ -26,7 +26,7 @@ export const LafModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.lafModule, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/laf.png', + avatar: 'core/workflow/template/lafDispatch', name: 'Laf 函数调用(测试)', intro: '可以调用Laf账号下的云函数。', showStatus: true, diff --git a/packages/global/core/workflow/template/system/pluginInput.ts b/packages/global/core/workflow/template/system/pluginInput.ts index 2a0478ff0d1..27fce9013ea 100644 --- a/packages/global/core/workflow/template/system/pluginInput.ts +++ b/packages/global/core/workflow/template/system/pluginInput.ts @@ -11,7 +11,7 @@ export const PluginInputModule: FlowNodeTemplateType = { targetHandle: getHandleConfig(false, false, false, false), unique: true, forbidDelete: true, - avatar: '/imgs/workflow/input.png', + avatar: 'core/workflow/template/workflowStart', name: '插件输入', intro: '可以配置插件需要哪些输入,利用这些输入来运行插件', showStatus: false, diff --git a/packages/global/core/workflow/template/system/pluginOutput.ts b/packages/global/core/workflow/template/system/pluginOutput.ts index 023a0972a6e..1d2e98bc990 100644 --- a/packages/global/core/workflow/template/system/pluginOutput.ts +++ b/packages/global/core/workflow/template/system/pluginOutput.ts @@ -11,7 +11,7 @@ export const PluginOutputModule: FlowNodeTemplateType = { targetHandle: getHandleConfig(false, false, false, true), unique: true, forbidDelete: true, - avatar: '/imgs/workflow/output.png', + avatar: 'core/workflow/template/pluginOutput', name: '自定义插件输出', intro: '自定义配置外部输出,使用插件时,仅暴露自定义配置的输出', showStatus: false, diff --git a/packages/global/core/workflow/template/system/queryExtension.ts b/packages/global/core/workflow/template/system/queryExtension.ts index 356b1737f4e..6f4358fef4f 100644 --- a/packages/global/core/workflow/template/system/queryExtension.ts +++ b/packages/global/core/workflow/template/system/queryExtension.ts @@ -24,7 +24,7 @@ export const AiQueryExtension: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.queryExtension, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/cfr.svg', + avatar: 'core/workflow/template/queryExtension', name: '问题优化', intro: '使用问题优化功能,可以提高知识库连续对话时搜索的精度。使用该功能后,会先利用 AI 根据上下文构建一个或多个新的检索词,这些检索词更利于进行知识库搜索。该模块已内置在知识库搜索模块中,如果您仅进行一次知识库搜索,可直接使用知识库内置的补全功能。', diff --git a/packages/global/core/workflow/template/system/runApp/index.ts b/packages/global/core/workflow/template/system/runApp/index.ts index ccbfc5c827b..2d30a28ecb5 100644 --- a/packages/global/core/workflow/template/system/runApp/index.ts +++ b/packages/global/core/workflow/template/system/runApp/index.ts @@ -19,7 +19,7 @@ export const RunAppModule: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.runApp, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/app.png', + avatar: 'core/workflow/template/runApp', name: '应用调用', intro: '可以选择一个其他应用进行调用', showStatus: true, diff --git a/packages/global/core/workflow/template/system/sandbox/index.ts b/packages/global/core/workflow/template/system/sandbox/index.ts index 36e2f2867ea..cd8bb00fb4b 100644 --- a/packages/global/core/workflow/template/system/sandbox/index.ts +++ b/packages/global/core/workflow/template/system/sandbox/index.ts @@ -21,7 +21,7 @@ export const CodeNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.code, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/code.svg', + avatar: 'core/workflow/template/codeRun', name: '代码运行', intro: '执行一段简单的脚本代码,通常用于进行复杂的数据处理。', showStatus: true, diff --git a/packages/global/core/workflow/template/system/stopTool.ts b/packages/global/core/workflow/template/system/stopTool.ts index 8499db6bdd9..c930c1419bd 100644 --- a/packages/global/core/workflow/template/system/stopTool.ts +++ b/packages/global/core/workflow/template/system/stopTool.ts @@ -9,7 +9,7 @@ export const StopToolNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.stopTool, sourceHandle: getHandleConfig(false, false, false, false), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/toolStop.svg', + avatar: 'core/workflow/template/stopTool', name: '工具调用终止', intro: '该模块需配置工具调用使用。当该模块被执行时,本次工具调用将会强制结束,并且不再调用AI针对工具调用结果回答问题。', diff --git a/packages/global/core/workflow/template/system/systemConfig.ts b/packages/global/core/workflow/template/system/systemConfig.ts index 31836f3a5f3..b037b8f8b1a 100644 --- a/packages/global/core/workflow/template/system/systemConfig.ts +++ b/packages/global/core/workflow/template/system/systemConfig.ts @@ -9,7 +9,7 @@ export const SystemConfigNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.systemConfig, sourceHandle: getHandleConfig(false, false, false, false), targetHandle: getHandleConfig(false, false, false, false), - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', name: '系统配置', intro: '可以配置应用的系统参数。', unique: true, diff --git a/packages/global/core/workflow/template/system/textEditor.ts b/packages/global/core/workflow/template/system/textEditor.ts index b9f630a7a69..fa157e439b9 100644 --- a/packages/global/core/workflow/template/system/textEditor.ts +++ b/packages/global/core/workflow/template/system/textEditor.ts @@ -19,7 +19,7 @@ export const TextEditorNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.textEditor, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/textEditor.svg', + avatar: 'core/workflow/template/textConcat', name: '文本拼接', intro: '可对固定或传入的文本进行加工后输出,非字符串类型数据最终会转成字符串类型。', version: '486', diff --git a/packages/global/core/workflow/template/system/tools.ts b/packages/global/core/workflow/template/system/tools.ts index c3a043983b9..5ff9f6a4e76 100644 --- a/packages/global/core/workflow/template/system/tools.ts +++ b/packages/global/core/workflow/template/system/tools.ts @@ -26,7 +26,7 @@ export const ToolModule: FlowNodeTemplateType = { templateType: FlowNodeTemplateTypeEnum.ai, sourceHandle: getHandleConfig(true, true, false, true), targetHandle: getHandleConfig(true, true, false, true), - avatar: '/imgs/workflow/tool.svg', + avatar: 'core/workflow/template/toolCall', name: '工具调用', intro: '通过AI模型自动选择一个或多个功能块进行调用,也可以对插件进行调用。', showStatus: true, diff --git a/packages/global/core/workflow/template/system/variableUpdate/index.tsx b/packages/global/core/workflow/template/system/variableUpdate/index.tsx index 1d7e4936090..1ef323cb264 100644 --- a/packages/global/core/workflow/template/system/variableUpdate/index.tsx +++ b/packages/global/core/workflow/template/system/variableUpdate/index.tsx @@ -13,7 +13,7 @@ export const VariableUpdateNode: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.variableUpdate, sourceHandle: getHandleConfig(true, true, true, true), targetHandle: getHandleConfig(true, true, true, true), - avatar: '/imgs/workflow/variable.png', + avatar: 'core/workflow/template/variableUpdate', name: '变量更新', intro: '可以更新指定节点的输出值或更新全局变量', showStatus: false, diff --git a/packages/global/core/workflow/template/system/workflowStart.ts b/packages/global/core/workflow/template/system/workflowStart.ts index 4eaae7f01f8..d07870a734f 100644 --- a/packages/global/core/workflow/template/system/workflowStart.ts +++ b/packages/global/core/workflow/template/system/workflowStart.ts @@ -14,7 +14,7 @@ export const WorkflowStart: FlowNodeTemplateType = { flowNodeType: FlowNodeTypeEnum.workflowStart, sourceHandle: getHandleConfig(false, true, false, false), targetHandle: getHandleConfig(false, false, false, false), - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', name: '流程开始', intro: '', forbidDelete: true, diff --git a/packages/plugins/src/duckduckgo/search/template.json b/packages/plugins/src/duckduckgo/search/template.json index e4321529aa8..35b283cd7d1 100644 --- a/packages/plugins/src/duckduckgo/search/template.json +++ b/packages/plugins/src/duckduckgo/search/template.json @@ -2,7 +2,7 @@ "author": "FastGPT", "version": "486", "name": "DuckDuckGo 网络搜索", - "avatar": "/imgs/workflow/textEditor.svg", + "avatar": "core/workflow/template/duckduckgo", "intro": "使用 DuckDuckGo 进行网络搜索", "showStatus": true, "weight": 10, diff --git a/packages/plugins/src/duckduckgo/searchImg/template.json b/packages/plugins/src/duckduckgo/searchImg/template.json index 58beae5ab7b..28b3e0cc166 100644 --- a/packages/plugins/src/duckduckgo/searchImg/template.json +++ b/packages/plugins/src/duckduckgo/searchImg/template.json @@ -2,7 +2,7 @@ "author": "FastGPT", "version": "486", "name": "DuckDuckGo 图片搜索", - "avatar": "/imgs/workflow/textEditor.svg", + "avatar": "core/workflow/template/duckduckgo", "intro": "使用 DuckDuckGo 进行图片搜索", "showStatus": true, "weight": 10, diff --git a/packages/plugins/src/duckduckgo/searchNews/template.json b/packages/plugins/src/duckduckgo/searchNews/template.json index 5e1184d8ff6..a1b85975905 100644 --- a/packages/plugins/src/duckduckgo/searchNews/template.json +++ b/packages/plugins/src/duckduckgo/searchNews/template.json @@ -2,7 +2,7 @@ "author": "FastGPT", "version": "486", "name": "DuckDuckGo 新闻检索", - "avatar": "/imgs/workflow/textEditor.svg", + "avatar": "core/workflow/template/duckduckgo", "intro": "使用 DuckDuckGo 进行新闻检索", "showStatus": true, "weight": 10, diff --git a/packages/plugins/src/duckduckgo/searchVideo/template.json b/packages/plugins/src/duckduckgo/searchVideo/template.json index cc39c111f0f..9ab2181e36a 100644 --- a/packages/plugins/src/duckduckgo/searchVideo/template.json +++ b/packages/plugins/src/duckduckgo/searchVideo/template.json @@ -2,7 +2,7 @@ "author": "FastGPT", "version": "486", "name": "DuckDuckGo 视频搜索", - "avatar": "/imgs/workflow/textEditor.svg", + "avatar": "core/workflow/template/duckduckgo", "intro": "使用 DuckDuckGo 进行视频搜索", "showStatus": true, "weight": 10, diff --git a/packages/plugins/src/duckduckgo/template.json b/packages/plugins/src/duckduckgo/template.json index e613168a0e3..0e70509a0d9 100644 --- a/packages/plugins/src/duckduckgo/template.json +++ b/packages/plugins/src/duckduckgo/template.json @@ -1,14 +1,14 @@ { "author": "FastGPT", "version": "486", - "name": "DuckDuckGo", - "avatar": "/imgs/workflow/textEditor.svg", + "name": "DuckDuckGo服务", + "avatar": "core/workflow/template/duckduckgo", "intro": "DuckDuckGo 服务", "showStatus": false, "weight": 10, "isTool": true, - "templateType": "search", + "templateType": "tools", "workflow": { "nodes": [], diff --git a/packages/plugins/src/fetchUrl/template.json b/packages/plugins/src/fetchUrl/template.json index b0798c1c932..5f8b359c1bf 100644 --- a/packages/plugins/src/fetchUrl/template.json +++ b/packages/plugins/src/fetchUrl/template.json @@ -2,7 +2,7 @@ "author": "FastGPT", "version": "486", "name": "网页内容抓取", - "avatar": "/imgs/workflow/fetchUrl.png", + "avatar": "core/workflow/template/fetchUrl", "intro": "可获取一个网页链接内容,并以 Markdown 格式输出,仅支持获取静态网站。", "showStatus": true, "weight": 10, diff --git a/packages/plugins/src/getTime/template.json b/packages/plugins/src/getTime/template.json index f402d875939..6f87f66f9cf 100644 --- a/packages/plugins/src/getTime/template.json +++ b/packages/plugins/src/getTime/template.json @@ -3,7 +3,7 @@ "version": "481", "templateType": "tools", "name": "获取当前时间", - "avatar": "/imgs/workflow/getCurrentTime.png", + "avatar": "core/workflow/template/getTime", "intro": "获取用户当前时区的时间。", "showStatus": false, "isTool": true, diff --git a/packages/plugins/src/mathExprVal/template.json b/packages/plugins/src/mathExprVal/template.json index dbcc0bff8e5..5cc829301a4 100644 --- a/packages/plugins/src/mathExprVal/template.json +++ b/packages/plugins/src/mathExprVal/template.json @@ -2,7 +2,7 @@ "author": "FastGPT", "version": "486", "name": "数学公式执行", - "avatar": "/imgs/workflow/mathExprEval.png", + "avatar": "core/workflow/template/mathCall", "intro": "用于执行数学表达式的工具,通过 js 的 expr-eval 库运行表达式并返回结果。", "showStatus": false, "weight": 10, diff --git a/packages/web/components/common/Avatar/index.tsx b/packages/web/components/common/Avatar/index.tsx index 3c802866b1c..4546d6d6a89 100644 --- a/packages/web/components/common/Avatar/index.tsx +++ b/packages/web/components/common/Avatar/index.tsx @@ -10,7 +10,7 @@ const Avatar = ({ w = '30px', src, ...props }: ImageProps) => { const isIcon = !!iconPaths[src as any]; return isIcon ? ( - + ) : ( import('./icons/core/workflow/runSkip.svg'), 'core/workflow/runSuccess': () => import('./icons/core/workflow/runSuccess.svg'), 'core/workflow/running': () => import('./icons/core/workflow/running.svg'), + 'core/workflow/template/FileRead': () => import('./icons/core/workflow/template/FileRead.svg'), + 'core/workflow/template/aiChat': () => import('./icons/core/workflow/template/aiChat.svg'), + 'core/workflow/template/codeRun': () => import('./icons/core/workflow/template/codeRun.svg'), + 'core/workflow/template/customFeedback': () => + import('./icons/core/workflow/template/customFeedback.svg'), + 'core/workflow/template/datasetConcat': () => + import('./icons/core/workflow/template/datasetConcat.svg'), + 'core/workflow/template/datasetSearch': () => + import('./icons/core/workflow/template/datasetSearch.svg'), + 'core/workflow/template/duckduckgo': () => + import('./icons/core/workflow/template/duckduckgo.svg'), + 'core/workflow/template/extractJson': () => + import('./icons/core/workflow/template/extractJson.svg'), + 'core/workflow/template/fetchUrl': () => import('./icons/core/workflow/template/fetchUrl.svg'), + 'core/workflow/template/getTime': () => import('./icons/core/workflow/template/getTime.svg'), + 'core/workflow/template/httpRequest': () => + import('./icons/core/workflow/template/httpRequest.svg'), + 'core/workflow/template/ifelse': () => import('./icons/core/workflow/template/ifelse.svg'), + 'core/workflow/template/lafDispatch': () => + import('./icons/core/workflow/template/lafDispatch.svg'), + 'core/workflow/template/mathCall': () => import('./icons/core/workflow/template/mathCall.svg'), + 'core/workflow/template/pluginOutput': () => + import('./icons/core/workflow/template/pluginOutput.svg'), + 'core/workflow/template/queryExtension': () => + import('./icons/core/workflow/template/queryExtension.svg'), + 'core/workflow/template/questionClassify': () => + import('./icons/core/workflow/template/questionClassify.svg'), + 'core/workflow/template/reply': () => import('./icons/core/workflow/template/reply.svg'), + 'core/workflow/template/runApp': () => import('./icons/core/workflow/template/runApp.svg'), + 'core/workflow/template/stopTool': () => import('./icons/core/workflow/template/stopTool.svg'), + 'core/workflow/template/systemConfig': () => + import('./icons/core/workflow/template/systemConfig.svg'), + 'core/workflow/template/textConcat': () => + import('./icons/core/workflow/template/textConcat.svg'), + 'core/workflow/template/toolCall': () => import('./icons/core/workflow/template/toolCall.svg'), + 'core/workflow/template/variableUpdate': () => + import('./icons/core/workflow/template/variableUpdate.svg'), + 'core/workflow/template/workflowStart': () => + import('./icons/core/workflow/template/workflowStart.svg'), 'core/workflow/versionHistories': () => import('./icons/core/workflow/versionHistories.svg'), date: () => import('./icons/date.svg'), delete: () => import('./icons/delete.svg'), diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/FileRead.svg b/packages/web/components/common/Icon/icons/core/workflow/template/FileRead.svg new file mode 100644 index 00000000000..966b1aa54cb --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/FileRead.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/aiChat.svg b/packages/web/components/common/Icon/icons/core/workflow/template/aiChat.svg new file mode 100644 index 00000000000..c852f45d7fc --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/aiChat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/codeRun.svg b/packages/web/components/common/Icon/icons/core/workflow/template/codeRun.svg new file mode 100644 index 00000000000..b6e9779bc6d --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/codeRun.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/customFeedback.svg b/packages/web/components/common/Icon/icons/core/workflow/template/customFeedback.svg new file mode 100644 index 00000000000..517b88e19f9 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/customFeedback.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/datasetConcat.svg b/packages/web/components/common/Icon/icons/core/workflow/template/datasetConcat.svg new file mode 100644 index 00000000000..680d1e2cb3e --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/datasetConcat.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/datasetSearch.svg b/packages/web/components/common/Icon/icons/core/workflow/template/datasetSearch.svg new file mode 100644 index 00000000000..7127308b473 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/datasetSearch.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/duckduckgo.svg b/packages/web/components/common/Icon/icons/core/workflow/template/duckduckgo.svg new file mode 100644 index 00000000000..3ab30101c21 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/duckduckgo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/extractJson.svg b/packages/web/components/common/Icon/icons/core/workflow/template/extractJson.svg new file mode 100644 index 00000000000..63426bbe8e8 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/extractJson.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/fetchUrl.svg b/packages/web/components/common/Icon/icons/core/workflow/template/fetchUrl.svg new file mode 100644 index 00000000000..d91c05df081 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/fetchUrl.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/getTime.svg b/packages/web/components/common/Icon/icons/core/workflow/template/getTime.svg new file mode 100644 index 00000000000..3a70e9f49a8 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/getTime.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/httpRequest.svg b/packages/web/components/common/Icon/icons/core/workflow/template/httpRequest.svg new file mode 100644 index 00000000000..ac7b79fd872 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/httpRequest.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/ifelse.svg b/packages/web/components/common/Icon/icons/core/workflow/template/ifelse.svg new file mode 100644 index 00000000000..f6a8dae00ca --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/ifelse.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/lafDispatch.svg b/packages/web/components/common/Icon/icons/core/workflow/template/lafDispatch.svg new file mode 100644 index 00000000000..89a94778e05 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/lafDispatch.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/mathCall.svg b/packages/web/components/common/Icon/icons/core/workflow/template/mathCall.svg new file mode 100644 index 00000000000..e389218b4c1 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/mathCall.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/pluginOutput.svg b/packages/web/components/common/Icon/icons/core/workflow/template/pluginOutput.svg new file mode 100644 index 00000000000..a5b9ca0b7b5 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/pluginOutput.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/queryExtension.svg b/packages/web/components/common/Icon/icons/core/workflow/template/queryExtension.svg new file mode 100644 index 00000000000..691161c3b12 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/queryExtension.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/questionClassify.svg b/packages/web/components/common/Icon/icons/core/workflow/template/questionClassify.svg new file mode 100644 index 00000000000..7e817735b19 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/questionClassify.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/reply.svg b/packages/web/components/common/Icon/icons/core/workflow/template/reply.svg new file mode 100644 index 00000000000..142bc9f5108 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/reply.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/runApp.svg b/packages/web/components/common/Icon/icons/core/workflow/template/runApp.svg new file mode 100644 index 00000000000..1f3b1ad5e41 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/runApp.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/stopTool.svg b/packages/web/components/common/Icon/icons/core/workflow/template/stopTool.svg new file mode 100644 index 00000000000..216381e4350 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/stopTool.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/systemConfig.svg b/packages/web/components/common/Icon/icons/core/workflow/template/systemConfig.svg new file mode 100644 index 00000000000..b1f010d9f59 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/systemConfig.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/textConcat.svg b/packages/web/components/common/Icon/icons/core/workflow/template/textConcat.svg new file mode 100644 index 00000000000..3b44b470d78 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/textConcat.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/toolCall.svg b/packages/web/components/common/Icon/icons/core/workflow/template/toolCall.svg new file mode 100644 index 00000000000..575bb2b5de9 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/toolCall.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/variableUpdate.svg b/packages/web/components/common/Icon/icons/core/workflow/template/variableUpdate.svg new file mode 100644 index 00000000000..9fed569cfe7 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/variableUpdate.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/web/components/common/Icon/icons/core/workflow/template/workflowStart.svg b/packages/web/components/common/Icon/icons/core/workflow/template/workflowStart.svg new file mode 100644 index 00000000000..4cd6718fe84 --- /dev/null +++ b/packages/web/components/common/Icon/icons/core/workflow/template/workflowStart.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/web/components/common/MyModal/index.tsx b/packages/web/components/common/MyModal/index.tsx index 3f707575ba7..b38b440148e 100644 --- a/packages/web/components/common/MyModal/index.tsx +++ b/packages/web/components/common/MyModal/index.tsx @@ -12,6 +12,7 @@ import { import MyIcon from '../Icon'; import MyBox from '../MyBox'; import { useSystem } from '../../../hooks/useSystem'; +import Avatar from '../Avatar'; export interface MyModalProps extends ModalContentProps { iconSrc?: string; @@ -68,14 +69,18 @@ const MyModal = ({ > {iconSrc && ( <> - {iconSrc.startsWith('/') ? ( - - ) : ( - - )} + )} - {title} + + {title} + {onClose && ( diff --git a/packages/web/components/common/Tabs/LightRowTabs.tsx b/packages/web/components/common/Tabs/LightRowTabs.tsx index 110dc128e7a..069d290dc67 100644 --- a/packages/web/components/common/Tabs/LightRowTabs.tsx +++ b/packages/web/components/common/Tabs/LightRowTabs.tsx @@ -2,7 +2,7 @@ import React, { useMemo } from 'react'; import { Box, Flex, Grid, Image } from '@chakra-ui/react'; import type { FlexProps, GridProps } from '@chakra-ui/react'; import { useTranslation } from 'next-i18next'; -import MyIcon from '../Icon'; +import Avatar from '../Avatar'; type Props = Omit & { list: { icon?: string; label: string | React.ReactNode; value: ValueType }[]; @@ -81,14 +81,10 @@ const LightRowTabs = ({ > {item.icon && ( <> - {item.icon.startsWith('/') ? ( - {''} - ) : ( - - )} + )} - {typeof item.label === 'string' ? t(item.label as any) : item.label} + {typeof item.label === 'string' ? t(item.label as any) : item.label} ))} diff --git a/packages/web/i18n/en/app.json b/packages/web/i18n/en/app.json index 7e6b0dfac82..b17c41ec84f 100644 --- a/packages/web/i18n/en/app.json +++ b/packages/web/i18n/en/app.json @@ -40,9 +40,9 @@ "My Apps": "My Apps", "Output Field Settings": "Output Field Settings", "Paste Config": "Paste Config", + "Plugin cost per times": "{{cost}}/per time", "Plugin dispatch": "Plugins", "Plugin dispatch tip": "It is up to the model to decide which plug-ins to add additional capabilities to. If the plug-in is selected, the knowledge base call is also treated as a special plug-in.", - "Plugin cost per times": "{{cost}}/per time", "Publish channel": "Publish channel", "Publish success": "Publish success", "Run": "Run", @@ -61,6 +61,9 @@ "has new version": "has new version" } }, + "common": { + "Plugin cost per times": "{{cost}} points/times" + }, "module": { "Combine Modules": "Combine Modules", "Confirm Sync": "The template will be updated to the latest template configuration. Fields that do not exist in the template will be deleted (including all custom fields). You are advised to make a copy of the node and then update the original node version.", diff --git a/packages/web/i18n/zh/app.json b/packages/web/i18n/zh/app.json index 1684701d14b..09f00921990 100644 --- a/packages/web/i18n/zh/app.json +++ b/packages/web/i18n/zh/app.json @@ -39,9 +39,9 @@ "My Apps": "我的应用", "Output Field Settings": "输出字段编辑", "Paste Config": "粘贴配置", + "Plugin cost per times": "{{cost}}/次", "Plugin dispatch": "插件调用", "Plugin dispatch tip": "给模型附加额外的能力,具体调用哪些插件,将由模型自主决定。\n若选择了插件,知识库调用将自动作为一个特殊的插件。", - "Plugin cost per times": "{{cost}}/次", "Publish channel": "发布渠道", "Publish success": "发布成功", "Run": "运行", @@ -60,6 +60,9 @@ "has new version": "有新版本" } }, + "common": { + "Plugin cost per times": "{{cost}}积分/次" + }, "module": { "Combine Modules": "组合模块", "Confirm Sync": "将会更新至最新的模板配置,不存在模板中的字段将会被删除(包括所有自定义字段),建议您先复制一份节点,再更新原来节点的版本。", diff --git a/projects/app/public/imgs/app/inputGuide-icon.svg b/projects/app/public/imgs/app/inputGuide-icon.svg index beeb3727699..d9929dcac94 100644 --- a/projects/app/public/imgs/app/inputGuide-icon.svg +++ b/projects/app/public/imgs/app/inputGuide-icon.svg @@ -1,4 +1,4 @@ - + diff --git a/projects/app/public/imgs/app/nextQuestion-icon.svg b/projects/app/public/imgs/app/nextQuestion-icon.svg index 846196f9fe7..8a921eafe14 100644 --- a/projects/app/public/imgs/app/nextQuestion-icon.svg +++ b/projects/app/public/imgs/app/nextQuestion-icon.svg @@ -1,4 +1,4 @@ - + diff --git a/projects/app/public/imgs/app/welcome-icon.svg b/projects/app/public/imgs/app/welcome-icon.svg index b8fbf3f031d..cfc1a0838b3 100644 --- a/projects/app/public/imgs/app/welcome-icon.svg +++ b/projects/app/public/imgs/app/welcome-icon.svg @@ -1,4 +1,4 @@ - + diff --git a/projects/app/public/imgs/workflow/fetchUrl.png b/projects/app/public/imgs/workflow/fetchUrl.png deleted file mode 100644 index 43a6c3519e51a86f99c0cbebf56f22b9f8da096e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9352 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 + 🌐 diff --git a/projects/app/public/imgs/workflow/getCurrentTime.png b/projects/app/public/imgs/workflow/getCurrentTime.png deleted file mode 100644 index 5bd2970cda0ef97922250a0f708a8cb0916f6902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9634 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 + diff --git a/projects/app/public/imgs/workflow/mathExprEval.png b/projects/app/public/imgs/workflow/mathExprEval.png deleted file mode 100644 index bde2b1b477b2f5d8f976cddcfc17fd3595a1d9a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1227 zcmeAS@N?(olHy`uVBq!ia0vp^IUvlz1|<8_!p{OJ&H|6fVg?393lL^>oo1K-6l5$8 za(7}_cTVOdki(Mh=z!>pDN z(Ed5!XolnM`gKA7cY4RRR7yW~D>}2}=)X?eEZyDOrVon5Jm)Q6)^AXpb?3~xrze@4 z|L%UIw&t+u{+kUlORgNBAt#b|Jz?$t*uB>dPAUGu6eN}WA=mua7W+zJge44h#7A{Ii5$Wk^niyzc#O3C8@PvlMOo^5?Zyz1M`ToQ2wLf!WBNWd) z+}p|j@#OOP%3VM9#c4LP&OOH_XA|KXsK))~fLFTL@?td8E}TSpKzR}#nKqo*<@{+yw zzx27;uDg1DlXi$bUc3GD?!?{D3R zI36e%$1gSIca-0AxQ9^Pwe(y`&kyfkTQfw?+<&(@cE=ZMBcmpxsZ~dRzHe1~w4*Gf zD)o?2^OG~y8r{=4CS0_H2Tohj)BGI;73B~8*R1&y{^L`kL{jhmDyH;v^FAxv-2Jvt zfGWwrrP^w&3BuY=A%hZ_`7^Lx-BmQ)BcJ!u_d2!#673%NeikE&EN|vJ$pe*`dWG8 z>j_?;t*`q0E1bN4f+SxzuZQT;<;Q)6%&PR~tUZ`M!Ru4?)i2k|^dpSYo=tdP79@Ku z>DiSXGw=TT+qY8Fx<&slJMZV!%15KFElGFZ@MK2j?}d+#-xPkjVd=i3OH~Z5(-zH} z`G?o}_y-q_TZvg|8*93k%fGOWp6@DsX!ixnwIvVdq=x@K&c(KFNe(dM?RzC+^29zP zQ)1=w=KZm6D_>^Iy<2r(=RJGx9)?em%U<7hZ(^Po?_>5|BKgw)quu9z?mhRzyxl6r t;IV$H + diff --git a/projects/app/src/components/core/chat/components/AIResponseBox.tsx b/projects/app/src/components/core/chat/components/AIResponseBox.tsx index cc5bbb9ec60..770f202545d 100644 --- a/projects/app/src/components/core/chat/components/AIResponseBox.tsx +++ b/projects/app/src/components/core/chat/components/AIResponseBox.tsx @@ -81,12 +81,14 @@ ${JSON.stringify(questionGuides)}`; borderWidth={'1px'} borderColor={'myGray.200'} boxShadow={'1'} + pl={3} + pr={2.5} _hover={{ bg: 'auto' }} > - - + + {tool.toolName} {isChatting && !tool.response && } diff --git a/projects/app/src/components/core/chat/components/WholeResponseModal.tsx b/projects/app/src/components/core/chat/components/WholeResponseModal.tsx index dfdac7e665e..62e8ba00a53 100644 --- a/projects/app/src/components/core/chat/components/WholeResponseModal.tsx +++ b/projects/app/src/components/core/chat/components/WholeResponseModal.tsx @@ -12,6 +12,7 @@ import { DatasetSearchModeMap } from '@fastgpt/global/core/dataset/constants'; import { formatNumber } from '@fastgpt/global/common/math/tools'; import { useI18n } from '@/web/context/I18n'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; +import Avatar from '@fastgpt/web/components/common/Avatar'; function RowRender({ children, @@ -125,18 +126,18 @@ export const ResponseBox = React.memo(function ResponseBox({ () => response.map((item, i) => ({ label: ( - - + item.moduleType === template.flowNodeType) ?.avatar } alt={''} - w={['14px', '16px']} + w={'1.25rem'} + borderRadius={'sm'} /> - {t(item.moduleName as any)} + {t(item.moduleName as any)} ), value: `${i}` @@ -334,7 +335,9 @@ export const ResponseBox = React.memo(function ResponseBox({ + + + } /> )} @@ -350,7 +353,11 @@ export const ResponseBox = React.memo(function ResponseBox({ {activeModule?.toolDetail && activeModule?.toolDetail.length > 0 && ( } + rawDom={ + + + + } /> )} diff --git a/projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx b/projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx index 6dc1905ce26..fd2205e64b3 100644 --- a/projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx +++ b/projects/app/src/pages/app/detail/components/SimpleApp/EditForm.tsx @@ -242,8 +242,15 @@ const EditForm = ({ }) } > - - + + {item.name} @@ -292,8 +299,15 @@ const EditForm = ({ borderColor: 'primary.300' }} > - - + + {item.name} - {item.avatar?.startsWith('/') ? ( - - ) : ( - - )} - + + {t(item.name as any)} - {t(item.intro as any) || t('core.workflow.Not intro')} + {t(item.intro as any) || t('common:core.workflow.Not intro')} {showCost && ( <> - {t('core.plugin.cost')} + {t('common:core.plugin.cost')} {item.currentCost && item.currentCost > 0 - ? appT('Plugin cost per times', { cost: item.currentCost }) - : t('core.plugin.Free')} + ? t('app:Plugin cost per times', { cost: item.currentCost }) + : t('common:core.plugin.Free')} @@ -262,17 +263,9 @@ const RenderList = React.memo(function RenderList({ bg: 'myGray.50' }} > - {item.avatar?.startsWith('/') ? ( - - ) : ( - - )} - + + + {t(item.name as any)} {showCost && ( @@ -287,11 +280,11 @@ const RenderList = React.memo(function RenderList({ leftIcon={} onClick={() => onRemoveTool(item)} > - {t('common.Remove')} + {t('common:common.Remove')} ) : item.isFolder ? ( ) : ( )} diff --git a/projects/app/src/pages/app/detail/components/Workflow/Header.tsx b/projects/app/src/pages/app/detail/components/Workflow/Header.tsx index e1d9b6ff989..af3e1db6381 100644 --- a/projects/app/src/pages/app/detail/components/Workflow/Header.tsx +++ b/projects/app/src/pages/app/detail/components/Workflow/Header.tsx @@ -10,7 +10,6 @@ import { WorkflowContext, getWorkflowStore } from '../WorkflowComponents/context import { useInterval } from 'ahooks'; import { AppContext, TabEnum } from '../context'; import RouteTab from '../RouteTab'; -import { useSystemStore } from '@/web/common/system/useSystemStore'; import PopoverConfirm from '@fastgpt/web/components/common/MyPopover/PopoverConfirm'; import { useRouter } from 'next/router'; diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/NodeTemplatesModal.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/NodeTemplatesModal.tsx index 7761eb4ed66..3e08934d1d3 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/NodeTemplatesModal.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/NodeTemplatesModal.tsx @@ -300,7 +300,6 @@ const RenderList = React.memo(function RenderList({ const { isPc } = useSystem(); const isSystemPlugin = type === TemplateTypeEnum.systemPlugin; - const avatarSize = type === TemplateTypeEnum.teamPlugin ? '1.75rem' : '2.25rem'; const { x, y, zoom } = useViewport(); const { setLoading } = useSystemStore(); @@ -405,7 +404,7 @@ const RenderList = React.memo(function RenderList({ > {item.label && formatTemplates.length > 1 && ( - + {t(item.label as any)} @@ -419,17 +418,13 @@ const RenderList = React.memo(function RenderList({ label={ - {template.avatar?.startsWith('/') ? ( - - ) : ( - - )} - + + {t(template.name as any)} @@ -440,11 +435,13 @@ const RenderList = React.memo(function RenderList({ <> - {t('core.plugin.cost')} + {t('common:core.plugin.cost')} {template.currentCost && template.currentCost > 0 - ? appT('Plugin cost per times', { cost: template.currentCost }) - : t('core.plugin.Free')} + ? t('app:Plugin cost per times', { + cost: template.currentCost + }) + : t('common:core.plugin.Free')} @@ -484,17 +481,19 @@ const RenderList = React.memo(function RenderList({ onClose(); }} > - {template.avatar?.startsWith('/') ? ( - - ) : ( - - )} - + + {t(template.name as any)} {template.author && ( @@ -513,7 +512,6 @@ const RenderList = React.memo(function RenderList({ ); }, [ appT, - avatarSize, formatTemplates, isPc, isSystemPlugin, diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx index 55f15029ea0..4ab4853db0e 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/NodeCard.tsx @@ -137,7 +137,7 @@ const NodeCard = (props: Props) => { {/* avatar and name */} - + {t(name as any)} diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx index 7d06d938f00..5ae2f304454 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/Reference.tsx @@ -120,8 +120,8 @@ export const useReference = ({ return { label: ( - - {t(node.name as any)} + + {t(node.name as any)} ), value: node.nodeId, diff --git a/projects/app/src/pages/app/list/components/CreateModal.tsx b/projects/app/src/pages/app/list/components/CreateModal.tsx index ee18e0db65c..eb74fb5a587 100644 --- a/projects/app/src/pages/app/list/components/CreateModal.tsx +++ b/projects/app/src/pages/app/list/components/CreateModal.tsx @@ -195,7 +195,7 @@ const CreateModal = ({ onClose, type }: { type: CreateAppType; onClose: () => vo }} > - + {t(item.name as any)} diff --git a/projects/app/src/web/core/app/templates.ts b/projects/app/src/web/core/app/templates.ts index a8d58af78d5..cfec8b621d3 100644 --- a/projects/app/src/web/core/app/templates.ts +++ b/projects/app/src/web/core/app/templates.ts @@ -22,7 +22,7 @@ type TemplateType = (AppItemType & { export const simpleBotTemplates: TemplateType = [ { id: 'simpleChat', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', name: '简易机器人', intro: '一个极其简单的 AI 应用,你可以绑定知识库或工具。', type: AppTypeEnum.simple, @@ -31,7 +31,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: FlowNodeTypeEnum.systemConfig, position: { x: 531.2422736065552, @@ -94,7 +94,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: '448745', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: FlowNodeTypeEnum.workflowStart, position: { x: 558.4082376415505, @@ -125,7 +125,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'loOvhld2ZTKa', name: 'AI 对话', intro: 'AI 大模型对话', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', flowNodeType: FlowNodeTypeEnum.chatNode, showStatus: true, position: { @@ -252,7 +252,7 @@ export const simpleBotTemplates: TemplateType = [ }, { id: 'chatGuide', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', name: '对话引导 + 变量', intro: '可以在对话开始发送一段提示,或者让用户填写一些内容,作为本次对话的变量', type: AppTypeEnum.simple, @@ -261,7 +261,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: FlowNodeTypeEnum.systemConfig, position: { x: 496.57560693988853, @@ -341,7 +341,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: '448745', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: FlowNodeTypeEnum.workflowStart, position: { x: 558.4082376415505, @@ -372,7 +372,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'loOvhld2ZTKa', name: 'AI 对话', intro: 'AI 大模型对话', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', flowNodeType: FlowNodeTypeEnum.chatNode, showStatus: true, position: { @@ -499,7 +499,7 @@ export const simpleBotTemplates: TemplateType = [ }, { id: 'simpleDatasetChat', - avatar: '/imgs/workflow/db.png', + avatar: 'core/workflow/template/datasetSearch', name: '知识库+对话引导', intro: '每次提问时进行一次知识库搜索,将搜索结果注入 LLM 模型进行参考回答', type: AppTypeEnum.simple, @@ -508,7 +508,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: FlowNodeTypeEnum.systemConfig, position: { x: 531.2422736065552, @@ -571,7 +571,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'workflowStartNodeId', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: FlowNodeTypeEnum.workflowStart, position: { x: 558.4082376415505, @@ -602,7 +602,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: '7BdojPlukIQw', name: 'AI 对话', intro: 'AI 大模型对话', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', flowNodeType: FlowNodeTypeEnum.chatNode, showStatus: true, position: { @@ -722,7 +722,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'iKBoX2vIzETU', name: '知识库搜索', intro: '调用“语义检索”和“全文检索”能力,从“知识库”中查找可能与问题相关的参考内容', - avatar: '/imgs/workflow/db.png', + avatar: 'core/workflow/template/datasetSearch', flowNodeType: FlowNodeTypeEnum.datasetSearchNode, showStatus: true, position: { @@ -827,7 +827,7 @@ export const simpleBotTemplates: TemplateType = [ }, { id: 'toolChat', - avatar: '/imgs/workflow/history.png', + avatar: 'core/workflow/template/getTime', name: '知道时间的机器人', intro: '通过挂载时间插件,让模型获取当前最新时间', type: AppTypeEnum.simple, @@ -836,7 +836,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: FlowNodeTypeEnum.systemConfig, position: { x: 531.2422736065552, @@ -850,7 +850,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'workflowStartNodeId', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: FlowNodeTypeEnum.workflowStart, position: { x: 558.4082376415505, @@ -881,7 +881,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'jrWPV9', name: '工具调用', intro: '通过AI模型自动选择一个或多个功能块进行调用,也可以对插件进行调用。', - avatar: '/imgs/workflow/tool.svg', + avatar: 'core/workflow/template/toolCall', flowNodeType: FlowNodeTypeEnum.tools, showStatus: true, position: { @@ -963,7 +963,7 @@ export const simpleBotTemplates: TemplateType = [ nodeId: 'zBxjo5', name: '获取当前时间', intro: '获取用户当前时区的时间。', - avatar: '/imgs/workflow/getCurrentTime.svg', + avatar: 'core/workflow/template/getTime', flowNodeType: 'pluginModule', showStatus: false, position: { @@ -1021,7 +1021,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: 'userGuide', position: { x: 531.2422736065552, @@ -1084,7 +1084,7 @@ export const workflowTemplates: TemplateType = [ nodeId: '448745', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: 'workflowStart', position: { x: 558.4082376415505, @@ -1115,7 +1115,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'loOvhld2ZTKa', name: '第一轮翻译', intro: 'AI 大模型对话', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', flowNodeType: 'chatNode', showStatus: true, position: { @@ -1235,7 +1235,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'w0oBbQ3YJHye', name: '代码运行', intro: '执行一段简单的脚本代码,通常用于进行复杂的数据处理。', - avatar: '/imgs/workflow/code.svg', + avatar: 'core/workflow/template/codeRun', flowNodeType: 'code', showStatus: true, position: { @@ -1348,7 +1348,7 @@ export const workflowTemplates: TemplateType = [ name: '指定回复', intro: '该模块可以直接回复一段指定的内容。常用于引导、提示。非字符串内容传入时,会转成字符串进行输出。', - avatar: '/imgs/workflow/reply.png', + avatar: 'core/workflow/template/reply', flowNodeType: 'answerNode', position: { x: 3798.4479531204515, @@ -1374,7 +1374,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'gBDvemE4FBhp', name: '文本拼接', intro: '可对固定或传入的文本进行加工后输出,非字符串类型数据最终会转成字符串类型。', - avatar: '/imgs/workflow/textEditor.svg', + avatar: 'core/workflow/template/textConcat', flowNodeType: 'textEditor', position: { x: 1031.371061396644, @@ -1463,7 +1463,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'bcqtxqxE2R6o', name: '合并输出结果', intro: '可对固定或传入的文本进行加工后输出,非字符串类型数据最终会转成字符串类型。', - avatar: '/imgs/workflow/textEditor.svg', + avatar: 'core/workflow/template/textConcat', flowNodeType: 'textEditor', position: { x: 3113.6227559936665, @@ -1593,7 +1593,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: 'userGuide', position: { x: 262.2732338817093, @@ -1656,7 +1656,7 @@ export const workflowTemplates: TemplateType = [ nodeId: '448745', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: 'workflowStart', position: { x: 295.8944548701009, @@ -1687,7 +1687,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'NOgbnBzUwDgT', name: '工具调用', intro: '通过AI模型自动选择一个或多个功能块进行调用,也可以对插件进行调用。', - avatar: '/imgs/workflow/tool.svg', + avatar: 'core/workflow/template/toolCall', flowNodeType: 'tools', showStatus: true, position: { @@ -1769,7 +1769,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'GMELVPxHfpg5', name: 'HTTP 请求', intro: '调用谷歌搜索,查询相关内容', - avatar: '/imgs/workflow/http.png', + avatar: 'core/workflow/template/httpRequest', flowNodeType: 'httpRequest468', showStatus: true, position: { @@ -1914,7 +1914,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'poIbrrA8aiR0', name: '代码运行', intro: '执行一段简单的脚本代码,通常用于进行复杂的数据处理。', - avatar: '/imgs/workflow/code.svg', + avatar: 'core/workflow/template/codeRun', flowNodeType: 'code', showStatus: true, position: { @@ -2032,7 +2032,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: 'userGuide', position: { x: 531.2422736065552, @@ -2095,7 +2095,7 @@ export const workflowTemplates: TemplateType = [ nodeId: '448745', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: 'workflowStart', position: { x: 532.1275542407774, @@ -2126,7 +2126,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'tMyUnRL5jIrC', name: 'HTTP 请求', intro: '可以发出一个 HTTP 请求,实现更为复杂的操作(联网搜索、数据库查询等)', - avatar: '/imgs/workflow/http.png', + avatar: 'core/workflow/template/httpRequest', flowNodeType: 'httpRequest468', showStatus: true, position: { @@ -2291,7 +2291,7 @@ export const workflowTemplates: TemplateType = [ name: '指定回复', intro: '该模块可以直接回复一段指定的内容。常用于引导、提示。非字符串内容传入时,会转成字符串进行输出。', - avatar: '/imgs/workflow/reply.png', + avatar: 'core/workflow/template/reply', flowNodeType: 'answerNode', position: { x: 2204.4609372615846, @@ -2317,7 +2317,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'vEXJF8pQ8eOv', name: '文本拼接', intro: '可对固定或传入的文本进行加工后输出,非字符串类型数据最终会转成字符串类型。', - avatar: '/imgs/workflow/textEditor.svg', + avatar: 'core/workflow/template/textConcat', flowNodeType: 'textEditor', position: { x: 1544.8821308368042, @@ -2426,7 +2426,7 @@ export const workflowTemplates: TemplateType = [ }, { id: 'CQ', - avatar: '/imgs/workflow/cq.png', + avatar: 'core/workflow/template/questionClassify', name: '问题分类 + 知识库', intro: '先对用户的问题进行分类,再根据不同类型问题,执行不同的操作', type: AppTypeEnum.workflow, @@ -2435,7 +2435,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'userGuide', name: '系统配置', intro: '可以配置应用的系统参数', - avatar: '/imgs/workflow/userGuide.png', + avatar: 'core/workflow/template/systemConfig', flowNodeType: FlowNodeTypeEnum.systemConfig, position: { x: 531.2422736065552, @@ -2498,7 +2498,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'workflowStartNodeId', name: '流程开始', intro: '', - avatar: '/imgs/workflow/userChatInput.svg', + avatar: 'core/workflow/template/workflowStart', flowNodeType: FlowNodeTypeEnum.workflowStart, position: { x: 558.4082376415505, @@ -2529,7 +2529,7 @@ export const workflowTemplates: TemplateType = [ nodeId: '7BdojPlukIQw', name: 'AI 对话', intro: 'AI 大模型对话', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', flowNodeType: FlowNodeTypeEnum.chatNode, showStatus: true, position: { @@ -2650,7 +2650,7 @@ export const workflowTemplates: TemplateType = [ name: '问题分类', intro: '根据用户的历史记录和当前问题判断该次提问的类型。可以添加多组问题类型,下面是一个模板例子:\n类型1: 打招呼\n类型2: 关于商品“使用”问题\n类型3: 关于商品“购买”问题\n类型4: 其他问题', - avatar: '/imgs/workflow/cq.png', + avatar: 'core/workflow/template/questionClassify', flowNodeType: FlowNodeTypeEnum.classifyQuestion, showStatus: true, position: { @@ -2732,7 +2732,7 @@ export const workflowTemplates: TemplateType = [ name: '指定回复', intro: '该模块可以直接回复一段指定的内容。常用于引导、提示。非字符串内容传入时,会转成字符串进行输出。', - avatar: '/imgs/workflow/reply.png', + avatar: 'core/workflow/template/reply', flowNodeType: FlowNodeTypeEnum.answerNode, position: { x: 1874.9167551056487, @@ -2757,7 +2757,7 @@ export const workflowTemplates: TemplateType = [ nodeId: 'MNMMMIjjWyMU', name: '知识库搜索', intro: '调用“语义检索”和“全文检索”能力,从“知识库”中查找可能与问题相关的参考内容', - avatar: '/imgs/workflow/db.png', + avatar: 'core/workflow/template/datasetSearch', flowNodeType: FlowNodeTypeEnum.datasetSearchNode, showStatus: true, position: { @@ -2883,7 +2883,7 @@ export const workflowTemplates: TemplateType = [ export const pluginTemplates: TemplateType = [ { id: 'plugin-simple', - avatar: '/imgs/workflow/AI.png', + avatar: 'core/workflow/template/aiChat', name: '默认模板', intro: '标准的插件初始模板', type: AppTypeEnum.plugin, @@ -2891,7 +2891,7 @@ export const pluginTemplates: TemplateType = [ { nodeId: 'pluginInput', name: '自定义插件输入', - avatar: '/imgs/workflow/input.png', + avatar: 'core/workflow/template/workflowStart', flowNodeType: FlowNodeTypeEnum.pluginInput, showStatus: false, position: { @@ -2930,7 +2930,7 @@ export const pluginTemplates: TemplateType = [ nodeId: 'pluginInput', name: '自定义插件输入', intro: '自定义配置外部输入,使用插件时,仅暴露自定义配置的输入', - avatar: '/imgs/workflow/input.png', + avatar: 'core/workflow/template/workflowStart', flowNodeType: 'pluginInput', showStatus: false, position: { @@ -3015,7 +3015,7 @@ export const pluginTemplates: TemplateType = [ nodeId: 'rKBYGQuYefae', name: 'HTTP 请求', intro: '可以发出一个 HTTP 请求,实现更为复杂的操作(联网搜索、数据库查询等)', - avatar: '/imgs/workflow/http.png', + avatar: 'core/workflow/template/httpRequest', flowNodeType: 'httpRequest468', showStatus: true, position: { diff --git a/projects/app/src/web/core/workflow/utils.ts b/projects/app/src/web/core/workflow/utils.ts index cdca446b642..0a54c6b93d3 100644 --- a/projects/app/src/web/core/workflow/utils.ts +++ b/projects/app/src/web/core/workflow/utils.ts @@ -84,6 +84,7 @@ export const storeNode2FlowNode = ({ const nodeItem: FlowNodeItemType = { ...template, ...storeNode, + avatar: template.avatar ?? storeNode.avatar, version: storeNode.version ?? template.version ?? defaultNodeVersion, /*