Spaces:
Running
Running
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 };
};
|