From 08190c2f0d31ef8139798b0d8701082bed210f97 Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Mon, 9 Sep 2024 22:26:20 +0800 Subject: [PATCH] fix: toolNode max tokens and toolDescription i18n (#2655) * fix: toolNode max tokens * fix: toolNode max tokens * fix: workflow tool desc i18n --- .../support/wallet/QRCodePayModal.tsx | 89 ++++++++++--------- .../Flow/nodes/NodeDatasetConcat.tsx | 8 +- .../Flow/nodes/render/NodeCard.tsx | 5 +- .../templates/SelectDatasetParams.tsx | 8 +- .../components/WorkflowComponents/context.tsx | 4 +- .../WorkflowPublishHistoriesSlider.tsx | 2 +- projects/app/src/web/core/workflow/utils.ts | 9 +- 7 files changed, 67 insertions(+), 58 deletions(-) diff --git a/projects/app/src/components/support/wallet/QRCodePayModal.tsx b/projects/app/src/components/support/wallet/QRCodePayModal.tsx index 927e5e2ebb7..b8787a3fe62 100644 --- a/projects/app/src/components/support/wallet/QRCodePayModal.tsx +++ b/projects/app/src/components/support/wallet/QRCodePayModal.tsx @@ -1,8 +1,7 @@ import MyModal from '@fastgpt/web/components/common/MyModal'; -import React, { useEffect } from 'react'; +import React, { useEffect, useRef } from 'react'; import { useTranslation } from 'next-i18next'; import { Box, ModalBody } from '@chakra-ui/react'; -import { useQuery } from '@tanstack/react-query'; import { checkBalancePayResult } from '@/web/support/wallet/bill/api'; import { useToast } from '@fastgpt/web/hooks/useToast'; import { useRouter } from 'next/router'; @@ -24,52 +23,54 @@ const QRCodePayModal = ({ const router = useRouter(); const { t } = useTranslation(); const { toast } = useToast(); - const dom = document.getElementById('payQRCode'); + const dom = useRef(null); useEffect(() => { - if (dom && window.QRCode) { - new window.QRCode(dom, { - text: codeUrl, - width: 128, - height: 128, - colorDark: '#000000', - colorLight: '#ffffff', - correctLevel: window.QRCode.CorrectLevel.H - }); - } - }, [dom]); + let timer: NodeJS.Timeout; + const drawCode = () => { + if (dom.current && window.QRCode && !dom.current.innerHTML) { + new window.QRCode(dom.current, { + text: codeUrl, + width: 128, + height: 128, + colorDark: '#000000', + colorLight: '#ffffff', + correctLevel: window.QRCode.CorrectLevel.H + }); + } + }; + const check = async () => { + try { + const res = await checkBalancePayResult(billId); + if (res) { + try { + await onSuccess?.(); + toast({ + title: res, + status: 'success' + }); + setTimeout(() => { + router.reload(); + }, 1000); + return; + } catch (error) { + toast({ + title: getErrText(error), + status: 'error' + }); + } + } + } catch (error) {} - useQuery( - [billId], - () => { - if (!billId) return null; - return checkBalancePayResult(billId); - }, - { - enabled: !!billId, - refetchInterval: 3000, - onSuccess: async (res) => { - if (!res) return; + drawCode(); - try { - await onSuccess?.(); - toast({ - title: res, - status: 'success' - }); - } catch (error) { - toast({ - title: getErrText(error), - status: 'error' - }); - } + timer = setTimeout(check, 2000); + }; - setTimeout(() => { - router.reload(); - }, 1000); - } - } - ); + check(); + + return () => clearTimeout(timer); + }, [billId, onSuccess, toast]); return ( @@ -79,7 +80,7 @@ const QRCodePayModal = ({ {tip} )} - + {t('common:pay.wechat', { price: readPrice })} diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx index 2c07a50bd11..5d3395c0c4e 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/NodeDatasetConcat.tsx @@ -37,20 +37,20 @@ const NodeDatasetConcat = ({ data, selected }: NodeProps) => { const quoteList = useMemo(() => inputs.filter((item) => item.canEdit), [inputs]); const tokenLimit = useMemo(() => { - let maxTokens = 3000; + let maxTokens = 13000; nodeList.forEach((item) => { - if (item.flowNodeType === FlowNodeTypeEnum.chatNode) { + if ([FlowNodeTypeEnum.chatNode, FlowNodeTypeEnum.tools].includes(item.flowNodeType)) { const model = item.inputs.find((item) => item.key === NodeInputKeyEnum.aiModel)?.value || ''; - const quoteMaxToken = getWebLLMModel(model)?.quoteMaxToken || 3000; + const quoteMaxToken = getWebLLMModel(model)?.quoteMaxToken || 13000; maxTokens = Math.max(maxTokens, quoteMaxToken); } }); return maxTokens; - }, [llmModelList, nodeList]); + }, [nodeList, llmModelList]); const CustomComponent = useMemo(() => { return { 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 ce445d80873..6d2be6e4d6d 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 @@ -342,12 +342,13 @@ const MenuRender = React.memo(function MenuRender({ outputs: template.outputs, version: template.version }, - selected: true + selected: true, + t }) ); }); }, - [computedNewNodeName, setNodes] + [computedNewNodeName, setNodes, t] ); const onDelNode = useCallback( (nodeId: string) => { diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx index ec7ae319ed5..f93a9275d0f 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx @@ -31,20 +31,20 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => { }); const tokenLimit = useMemo(() => { - let maxTokens = 3000; + let maxTokens = 13000; nodeList.forEach((item) => { - if (item.flowNodeType === FlowNodeTypeEnum.chatNode) { + if ([FlowNodeTypeEnum.chatNode, FlowNodeTypeEnum.tools].includes(item.flowNodeType)) { const model = item.inputs.find((item) => item.key === NodeInputKeyEnum.aiModel)?.value || ''; - const quoteMaxToken = getWebLLMModel(model)?.quoteMaxToken || 3000; + const quoteMaxToken = getWebLLMModel(model)?.quoteMaxToken || 13000; maxTokens = Math.max(maxTokens, quoteMaxToken); } }); return maxTokens; - }, [llmModelList, nodeList]); + }, [nodeList, llmModelList]); const { isOpen, onOpen, onClose } = useDisclosure(); diff --git a/projects/app/src/pages/app/detail/components/WorkflowComponents/context.tsx b/projects/app/src/pages/app/detail/components/WorkflowComponents/context.tsx index 76abaf6c16b..d96e49f2a09 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowComponents/context.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowComponents/context.tsx @@ -539,7 +539,7 @@ const WorkflowContextProvider = ({ return resetSnapshot(past[0]); } - setNodes(e.nodes?.map((item) => storeNode2FlowNode({ item })) || []); + setNodes(e.nodes?.map((item) => storeNode2FlowNode({ item, t })) || []); setEdges(e.edges?.map((item) => storeEdgesRenderEdge({ edge: item })) || []); const chatConfig = e.chatConfig; @@ -553,7 +553,7 @@ const WorkflowContextProvider = ({ // If it is the initial data, save the initial snapshot if (isInit) { saveSnapshot({ - pastNodes: e.nodes?.map((item) => storeNode2FlowNode({ item })) || [], + pastNodes: e.nodes?.map((item) => storeNode2FlowNode({ item, t })) || [], pastEdges: e.edges?.map((item) => storeEdgesRenderEdge({ edge: item })) || [], customTitle: t(`app:app.version_initial`), chatConfig: appDetail.chatConfig, diff --git a/projects/app/src/pages/app/detail/components/WorkflowPublishHistoriesSlider.tsx b/projects/app/src/pages/app/detail/components/WorkflowPublishHistoriesSlider.tsx index 1d41618a492..95b09c4ace5 100644 --- a/projects/app/src/pages/app/detail/components/WorkflowPublishHistoriesSlider.tsx +++ b/projects/app/src/pages/app/detail/components/WorkflowPublishHistoriesSlider.tsx @@ -205,7 +205,7 @@ const TeamCloud = () => { if (!versionDetail) return; const state = { - nodes: versionDetail.nodes?.map((item) => storeNode2FlowNode({ item })), + nodes: versionDetail.nodes?.map((item) => storeNode2FlowNode({ item, t })), edges: versionDetail.edges?.map((item) => storeEdgesRenderEdge({ edge: item })), title: versionItem.versionName, chatConfig: versionDetail.chatConfig diff --git a/projects/app/src/web/core/workflow/utils.ts b/projects/app/src/web/core/workflow/utils.ts index 47bf5d4e449..5434bf3e793 100644 --- a/projects/app/src/web/core/workflow/utils.ts +++ b/projects/app/src/web/core/workflow/utils.ts @@ -62,10 +62,12 @@ export const nodeTemplate2FlowNode = ({ }; export const storeNode2FlowNode = ({ item: storeNode, - selected = false + selected = false, + t }: { item: StoreNodeItemType; selected?: boolean; + t: TFunction; }): Node => { // init some static data const template = @@ -99,6 +101,9 @@ export const storeNode2FlowNode = ({ ...storeInput, ...templateInput, + debugLabel: t(templateInput.debugLabel ?? (storeInput.debugLabel as any)), + toolDescription: t(templateInput.toolDescription ?? (storeInput.toolDescription as any)), + selectedTypeIndex: storeInput.selectedTypeIndex ?? templateInput.selectedTypeIndex, value: storeInput.value ?? templateInput.value, label: storeInput.label ?? templateInput.label @@ -126,6 +131,8 @@ export const storeNode2FlowNode = ({ ...storeOutput, ...templateOutput, + description: t(templateOutput.description ?? (storeOutput.description as any)), + id: storeOutput.id ?? templateOutput.id, label: storeOutput.label ?? templateOutput.label, value: storeOutput.value ?? templateOutput.value