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 }; };