import { query } from "@/shared/api/query"; import axios from "axios"; import { parseDocumetnsInLlmAnswer } from "@/shared/utils/parseDocumnetsInLlmAnswer"; import { ChunkRequestType, ChunksResponseType, ChunksArrayItem, ChunkType, LlmRequestType, LlmResponseType, FeedbackRequestType, FeedbackResponseType, LogRequestType, LogResponseType, AbbreviationsDataType, AbbreviationsResponseDataType, } from "./types"; export const getChunks = async ( data: ChunkRequestType, signal: AbortSignal ): Promise<{ chunks: ChunksResponseType; chunksArray: ChunksArrayItem[] }> => { const response = await query({ url: "/chunks", method: "post", data, signal, }); if ("error" in response) { if (axios.isCancel(response.error)) { console.log("Запроса был отменен"); } throw new Error(`Ошибка: ${response.error.status}`); } const chunksArray: ChunksArrayItem[] = []; // Проверки на null добавлены для корретной сквозной нумерации результатов в случае, // если чанков одного типа не пришло с бэка if (response.data.doc_chunks !== null) { response.data.doc_chunks?.forEach((element) => { chunksArray.push({ type: ChunkType.doc_chunks, number: chunksArray.length, chunk: { doc_chunks: element }, }); }); } if (response.data.people_search !== null) { response.data.people_search?.forEach((element) => { chunksArray.push({ type: ChunkType.people_search, number: chunksArray.length, chunk: { people_search: element }, }); }); } if (response.data.groups_search !== null) { chunksArray.push({ type: ChunkType.groups_search, number: chunksArray.length, chunk: { groups_search: response.data.groups_search }, }); } if (response.data.rocks_nn_search !== null) { chunksArray.push({ type: ChunkType.rocks_nn_search, number: chunksArray.length, chunk: { rocks_nn_search: response.data.rocks_nn_search }, }); } if (response.data.segmentation_search !== null) { chunksArray.push({ type: ChunkType.segmentation_search, number: chunksArray.length, chunk: { segmentation_search: response.data.segmentation_search }, }); } return { chunks: response.data, chunksArray }; }; export const getLlmResponse = async ( data: LlmRequestType, signal: AbortSignal ): Promise => { const response = await query({ url: "/answer_llm", method: "post", data: { query: data.query, chunks: data.chunks }, signal, }); if ("error" in response) { if (axios.isCancel(response.error)) { console.log("Запроса был отменен"); } throw new Error(`Ошибка: ${response.error.status}`); } const { matches, resultString } = parseDocumetnsInLlmAnswer( response.data.answer_llm, data.chunksArray ); return { answer_llm: resultString, log_id: response.data.log_id, documentsNumbers: matches, }; }; export const postFeedback = async ( data: FeedbackRequestType ): Promise => { const response = await query({ url: "/feedback", method: "post", data, }); if ("error" in response) { throw new Error(`Ошибка: ${response.error.status}`); } return response.data; }; export const getLogs = async ( data: LogRequestType | undefined ): Promise => { const response = await query({ url: "/logs", method: "get", params: data, }); if ("error" in response) { throw new Error(`Ошибка: ${response.error.status}`); } return response.data; }; export const getAbbreviations = async (): Promise => { const response = await query({ url: "/collection/default", method: "get", }); if ("error" in response) { throw new Error(`Ошибка: ${response.error.status}`); } return response.data.acronyms; };