import { LlmModelType, ModelVariableType } from '@/constants/knowledge'; import { useTranslate } from '@/hooks/common-hooks'; import { useComposeLlmOptionsByModelTypes } from '@/hooks/llm-hooks'; import { camelCase } from 'lodash'; import { useCallback } from 'react'; import { useFormContext } from 'react-hook-form'; import { z } from 'zod'; import { FormControl, FormField, FormItem, FormLabel, FormMessage, } from '../ui/form'; import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, } from '../ui/select'; import { SliderInputSwitchFormField } from './slider'; import { useHandleFreedomChange } from './use-watch-change'; interface LlmSettingFieldItemsProps { prefix?: string; } export const LlmSettingSchema = { llm_id: z.string(), temperature: z.coerce.number(), top_p: z.string(), presence_penalty: z.coerce.number(), frequency_penalty: z.coerce.number(), temperatureEnabled: z.boolean(), topPEnabled: z.boolean(), presencePenaltyEnabled: z.boolean(), frequencyPenaltyEnabled: z.boolean(), maxTokensEnabled: z.boolean(), }; export function LlmSettingFieldItems({ prefix }: LlmSettingFieldItemsProps) { const form = useFormContext(); const { t } = useTranslate('chat'); const modelOptions = useComposeLlmOptionsByModelTypes([ LlmModelType.Chat, LlmModelType.Image2text, ]); // useWatchFreedomChange(); const handleChange = useHandleFreedomChange(); const parameterOptions = Object.values(ModelVariableType).map((x) => ({ label: t(camelCase(x)), value: x, })); const getFieldWithPrefix = useCallback( (name: string) => { return prefix ? `${prefix}.${name}` : name; }, [prefix], ); return (