diff --git a/client/src/components/Messages/MessageHeader.jsx b/client/src/components/Messages/MessageHeader.jsx new file mode 100644 index 0000000000..77e9beecc2 --- /dev/null +++ b/client/src/components/Messages/MessageHeader.jsx @@ -0,0 +1,94 @@ +import React, { useState } from 'react'; +import { useRecoilValue } from 'recoil'; + +import store from '~/store'; + +const clipPromptPrefix = str => { + if (typeof str !== 'string') { + return null; + } else if (str.length > 10) { + return str.slice(0, 10) + '...'; + } else { + return str; + } +}; + +const MessageHeader = ({ isSearchView = false }) => { + const [extended, setExtended] = useState(false); + const conversation = useRecoilValue(store.conversation); + const searchQuery = useRecoilValue(store.searchQuery); + const { endpoint } = conversation; + + let options = []; + if (endpoint === 'azureOpenAI' || endpoint === 'openAI') { + options.push(['model', conversation?.model]); + options.push(['chatGptLabel', conversation?.chatGptLabel]); + options.push(['promptPrefix', clipPromptPrefix(conversation?.promptPrefix)]); + options.push(['temperature', conversation?.temperature]); + options.push(['top_p', conversation?.top_p]); + options.push(['presence_penalty', conversation?.presence_penalty]); + } else if (endpoint === 'bingAI') { + options.push(['jailbreak', conversation?.jailbreak]); + options.push(['toneStyle', conversation?.toneStyle]); + } else if (endpoint === 'chatGPTBrowser') { + options.push(['model', conversation?.model]); + } + + const triggerExtend = () => { + setExtended(prevState => !prevState); + }; + + const getConversationTitle = () => { + if (isSearchView) return `Search: ${searchQuery}`; + else { + let _title = `${endpoint}`; + + if (endpoint === 'azureOpenAI' || endpoint === 'openAI') { + const { chatGptLabel, model } = conversation; + if (model) _title += `: ${model}`; + if (chatGptLabel) _title += ` as ${chatGptLabel}`; + } else if (endpoint === 'bingAI') { + const { jailbreak, toneStyle } = conversation; + if (toneStyle) _title += `: ${toneStyle}`; + if (jailbreak) _title += ` as Sydney`; + } else if (endpoint === 'chatGPTBrowser') { + const { model } = conversation; + if (model) _title += `: ${model}`; + } else if (endpoint === null) { + null; + } else { + null; + } + return _title; + } + }; + + return ( +
+
{getConversationTitle()}
+ + {extended ? ( +
+
+ {options.map(([key, value]) => ( +
+ {key}: {value || 'null'} +
+ ))} +
+
+ ) : null} +
+ ); +}; + +export default MessageHeader; diff --git a/client/src/components/Messages/index.jsx b/client/src/components/Messages/index.jsx index 4c15ad0977..a458bf56e3 100644 --- a/client/src/components/Messages/index.jsx +++ b/client/src/components/Messages/index.jsx @@ -5,6 +5,7 @@ import { throttle } from 'lodash'; import { CSSTransition } from 'react-transition-group'; import ScrollToBottom from './ScrollToBottom'; import MultiMessage from './MultiMessage'; +import MessageHeader from './MessageHeader'; import store from '~/store'; @@ -20,13 +21,11 @@ export default function Messages({ isSearchView = false }) { const _messagesTree = isSearchView ? searchResultMessagesTree : messagesTree; const conversation = useRecoilValue(store.conversation) || {}; - const { conversationId, endpoint } = conversation; + const { conversationId } = conversation; // const models = useRecoilValue(store.models) || []; // const modelName = models.find(element => element.model == model)?.name; - const searchQuery = useRecoilValue(store.searchQuery); - useEffect(() => { const timeoutId = setTimeout(() => { const { scrollTop, scrollHeight, clientHeight } = scrollableRef.current; @@ -79,31 +78,6 @@ export default function Messages({ isSearchView = false }) { scrollToBottom(); }; - const getConversationTitle = () => { - if (isSearchView) return `Search: ${searchQuery}`; - else { - let _title = `${endpoint}`; - - if (endpoint === 'azureOpenAI' || endpoint === 'openAI') { - const { chatGptLabel, model } = conversation; - if (model) _title += `: ${model}`; - if (chatGptLabel) _title += ` as ${chatGptLabel}`; - } else if (endpoint === 'bingAI') { - const { jailbreak, toneStyle } = conversation; - if (toneStyle) _title += `: ${toneStyle}`; - if (jailbreak) _title += ` as Sydney`; - } else if (endpoint === 'chatGPTBrowser') { - const { model } = conversation; - if (model) _title += `: ${model}`; - } else if (endpoint === null) { - null; - } else { - null; - } - return _title; - } - }; - return (
-
- {getConversationTitle()} -
+ {_messagesTree === null ? ( ) : _messagesTree?.length == 0 && isSearchView ? (