generic-chatbot-admin / src /shared /utils /parseDocumnetsInLlmAnswer.ts
muryshev's picture
init
79278ec
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 };
};