|
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; |
|
|
|
|
|
export const replaceTextByOldReg = (text: string) => { |
|
return text.replace(oldReg, function (substring) { |
|
return `~~${substring.slice(2, -2)}==`; |
|
}); |
|
}; |
|
|