Spaces:
Running
Running
File size: 4,027 Bytes
79278ec |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import { useMutation, UseMutationResult, useQuery, useQueryClient } from "@tanstack/react-query";
import { useRef } from "react";
import {
LlmResponseType,
LlmRequestType,
ChunksResponseType,
ChunksArrayItem,
ChunkRequestType,
FeedbackRequestType,
LogRequestType,
} from "./types";
import { getLlmResponse, getChunks, postFeedback, getLogs, getAbbreviations } from "./predictionsApi";
export function useGetLlmResponse() {
const queryClient = useQueryClient();
const abortControllerRef = useRef<AbortController | null>(null);
const cancelQuery = () => {
if (abortControllerRef.current) {
abortControllerRef.current.abort();
abortControllerRef.current = null;
}
queryClient.cancelQueries({ queryKey: ["llm"] });
};
const mutation: UseMutationResult<LlmResponseType | undefined, Error, LlmRequestType, unknown> = useMutation({
mutationFn: async (data: LlmRequestType) => {
// Отменить предыдущий запрос
if (abortControllerRef.current) {
abortControllerRef.current.abort();
}
const abortController = new AbortController();
abortControllerRef.current = abortController;
try {
const response = await getLlmResponse(data, abortController.signal);
return response;
} catch (error) {
if (error instanceof Error && error.name === "AbortError") {
console.log("Запрос был отменен");
return undefined;
} else {
throw error;
}
} finally {
if (abortControllerRef.current === abortController) {
abortControllerRef.current = null;
}
}
},
onSuccess: () => {},
onError: () => {},
});
return { mutation, cancelQuery };
}
export function useGetChunks() {
const queryClient = useQueryClient();
const abortControllerRef = useRef<AbortController | null>(null);
const cancelQuery = () => {
if (abortControllerRef.current) {
abortControllerRef.current.abort();
abortControllerRef.current = null;
}
queryClient.cancelQueries({ queryKey: ["predictions"] });
};
const mutation: UseMutationResult<
{ chunks: ChunksResponseType; chunksArray: ChunksArrayItem[] } | undefined,
Error,
ChunkRequestType,
unknown
> = useMutation({
mutationFn: async (data: ChunkRequestType) => {
// Отменить предыдущий запрос
if (abortControllerRef.current) {
abortControllerRef.current.abort();
}
const abortController = new AbortController();
abortControllerRef.current = abortController;
try {
const response = await getChunks(data, abortController.signal);
return response;
} catch (error) {
if (error instanceof Error && error.name === "AbortError") {
console.log("Запрос был отменен");
return undefined;
} else {
throw error;
}
} finally {
if (abortControllerRef.current === abortController) {
abortControllerRef.current = null;
}
}
},
onSuccess: () => {
// if (chunksData) {
// llmMutation.mutate({ query: query, chunks: chunksData });
// }
},
onError: () => {},
});
return { mutation, cancelQuery };
}
export const usePostFeedback = () => {
return useMutation({
mutationFn: async (data: FeedbackRequestType) => {
const response = await postFeedback(data);
return response;
},
onSuccess: () => {},
onError: () => {},
});
};
export const useGetLogs = () => {
return useMutation({
mutationKey: ["logs"],
mutationFn: async (data: LogRequestType | undefined) => {
const response = await getLogs(data);
return response;
},
});
};
export const useGetAbbreviations = () => {
return useQuery({
queryKey: ["abbreviations"],
queryFn: async () => {
const response = await getAbbreviations();
return response;
},
});
};
|