import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" import { Form, InputNumber, Select, Skeleton } from "antd" import { SaveButton } from "~/components/Common/SaveButton" import { defaultEmbeddingChunkOverlap, defaultEmbeddingChunkSize, defaultEmbeddingModelForRag, getAllModels, saveForRag } from "~/services/ollama" import { SettingPrompt } from "./prompt" import { useTranslation } from "react-i18next" import { getNoOfRetrievedDocs, getTotalFilePerKB } from "@/services/app" import { SidepanelRag } from "./sidepanel-rag" export const RagSettings = () => { const { t } = useTranslation("settings") const queryClient = useQueryClient() const { data: ollamaInfo, status } = useQuery({ queryKey: ["fetchRAGSettings"], queryFn: async () => { const [ allModels, chunkOverlap, chunkSize, defaultEM, totalFilePerKB, noOfRetrievedDocs ] = await Promise.all([ getAllModels({ returnEmpty: true }), defaultEmbeddingChunkOverlap(), defaultEmbeddingChunkSize(), defaultEmbeddingModelForRag(), getTotalFilePerKB(), getNoOfRetrievedDocs() ]) return { models: allModels, chunkOverlap, chunkSize, defaultEM, totalFilePerKB, noOfRetrievedDocs } } }) const { mutate: saveRAG, isPending: isSaveRAGPending } = useMutation({ mutationFn: async (data: { model: string chunkSize: number overlap: number totalFilePerKB: number noOfRetrievedDocs: number }) => { await saveForRag( data.model, data.chunkSize, data.overlap, data.totalFilePerKB, data.noOfRetrievedDocs ) return true }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["fetchRAGSettings"] }) } }) return (