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