Spaces:
Runtime error
Runtime error
function scrollToBottom() { | |
var scrollContainer = document.getElementById('chat-box'); | |
scrollContainer.scrollTop = scrollContainer.scrollHeight; | |
} | |
function append_message(role, text, avatarUrl) { | |
var message_container = $("<div></div>").addClass("message-container"); | |
var avatar_element = $("<span></span>").addClass("avatar"); | |
var role_element = $("<p></p>").addClass("role").text(role); | |
if (avatarUrl) { | |
avatar_element.css("background-image", `url(${avatarUrl})`); | |
} else { | |
avatar_element.css("background-color", "green"); | |
} | |
message_container.append(role_element); | |
message_container.append(avatar_element); | |
var parsedText = role === 'System' ? parseSystemMessage(text) : parseCodeBlocks(text, role); | |
message_container.append(parsedText); | |
$("#chat-box").append(message_container); | |
scrollToBottom(); | |
} | |
function parseCodeBlocks(text, role) { | |
var parts = text.split(/(```[\s\S]*?```)/g); | |
var parsedText = $("<div></div>").addClass("message-text"); | |
parts.forEach(part => { | |
if (part.startsWith("```") && role != "System") { | |
var trimmedBlock = part.trim(); | |
var language = trimmedBlock.match(/^```(\w+)/); | |
if (language) { | |
language = language[1]; | |
var codeContent = trimmedBlock.replace(/^```(\w+)/, '').replace(/```$/, ''); | |
var codeBlockHTML = ` | |
<div class="code-block"> | |
<div class="code-block-header">${role} - ${language}</div> | |
<pre class="language-${language} dark line-numbers" data-line><code>${hljs.highlightAuto(codeContent, [language]).value}</code></pre> | |
</div> | |
`; | |
parsedText.append(codeBlockHTML); | |
} | |
} else { | |
parsedText.append(marked(_.escape(part), {breaks: true})); | |
} | |
}); | |
return parsedText; | |
} | |
function get_new_messages() { | |
$.getJSON("/get_messages", function (data) { | |
var lastDisplayedMessageIndex = $("#chat-box .message-container").length; | |
for (var i = lastDisplayedMessageIndex; i < data.length; i++) { | |
var role = data[i].role; | |
var text = data[i].text; | |
var avatarUrl = data[i].avatarUrl; | |
append_message(role, text, avatarUrl); | |
} | |
}); | |
} | |
function parseSystemMessage(text) { | |
var message = $("<div></div>").addClass("message-text").addClass("system-message"); | |
var firstLine = text.split('\n')[0]; | |
var collapsed = true; | |
var messageContent = $("<div></div>").html(marked(firstLine, { breaks: true })).addClass("original-markdown"); | |
var originalMarkdown = $("<div></div>").html(marked(text, { breaks: true })).addClass("original-markdown"); | |
var expandButton = $("<button></button>") | |
.addClass("expand-button") | |
.text("Expand") | |
.click(function () { | |
if (collapsed) { | |
messageContent.hide(); | |
originalMarkdown.show(); | |
expandButton.text("Collapse"); | |
} else { | |
messageContent.show(); | |
originalMarkdown.hide(); | |
expandButton.text("Expand"); | |
} | |
collapsed = !collapsed; | |
}); | |
message.append(messageContent); | |
message.append(originalMarkdown); | |
message.append(expandButton); | |
originalMarkdown.hide(); | |
return message; | |
} | |
$(document).ready(function () { | |
get_new_messages(); | |
setInterval(function () { | |
get_new_messages(); | |
}, 1000); | |
}); | |