mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-21 19:00:13 +01:00
* feat: add zod schemas for better type safety * refactor(useSetOptions): remove 'as Type' in favor of zod schema * fix: descendant console error, change <p> tag to <div> tag for content in PluginTooltip component * style(MessagesView): instant/snappier scroll behavior matching official site * fix(Messages): add null check for scrollableRef before accessing its properties in handleScroll and useEffect * fix(messageSchema.js): change type of invocationId from string to number fix(schemas.ts): make authenticated property in tPluginSchema optional fix(schemas.ts): make isButton property in tPluginSchema optional fix(schemas.ts): make messages property in tConversationSchema optional and change its type to array of strings fix(schemas.ts): make systemMessage property in tConversationSchema nullable and optional fix(schemas.ts): make modelLabel property in tConversationSchema nullable and optional fix(schemas.ts): make chatGptLabel property in tConversationSchema nullable and optional fix(schemas.ts): make promptPrefix property in tConversationSchema nullable and optional fix(schemas.ts): make context property in tConversationSchema nullable and optional fix(schemas.ts): make jailbreakConversationId property in tConversationSchema nullable and optional fix(schemas.ts): make conversationSignature property in tConversationSchema nullable and optional fix(schemas.ts): make clientId property * refactor(types): replace main types with zod schemas and inferred types * refactor(types/schemas): use schemas for better type safety of main types * style(ModelSelect/Buttons): remove shadow and transition * style(ModelSelect): button changes to closer match OpenAI * style(ModelSelect): remove green rings which flicker * style(scrollToBottom): add two separate scrolling functions * fix(OptionsBar.tsx): handle onFocus and onBlur events to update opacityClass fix(Messages/index.jsx): increase debounce time for scrollIntoView function
78 lines
2.8 KiB
TypeScript
78 lines
2.8 KiB
TypeScript
import { useRecoilValue } from 'recoil';
|
|
import { SelectDropDown, Tabs, TabsList, TabsTrigger } from '~/components/ui';
|
|
import { cn, cardStyle } from '~/utils/';
|
|
import { ModelSelectProps } from 'librechat-data-provider';
|
|
import store from '~/store';
|
|
|
|
export default function BingAI({ conversation, setOption, models }: ModelSelectProps) {
|
|
const showBingToneSetting = useRecoilValue(store.showBingToneSetting);
|
|
if (!conversation) {
|
|
return null;
|
|
}
|
|
const { conversationId, toneStyle, jailbreak } = conversation;
|
|
if (conversationId !== 'new' && !showBingToneSetting) {
|
|
return null;
|
|
}
|
|
|
|
const defaultClasses =
|
|
'p-2 rounded-md min-w-[75px] font-normal bg-white/[.60] dark:bg-gray-700 text-black text-xs';
|
|
const defaultSelected = cn(
|
|
defaultClasses,
|
|
'font-medium data-[state=active]:text-white text-xs text-white',
|
|
);
|
|
const selectedClass = (val: string) => val + '-tab ' + defaultSelected;
|
|
|
|
return (
|
|
<>
|
|
<SelectDropDown
|
|
title="Mode"
|
|
value={jailbreak ? 'Sydney' : 'BingAI'}
|
|
data-testid="bing-select-dropdown"
|
|
setValue={(value) => setOption('jailbreak')(value === 'Sydney')}
|
|
availableValues={models}
|
|
showAbove={true}
|
|
showLabel={false}
|
|
className={cn(
|
|
cardStyle,
|
|
'z-50 flex h-[40px] w-36 flex-none items-center justify-center px-4 ring-0 hover:cursor-pointer hover:bg-slate-50 focus:ring-0 focus:ring-offset-0 data-[state=open]:bg-slate-50 dark:bg-gray-800 dark:hover:bg-gray-700 dark:data-[state=open]:bg-gray-600',
|
|
showBingToneSetting ? 'hidden' : '',
|
|
)}
|
|
/>
|
|
<Tabs
|
|
value={toneStyle ?? 'creative'}
|
|
className={cn(
|
|
cardStyle,
|
|
'z-50 flex h-[40px] flex-none items-center justify-center px-0 hover:bg-slate-50 dark:hover:bg-gray-700',
|
|
)}
|
|
onValueChange={(value) => setOption('toneStyle')(value.toLowerCase())}
|
|
>
|
|
<TabsList className="bg-white/[.60] dark:bg-gray-700">
|
|
<TabsTrigger
|
|
value="creative"
|
|
className={`${toneStyle === 'creative' ? selectedClass('creative') : defaultClasses}`}
|
|
>
|
|
{'Creative'}
|
|
</TabsTrigger>
|
|
<TabsTrigger
|
|
value="fast"
|
|
className={`${toneStyle === 'fast' ? selectedClass('fast') : defaultClasses}`}
|
|
>
|
|
{'Fast'}
|
|
</TabsTrigger>
|
|
<TabsTrigger
|
|
value="balanced"
|
|
className={`${toneStyle === 'balanced' ? selectedClass('balanced') : defaultClasses}`}
|
|
>
|
|
{'Balanced'}
|
|
</TabsTrigger>
|
|
<TabsTrigger
|
|
value="precise"
|
|
className={`${toneStyle === 'precise' ? selectedClass('precise') : defaultClasses}`}
|
|
>
|
|
{'Precise'}
|
|
</TabsTrigger>
|
|
</TabsList>
|
|
</Tabs>
|
|
</>
|
|
);
|
|
}
|