diff --git a/client/src/components/Input/Models/ModelItem.jsx b/client/src/components/Input/Models/ModelItem.jsx index b35cc3ece8..5a0ad0b9e6 100644 --- a/client/src/components/Input/Models/ModelItem.jsx +++ b/client/src/components/Input/Models/ModelItem.jsx @@ -6,7 +6,7 @@ import { DialogTrigger } from '../../ui/Dialog.tsx'; import RenameButton from '../../Conversations/RenameButton'; import TrashIcon from '../../svg/TrashIcon'; import manualSWR from '~/utils/fetchers'; -import { getIconOfModel } from '~/utils'; +import getIcon from '~/utils/getIcon'; import store from '~/store'; @@ -31,7 +31,7 @@ export default function ModelItem({ model: _model, value, onSelect }) { setCustomGPTModels(fetchedModels); }); - const icon = getIconOfModel({ + const icon = getIcon({ size: 20, sender: chatGptLabel || model, isCreatedByUser: false, diff --git a/client/src/components/Input/Models/ModelMenu.jsx b/client/src/components/Input/Models/ModelMenu.jsx index 65dd7f777e..d89bc63cae 100644 --- a/client/src/components/Input/Models/ModelMenu.jsx +++ b/client/src/components/Input/Models/ModelMenu.jsx @@ -4,7 +4,7 @@ import axios from 'axios'; import ModelDialog from './ModelDialog'; import MenuItems from './MenuItems'; import { swr } from '~/utils/fetchers'; -import { getIconOfModel } from '~/utils'; +import getIcon from '~/utils/getIcon'; import { Button } from '../../ui/Button.tsx'; import { @@ -145,7 +145,7 @@ export default function ModelMenu() { ]; const colorProps = model === 'chatgpt' ? chatgptColorProps : defaultColorProps; - const icon = getIconOfModel({ + const icon = getIcon({ size: 32, sender: chatGptLabel || model, isCreatedByUser: false, diff --git a/client/src/components/Messages/Message.jsx b/client/src/components/Messages/Message.jsx index 47b56ec2cb..b692af17fc 100644 --- a/client/src/components/Messages/Message.jsx +++ b/client/src/components/Messages/Message.jsx @@ -6,7 +6,7 @@ import MultiMessage from './MultiMessage'; import HoverButtons from './HoverButtons'; import SiblingSwitch from './SiblingSwitch'; import { fetchById } from '~/utils/fetchers'; -import { getIconOfAi } from '~/utils'; +import getIcon from '~/utils/getIcon'; import { useMessageHandler } from '~/utils/handleSubmit'; import store from '~/store'; @@ -60,7 +60,7 @@ export default function Message({ 'w-full border-b border-black/10 dark:border-gray-900/50 text-gray-800 bg-white dark:text-gray-100 group dark:bg-gray-800' }; - const icon = getIconOfAi({ + const icon = getIcon({ ...conversation, ...message }); diff --git a/client/src/utils/getIcon.jsx b/client/src/utils/getIcon.jsx new file mode 100644 index 0000000000..85519f8ad1 --- /dev/null +++ b/client/src/utils/getIcon.jsx @@ -0,0 +1,85 @@ +import { clsx } from 'clsx'; +import React from 'react'; +import { twMerge } from 'tailwind-merge'; +import GPTIcon from '../components/svg/GPTIcon'; +import BingIcon from '../components/svg/BingIcon'; + +const getIcon = props => { + // { size = 30, isCreatedByUser, model, chatGptLabel, error, ...props } + const { size = 30, isCreatedByUser, button } = props; + + if (isCreatedByUser) + return ( +
+ User +
+ ); + else if (!isCreatedByUser) { + const { endpoint, error } = props; + + let icon = ; + let bg = 'grey'; + let name = 'UNKNOWN'; + + if (endpoint === 'azureOpenAI') { + const { chatGptLabel } = props; + + icon = ; + bg = 'linear-gradient(0.375turn, #61bde2, #4389d0)'; + name = chatGptLabel || 'ChatGPT'; + } else if (endpoint === 'openAI') { + const { chatGptLabel } = props; + + icon = ; + bg = chatGptLabel + ? `rgba(16, 163, 127, ${button ? 0.75 : 1})` + : `rgba(16, 163, 127, ${button ? 0.75 : 1})`; + name = chatGptLabel || 'ChatGPT'; + } else if (endpoint === 'bingAI') { + const { jailbreak } = props; + + icon = ; + bg = jailbreak ? `radial-gradient(circle at 90% 110%, #F0F0FA, #D0E0F9)` : `transparent`; + name = jailbreak ? 'Sydney' : 'BingAI'; + } else if (endpoint === 'chatGPTBrowser') { + icon = ; + bg = `rgba(0, 163, 255, ${button ? 0.75 : 1})`; + name = 'ChatGPT'; + } else if (endpoint === null) { + icon = ; + bg = `grey`; + name = 'N/A'; + } + + return ( +
+ {icon} + {error && ( + + ! + + )} +
+ ); + } +}; + +export default getIcon; diff --git a/client/src/utils/index.js b/client/src/utils/index.js index 2e402e4735..1e2e9cf75a 100644 --- a/client/src/utils/index.js +++ b/client/src/utils/index.js @@ -1,8 +1,5 @@ import { clsx } from 'clsx'; -import React from 'react'; import { twMerge } from 'tailwind-merge'; -import GPTIcon from '../components/svg/GPTIcon'; -import BingIcon from '../components/svg/BingIcon'; export function cn(...inputs) { return twMerge(clsx(inputs)); @@ -37,80 +34,3 @@ export const languages = [ 'perl', 'pascal' ]; - -export const getIconOfAi = ({ - size = 30, - sender, - isCreatedByUser, - searchResult, - model, - chatGptLabel, - error, - ...props -}) => { - const { button } = props; - const bgColors = { - chatgpt: `rgb(16, 163, 127${button ? ', 0.75' : ''})`, - chatgptBrowser: `rgb(25, 207, 207${button ? ', 0.75' : ''})`, - bingai: 'transparent', - sydney: 'radial-gradient(circle at 90% 110%, #F0F0FA, #D0E0F9)', - chatgptCustom: `rgb(0, 163, 255${button ? ', 0.75' : ''})` - }; - - if (isCreatedByUser) - return ( -
- User -
- ); - else if (!isCreatedByUser) { - // TODO: use model from convo, rather than submit - // const { model, chatGptLabel, promptPrefix } = convo; - let background = bgColors[model]; - const isBing = model === 'bingai' || model === 'sydney'; - - return ( -
- {isBing ? : } - {error && ( - - ! - - )} -
- ); - } else - return ( -
- {chatGptLabel} -
- ); -};