import React, { useEffect, useState } from "react"; import Sidebar from "@/components/SettingsSidebar"; import { isMobile } from "react-device-detect"; import PreLoader from "@/components/Preloader"; import CTAButton from "@/components/lib/CTAButton"; import Admin from "@/models/admin"; import showToast from "@/utils/toast"; import { numberWithCommas } from "@/utils/numbers"; import { useTranslation } from "react-i18next"; import { useModal } from "@/hooks/useModal"; import ModalWrapper from "@/components/ModalWrapper"; import ChangeWarningModal from "@/components/ChangeWarning"; function isNullOrNaN(value) { if (value === null) return true; return isNaN(value); } export default function EmbeddingTextSplitterPreference() { const [settings, setSettings] = useState({}); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [hasChanges, setHasChanges] = useState(false); const { isOpen, openModal, closeModal } = useModal(); const { t } = useTranslation(); const handleSubmit = async (e) => { e.preventDefault(); const form = new FormData(e.target); if ( Number(form.get("text_splitter_chunk_overlap")) >= Number(form.get("text_splitter_chunk_size")) ) { showToast( "Chunk overlap cannot be larger or equal to chunk size.", "error" ); return; } openModal(); }; const handleSaveSettings = async () => { setSaving(true); try { const form = new FormData( document.getElementById("text-splitter-chunking-form") ); await Admin.updateSystemPreferences({ text_splitter_chunk_size: isNullOrNaN( form.get("text_splitter_chunk_size") ) ? 1000 : Number(form.get("text_splitter_chunk_size")), text_splitter_chunk_overlap: isNullOrNaN( form.get("text_splitter_chunk_overlap") ) ? 1000 : Number(form.get("text_splitter_chunk_overlap")), }); setHasChanges(false); closeModal(); showToast("Text chunking strategy settings saved.", "success"); } catch (error) { showToast("Failed to save text chunking strategy settings.", "error"); } finally { setSaving(false); } }; useEffect(() => { async function fetchSettings() { const _settings = (await Admin.systemPreferences())?.settings; setSettings(_settings ?? {}); setLoading(false); } fetchSettings(); }, []); return (