balibabu
Fix: Fixed the issue where two consecutive indexes were displayed incorrectly #3839 (#3988)
28d7c08
| import { MessageType } from '@/constants/chat'; | |
| import { IConversation, IReference } from '@/interfaces/database/chat'; | |
| import { isEmpty } from 'lodash'; | |
| import { EmptyConversationId } from './constants'; | |
| import { IMessage } from './interface'; | |
| export const isConversationIdExist = (conversationId: string) => { | |
| return conversationId !== EmptyConversationId && conversationId !== ''; | |
| }; | |
| export const getDocumentIdsFromConversionReference = (data: IConversation) => { | |
| const documentIds = data.reference.reduce( | |
| (pre: Array<string>, cur: IReference) => { | |
| cur.doc_aggs | |
| ?.map((x) => x.doc_id) | |
| .forEach((x) => { | |
| if (pre.every((y) => y !== x)) { | |
| pre.push(x); | |
| } | |
| }); | |
| return pre; | |
| }, | |
| [], | |
| ); | |
| return documentIds.join(','); | |
| }; | |
| export const buildMessageItemReference = ( | |
| conversation: { message: IMessage[]; reference: IReference[] }, | |
| message: IMessage, | |
| ) => { | |
| const assistantMessages = conversation.message | |
| ?.filter((x) => x.role === MessageType.Assistant) | |
| .slice(1); | |
| const referenceIndex = assistantMessages.findIndex( | |
| (x) => x.id === message.id, | |
| ); | |
| const reference = !isEmpty(message?.reference) | |
| ? message?.reference | |
| : (conversation?.reference ?? [])[referenceIndex]; | |
| return reference ?? { doc_aggs: [], chunks: [], total: 0 }; | |
| }; | |
| const oldReg = /(#{2}\d+\${2})/g; | |
| // To be compatible with the old index matching mode | |
| export const replaceTextByOldReg = (text: string) => { | |
| return text.replace(oldReg, function (substring) { | |
| return `~~${substring.slice(2, -2)}==`; | |
| }); | |
| }; | |