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, 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)}==`; }); };