import TextareaAutosize from 'react-textarea-autosize'; import { ImageDetail, imageDetailNumeric, imageDetailValue } from 'librechat-data-provider'; import { Input, Label, Switch, Slider, HoverCard, InputNumber, SelectDropDown, HoverCardTrigger, } from '~/components/ui'; import { cn, defaultTextProps, optionText, removeFocusOutlines } from '~/utils/'; import type { TModelSelectProps } from '~/common'; import OptionHover from './OptionHover'; import { useLocalize } from '~/hooks'; import { ESide } from '~/common'; export default function Settings({ conversation, setOption, models, readonly }: TModelSelectProps) { const localize = useLocalize(); if (!conversation) { return null; } const { endpoint, endpointType, model, chatGptLabel, promptPrefix, temperature, top_p: topP, frequency_penalty: freqP, presence_penalty: presP, resendImages, imageDetail, } = conversation; const setModel = setOption('model'); const setChatGptLabel = setOption('chatGptLabel'); const setPromptPrefix = setOption('promptPrefix'); const setTemperature = setOption('temperature'); const setTopP = setOption('top_p'); const setFreqP = setOption('frequency_penalty'); const setPresP = setOption('presence_penalty'); const setResendImages = setOption('resendImages'); const setImageDetail = setOption('imageDetail'); const optionEndpoint = endpointType ?? endpoint; return (
setChatGptLabel(e.target.value ?? null)} placeholder={localize('com_endpoint_openai_custom_name_placeholder')} className={cn( defaultTextProps, 'dark:bg-gray-700 dark:hover:bg-gray-700/60 dark:focus:bg-gray-700', 'flex h-10 max-h-10 w-full resize-none px-3 py-2', removeFocusOutlines, )} />
setPromptPrefix(e.target.value ?? null)} placeholder={localize('com_endpoint_openai_prompt_prefix_placeholder')} className={cn( defaultTextProps, 'dark:bg-gray-700 dark:hover:bg-gray-700/60 dark:focus:bg-gray-700', 'flex max-h-[138px] min-h-[100px] w-full resize-none px-3 py-2 ', )} />
setTemperature(Number(value))} max={2} min={0} step={0.01} controls={false} className={cn( defaultTextProps, cn( optionText, 'reset-rc-number-input reset-rc-number-input-text-right h-auto w-12 border-0 group-hover/temp:border-gray-200', ), )} />
setTemperature(value[0])} doubleClickHandler={() => setTemperature(1)} max={2} min={0} step={0.01} className="flex h-4 w-full" />
setTopP(Number(value))} max={1} min={0} step={0.01} controls={false} className={cn( defaultTextProps, cn( optionText, 'reset-rc-number-input reset-rc-number-input-text-right h-auto w-12 border-0 group-hover/temp:border-gray-200', ), )} />
setTopP(value[0])} doubleClickHandler={() => setTopP(1)} max={1} min={0} step={0.01} className="flex h-4 w-full" />
setFreqP(Number(value))} max={2} min={-2} step={0.01} controls={false} className={cn( defaultTextProps, cn( optionText, 'reset-rc-number-input reset-rc-number-input-text-right h-auto w-12 border-0 group-hover/temp:border-gray-200', ), )} />
setFreqP(value[0])} doubleClickHandler={() => setFreqP(0)} max={2} min={-2} step={0.01} className="flex h-4 w-full" />
setPresP(Number(value))} max={2} min={-2} step={0.01} controls={false} className={cn( defaultTextProps, cn( optionText, 'reset-rc-number-input reset-rc-number-input-text-right h-auto w-12 border-0 group-hover/temp:border-gray-200', ), )} />
setPresP(value[0])} doubleClickHandler={() => setPresP(0)} max={2} min={-2} step={0.01} className="flex h-4 w-full" />
setResendImages(checked)} disabled={readonly} className="flex" /> setImageDetail(imageDetailValue[value[0]])} doubleClickHandler={() => setImageDetail(ImageDetail.auto)} max={2} min={0} step={1} />
); }