File size: 1,596 Bytes
cb33b9e
6a6f6eb
faaabea
13080d4
8441328
058cd84
6a6f6eb
aa396c5
 
6a6f6eb
 
 
 
 
cb33b9e
6a6f6eb
 
 
 
 
 
 
 
 
 
 
cb33b9e
 
8441328
cb33b9e
 
 
 
 
 
 
 
faaabea
cb33b9e
faaabea
cb33b9e
faaabea
cb33b9e
30090ae
 
 
28d7c08
30090ae
 
28d7c08
30090ae
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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)}==`;
  });
};