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 { SelectWithSearch } from '../originui/select-with-search'; import { FormControl, FormField, FormItem, FormLabel, FormMessage, } from '../ui/form'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '../ui/select'; import { SliderInputSwitchFormField } from './slider'; import { useHandleFreedomChange } from './use-watch-change'; interface LlmSettingFieldItemsProps { prefix?: string; options?: any[]; } export const LlmSettingSchema = { llm_id: z.string(), temperature: z.coerce.number().optional(), top_p: z.number().optional(), presence_penalty: z.coerce.number().optional(), frequency_penalty: z.coerce.number().optional(), temperatureEnabled: z.boolean().optional(), topPEnabled: z.boolean().optional(), presencePenaltyEnabled: z.boolean().optional(), frequencyPenaltyEnabled: z.boolean().optional(), maxTokensEnabled: z.boolean().optional(), max_tokens: z.number().optional(), }; export function LlmSettingFieldItems({ prefix, options, }: LlmSettingFieldItemsProps) { const form = useFormContext(); const { t } = useTranslate('chat'); const modelOptions = useComposeLlmOptionsByModelTypes([ LlmModelType.Chat, LlmModelType.Image2text, ]); const getFieldWithPrefix = useCallback( (name: string) => { return prefix ? `${prefix}.${name}` : name; }, [prefix], ); const handleChange = useHandleFreedomChange(getFieldWithPrefix); const parameterOptions = Object.values(ModelVariableType).map((x) => ({ label: t(camelCase(x)), value: x, })); return (
( {t('model')} )} /> ( {t('freedom')} )} />
); }