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