import TextareaAutosize from 'react-textarea-autosize'; import { EModelEndpoint, endpointSettings } from 'librechat-data-provider'; import { Input, Label, Slider, HoverCard, InputNumber, SelectDropDown, HoverCardTrigger, } from '@librechat/client'; import type { TModelSelectProps, OnInputNumberChange } from '~/common'; import { cn, defaultTextProps, optionText, removeFocusOutlines, removeFocusRings } from '~/utils'; import OptionHoverAlt from '~/components/SidePanel/Parameters/OptionHover'; import { useLocalize, useDebouncedInput } from '~/hooks'; import OptionHover from './OptionHover'; import { ESide } from '~/common'; export default function Settings({ conversation, setOption, models, readonly }: TModelSelectProps) { const localize = useLocalize(); const google = endpointSettings[EModelEndpoint.google]; const { model, modelLabel, promptPrefix, temperature, topP, topK, maxContextTokens, maxOutputTokens, } = conversation ?? {}; const [setMaxContextTokens, maxContextTokensValue] = useDebouncedInput( { setOption, optionKey: 'maxContextTokens', initialValue: maxContextTokens, }, ); if (!conversation) { return null; } const setModel = setOption('model'); const setModelLabel = setOption('modelLabel'); const setPromptPrefix = setOption('promptPrefix'); const setTemperature = setOption('temperature'); const setTopP = setOption('topP'); const setTopK = setOption('topK'); const setMaxOutputTokens = setOption('maxOutputTokens'); return (
setModelLabel(e.target.value ?? null)} placeholder={localize('com_endpoint_google_custom_name_placeholder')} className={cn( defaultTextProps, 'flex h-10 max-h-10 w-full resize-none px-3 py-2', removeFocusOutlines, )} />
setPromptPrefix(e.target.value ?? null)} placeholder={localize('com_endpoint_prompt_prefix_placeholder')} className={cn( defaultTextProps, 'flex max-h-[138px] min-h-[100px] w-full resize-none px-3 py-2', )} />
setTemperature(value ?? google.temperature.default)} max={google.temperature.max} min={google.temperature.min} step={google.temperature.step} 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])} onDoubleClick={() => setTemperature(google.temperature.default)} max={google.temperature.max} min={google.temperature.min} step={google.temperature.step} className="flex h-4 w-full" aria-labelledby="temp-int" />
setTopP(value ?? google.topP.default)} max={google.topP.max} min={google.topP.min} step={google.topP.step} 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])} onDoubleClick={() => setTopP(google.topP.default)} max={google.topP.max} min={google.topP.min} step={google.topP.step} className="flex h-4 w-full" aria-labelledby="top-p-int" />
setTopK(value ?? google.topK.default)} max={google.topK.max} min={google.topK.min} step={google.topK.step} 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', ), )} />
setTopK(value[0])} onDoubleClick={() => setTopK(google.topK.default)} max={google.topK.max} min={google.topK.min} step={google.topK.step} className="flex h-4 w-full" aria-labelledby="top-k-int" />
setMaxOutputTokens(Number(value))} max={google.maxOutputTokens.max} min={google.maxOutputTokens.min} step={google.maxOutputTokens.step} 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', ), )} />
setMaxOutputTokens(value[0])} onDoubleClick={() => setMaxOutputTokens(google.maxOutputTokens.default)} max={google.maxOutputTokens.max} min={google.maxOutputTokens.min} step={google.maxOutputTokens.step} className="flex h-4 w-full" aria-labelledby="max-tokens-int" />
); }