mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 13:03:50 +00:00
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:
@@ -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>
|
||||||
|
@@ -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 {
|
||||||
|
@@ -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) => {
|
||||||
|
@@ -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();
|
||||||
|
|
||||||
|
@@ -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,
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user