import React, { useEffect, useState } from "react"; import System from "@/models/system"; import PreLoader from "@/components/Preloader"; import { LMSTUDIO_COMMON_URLS } from "@/utils/constants"; import { CaretDown, CaretUp } from "@phosphor-icons/react"; import useProviderEndpointAutoDiscovery from "@/hooks/useProviderEndpointAutoDiscovery"; export default function LMStudioEmbeddingOptions({ settings }) { const { autoDetecting: loading, basePath, basePathValue, showAdvancedControls, setShowAdvancedControls, handleAutoDetectClick, } = useProviderEndpointAutoDiscovery({ provider: "lmstudio", initialBasePath: settings?.EmbeddingBasePath, ENDPOINTS: LMSTUDIO_COMMON_URLS, }); const [maxChunkLength, setMaxChunkLength] = useState( settings?.EmbeddingModelMaxChunkLength || 8192 ); const handleMaxChunkLengthChange = (e) => { setMaxChunkLength(Number(e.target.value)); }; return (
e.target.blur()} required={true} autoComplete="off" />

Maximum length of text chunks for embedding.

); } function LMStudioModelSelection({ settings, basePath = null }) { const [customModels, setCustomModels] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function findCustomModels() { if (!basePath) { setCustomModels([]); setLoading(false); return; } setLoading(true); try { const { models } = await System.customModels( "lmstudio", null, basePath ); setCustomModels(models || []); } catch (error) { console.error("Failed to fetch custom models:", error); setCustomModels([]); } setLoading(false); } findCustomModels(); }, [basePath]); if (loading || customModels.length == 0) { return (

Select the LM Studio model for embeddings. Models will load after entering a valid LM Studio URL.

); } return (

Choose the LM Studio model you want to use for generating embeddings.

); }