import { useEffect, useState } from 'react'; import TextareaAutosize from 'react-textarea-autosize'; import { Label } from '~/components/ui/Label.tsx'; import { Checkbox } from '~/components/ui/Checkbox.tsx'; import SelectDropDown from '../../ui/SelectDropDown'; import { cn } from '~/utils/'; import useDebounce from '~/hooks/useDebounce'; import { useUpdateTokenCountMutation } from '~/data-provider'; const defaultTextProps = 'rounded-md border border-gray-200 focus:border-slate-400 focus:bg-gray-50 bg-transparent text-sm shadow-[0_0_10px_rgba(0,0,0,0.05)] outline-none placeholder:text-gray-400 focus:outline-none focus:ring-gray-400 focus:ring-opacity-20 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-500 dark:bg-gray-700 focus:dark:bg-gray-600 dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:focus:border-gray-400 dark:focus:outline-none dark:focus:ring-0 dark:focus:ring-gray-400 dark:focus:ring-offset-0'; function Settings(props) { const { readonly, context, systemMessage, jailbreak, toneStyle, setOption } = props; const [tokenCount, setTokenCount] = useState(0); const showSystemMessage = jailbreak; const setContext = setOption('context'); const setSystemMessage = setOption('systemMessage'); const setJailbreak = setOption('jailbreak'); const setToneStyle = (value) => setOption('toneStyle')(value.toLowerCase()); const debouncedContext = useDebounce(context, 250); const updateTokenCountMutation = useUpdateTokenCountMutation(); useEffect(() => { if (!debouncedContext || debouncedContext.trim() === '') { setTokenCount(0); return; } const handleTextChange = (context) => { updateTokenCountMutation.mutate( { text: context }, { onSuccess: (data) => { setTokenCount(data.count); } } ); }; handleTextChange(debouncedContext); // eslint-disable-next-line react-hooks/exhaustive-deps }, [debouncedContext]); return (
setContext(e.target.value || null)} placeholder="Bing can use up to 7k tokens for 'context', which it can reference for the conversation. The specific limit is not known but may run into errors exceeding 7k tokens" className={cn( defaultTextProps, 'flex max-h-[300px] min-h-[100px] w-full resize-none px-3 py-2' )} /> {`Token count: ${tokenCount}`}
{showSystemMessage && (
setSystemMessage(e.target.value || null)} placeholder="WARNING: Misuse of this feature can get you BANNED from using Bing! Click on 'System Message' for full instructions and the default message if omitted, which is the 'Sydney' preset that is considered safe." className={cn( defaultTextProps, 'flex max-h-[300px] min-h-[100px] w-full resize-none px-3 py-2 placeholder:text-red-400' )} />
)}
); } export default Settings;