diff --git a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less
index 351427280..b3d17f1e1 100644
--- a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less
+++ b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less
@@ -8,6 +8,7 @@
}
.footer {
text-align: right;
+ padding-top: 16px;
.nextButton {
background-color: @purple;
}
@@ -17,8 +18,9 @@
padding-top: 60px;
}
.uploader {
- display: block;
- height: 200px;
+ :global(.ant-upload) {
+ height: 126px;
+ }
}
.hiddenUploader {
:global(.ant-upload-drag) {
@@ -29,6 +31,17 @@
font-size: 40px;
align-items: end;
}
+ .uploaderButton {
+ padding: 10px;
+ vertical-align: middle;
+ height: 40px;
+ }
+ .uploaderIcon {
+ svg {
+ width: 20px;
+ height: 20px;
+ }
+ }
.deleteIcon {
font-size: 20px;
}
diff --git a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx
index 27d248695..b3e5a7a88 100644
--- a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx
+++ b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx
@@ -1,5 +1,6 @@
import { ReactComponent as SelectFilesEndIcon } from '@/assets/svg/select-files-end.svg';
import { ReactComponent as SelectFilesStartIcon } from '@/assets/svg/select-files-start.svg';
+import { KnowledgeRouteKey } from '@/constants/knowledge';
import {
useDeleteDocumentById,
useFetchKnowledgeDetail,
@@ -10,14 +11,14 @@ import {
useFetchTenantInfo,
useSelectParserList,
} from '@/hooks/userSettingHook';
-
import uploadService from '@/services/uploadService';
+import { isFileUploadDone } from '@/utils/documentUtils';
import {
ArrowLeftOutlined,
+ CloudUploadOutlined,
DeleteOutlined,
EditOutlined,
FileDoneOutlined,
- InboxOutlined,
} from '@ant-design/icons';
import {
Button,
@@ -43,8 +44,6 @@ import {
} from 'react';
import { Link, useDispatch, useNavigate } from 'umi';
-import { KnowledgeRouteKey } from '@/constants/knowledge';
-import { isFileUploadDone } from '@/utils/documentUtils';
import styles from './index.less';
const { Dragger } = Upload;
@@ -290,9 +289,9 @@ const KnowledgeUploadFile = () => {
[styles.hiddenUploader]: !isUpload,
})}
>
-
-
-
+
Click or drag file to this area to upload
diff --git a/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/index.tsx b/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/index.tsx
index 86ef8e825..9277418c8 100644
--- a/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/index.tsx
+++ b/web/src/pages/add-knowledge/components/knowledge-testing/testing-result/index.tsx
@@ -27,7 +27,7 @@ const ChunkTitle = ({ item }: { item: ITestingChunk }) => {
{similarityList.map((x) => (
- {((item[x.field] as number) * 100).toFixed(2)}%
+ {((item[x.field] as number) * 100).toFixed(2)}
{x.label}
diff --git a/web/src/pages/chat/chat-container/index.tsx b/web/src/pages/chat/chat-container/index.tsx
index b0a3ca854..e7cd63e19 100644
--- a/web/src/pages/chat/chat-container/index.tsx
+++ b/web/src/pages/chat/chat-container/index.tsx
@@ -4,7 +4,6 @@ import NewDocumentLink from '@/components/new-document-link';
import DocumentPreviewer from '@/components/pdf-previewer';
import { MessageType } from '@/constants/chat';
import { useSelectFileThumbnails } from '@/hooks/knowledgeHook';
-import { useOneNamespaceEffectsLoading } from '@/hooks/storeHooks';
import { useSelectUserInfo } from '@/hooks/userSettingHook';
import { IReference, Message } from '@/interfaces/database/chat';
import { IChunk } from '@/interfaces/database/knowledge';
@@ -21,7 +20,7 @@ import {
Space,
} from 'antd';
import classNames from 'classnames';
-import { ChangeEventHandler, useCallback, useMemo, useState } from 'react';
+import { useCallback, useMemo } from 'react';
import Markdown from 'react-markdown';
import reactStringReplace from 'react-string-replace';
import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
@@ -243,35 +242,19 @@ const MessageItem = ({
};
const ChatContainer = () => {
- const [value, setValue] = useState('');
const {
ref,
currentConversation: conversation,
addNewestConversation,
+ removeLatestMessage,
} = useFetchConversationOnMount();
- const { sendMessage } = useSendMessage();
+ const { handleInputChange, handlePressEnter, value, loading } =
+ useSendMessage(conversation, addNewestConversation, removeLatestMessage);
const { visible, hideModal, documentId, selectedChunk, clickDocumentButton } =
useClickDrawer();
- const loading = useOneNamespaceEffectsLoading('chatModel', [
- 'completeConversation',
- ]);
useGetFileIcon();
- const handlePressEnter = () => {
- if (!loading) {
- setValue('');
- addNewestConversation(value);
- sendMessage(value.trim());
- }
- };
-
- const handleInputChange: ChangeEventHandler = (e) => {
- const value = e.target.value;
- const nextValue = value.replaceAll('\\n', '\n').replaceAll('\\t', '\t');
- setValue(nextValue);
- };
-
return (
<>
diff --git a/web/src/pages/chat/hooks.ts b/web/src/pages/chat/hooks.ts
index b3e83bcd2..877c91a17 100644
--- a/web/src/pages/chat/hooks.ts
+++ b/web/src/pages/chat/hooks.ts
@@ -7,7 +7,14 @@ import { IConversation, IDialog } from '@/interfaces/database/chat';
import { IChunk } from '@/interfaces/database/knowledge';
import { getFileExtension } from '@/utils';
import omit from 'lodash/omit';
-import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
+import {
+ ChangeEventHandler,
+ useCallback,
+ useEffect,
+ useMemo,
+ useRef,
+ useState,
+} from 'react';
import { useDispatch, useSearchParams, useSelector } from 'umi';
import { v4 as uuid } from 'uuid';
import { ChatSearchParams } from './constants';
@@ -432,6 +439,16 @@ export const useSelectCurrentConversation = () => {
});
}, []);
+ const removeLatestMessage = useCallback(() => {
+ setCurrentConversation((pre) => {
+ const nextMessages = pre.message.slice(0, -2);
+ return {
+ ...pre,
+ message: nextMessages,
+ };
+ });
+ }, []);
+
const addPrologue = useCallback(() => {
if (dialogId !== '' && conversationId === '') {
const prologue = dialog.prompt_config?.prologue;
@@ -459,7 +476,7 @@ export const useSelectCurrentConversation = () => {
setCurrentConversation(conversation);
}, [conversation]);
- return { currentConversation, addNewestConversation };
+ return { currentConversation, addNewestConversation, removeLatestMessage };
};
export const useFetchConversation = () => {
@@ -501,7 +518,7 @@ export const useScrollToBottom = (currentConversation: IClientConversation) => {
export const useFetchConversationOnMount = () => {
const { conversationId } = useGetChatSearchParams();
const fetchConversation = useFetchConversation();
- const { currentConversation, addNewestConversation } =
+ const { currentConversation, addNewestConversation, removeLatestMessage } =
useSelectCurrentConversation();
const ref = useScrollToBottom(currentConversation);
@@ -515,16 +532,45 @@ export const useFetchConversationOnMount = () => {
fetchConversationOnMount();
}, [fetchConversationOnMount]);
- return { currentConversation, addNewestConversation, ref };
+ return {
+ currentConversation,
+ addNewestConversation,
+ ref,
+ removeLatestMessage,
+ };
};
-export const useSendMessage = () => {
+export const useHandleMessageInputChange = () => {
+ const [value, setValue] = useState('');
+
+ const handleInputChange: ChangeEventHandler = (e) => {
+ const value = e.target.value;
+ const nextValue = value.replaceAll('\\n', '\n').replaceAll('\\t', '\t');
+ setValue(nextValue);
+ };
+
+ return {
+ handleInputChange,
+ value,
+ setValue,
+ };
+};
+
+export const useSendMessage = (
+ conversation: IClientConversation,
+ addNewestConversation: (message: string) => void,
+ removeLatestMessage: () => void,
+) => {
+ const loading = useOneNamespaceEffectsLoading('chatModel', [
+ 'completeConversation',
+ ]);
const dispatch = useDispatch();
const { setConversation } = useSetConversation();
const { conversationId } = useGetChatSearchParams();
- const conversation: IClientConversation = useSelector(
- (state: any) => state.chatModel.currentConversation,
- );
+ const { handleInputChange, value, setValue } = useHandleMessageInputChange();
+ // const conversation: IClientConversation = useSelector(
+ // (state: any) => state.chatModel.currentConversation,
+ // );
const fetchConversation = useFetchConversation();
const { handleClickConversation } = useClickConversationCard();
@@ -549,10 +595,15 @@ export const useSendMessage = () => {
if (retcode === 0) {
if (id) {
+ // new conversation
handleClickConversation(id);
} else {
fetchConversation(conversationId);
}
+ } else {
+ // cancel loading
+ setValue(message);
+ removeLatestMessage();
}
},
[
@@ -561,6 +612,8 @@ export const useSendMessage = () => {
conversationId,
fetchConversation,
handleClickConversation,
+ removeLatestMessage,
+ setValue,
],
);
@@ -579,7 +632,20 @@ export const useSendMessage = () => {
[conversationId, setConversation, sendMessage],
);
- return { sendMessage: handleSendMessage };
+ const handlePressEnter = () => {
+ if (!loading) {
+ setValue('');
+ addNewestConversation(value);
+ handleSendMessage(value.trim());
+ }
+ };
+
+ return {
+ handlePressEnter,
+ handleInputChange,
+ value,
+ loading,
+ };
};
export const useGetFileIcon = () => {
diff --git a/web/src/pages/login/index.tsx b/web/src/pages/login/index.tsx
index 6050822d4..cb6aa4130 100644
--- a/web/src/pages/login/index.tsx
+++ b/web/src/pages/login/index.tsx
@@ -115,7 +115,11 @@ const Login = () => {
label="Password"
rules={[{ required: true, message: 'Please input value' }]}
>
-
+
{title === 'login' && (
diff --git a/web/src/pages/login/model.ts b/web/src/pages/login/model.ts
index 8faf0778d..eaa92fb26 100644
--- a/web/src/pages/login/model.ts
+++ b/web/src/pages/login/model.ts
@@ -51,7 +51,7 @@ const model: DvaModel = {
console.log();
const { retcode } = data;
if (retcode === 0) {
- message.success('注册成功!');
+ message.success('Registered!');
}
return retcode;
},