import { useMutation, useQuery } from "@tanstack/react-query" import { Form, InputNumber, Select, Skeleton } from "antd" import { useState } from "react" import { SaveButton } from "~/components/Common/SaveButton" import { defaultEmbeddingChunkOverlap, defaultEmbeddingChunkSize, defaultEmbeddingModelForRag, getAllModels, getOllamaURL, saveForRag, setOllamaURL as saveOllamaURL } from "~/services/ollama" import { SettingPrompt } from "./prompt" import { useTranslation } from "react-i18next" export const SettingsOllama = () => { const [ollamaURL, setOllamaURL] = useState("") const { t } = useTranslation("settings") const { data: ollamaInfo, status } = useQuery({ queryKey: ["fetchOllamURL"], queryFn: async () => { const [ollamaURL, allModels, chunkOverlap, chunkSize, defaultEM] = await Promise.all([ getOllamaURL(), getAllModels({ returnEmpty: true }), defaultEmbeddingChunkOverlap(), defaultEmbeddingChunkSize(), defaultEmbeddingModelForRag() ]) setOllamaURL(ollamaURL) return { models: allModels, chunkOverlap, chunkSize, defaultEM } } }) const { mutate: saveRAG, isPending: isSaveRAGPending } = useMutation({ mutationFn: async (data: { model: string chunkSize: number overlap: number }) => { await saveForRag(data.model, data.chunkSize, data.overlap) } }) return (
{status === "pending" && } {status === "success" && (

{t("ollamaSettings.heading")}

{ setOllamaURL(e.target.value) }} placeholder={t("ollamaSettings.settings.ollamaUrl.placeholder")} className="w-full p-2 border border-gray-300 rounded-md dark:bg-[#262626] dark:text-gray-100" />
{ saveOllamaURL(ollamaURL) }} className="mt-2" />

{t("ollamaSettings.settings.ragSettings.label")}

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