import { useState } from "react"; import { LabelInput } from "@/components/label-input"; import { LabelWrapper } from "@/components/label-wrapper"; import OllamaLogo from "@/components/logo/ollama-logo"; import type { OnboardingVariables } from "../../api/mutations/useOnboardingMutation"; import { useGetOllamaModelsQuery } from "../../api/queries/useGetModelsQuery"; import { useModelSelection } from "../hooks/useModelSelection"; import { useUpdateSettings } from "../hooks/useUpdateSettings"; import { useDebouncedValue } from "@/lib/debounce"; import { AdvancedOnboarding } from "./advanced"; import { ModelSelector } from "./model-selector"; export function OllamaOnboarding({ setSettings, sampleDataset, setSampleDataset, }: { setSettings: (settings: OnboardingVariables) => void; sampleDataset: boolean; setSampleDataset: (dataset: boolean) => void; }) { const [endpoint, setEndpoint] = useState(""); const debouncedEndpoint = useDebouncedValue(endpoint, 500); // Fetch models from API when endpoint is provided (debounced) const { data: modelsData, isLoading: isLoadingModels, error: modelsError, } = useGetOllamaModelsQuery( debouncedEndpoint ? { endpoint: debouncedEndpoint } : undefined, ); // Use custom hook for model selection logic const { languageModel, embeddingModel, setLanguageModel, setEmbeddingModel, languageModels, embeddingModels, } = useModelSelection(modelsData); const handleSampleDatasetChange = (dataset: boolean) => { setSampleDataset(dataset); }; // Update settings when values change useUpdateSettings( "ollama", { endpoint, languageModel, embeddingModel, }, setSettings, ); // Check validation state based on models query const isConnecting = debouncedEndpoint && isLoadingModels; const hasConnectionError = debouncedEndpoint && modelsError; const hasNoModels = modelsData && !modelsData.language_models?.length && !modelsData.embedding_models?.length; const isValidConnection = modelsData && (modelsData.language_models?.length > 0 || modelsData.embedding_models?.length > 0); return ( <>
Connecting to Ollama server...
)} {hasConnectionError && (Cannot connect to Ollama server. Please check the endpoint.
)} {hasNoModels && (No models found. Please install some models on your Ollama server.
)} {isValidConnection && (Connected successfully
)}