From f5ffa814554bf3084d70239fb4f9b93703490f70 Mon Sep 17 00:00:00 2001 From: Daniel Avila Date: Sat, 1 Apr 2023 12:49:20 -0400 Subject: [PATCH] complete: modeldropdown --- client/package-lock.json | 34 ++++++++ client/package.json | 1 + .../Input/OpenAIOptions/ModelDropDown.jsx | 78 +++++++++++++++++++ .../Input/OpenAIOptions/Settings.jsx | 8 +- .../components/Input/OpenAIOptions/index.jsx | 2 +- 5 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 client/src/components/Input/OpenAIOptions/ModelDropDown.jsx diff --git a/client/package-lock.json b/client/package-lock.json index 56bed4267..82304f717 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,6 +9,7 @@ "version": "0.2.0", "license": "ISC", "dependencies": { + "@headlessui/react": "^1.7.13", "@radix-ui/react-alert-dialog": "^1.0.2", "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.2", @@ -2532,6 +2533,21 @@ "react-dom": ">=16.8.0" } }, + "node_modules/@headlessui/react": { + "version": "1.7.13", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.13.tgz", + "integrity": "sha512-9n+EQKRtD9266xIHXdY5MfiXPDfYwl7zBM7KOx2Ae3Gdgxy8QML1FkCMjq6AsOf0l6N9uvI4HcFtuFlenaldKg==", + "dependencies": { + "client-only": "^0.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16 || ^17 || ^18", + "react-dom": "^16 || ^17 || ^18" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -4943,6 +4959,11 @@ } } }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -15478,6 +15499,14 @@ "use-isomorphic-layout-effect": "^1.1.1" } }, + "@headlessui/react": { + "version": "1.7.13", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-1.7.13.tgz", + "integrity": "sha512-9n+EQKRtD9266xIHXdY5MfiXPDfYwl7zBM7KOx2Ae3Gdgxy8QML1FkCMjq6AsOf0l6N9uvI4HcFtuFlenaldKg==", + "requires": { + "client-only": "^0.0.1" + } + }, "@humanwhocodes/config-array": { "version": "0.11.8", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", @@ -17421,6 +17450,11 @@ "integrity": "sha512-74enNN8O9ZNieycac/y8FxqgyzZhZbxmCitAtAeUrLPlxjSd5zA7LfpprmxEcOmQBnaGs5hYhiSGnJ0mqrtBLQ==", "requires": {} }, + "client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" + }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", diff --git a/client/package.json b/client/package.json index 69296c91b..d1ce1ec63 100644 --- a/client/package.json +++ b/client/package.json @@ -19,6 +19,7 @@ }, "homepage": "https://github.com/danny-avila/chatgpt-clone#readme", "dependencies": { + "@headlessui/react": "^1.7.13", "@radix-ui/react-alert-dialog": "^1.0.2", "@radix-ui/react-dialog": "^1.0.2", "@radix-ui/react-dropdown-menu": "^2.0.2", diff --git a/client/src/components/Input/OpenAIOptions/ModelDropDown.jsx b/client/src/components/Input/OpenAIOptions/ModelDropDown.jsx new file mode 100644 index 000000000..c4da1cbd2 --- /dev/null +++ b/client/src/components/Input/OpenAIOptions/ModelDropDown.jsx @@ -0,0 +1,78 @@ +import React from 'react'; +import CheckMark from '../../svg/CheckMark'; +import { Listbox } from '@headlessui/react'; +import { useRecoilValue } from 'recoil'; +import { cn } from '~/utils/'; +import store from '~/store'; + +function ModelDropDown({ model, setModel, endpoint }) { + const endpointsConfig = useRecoilValue(store.endpointsConfig); + const models = endpointsConfig?.[endpoint]?.['availableModels'] || []; + + return ( +
+
+ + + + Model + + + {model} + + + + + + + + + {models.map((modelOption, i) => ( + + + + {modelOption} + + {modelOption === model && ( + + + + )} + + + ))} + + +
+
+ ); +} + +export default ModelDropDown; diff --git a/client/src/components/Input/OpenAIOptions/Settings.jsx b/client/src/components/Input/OpenAIOptions/Settings.jsx index b72b86146..d0d9c8566 100644 --- a/client/src/components/Input/OpenAIOptions/Settings.jsx +++ b/client/src/components/Input/OpenAIOptions/Settings.jsx @@ -1,5 +1,6 @@ -import React, { useRef, useState } from 'react'; +import React from 'react'; import TextareaAutosize from 'react-textarea-autosize'; +import ModelDropDown from './ModelDropDown'; import { Input } from '~/components/ui/Input.tsx'; import { Label } from '~/components/ui/Label.tsx'; import { Slider } from '~/components/ui/Slider.tsx'; @@ -56,7 +57,8 @@ function Settings(props) {
-