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' : '')
}
>
-
+ />