fix: toolNode max tokens and toolDescription i18n (#2655)

* fix: toolNode max tokens

* fix: toolNode max tokens

* fix: workflow  tool desc i18n
This commit is contained in:
Archer
2024-09-09 22:26:20 +08:00
committed by GitHub
parent 6a85c8c2b6
commit 08190c2f0d
7 changed files with 69 additions and 60 deletions

View File

@@ -1,8 +1,7 @@
import MyModal from '@fastgpt/web/components/common/MyModal'; 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 { useTranslation } from 'next-i18next';
import { Box, ModalBody } from '@chakra-ui/react'; import { Box, ModalBody } from '@chakra-ui/react';
import { useQuery } from '@tanstack/react-query';
import { checkBalancePayResult } from '@/web/support/wallet/bill/api'; import { checkBalancePayResult } from '@/web/support/wallet/bill/api';
import { useToast } from '@fastgpt/web/hooks/useToast'; import { useToast } from '@fastgpt/web/hooks/useToast';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
@@ -24,52 +23,54 @@ const QRCodePayModal = ({
const router = useRouter(); const router = useRouter();
const { t } = useTranslation(); const { t } = useTranslation();
const { toast } = useToast(); const { toast } = useToast();
const dom = document.getElementById('payQRCode'); const dom = useRef<HTMLDivElement>(null);
useEffect(() => { useEffect(() => {
if (dom && window.QRCode) { let timer: NodeJS.Timeout;
new window.QRCode(dom, { const drawCode = () => {
text: codeUrl, if (dom.current && window.QRCode && !dom.current.innerHTML) {
width: 128, new window.QRCode(dom.current, {
height: 128, text: codeUrl,
colorDark: '#000000', width: 128,
colorLight: '#ffffff', height: 128,
correctLevel: window.QRCode.CorrectLevel.H colorDark: '#000000',
}); colorLight: '#ffffff',
} correctLevel: window.QRCode.CorrectLevel.H
}, [dom]); });
useQuery(
[billId],
() => {
if (!billId) return null;
return checkBalancePayResult(billId);
},
{
enabled: !!billId,
refetchInterval: 3000,
onSuccess: async (res) => {
if (!res) return;
try {
await onSuccess?.();
toast({
title: res,
status: 'success'
});
} catch (error) {
toast({
title: getErrText(error),
status: 'error'
});
}
setTimeout(() => {
router.reload();
}, 1000);
} }
} };
); 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) {}
drawCode();
timer = setTimeout(check, 2000);
};
check();
return () => clearTimeout(timer);
}, [billId, onSuccess, toast]);
return ( return (
<MyModal isOpen title={t('common:user.Pay')} iconSrc="/imgs/modal/pay.svg"> <MyModal isOpen title={t('common:user.Pay')} iconSrc="/imgs/modal/pay.svg">
@@ -79,7 +80,7 @@ const QRCodePayModal = ({
{tip} {tip}
</Box> </Box>
)} )}
<Box id={'payQRCode'} display={'inline-block'} h={'128px'}></Box> <Box ref={dom} id={'payQRCode'} display={'inline-block'} h={'128px'}></Box>
<Box mt={3} textAlign={'center'}> <Box mt={3} textAlign={'center'}>
{t('common:pay.wechat', { price: readPrice })} {t('common:pay.wechat', { price: readPrice })}
</Box> </Box>

View File

@@ -37,20 +37,20 @@ const NodeDatasetConcat = ({ data, selected }: NodeProps<FlowNodeItemType>) => {
const quoteList = useMemo(() => inputs.filter((item) => item.canEdit), [inputs]); const quoteList = useMemo(() => inputs.filter((item) => item.canEdit), [inputs]);
const tokenLimit = useMemo(() => { const tokenLimit = useMemo(() => {
let maxTokens = 3000; let maxTokens = 13000;
nodeList.forEach((item) => { nodeList.forEach((item) => {
if (item.flowNodeType === FlowNodeTypeEnum.chatNode) { if ([FlowNodeTypeEnum.chatNode, FlowNodeTypeEnum.tools].includes(item.flowNodeType)) {
const model = const model =
item.inputs.find((item) => item.key === NodeInputKeyEnum.aiModel)?.value || ''; 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); maxTokens = Math.max(maxTokens, quoteMaxToken);
} }
}); });
return maxTokens; return maxTokens;
}, [llmModelList, nodeList]); }, [nodeList, llmModelList]);
const CustomComponent = useMemo(() => { const CustomComponent = useMemo(() => {
return { return {

View File

@@ -342,12 +342,13 @@ const MenuRender = React.memo(function MenuRender({
outputs: template.outputs, outputs: template.outputs,
version: template.version version: template.version
}, },
selected: true selected: true,
t
}) })
); );
}); });
}, },
[computedNewNodeName, setNodes] [computedNewNodeName, setNodes, t]
); );
const onDelNode = useCallback( const onDelNode = useCallback(
(nodeId: string) => { (nodeId: string) => {

View File

@@ -31,20 +31,20 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => {
}); });
const tokenLimit = useMemo(() => { const tokenLimit = useMemo(() => {
let maxTokens = 3000; let maxTokens = 13000;
nodeList.forEach((item) => { nodeList.forEach((item) => {
if (item.flowNodeType === FlowNodeTypeEnum.chatNode) { if ([FlowNodeTypeEnum.chatNode, FlowNodeTypeEnum.tools].includes(item.flowNodeType)) {
const model = const model =
item.inputs.find((item) => item.key === NodeInputKeyEnum.aiModel)?.value || ''; 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); maxTokens = Math.max(maxTokens, quoteMaxToken);
} }
}); });
return maxTokens; return maxTokens;
}, [llmModelList, nodeList]); }, [nodeList, llmModelList]);
const { isOpen, onOpen, onClose } = useDisclosure(); const { isOpen, onOpen, onClose } = useDisclosure();

View File

@@ -539,7 +539,7 @@ const WorkflowContextProvider = ({
return resetSnapshot(past[0]); 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 })) || []); setEdges(e.edges?.map((item) => storeEdgesRenderEdge({ edge: item })) || []);
const chatConfig = e.chatConfig; const chatConfig = e.chatConfig;
@@ -553,7 +553,7 @@ const WorkflowContextProvider = ({
// If it is the initial data, save the initial snapshot // If it is the initial data, save the initial snapshot
if (isInit) { if (isInit) {
saveSnapshot({ saveSnapshot({
pastNodes: e.nodes?.map((item) => storeNode2FlowNode({ item })) || [], pastNodes: e.nodes?.map((item) => storeNode2FlowNode({ item, t })) || [],
pastEdges: e.edges?.map((item) => storeEdgesRenderEdge({ edge: item })) || [], pastEdges: e.edges?.map((item) => storeEdgesRenderEdge({ edge: item })) || [],
customTitle: t(`app:app.version_initial`), customTitle: t(`app:app.version_initial`),
chatConfig: appDetail.chatConfig, chatConfig: appDetail.chatConfig,

View File

@@ -205,7 +205,7 @@ const TeamCloud = () => {
if (!versionDetail) return; if (!versionDetail) return;
const state = { 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 })), edges: versionDetail.edges?.map((item) => storeEdgesRenderEdge({ edge: item })),
title: versionItem.versionName, title: versionItem.versionName,
chatConfig: versionDetail.chatConfig chatConfig: versionDetail.chatConfig

View File

@@ -62,10 +62,12 @@ export const nodeTemplate2FlowNode = ({
}; };
export const storeNode2FlowNode = ({ export const storeNode2FlowNode = ({
item: storeNode, item: storeNode,
selected = false selected = false,
t
}: { }: {
item: StoreNodeItemType; item: StoreNodeItemType;
selected?: boolean; selected?: boolean;
t: TFunction;
}): Node<FlowNodeItemType> => { }): Node<FlowNodeItemType> => {
// init some static data // init some static data
const template = const template =
@@ -99,6 +101,9 @@ export const storeNode2FlowNode = ({
...storeInput, ...storeInput,
...templateInput, ...templateInput,
debugLabel: t(templateInput.debugLabel ?? (storeInput.debugLabel as any)),
toolDescription: t(templateInput.toolDescription ?? (storeInput.toolDescription as any)),
selectedTypeIndex: storeInput.selectedTypeIndex ?? templateInput.selectedTypeIndex, selectedTypeIndex: storeInput.selectedTypeIndex ?? templateInput.selectedTypeIndex,
value: storeInput.value ?? templateInput.value, value: storeInput.value ?? templateInput.value,
label: storeInput.label ?? templateInput.label label: storeInput.label ?? templateInput.label
@@ -126,6 +131,8 @@ export const storeNode2FlowNode = ({
...storeOutput, ...storeOutput,
...templateOutput, ...templateOutput,
description: t(templateOutput.description ?? (storeOutput.description as any)),
id: storeOutput.id ?? templateOutput.id, id: storeOutput.id ?? templateOutput.id,
label: storeOutput.label ?? templateOutput.label, label: storeOutput.label ?? templateOutput.label,
value: storeOutput.value ?? templateOutput.value value: storeOutput.value ?? templateOutput.value