"use client"; import { ChevronRight } from "lucide-react"; import { useEffect } from "react"; import { useGetIBMModelsQuery, useGetOllamaModelsQuery, useGetOpenAIModelsQuery, } from "@/app/api/queries/useGetModelsQuery"; import { useGetSettingsQuery } from "@/app/api/queries/useGetSettingsQuery"; import type { ModelOption } from "@/app/onboarding/_components/model-selector"; import { getFallbackModels, type ModelProvider, } from "@/app/settings/_helpers/model-helpers"; import { ModelSelectItems } from "@/app/settings/_helpers/model-select-item"; import { LabelWrapper } from "@/components/label-wrapper"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { NumberInput } from "@/components/ui/inputs/number-input"; import { Select, SelectContent, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, TooltipTrigger, } from "@/components/ui/tooltip"; import { useAuth } from "@/contexts/auth-context"; import type { IngestSettings as IngestSettingsType } from "./types"; interface IngestSettingsProps { isOpen: boolean; onOpenChange: (open: boolean) => void; settings?: IngestSettingsType; onSettingsChange?: (settings: IngestSettingsType) => void; } export const IngestSettings = ({ isOpen, onOpenChange, settings, onSettingsChange, }: IngestSettingsProps) => { const { isAuthenticated, isNoAuthMode } = useAuth(); // Fetch settings from API to get current embedding model const { data: apiSettings = {} } = useGetSettingsQuery({ enabled: isAuthenticated || isNoAuthMode, }); // Get the current provider from API settings const currentProvider = (apiSettings.knowledge?.embedding_provider || "openai") as ModelProvider; // Fetch available models based on provider const { data: openaiModelsData } = useGetOpenAIModelsQuery(undefined, { enabled: (isAuthenticated || isNoAuthMode) && currentProvider === "openai", }); const { data: ollamaModelsData } = useGetOllamaModelsQuery(undefined, { enabled: (isAuthenticated || isNoAuthMode) && currentProvider === "ollama", }); const { data: ibmModelsData } = useGetIBMModelsQuery(undefined, { enabled: (isAuthenticated || isNoAuthMode) && currentProvider === "watsonx", }); // Select the appropriate models data based on provider const modelsData = currentProvider === "openai" ? openaiModelsData : currentProvider === "ollama" ? ollamaModelsData : currentProvider === "watsonx" ? ibmModelsData : openaiModelsData; // Get embedding model from API settings const apiEmbeddingModel = apiSettings.knowledge?.embedding_model || modelsData?.embedding_models?.find((m) => m.default)?.value || "text-embedding-3-small"; // Default settings - use API embedding model const defaultSettings: IngestSettingsType = { chunkSize: 1000, chunkOverlap: 200, ocr: false, pictureDescriptions: false, embeddingModel: apiEmbeddingModel, }; // Use provided settings or defaults const currentSettings = settings || defaultSettings; // Update settings when API embedding model changes useEffect(() => { if ( apiEmbeddingModel && (!settings || settings.embeddingModel !== apiEmbeddingModel) ) { onSettingsChange?.({ ...currentSettings, embeddingModel: apiEmbeddingModel, }); } }, [apiEmbeddingModel, settings, onSettingsChange, currentSettings]); const handleSettingsChange = (newSettings: Partial) => { const updatedSettings = { ...currentSettings, ...newSettings }; onSettingsChange?.(updatedSettings); }; return (
Ingest settings
{/* Embedding model selection */}
handleSettingsChange({ chunkSize: value })} unit="characters" />
handleSettingsChange({ chunkOverlap: value }) } unit="characters" />
{/*
Table Structure
Capture table structure during ingest.
handleSettingsChange({ tableStructure: checked }) } />
*/}
OCR
Extracts text from images/PDFs. Ingest is slower when enabled.
handleSettingsChange({ ocr: checked }) } />
Picture descriptions
Adds captions for images. Ingest is more expensive when enabled.
handleSettingsChange({ pictureDescriptions: checked }) } />
); };