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 { 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] = await Promise.all([ getAllModels({ returnEmpty: true }), defaultEmbeddingChunkOverlap(), defaultEmbeddingChunkSize(), defaultEmbeddingModelForRag(), getTotalFilePerKB() ]) return { models: allModels, chunkOverlap, chunkSize, defaultEM, totalFilePerKB } } }) const { mutate: saveRAG, isPending: isSaveRAGPending } = useMutation({ mutationFn: async (data: { model: string chunkSize: number overlap: number totalFilePerKB: number }) => { await saveForRag(data.model, data.chunkSize, data.overlap, data.totalFilePerKB) return true }, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["fetchRAGSettings"] }) } }) return (
{status === "pending" && } {status === "success" && (

{t("rag.ragSettings.label")}

{ saveRAG({ model: data.defaultEM, chunkSize: data.chunkSize, overlap: data.chunkOverlap, totalFilePerKB: data.totalFilePerKB }) }} initialValues={{ chunkSize: ollamaInfo?.chunkSize, chunkOverlap: ollamaInfo?.chunkOverlap, defaultEM: ollamaInfo?.defaultEM, totalFilePerKB: ollamaInfo?.totalFilePerKB }}>