"git@developer.sourcefind.cn:OpenDAS/nni.git" did not exist on "de1ae178c177707bd58c27e7a8a5f1d6f30acc4f"
Commit 83ae37f1 authored by Timothy J. Baek's avatar Timothy J. Baek
Browse files

chat event stream behaviour updated

parent 568ce38f
...@@ -18,19 +18,41 @@ ...@@ -18,19 +18,41 @@
let textareaElement = ''; let textareaElement = '';
const splitStream = (splitOn) => {
let buffer = '';
return new TransformStream({
transform(chunk, controller) {
buffer += chunk;
const parts = buffer.split(splitOn);
parts.slice(0, -1).forEach((part) => controller.enqueue(part));
buffer = parts[parts.length - 1];
},
flush(controller) {
if (buffer) controller.enqueue(buffer);
}
});
};
const submitPrompt = async () => { const submitPrompt = async () => {
console.log('submitPrompt'); console.log('submitPrompt');
if (selectedModel !== '') { if (selectedModel !== '') {
console.log(prompt); console.log(prompt);
let user_prompt = prompt; let user_prompt = prompt;
chatHistory[Object.keys(chatHistory).length] = { chatHistory[Object.keys(chatHistory).length] = {
role: 'user', role: 'user',
content: user_prompt content: user_prompt
}; };
prompt = ''; prompt = '';
textareaElement.style.height = ''; textareaElement.style.height = '';
setTimeout(() => {
window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' });
}, 50);
const res = await fetch(`${ENDPOINT}/api/generate`, { const res = await fetch(`${ENDPOINT}/api/generate`, {
method: 'POST', method: 'POST',
headers: { headers: {
...@@ -47,36 +69,47 @@ ...@@ -47,36 +69,47 @@
role: 'assistant', role: 'assistant',
content: '' content: ''
}; };
window.scrollTo({ top: document.body.scrollHeight });
const reader = res.body.pipeThrough(new TextDecoderStream()).getReader(); const reader = res.body
.pipeThrough(new TextDecoderStream())
.pipeThrough(splitStream('\n'))
.getReader();
while (true) { while (true) {
const { value, done } = await reader.read(); const { value, done } = await reader.read();
if (done) break; if (done) break;
// toast.success(value);
try { try {
let data = JSON.parse(value); let lines = value.split('\n');
console.log(data);
for (const line of lines) {
if (data.done == false) { if (line !== '') {
if ( console.log(line);
chatHistory[Object.keys(chatHistory).length - 1].content == '' && let data = JSON.parse(line);
data.response == '\n'
) { if (data.done == false) {
continue; if (
} else { chatHistory[Object.keys(chatHistory).length - 1].content == '' &&
chatHistory[Object.keys(chatHistory).length - 1].content += data.response; data.response == '\n'
) {
continue;
} else {
chatHistory[Object.keys(chatHistory).length - 1].content += data.response;
}
} else {
context = data.context;
console.log(context);
chatHistory[Object.keys(chatHistory).length - 1].done = true;
}
} }
} else {
context = data.context;
console.log(context);
chatHistory[Object.keys(chatHistory).length - 1].done = true;
} }
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
window.scrollTo(0, document.body.scrollHeight); window.scrollTo({ top: document.body.scrollHeight });
} }
window.scrollTo({ top: document.body.scrollHeight });
} else { } else {
toast.error('Model not selected'); toast.error('Model not selected');
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment