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