diff --git a/api/server/routes/search.js b/api/server/routes/search.js index 076e4093c9..1cc3602833 100644 --- a/api/server/routes/search.js +++ b/api/server/routes/search.js @@ -42,7 +42,7 @@ router.get('/', async function (req, res) { }, true ) - ).hits.map((message) => { + ).hits.map(message => { const { _formatted, ...rest } = message; return { ...rest, @@ -64,7 +64,9 @@ router.get('/', async function (req, res) { message.conversationId = cleanUpPrimaryKeyValue(message.conversationId); } if (result.convoMap[message.conversationId] && !message.error) { - message = { ...message, title: result.convoMap[message.conversationId].title }; + const convo = result.convoMap[message.conversationId]; + const { title, chatGptLabel, model } = convo; + message = { ...message, ...{ title, chatGptLabel, model } }; activeMessages.push(message); } } @@ -91,12 +93,12 @@ router.get('/clear', async function (req, res) { router.get('/test', async function (req, res) { const { q } = req.query; - const messages = ( - await Message.meiliSearch(q, { attributesToHighlight: ['text'] }, true) - ).hits.map((message) => { - const { _formatted, ...rest } = message; - return { ...rest, searchResult: true, text: _formatted.text }; - }); + const messages = (await Message.meiliSearch(q, { attributesToHighlight: ['text'] }, true)).hits.map( + message => { + const { _formatted, ...rest } = message; + return { ...rest, searchResult: true, text: _formatted.text }; + } + ); res.send(messages); }); diff --git a/client/src/components/Messages/Message.jsx b/client/src/components/Messages/Message.jsx index c95a163398..fd4b7ef02d 100644 --- a/client/src/components/Messages/Message.jsx +++ b/client/src/components/Messages/Message.jsx @@ -25,7 +25,17 @@ export default function Message({ const setLatestMessage = useSetRecoilState(store.latestMessage); const { model, chatGptLabel, promptPrefix } = conversation; const [abortScroll, setAbort] = useState(false); - const { sender, text, searchResult, isCreatedByUser, error, submitting } = message; + const { + sender, + text, + searchResult, + isCreatedByUser, + error, + submitting, + model: messageModel, + chatGptLabel: messageChatGptLabel, + searchResult: isSearchResult + } = message; const textEditor = useRef(null); const last = !message?.children?.length; const edit = message.messageId == currentEditId; @@ -70,9 +80,9 @@ export default function Message({ const icon = getIconOfModel({ sender, isCreatedByUser, - model, + model: isSearchResult ? messageModel : model, searchResult, - chatGptLabel, + chatGptLabel: isSearchResult ? messageChatGptLabel : chatGptLabel, promptPrefix, error }); diff --git a/client/src/components/Messages/MultiMessage.jsx b/client/src/components/Messages/MultiMessage.jsx index 61e023ef1d..fa86c041ba 100644 --- a/client/src/components/Messages/MultiMessage.jsx +++ b/client/src/components/Messages/MultiMessage.jsx @@ -6,7 +6,8 @@ export default function MultiMessage({ messagesTree, scrollToBottom, currentEditId, - setCurrentEditId + setCurrentEditId, + isSearchView }) { const [siblingIdx, setSiblingIdx] = useState(0); @@ -30,6 +31,26 @@ export default function MultiMessage({ } const message = messagesTree[messagesTree.length - siblingIdx - 1]; + if (isSearchView) + return ( + <> + {messagesTree + ? messagesTree.map(message => ( + + )) + : null} + + ); return ( ({ ...m, bg: idx % 2 === 0 ? even : odd })); + } if (!groupAll) { // Traverse the messages array and store each element in messageMap. messages.forEach(message => { @@ -22,18 +25,18 @@ export default function buildTree(messages, groupAll = false) { return rootMessages; } - // Group all messages into one tree - let parentId = null; - messages.forEach((message, i) => { - messageMap[message.messageId] = { ...message, bg: i % 2 === 0 ? even : odd, children: [] }; - const currentMessage = messageMap[message.messageId]; - const parentMessage = messageMap[parentId]; - if (parentMessage) parentMessage.children.push(currentMessage); - else rootMessages.push(currentMessage); - parentId = message.messageId; - }); + // // Group all messages into one tree + // let parentId = null; + // messages.forEach((message, i) => { + // messageMap[message.messageId] = { ...message, bg: i % 2 === 0 ? even : odd, children: [] }; + // const currentMessage = messageMap[message.messageId]; + // const parentMessage = messageMap[parentId]; + // if (parentMessage) parentMessage.children.push(currentMessage); + // else rootMessages.push(currentMessage); + // parentId = message.messageId; + // }); - return rootMessages; + // return rootMessages; // Group all messages by conversation, doesn't look great // Traverse the messages array and store each element in messageMap. diff --git a/client/src/utils/index.js b/client/src/utils/index.js index 60637d2cda..4ff806ebaa 100644 --- a/client/src/utils/index.js +++ b/client/src/utils/index.js @@ -38,40 +38,55 @@ export const languages = [ 'pascal' ]; -export const getIconOfModel = ({ size=30, sender, isCreatedByUser, searchResult, model, chatGptLabel, error, ...props }) => { - // 'ai' is used as 'model' is not accurate for search results - let ai = searchResult ? sender : model; +export const getIconOfModel = ({ + 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' : ''})`, + 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' : ''})`, + chatgptCustom: `rgb(0, 163, 255${button ? ', 0.75' : ''})` }; - if (isCreatedByUser) + if (isCreatedByUser) return (
User
- ) + ); else if (!isCreatedByUser) { // TODO: use model from convo, rather than submit // const { model, chatGptLabel, promptPrefix } = convo; - let background = bgColors[ai]; - const isBing = ai === 'bingai' || ai === 'sydney'; - + let background = bgColors[model]; + const isBing = model === 'bingai' || model === 'sydney'; + return (
{isBing ? : } @@ -85,11 +100,17 @@ export const getIconOfModel = ({ size=30, sender, isCreatedByUser, searchResult, } else return (
{chatGptLabel}
- ) -} + ); +};