-
- Customize ChatGPT
-
- Note: important instructions are often better placed in your message rather than the prefix.{' '}
-
- More info here
-
-
-
-
-
-
- setChatGptLabel(e.target.value)}
- placeholder="Set a custom name for ChatGPT"
- className=" col-span-3 shadow-[0_0_10px_rgba(0,0,0,0.10)] outline-none placeholder:text-gray-400 invalid:border-red-400 invalid:text-red-600 invalid:placeholder-red-600 invalid:placeholder-opacity-70 invalid:ring-opacity-10 focus:ring-0 focus:invalid:border-red-400 focus:invalid:ring-red-300 dark:border-none dark:bg-gray-700
- dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:invalid:border-red-600 dark:invalid:text-red-300 dark:invalid:placeholder-opacity-80 dark:focus:border-none dark:focus:border-transparent dark:focus:outline-none dark:focus:ring-0 dark:focus:ring-gray-400 dark:focus:ring-offset-0 dark:focus:invalid:ring-red-600 dark:focus:invalid:ring-opacity-50"
- {...requiredProp}
- />
-
-
-
- setPromptPrefix(e.target.value)}
- placeholder="Set custom instructions. Defaults to: 'You are ChatGPT, a large language model trained by OpenAI.'"
- className="col-span-3 flex h-20 max-h-52 w-full resize-none rounded-md border border-gray-300 bg-transparent py-2 px-3 text-sm shadow-[0_0_10px_rgba(0,0,0,0.10)] outline-none placeholder:text-gray-400 focus:outline-none focus:ring-gray-400 focus:ring-opacity-20 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-none dark:bg-gray-700 dark:text-gray-50 dark:shadow-[0_0_15px_rgba(0,0,0,0.10)] dark:focus:border-none dark:focus:border-transparent dark:focus:outline-none dark:focus:ring-0 dark:focus:ring-gray-400 dark:focus:ring-offset-0"
- />
-
-
-
- Cancel
-
-
- Select
-
-
-
- );
-}
diff --git a/client/src/components/Input/Endpoints/ModelItem.jsx b/client/src/components/Input/Endpoints/ModelItem.jsx
deleted file mode 100644
index 5a0ad0b9e6..0000000000
--- a/client/src/components/Input/Endpoints/ModelItem.jsx
+++ /dev/null
@@ -1,180 +0,0 @@
-import React, { useState, useRef } from 'react';
-import { useRecoilValue, useSetRecoilState } from 'recoil';
-import { DropdownMenuRadioItem } from '../../ui/DropdownMenu.tsx';
-import { Circle } from 'lucide-react';
-import { DialogTrigger } from '../../ui/Dialog.tsx';
-import RenameButton from '../../Conversations/RenameButton';
-import TrashIcon from '../../svg/TrashIcon';
-import manualSWR from '~/utils/fetchers';
-import getIcon from '~/utils/getIcon';
-
-import store from '~/store';
-
-export default function ModelItem({ model: _model, value, onSelect }) {
- const { name, model, _id: id, chatGptLabel = null, promptPrefix = null } = _model;
- const setCustomGPTModels = useSetRecoilState(store.customGPTModels);
- const currentConversation = useRecoilValue(store.conversation) || {};
-
- const [isHovering, setIsHovering] = useState(false);
- const [renaming, setRenaming] = useState(false);
- const [currentName, setCurrentName] = useState(name);
- const [modelInput, setModelInput] = useState(name);
- const inputRef = useRef(null);
- const rename = manualSWR(`/api/customGpts`, 'post', res => {});
- const deleteCustom = manualSWR(`/api/customGpts/delete`, 'post', res => {
- const fetchedModels = res.data.map(modelItem => ({
- ...modelItem,
- name: modelItem.chatGptLabel,
- model: 'chatgptCustom'
- }));
-
- setCustomGPTModels(fetchedModels);
- });
-
- const icon = getIcon({
- size: 20,
- sender: chatGptLabel || model,
- isCreatedByUser: false,
- model,
- chatGptLabel,
- promptPrefix,
- error: false,
- className: 'mr-2'
- });
-
- if (model !== 'chatgptCustom')
- // regular model
- return (
-
+
ChatGPT Clone
- . Serves and searches all conversations reliably. All AI convos under one house. Pay per
- call and not per month (cents compared to dollars).
+ . Serves and searches all conversations reliably. All AI convos under one house. Pay per call and not
+ per month (cents compared to dollars).
);
}
diff --git a/client/src/components/Input/OpenAIOptions/index.jsx b/client/src/components/Input/OpenAIOptions/index.jsx
index 801ae6c88b..a2e84c7315 100644
--- a/client/src/components/Input/OpenAIOptions/index.jsx
+++ b/client/src/components/Input/OpenAIOptions/index.jsx
@@ -1,12 +1,11 @@
import React, { useEffect, useState } from 'react';
import { Settings2 } from 'lucide-react';
import { useRecoilState, useRecoilValue } from 'recoil';
-import ModelSelect from './ModelSelect';
-import EndpointOptionsPopover from '../../ui/EndpointOptionsPopover';
-import DialogTemplate from '../../ui/DialogTemplate';
+import ModelSelect from '../../ui/ModelSelect';
+import EndpointOptionsPopover from '../../Endpoints/EndpointOptionsPopover';
+import SaveAsPresetDialog from '../../Endpoints/SaveAsPresetDialog';
import { Button } from '../../ui/Button.tsx';
-import { Dialog, DialogTrigger } from '../../ui/Dialog.tsx';
-import Settings from './Settings.jsx';
+import Settings from '../../Endpoints/OpenAI/Settings.jsx';
import { cn } from '~/utils/';
import store from '~/store';
@@ -125,18 +124,11 @@ function OpenAIOptions() {
saveAsPreset={saveAsPreset}
switchToSimpleMode={switchToSimpleMode}
/>
-
+ conversation={conversation}
+ />
>
);
}
diff --git a/client/src/components/Input/index.jsx b/client/src/components/Input/index.jsx
index c33e230da3..0f3764a2fc 100644
--- a/client/src/components/Input/index.jsx
+++ b/client/src/components/Input/index.jsx
@@ -5,7 +5,7 @@ import AdjustToneButton from './AdjustToneButton';
import OpenAIOptions from './OpenAIOptions';
import BingAIOptions from './BingAIOptions';
// import BingStyles from './BingStyles';
-import EndpointMenu from './Endpoints/EndpointMenu';
+import EndpointMenu from './Endpoints/NewConversationMenu';
import Footer from './Footer';
import TextareaAutosize from 'react-textarea-autosize';
import { useMessageHandler } from '../../utils/handleSubmit';
diff --git a/client/src/components/ui/Dialog.tsx b/client/src/components/ui/Dialog.tsx
index 6f8875277b..b7019e8ae6 100644
--- a/client/src/components/ui/Dialog.tsx
+++ b/client/src/components/ui/Dialog.tsx
@@ -53,7 +53,7 @@ const DialogContent = React.forwardRef<
>
{children}
-
+
Close
diff --git a/client/src/components/ui/DialogTemplate.jsx b/client/src/components/ui/DialogTemplate.jsx
index 63c19d4fb3..084faa123a 100644
--- a/client/src/components/ui/DialogTemplate.jsx
+++ b/client/src/components/ui/DialogTemplate.jsx
@@ -8,18 +8,18 @@ import {
DialogHeader,
DialogTitle
} from './Dialog.tsx';
+import { cn } from '~/utils/';
-export default function DialogTemplate({ title, description, main, buttons, selection }) {
+export default function DialogTemplate({ title, description, main, buttons, selection, className }) {
const { selectHandler, selectClasses, selectText } = selection;
- const defaultSelect = "bg-gray-900 text-white transition-colors hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-100 dark:text-gray-900 dark:hover:bg-gray-200 dark:focus:ring-gray-400 dark:focus:ring-offset-gray-900"
+ const defaultSelect =
+ 'bg-gray-900 text-white transition-colors hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:bg-gray-100 dark:text-gray-900 dark:hover:bg-gray-200 dark:focus:ring-gray-400 dark:focus:ring-offset-gray-900';
return (
-
+
{title}
-
- {description}
-
+ {description}
{/*
//input template
@@ -44,10 +44,12 @@ export default function DialogTemplate({ title, description, main, buttons, sele
{main ? main : null}
Cancel
- { buttons ? buttons : null}
+ {buttons ? buttons : null}
{selectText}
diff --git a/client/src/components/ui/Dropdown.jsx b/client/src/components/ui/Dropdown.jsx
new file mode 100644
index 0000000000..812ee94edd
--- /dev/null
+++ b/client/src/components/ui/Dropdown.jsx
@@ -0,0 +1,73 @@
+import React from 'react';
+import CheckMark from '../svg/CheckMark';
+import { Listbox } from '@headlessui/react';
+import { cn } from '~/utils/';
+
+function Dropdown({ value, onChange, options, className, containerClassName }) {
+ return (
+
+
+
+
+
+
+ {value}
+
+
+
+
+
+
+
+ {options.map((item, i) => (
+
+
+
+ {item}
+
+ {value === item && (
+
+
+
+ )}
+
+
+ ))}
+
+
+
+
+ );
+}
+
+export default Dropdown;
diff --git a/client/src/components/ui/Landing.jsx b/client/src/components/ui/Landing.jsx
index f2400f72b5..3412018382 100644
--- a/client/src/components/ui/Landing.jsx
+++ b/client/src/components/ui/Landing.jsx
@@ -1,7 +1,7 @@
import React, { useState } from 'react';
import { useRecoilValue, useSetRecoilState } from 'recoil';
import useDocumentTitle from '~/hooks/useDocumentTitle';
-import Templates from '../Prompts/Templates';
+import Templates from '../ui/Templates';
import SunIcon from '../svg/SunIcon';
import LightningIcon from '../svg/LightningIcon';
import CautionIcon from '../svg/CautionIcon';
diff --git a/client/src/components/Input/OpenAIOptions/ModelDropDown.jsx b/client/src/components/ui/ModelDropDown.jsx
similarity index 81%
rename from client/src/components/Input/OpenAIOptions/ModelDropDown.jsx
rename to client/src/components/ui/ModelDropDown.jsx
index c4da1cbd21..5df5acc6f0 100644
--- a/client/src/components/Input/OpenAIOptions/ModelDropDown.jsx
+++ b/client/src/components/ui/ModelDropDown.jsx
@@ -1,22 +1,27 @@
import React from 'react';
-import CheckMark from '../../svg/CheckMark';
+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 }) {
+function ModelDropDown({ model, setModel, endpoint, containerClassName, className }) {
const endpointsConfig = useRecoilValue(store.endpointsConfig);
const models = endpointsConfig?.[endpoint]?.['availableModels'] || [];
return (
-
+
-
+
- {model}
+
+ {model}
+
From 2cce2e30bae94b36fda952534acb6418e3a6d890 Mon Sep 17 00:00:00 2001
From: Wentao Lyu <35-wentao.lyu@users.noreply.git.stereye.tech>
Date: Sun, 2 Apr 2023 04:48:33 +0800
Subject: [PATCH 4/4] fix: change endpoint should not skip when endpoint same
---
client/src/components/Input/Endpoints/NewConversationMenu.jsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/client/src/components/Input/Endpoints/NewConversationMenu.jsx b/client/src/components/Input/Endpoints/NewConversationMenu.jsx
index 6ff3ca9d04..2ff5adbb1b 100644
--- a/client/src/components/Input/Endpoints/NewConversationMenu.jsx
+++ b/client/src/components/Input/Endpoints/NewConversationMenu.jsx
@@ -52,7 +52,7 @@ export default function NewConversationMenu() {
setMenuOpen(false);
if (!newEndpoint) return;
- else if (newEndpoint === endpoint) return;
+ // else if (newEndpoint === endpoint) return;
else {
newConversation({}, { endpoint: newEndpoint });
}