From a1ce12296f692c83ce5b99bcb4ca9cdd3711fa87 Mon Sep 17 00:00:00 2001 From: Debanjum Singh Solanky Date: Thu, 14 Mar 2024 03:36:26 +0530 Subject: [PATCH] Fix rendering online with note references post streaming chat response Previously only the notes references would get rendered post response streaming when when both online and notes references were used to respond to the user's message --- src/interface/desktop/chat.html | 23 ++++++++++++++--------- src/khoj/interface/web/chat.html | 23 ++++++++++++++--------- src/khoj/processor/conversation/utils.py | 2 +- 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/interface/desktop/chat.html b/src/interface/desktop/chat.html index 3da215fe..cc081da7 100644 --- a/src/interface/desktop/chat.html +++ b/src/interface/desktop/chat.html @@ -357,15 +357,16 @@ let numReferences = 0; - if (Array.isArray(references)) { - numReferences = references.length; + if (references.hasOwnProperty("notes")) { + numReferences += references["notes"].length; - references.forEach((reference, index) => { + references["notes"].forEach((reference, index) => { let polishedReference = generateReference(reference, index); referenceSection.appendChild(polishedReference); }); - } else { - numReferences += processOnlineReferences(referenceSection, references); + } + if (references.hasOwnProperty("online")){ + numReferences += processOnlineReferences(referenceSection, references["online"]); } let referenceExpandButton = document.createElement('button'); @@ -511,7 +512,7 @@ // Handle streamed response of type text/event-stream or text/plain const reader = response.body.getReader(); const decoder = new TextDecoder(); - let references = null; + let references = {}; readStream(); @@ -519,8 +520,8 @@ reader.read().then(({ done, value }) => { if (done) { // Append any references after all the data has been streamed - if (references != null) { - newResponseText.appendChild(references); + if (references != {}) { + newResponseText.appendChild(createReferenceSection(references)); } document.getElementById("chat-body").scrollTop = document.getElementById("chat-body").scrollHeight; document.getElementById("chat-input").removeAttribute("disabled"); @@ -538,7 +539,11 @@ const rawReference = chunk.split("### compiled references:")[1]; const rawReferenceAsJson = JSON.parse(rawReference); - references = createReferenceSection(rawReferenceAsJson); + if (rawReferenceAsJson instanceof Array) { + references["notes"] = rawReferenceAsJson; + } else if (typeof rawReferenceAsJson === "object" && rawReferenceAsJson !== null) { + references["online"] = rawReferenceAsJson; + } readStream(); } else { // Display response from Khoj diff --git a/src/khoj/interface/web/chat.html b/src/khoj/interface/web/chat.html index ef45b0db..c251bff2 100644 --- a/src/khoj/interface/web/chat.html +++ b/src/khoj/interface/web/chat.html @@ -368,15 +368,16 @@ To get started, just start typing below. You can also type / to see a list of co let numReferences = 0; - if (Array.isArray(references)) { - numReferences = references.length; + if (references.hasOwnProperty("notes")) { + numReferences += references["notes"].length; - references.forEach((reference, index) => { + references["notes"].forEach((reference, index) => { let polishedReference = generateReference(reference, index); referenceSection.appendChild(polishedReference); }); - } else { - numReferences += processOnlineReferences(referenceSection, references); + } + if (references.hasOwnProperty("online")) { + numReferences += processOnlineReferences(referenceSection, references["online"]); } let referenceExpandButton = document.createElement('button'); @@ -518,7 +519,7 @@ To get started, just start typing below. You can also type / to see a list of co // Handle streamed response of type text/event-stream or text/plain const reader = response.body.getReader(); const decoder = new TextDecoder(); - let references = null; + let references = {}; readStream(); @@ -526,8 +527,8 @@ To get started, just start typing below. You can also type / to see a list of co reader.read().then(({ done, value }) => { if (done) { // Append any references after all the data has been streamed - if (references != null) { - newResponseText.appendChild(references); + if (references != {}) { + newResponseText.appendChild(createReferenceSection(references)); } document.getElementById("chat-body").scrollTop = document.getElementById("chat-body").scrollHeight; document.getElementById("chat-input").removeAttribute("disabled"); @@ -545,7 +546,11 @@ To get started, just start typing below. You can also type / to see a list of co const rawReference = chunk.split("### compiled references:")[1]; const rawReferenceAsJson = JSON.parse(rawReference); - references = createReferenceSection(rawReferenceAsJson); + if (rawReferenceAsJson instanceof Array) { + references["notes"] = rawReferenceAsJson; + } else if (typeof rawReferenceAsJson === "object" && rawReferenceAsJson !== null) { + references["online"] = rawReferenceAsJson; + } readStream(); } else { // Display response from Khoj diff --git a/src/khoj/processor/conversation/utils.py b/src/khoj/processor/conversation/utils.py index 74839505..f028922b 100644 --- a/src/khoj/processor/conversation/utils.py +++ b/src/khoj/processor/conversation/utils.py @@ -64,7 +64,7 @@ class ThreadedGenerator: def close(self): if self.compiled_references and len(self.compiled_references) > 0: self.queue.put(f"### compiled references:{json.dumps(self.compiled_references)}") - elif self.online_results and len(self.online_results) > 0: + if self.online_results and len(self.online_results) > 0: self.queue.put(f"### compiled references:{json.dumps(self.online_results)}") self.queue.put(StopIteration)