| import { useRecoilValue } from 'recoil'; | |
| import { OpenAISettings, BingAISettings, AnthropicSettings } from './Settings'; | |
| import { GoogleSettings, PluginsSettings } from './Settings/MultiView'; | |
| import type { TSettingsProps, TModelSelectProps, TBaseSettingsProps, TModels } from '~/common'; | |
| import { cn } from '~/utils'; | |
| import store from '~/store'; | |
| const optionComponents: { [key: string]: React.FC<TModelSelectProps> } = { | |
| openAI: OpenAISettings, | |
| azureOpenAI: OpenAISettings, | |
| bingAI: BingAISettings, | |
| anthropic: AnthropicSettings, | |
| }; | |
| const multiViewComponents: { [key: string]: React.FC<TBaseSettingsProps & TModels> } = { | |
| google: GoogleSettings, | |
| gptPlugins: PluginsSettings, | |
| }; | |
| export default function Settings({ | |
| conversation, | |
| setOption, | |
| isPreset = false, | |
| className = '', | |
| }: TSettingsProps) { | |
| const modelsConfig = useRecoilValue(store.modelsConfig); | |
| if (!conversation?.endpoint) { | |
| return null; | |
| } | |
| const { endpoint } = conversation; | |
| const models = modelsConfig?.[endpoint] ?? []; | |
| const OptionComponent = optionComponents[endpoint]; | |
| if (OptionComponent) { | |
| return ( | |
| <div className={cn('h-[480px] overflow-y-auto md:mb-2 md:h-[350px]', className)}> | |
| <OptionComponent | |
| conversation={conversation} | |
| setOption={setOption} | |
| models={models} | |
| isPreset={isPreset} | |
| /> | |
| </div> | |
| ); | |
| } | |
| const MultiViewComponent = multiViewComponents[endpoint]; | |
| if (!MultiViewComponent) { | |
| return null; | |
| } | |
| return ( | |
| <div className={cn('h-[480px] overflow-y-auto md:mb-2 md:h-[350px]', className)}> | |
| <MultiViewComponent conversation={conversation} models={models} isPreset={isPreset} /> | |
| </div> | |
| ); | |
| } | |