diff --git a/client/src/components/Input/OpenAIOptions/ModelSelect.jsx b/client/src/components/Input/OpenAIOptions/ModelSelect.jsx new file mode 100644 index 0000000000..73e2a7303b --- /dev/null +++ b/client/src/components/Input/OpenAIOptions/ModelSelect.jsx @@ -0,0 +1,54 @@ +import React, { useState } from 'react'; +import { Button } from '../../ui/Button.tsx'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuLabel, + DropdownMenuRadioGroup, + DropdownMenuSeparator, + DropdownMenuTrigger, + DropdownMenuRadioItem +} from '../../ui/DropdownMenu.tsx'; + +const ModelSelect = ({ model, onChange, models, ...props }) => { + const [menuOpen, setMenuOpen] = useState(false); + + models = ['gpt-4', 'text-davinci-003', 'gpt-3.5-turbo', 'gpt-3.5-turbo-0301']; + + return ( + + + + + event.preventDefault()} + > + Select a model + + + {models.map(model => ( + + {model} + + ))} + + + + ); +}; + +export default ModelSelect; diff --git a/client/src/components/Input/OpenAIOptions/index.jsx b/client/src/components/Input/OpenAIOptions/index.jsx index 0192ac8f0a..cbc9b1f15d 100644 --- a/client/src/components/Input/OpenAIOptions/index.jsx +++ b/client/src/components/Input/OpenAIOptions/index.jsx @@ -1,6 +1,6 @@ -import React, { useState, useEffect, forwardRef } from 'react'; -import { Tabs, TabsList, TabsTrigger } from '../../ui/Tabs.tsx'; -import { useRecoilValue, useRecoilState, useSetRecoilState } from 'recoil'; +import React, { useEffect, useState } from 'react'; +import { useSetRecoilState } from 'recoil'; +import ModelSelect from './ModelSelect'; import { Button } from '../../ui/Button.tsx'; import store from '~/store'; @@ -13,7 +13,6 @@ function OpenAIOptions({ conversation = {} }) { const triggerAdvancedMode = () => setAdvancedMode(prev => !prev); const switchToSimpleMode = () => { - setAdvancedMode(false); setConversation(prevState => ({ ...prevState, chatGptLabel: null, @@ -22,8 +21,31 @@ function OpenAIOptions({ conversation = {} }) { top_p: 1, presence_penalty: 1 })); + setAdvancedMode(false); }; + const setModel = newModel => { + setConversation(prevState => ({ + ...prevState, + model: newModel + })); + }; + + useEffect(() => { + const { endpoint, chatGptLabel, promptPrefix, temperature, top_p, presence_penalty } = conversation; + + if (endpoint !== 'openAI') return; + + const mustInAdvancedMode = + chatGptLabel !== null || + promptPrefix !== null || + temperature !== 0.8 || + top_p !== 1 || + presence_penalty !== 1; + + if (mustInAdvancedMode && !advancedMode) setAdvancedMode(true); + }, [conversation, advancedMode]); + if (endpoint !== 'openAI') return null; const { model } = conversation; @@ -39,15 +61,15 @@ function OpenAIOptions({ conversation = {} }) { (!advancedMode ? ' show' : '') } > - + />