+
{showUploadIcon && (
+ {embedVisible && (
+
+ )}
);
}
diff --git a/web/src/pages/next-chats/hooks/use-send-shared-message.ts b/web/src/pages/next-chats/hooks/use-send-shared-message.ts
index d48978dc0..f4e10129c 100644
--- a/web/src/pages/next-chats/hooks/use-send-shared-message.ts
+++ b/web/src/pages/next-chats/hooks/use-send-shared-message.ts
@@ -1,10 +1,20 @@
-import { SharedFrom } from '@/constants/chat';
-import { useSetModalState } from '@/hooks/common-hooks';
-import { IEventList } from '@/hooks/use-send-message';
-import { useSendAgentMessage } from '@/pages/agent/chat/use-send-agent-message';
+import { MessageType, SharedFrom } from '@/constants/chat';
+import { useCreateNextSharedConversation } from '@/hooks/chat-hooks';
+import {
+ useHandleMessageInputChange,
+ useSelectDerivedMessages,
+ useSendMessageWithSse,
+} from '@/hooks/logic-hooks';
+import { Message } from '@/interfaces/database/chat';
+import { message } from 'antd';
+import { get } from 'lodash';
import trim from 'lodash/trim';
-import { useCallback, useState } from 'react';
+import { useCallback, useEffect, useState } from 'react';
import { useSearchParams } from 'umi';
+import { v4 as uuid } from 'uuid';
+
+const isCompletionError = (res: any) =>
+ res && (res?.response.status !== 200 || res?.data?.code !== 0);
export const useSendButtonDisabled = (value: string) => {
return trim(value) === '';
@@ -30,36 +40,114 @@ export const useGetSharedChatSearchParams = () => {
};
};
-export const useSendNextSharedMessage = (
- addEventList: (data: IEventList, messageId: string) => void,
-) => {
- const { from, sharedId: conversationId } = useGetSharedChatSearchParams();
- const url = `/api/v1/${from === SharedFrom.Agent ? 'agentbots' : 'chatbots'}/${conversationId}/completions`;
-
- const [params, setParams] = useState
([]);
-
+export const useSendSharedMessage = () => {
const {
- visible: parameterDialogVisible,
- hideModal: hideParameterDialog,
- showModal: showParameterDialog,
- } = useSetModalState();
+ from,
+ sharedId: conversationId,
+ data: data,
+ } = useGetSharedChatSearchParams();
+ const { createSharedConversation: setConversation } =
+ useCreateNextSharedConversation();
+ const { handleInputChange, value, setValue } = useHandleMessageInputChange();
+ const { send, answer, done, stopOutputMessage } = useSendMessageWithSse(
+ `/api/v1/${from === SharedFrom.Agent ? 'agentbots' : 'chatbots'}/${conversationId}/completions`,
+ );
+ const {
+ derivedMessages,
+ removeLatestMessage,
+ addNewestAnswer,
+ addNewestQuestion,
+ scrollRef,
+ messageContainerRef,
+ removeAllMessages,
+ } = useSelectDerivedMessages();
+ const [hasError, setHasError] = useState(false);
- const ret = useSendAgentMessage(url, addEventList, params);
+ const sendMessage = useCallback(
+ async (message: Message, id?: string) => {
+ const res = await send({
+ conversation_id: id ?? conversationId,
+ quote: true,
+ question: message.content,
+ session_id: get(derivedMessages, '0.session_id'),
+ });
- const ok = useCallback(
- (params: any[]) => {
- setParams(params);
- hideParameterDialog();
+ if (isCompletionError(res)) {
+ // cancel loading
+ setValue(message.content);
+ removeLatestMessage();
+ }
},
- [hideParameterDialog],
+ [send, conversationId, derivedMessages, setValue, removeLatestMessage],
+ );
+
+ const handleSendMessage = useCallback(
+ async (message: Message) => {
+ if (conversationId !== '') {
+ sendMessage(message);
+ } else {
+ const data = await setConversation('user id');
+ if (data.code === 0) {
+ const id = data.data.id;
+ sendMessage(message, id);
+ }
+ }
+ },
+ [conversationId, setConversation, sendMessage],
+ );
+
+ const fetchSessionId = useCallback(async () => {
+ const payload = { question: '' };
+ const ret = await send({ ...payload, ...data });
+ if (isCompletionError(ret)) {
+ message.error(ret?.data.message);
+ setHasError(true);
+ }
+ }, [send]);
+
+ useEffect(() => {
+ fetchSessionId();
+ }, [fetchSessionId]);
+
+ useEffect(() => {
+ if (answer.answer) {
+ addNewestAnswer(answer);
+ }
+ }, [answer, addNewestAnswer]);
+
+ const handlePressEnter = useCallback(
+ (documentIds: string[]) => {
+ if (trim(value) === '') return;
+ const id = uuid();
+ if (done) {
+ setValue('');
+ addNewestQuestion({
+ content: value,
+ doc_ids: documentIds,
+ id,
+ role: MessageType.User,
+ });
+ handleSendMessage({
+ content: value.trim(),
+ id,
+ role: MessageType.User,
+ });
+ }
+ },
+ [addNewestQuestion, done, handleSendMessage, setValue, value],
);
return {
- ...ret,
- hasError: false,
- parameterDialogVisible,
- hideParameterDialog,
- showParameterDialog,
- ok,
+ handlePressEnter,
+ handleInputChange,
+ value,
+ sendLoading: !done,
+ loading: false,
+ derivedMessages,
+ hasError,
+ stopOutputMessage,
+ scrollRef,
+ messageContainerRef,
+ removeAllMessages,
};
};
diff --git a/web/src/pages/next-chats/share/index.tsx b/web/src/pages/next-chats/share/index.tsx
index e779df9be..bf0b7a7a8 100644
--- a/web/src/pages/next-chats/share/index.tsx
+++ b/web/src/pages/next-chats/share/index.tsx
@@ -1,166 +1,75 @@
-import { FileUploadProps } from '@/components/file-upload';
+import { EmbedContainer } from '@/components/embed-container';
import { NextMessageInput } from '@/components/message-input/next';
-import MessageItem from '@/components/next-message-item';
+import MessageItem from '@/components/message-item';
import PdfDrawer from '@/components/pdf-drawer';
import { useClickDrawer } from '@/components/pdf-drawer/hooks';
-import { RAGFlowAvatar } from '@/components/ragflow-avatar';
-import { Button } from '@/components/ui/button';
-import { MessageType } from '@/constants/chat';
-import { useFetchAppConf } from '@/hooks/logic-hooks';
-import {
- useFetchExternalAgentInputs,
- useUploadCanvasFileWithProgress,
-} from '@/hooks/use-agent-request';
-import { cn } from '@/lib/utils';
+import { MessageType, SharedFrom } from '@/constants/chat';
+import { useFetchNextConversationSSE } from '@/hooks/chat-hooks';
+import { useFetchFlowSSE } from '@/hooks/flow-hooks';
+import { useFetchExternalChatInfo } from '@/hooks/use-chat-request';
import i18n from '@/locales/config';
-import DebugContent from '@/pages/agent/debug-content';
-import { useCacheChatLog } from '@/pages/agent/hooks/use-cache-chat-log';
-import { useAwaitCompentData } from '@/pages/agent/hooks/use-chat-logic';
-import { IInputs } from '@/pages/agent/interface';
import { useSendButtonDisabled } from '@/pages/chat/hooks';
import { buildMessageUuidWithRole } from '@/utils/chat';
-import { isEmpty } from 'lodash';
-import { RefreshCcw } from 'lucide-react';
-import React, { forwardRef, useCallback, useState } from 'react';
+import React, { forwardRef, useMemo } from 'react';
import {
useGetSharedChatSearchParams,
- useSendNextSharedMessage,
+ useSendSharedMessage,
} from '../hooks/use-send-shared-message';
-import { ParameterDialog } from './parameter-dialog';
+import { buildMessageItemReference } from '../utils';
const ChatContainer = () => {
const {
sharedId: conversationId,
+ from,
locale,
visibleAvatar,
} = useGetSharedChatSearchParams();
const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } =
useClickDrawer();
- const { uploadCanvasFile, loading } =
- useUploadCanvasFileWithProgress(conversationId);
- const {
- addEventList,
- setCurrentMessageId,
- currentEventListWithoutMessageById,
- clearEventList,
- } = useCacheChatLog();
const {
handlePressEnter,
handleInputChange,
value,
sendLoading,
- scrollRef,
- messageContainerRef,
derivedMessages,
hasError,
stopOutputMessage,
- findReferenceByMessageId,
- appendUploadResponseList,
- parameterDialogVisible,
- showParameterDialog,
- sendFormMessage,
- addNewestOneAnswer,
- ok,
- resetSession,
- } = useSendNextSharedMessage(addEventList);
- const { buildInputList, handleOk, isWaitting } = useAwaitCompentData({
- derivedMessages,
- sendFormMessage,
- canvasId: conversationId as string,
- });
+ scrollRef,
+ messageContainerRef,
+ removeAllMessages,
+ } = useSendSharedMessage();
const sendDisabled = useSendButtonDisabled(value);
- const appConf = useFetchAppConf();
- const { data: inputsData } = useFetchExternalAgentInputs();
- const [agentInfo, setAgentInfo] = useState({
- avatar: '',
- title: '',
- inputs: {},
- prologue: '',
- });
- const handleUploadFile: NonNullable =
- useCallback(
- async (files, options) => {
- const ret = await uploadCanvasFile({ files, options });
- appendUploadResponseList(ret.data, files);
- },
- [appendUploadResponseList, uploadCanvasFile],
- );
+ const { data: chatInfo } = useFetchExternalChatInfo();
+ const useFetchAvatar = useMemo(() => {
+ return from === SharedFrom.Agent
+ ? useFetchFlowSSE
+ : useFetchNextConversationSSE;
+ }, [from]);
React.useEffect(() => {
if (locale && i18n.language !== locale) {
i18n.changeLanguage(locale);
}
}, [locale, visibleAvatar]);
+ const { data: avatarData } = useFetchAvatar();
- React.useEffect(() => {
- const { avatar, title, inputs } = inputsData;
- setAgentInfo({
- avatar,
- title,
- inputs: inputs,
- prologue: '',
- });
- }, [inputsData, setAgentInfo]);
-
- React.useEffect(() => {
- if (inputsData.prologue) {
- addNewestOneAnswer({
- answer: inputsData.prologue,
- });
- }
- }, [inputsData.prologue, addNewestOneAnswer]);
-
- React.useEffect(() => {
- if (inputsData && inputsData.inputs && !isEmpty(inputsData.inputs)) {
- showParameterDialog();
- }
- }, [inputsData, showParameterDialog]);
-
- const handleInputsModalOk = (params: any[]) => {
- ok(params);
- };
- const handleReset = () => {
- resetSession();
- clearEventList();
- };
if (!conversationId) {
return empty
;
}
+
return (
-
-
-

-
{appConf.appName}
-
-
-
-
-
{
- handleReset();
- }}
- >
-
-
- Reset
-
-
-
+ <>
+
@@ -168,51 +77,27 @@ const ChatContainer = () => {
return (
- {message.role === MessageType.Assistant &&
- derivedMessages.length - 1 === i && (
-
- )}
- {message.role === MessageType.Assistant &&
- derivedMessages.length - 1 !== i && (
-
-
{message?.data?.tips}
-
-
- {buildInputList(message)?.map((item) => item.value)}
-
-
- )}
-
+ >
);
})}
@@ -223,20 +108,20 @@ const ChatContainer = () => {
-
+
{visible && (