diff --git a/application/app.py b/application/app.py index 9c75987..267727e 100644 --- a/application/app.py +++ b/application/app.py @@ -158,7 +158,10 @@ def complete_stream(question, docsearch, chat_history, api_key): p_chat_combine = chat_combine_template.replace("{summaries}", docs_together) messages_combine = [{"role": "system", "content": p_chat_combine}] for doc in docs: - data = json.dumps({"type": "source", "doc": doc.page_content}) + if doc.metadata: + data = json.dumps({"type": "source", "doc": doc.page_content, "metadata": doc.metadata}) + else: + data = json.dumps({"type": "source", "doc": doc.page_content}) yield f"data:{data}\n\n" if len(chat_history) > 1: @@ -313,7 +316,13 @@ def api_answer(): pass sources = docsearch.similarity_search(question, k=2) - result['sources'] = [{'title': i.page_content, 'text': i.page_content} for i in sources] + sources_doc = [] + for doc in sources: + if doc.metadata: + sources_doc.append({'title': doc.metadata['title'], 'text': doc.page_content}) + else: + sources_doc.append({'title': doc.page_content, 'text': doc.page_content}) + result['sources'] = sources_doc # mock result # result = { diff --git a/frontend/src/conversation/ConversationBubble.tsx b/frontend/src/conversation/ConversationBubble.tsx index add7bf1..92411a3 100644 --- a/frontend/src/conversation/ConversationBubble.tsx +++ b/frontend/src/conversation/ConversationBubble.tsx @@ -154,7 +154,9 @@ const ConversationBubble = forwardRef< {sources && openSource !== null && sources[openSource] && (
-

Source:

+

+ Source: {sources[openSource].title} +

diff --git a/frontend/src/conversation/conversationSlice.ts b/frontend/src/conversation/conversationSlice.ts index dfafd46..bfb3350 100644 --- a/frontend/src/conversation/conversationSlice.ts +++ b/frontend/src/conversation/conversationSlice.ts @@ -29,11 +29,21 @@ export const fetchAnswer = createAsyncThunk( // set status to 'idle' dispatch(conversationSlice.actions.setStatus('idle')); } else if (data.type === 'source') { - const result = data.doc; + // check if data.metadata exists + let result; + if (data.metadata && data.metadata.title) { + const titleParts = data.metadata.title.split('/'); + result = { + title: titleParts[titleParts.length - 1], + text: data.doc, + }; + } else { + result = { title: data.doc, text: data.doc }; + } dispatch( updateStreamingSource({ index: state.conversation.queries.length - 1, - query: { sources: [{ title: result, text: result }] }, + query: { sources: [result] }, }), ); } else { @@ -55,10 +65,22 @@ export const fetchAnswer = createAsyncThunk( state.conversation.queries, ); if (answer) { + let sourcesPrepped = []; + sourcesPrepped = answer.sources.map((source) => { + if (source && source.title) { + const titleParts = source.title.split('/'); + return { + ...source, + title: titleParts[titleParts.length - 1], + }; + } + return source; + }); + dispatch( updateQuery({ index: state.conversation.queries.length - 1, - query: { response: answer.answer, sources: answer.sources }, + query: { response: answer.answer, sources: sourcesPrepped }, }), ); dispatch(conversationSlice.actions.setStatus('idle'));