import { type ReactNode, useEffect } from "react"; import { Controller, useFormContext } from "react-hook-form"; import type { ModelOption } from "@/app/api/queries/useGetModelsQuery"; import { ModelSelector } from "@/app/onboarding/_components/model-selector"; import { LabelWrapper } from "@/components/label-wrapper"; interface ModelSelectorsProps { languageModels?: ModelOption[]; embeddingModels?: ModelOption[]; isLoadingModels: boolean; logo: ReactNode; languageModelName?: string; embeddingModelName?: string; } export function ModelSelectors({ languageModels, embeddingModels, isLoadingModels, logo, languageModelName = "llmModel", embeddingModelName = "embeddingModel", }: ModelSelectorsProps) { const { control, watch, formState: { errors }, setValue, } = useFormContext>(); const llmModel = watch(languageModelName); const embeddingModel = watch(embeddingModelName); const defaultLlmModel = languageModels?.find((model) => model.default)?.value || languageModels?.[0]?.value || ""; const defaultEmbeddingModel = embeddingModels?.find((model) => model.default)?.value || embeddingModels?.[0]?.value || ""; useEffect(() => { if (defaultLlmModel && !llmModel) { setValue(languageModelName, defaultLlmModel, { shouldValidate: true }); } if (defaultEmbeddingModel && !embeddingModel) { setValue(embeddingModelName, defaultEmbeddingModel, { shouldValidate: true, }); } }, [ defaultLlmModel, defaultEmbeddingModel, llmModel, embeddingModel, setValue, languageModelName, embeddingModelName, ]); return ( <> {embeddingModels !== undefined && (
( )} /> {embeddingModels.length > 0 && errors[embeddingModelName] && (

{errors[embeddingModelName]?.message as string}

)}
)} {languageModels !== undefined && (
( )} /> {languageModels.length > 0 && errors[languageModelName] && (

{errors[languageModelName]?.message as string}

)}
)} ); }