File size: 2,750 Bytes
79278ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { ChunksArrayItem, ChunkType } from "@/api/predictions/types";

export const parseDocumetnsInLlmAnswer = (text: string, chunks: ChunksArrayItem[]) => {
  const documentsListString = "Список докумен";
  const initialString = text;
  const index = initialString.indexOf(documentsListString);
  const documentsSubstring = initialString.substring(index);
  const regex = /\[(\d+)\]/g;
  let match;

  const matches: number[] = [];
  let resultString = initialString.substring(0, index);

  while ((match = regex.exec(documentsSubstring)) !== null) {
    const number = Number(match[1]);
    if (number != null) {
      matches.push(number - 1);
    }
  }
  const documentsList = matches
    .map((matchNumber) => {
      let docName: string = "";
      if (chunks[matchNumber]) {
        switch (chunks[matchNumber].type) {
          case ChunkType.doc_chunks:
            if (chunks[matchNumber].chunk.doc_chunks) {
              docName =
                chunks[matchNumber].chunk.doc_chunks?.title && chunks[matchNumber].chunk.doc_chunks?.title !== "unknown"
                  ? chunks[matchNumber].chunk.doc_chunks?.title.trim()
                  : chunks[matchNumber].chunk.doc_chunks?.filename.replace(".json", "").trim();
            }
            break;
          case ChunkType.people_search:
            if (chunks[matchNumber].chunk.people_search) {
              docName = `Информация о сотруднике ${chunks[matchNumber].chunk.people_search?.person_name.trim()}`;
            }
            break;
          case ChunkType.groups_search:
            if (chunks[matchNumber].chunk.groups_search) {
              docName = `Информация о группе ${chunks[matchNumber].chunk.groups_search?.group_name.trim()}`;
            }
            break;
          case ChunkType.rocks_nn_search:
            if (chunks[matchNumber].chunk.rocks_nn_search) {
              docName = `Информация о РОКС ${chunks[matchNumber].chunk.rocks_nn_search?.division.trim()}`;
            }
            break;
          case ChunkType.segmentation_search:
            if (chunks[matchNumber].chunk.segmentation_search) {
              docName = `Информация модели сегментации ${chunks[
                matchNumber
              ].chunk.segmentation_search?.segmentation_model.trim()}`;
            }
            break;
          default:
            break;
        }
        return `Документ ${matchNumber + 1}. ${docName} \n`;
      }
    })
    .join("");

  if (matches.length > 0) {
    resultString = resultString + "\n" + "Список документов:\n" + documentsList + "\n" + "Конец ответа.";
  }

  return { matches, resultString };
};