diff --git a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ResponseTags.tsx b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ResponseTags.tsx index df5f58fa1..2f97e1306 100644 --- a/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ResponseTags.tsx +++ b/projects/app/src/components/core/chat/ChatContainer/ChatBox/components/ResponseTags.tsx @@ -14,6 +14,7 @@ import { addStatisticalDataToHistoryItem } from '@/global/core/chat/utils'; import { useSize } from 'ahooks'; import { useContextSelector } from 'use-context-selector'; import { ChatBoxContext } from '../Provider'; +import { ChatItemContext } from '@/web/core/chat/context/chatItemContext'; export type CitationRenderItem = { type: 'dataset' | 'link'; @@ -48,18 +49,31 @@ const ResponseTags = ({ const chatTime = historyItem.time || new Date(); const durationSeconds = historyItem.durationSeconds || 0; + const isResponseDetail = useContextSelector(ChatItemContext, (v) => v.isResponseDetail); const { totalQuoteList: quoteList = [], llmModuleAccount = 0, historyPreviewLength = 0, toolCiteLinks = [] - } = useMemo(() => addStatisticalDataToHistoryItem(historyItem), [historyItem]); + } = useMemo(() => { + if (!isResponseDetail) + return { + totalQuoteList: [], + llmModuleAccount: 0, + historyPreviewLength: 0, + toolCiteLinks: [] + }; + return addStatisticalDataToHistoryItem(historyItem); + }, [historyItem, isResponseDetail]); const [quoteFolded, setQuoteFolded] = useState(true); const chatType = useContextSelector(ChatBoxContext, (v) => v.chatType); - const notSharePage = useMemo(() => chatType !== 'share', [chatType]); + const notSharePage = useMemo( + () => chatType !== 'share' && isResponseDetail, + [chatType, isResponseDetail] + ); const { isOpen: isOpenWholeModal, @@ -78,6 +92,7 @@ const ResponseTags = ({ : true; const citationRenderList: CitationRenderItem[] = useMemo(() => { + if (!isResponseDetail) return []; // Dataset citations const datasetItems = Object.values( quoteList.reduce((acc: Record, cur) => { @@ -116,7 +131,7 @@ const ResponseTags = ({ })); return [...datasetItems, ...linkItems]; - }, [quoteList, toolCiteLinks, onOpenCiteModal]); + }, [quoteList, toolCiteLinks, onOpenCiteModal, isResponseDetail]); const notEmptyTags = notSharePage || quoteList.length > 0 || (isPc && durationSeconds > 0); diff --git a/projects/app/src/components/core/chat/components/AIResponseBox.tsx b/projects/app/src/components/core/chat/components/AIResponseBox.tsx index 09820e0d5..4c8e20af0 100644 --- a/projects/app/src/components/core/chat/components/AIResponseBox.tsx +++ b/projects/app/src/components/core/chat/components/AIResponseBox.tsx @@ -31,9 +31,13 @@ import { eventBus, EventNameEnum } from '@/web/common/utils/eventbus'; import { SelectOptionsComponent, FormInputComponent } from './Interactive/InteractiveComponents'; import { extractDeepestInteractive } from '@fastgpt/global/core/workflow/runtime/utils'; import { useContextSelector } from 'use-context-selector'; -import { type OnOpenCiteModalProps } from '@/web/core/chat/context/chatItemContext'; +import { + type OnOpenCiteModalProps, + ChatItemContext +} from '@/web/core/chat/context/chatItemContext'; import { WorkflowRuntimeContext } from '../ChatContainer/context/workflowRuntimeContext'; import { useCreation } from 'ahooks'; +import { removeDatasetCiteText } from '@fastgpt/global/core/ai/llm/utils'; const accordionButtonStyle = { w: 'auto', @@ -102,13 +106,13 @@ const RenderText = React.memo(function RenderText({ const appId = useContextSelector(WorkflowRuntimeContext, (v) => v.appId); const chatId = useContextSelector(WorkflowRuntimeContext, (v) => v.chatId); const outLinkAuthData = useContextSelector(WorkflowRuntimeContext, (v) => v.outLinkAuthData); + const isResponseDetail = useContextSelector(ChatItemContext, (v) => v.isResponseDetail); const source = useMemo(() => { if (!text) return ''; - // Remove quote references if not showing response detail - return text; - }, [text]); + return removeDatasetCiteText(text, isResponseDetail); + }, [text, isResponseDetail]); const chatAuthData = useCreation(() => { return { appId, chatId, chatItemDataId, ...outLinkAuthData }; @@ -329,6 +333,8 @@ const AIResponseBox = ({ isChatting: boolean; onOpenCiteModal?: (e?: OnOpenCiteModalProps) => void; }) => { + const isResponseDetail = useContextSelector(ChatItemContext, (v) => v.isResponseDetail); + if (value.type === ChatItemValueTypeEnum.text && value.text) { return ( ); } - if (value.type === ChatItemValueTypeEnum.tool && value.tools) { + if (value.type === ChatItemValueTypeEnum.tool && value.tools && isResponseDetail) { return ; } if (value.type === ChatItemValueTypeEnum.interactive && value.interactive) { diff --git a/projects/app/src/pageComponents/chat/ChatWindow/AppChatWindow.tsx b/projects/app/src/pageComponents/chat/ChatWindow/AppChatWindow.tsx index 07bdaf7a4..81062c0a6 100644 --- a/projects/app/src/pageComponents/chat/ChatWindow/AppChatWindow.tsx +++ b/projects/app/src/pageComponents/chat/ChatWindow/AppChatWindow.tsx @@ -45,6 +45,7 @@ const AppChatWindow = ({ myApps }: Props) => { const onUpdateHistoryTitle = useContextSelector(ChatContext, (v) => v.onUpdateHistoryTitle); const isPlugin = useContextSelector(ChatItemContext, (v) => v.isPlugin); + const showNodeStatus = useContextSelector(ChatItemContext, (v) => v.showNodeStatus); const onChangeChatId = useContextSelector(ChatContext, (v) => v.onChangeChatId); const chatBoxData = useContextSelector(ChatItemContext, (v) => v.chatBoxData); const datasetCiteData = useContextSelector(ChatItemContext, (v) => v.datasetCiteData); @@ -106,7 +107,8 @@ const AppChatWindow = ({ myApps }: Props) => { variables, responseChatItemId, appId, - chatId + chatId, + retainDatasetCite: showNodeStatus }, abortCtrl: controller, onMessage: generatingMessage @@ -122,7 +124,7 @@ const AppChatWindow = ({ myApps }: Props) => { return { responseText, isNewChat: forbidLoadChat.current }; }, - [appId, chatId, onUpdateHistoryTitle, setChatBoxData, forbidLoadChat] + [appId, chatId, onUpdateHistoryTitle, setChatBoxData, forbidLoadChat, showNodeStatus] ); return ( diff --git a/projects/app/src/pageComponents/chat/ChatWindow/HomeChatWindow.tsx b/projects/app/src/pageComponents/chat/ChatWindow/HomeChatWindow.tsx index 820487955..74d2b5aa0 100644 --- a/projects/app/src/pageComponents/chat/ChatWindow/HomeChatWindow.tsx +++ b/projects/app/src/pageComponents/chat/ChatWindow/HomeChatWindow.tsx @@ -84,6 +84,7 @@ const HomeChatWindow = ({ myApps }: Props) => { const datasetCiteData = useContextSelector(ChatItemContext, (v) => v.datasetCiteData); const setChatBoxData = useContextSelector(ChatItemContext, (v) => v.setChatBoxData); const resetVariables = useContextSelector(ChatItemContext, (v) => v.resetVariables); + const showNodeStatus = useContextSelector(ChatItemContext, (v) => v.showNodeStatus); const pane = useContextSelector(ChatSettingContext, (v) => v.pane); const chatSettings = useContextSelector(ChatSettingContext, (v) => v.chatSettings); @@ -216,7 +217,8 @@ const HomeChatWindow = ({ myApps }: Props) => { variables, responseChatItemId, appId, - chatId + chatId, + retainDatasetCite: showNodeStatus }, abortCtrl: controller, onMessage: generatingMessage @@ -264,6 +266,7 @@ const HomeChatWindow = ({ myApps }: Props) => { appId, appName: t('chat:home.chat_app'), chatId, + retainDatasetCite: showNodeStatus, ...form2AppWorkflow(formData, t) }, onMessage: generatingMessage,