Spaces:
Runtime error
Runtime error
| updateValue = function(id, value) { | |
| document.getElementById(id).innerText = value; | |
| } | |
| htmlToElement = function(html) { | |
| let template = document.createElement('template'); | |
| html = html.trim(); // Never return a text node of whitespace as the result | |
| template.innerHTML = html; | |
| return template.content; | |
| } | |
| let websocket = null; | |
| let currentPersonaID = null; | |
| let persona_ids = {}; | |
| pageSetup = function() { | |
| // const users = document.querySelector('.users'); | |
| const userInput = document.querySelector('.user-input'); | |
| const userInputButton = document.querySelector('.user-input-button'); | |
| const serverMessageValue = document.querySelector('.server-message-value'); | |
| const messages = document.getElementById('chat-messages'); | |
| const friends = document.getElementById('friends'); | |
| websocket = new WebSocket("wss://gpt2-chat.ai-research.id/"); | |
| //websocket = new WebSocket("ws://localhost:8502/"); | |
| let persona_list; | |
| let getParameters = function() { | |
| return { | |
| "do_sample": document.getElementById("doSample").checked, | |
| "min_length": parseInt(document.getElementById("minLength").value), | |
| "max_length": parseInt(document.getElementById("maxLength").value), | |
| "temperature": parseFloat(document.getElementById("temperature").value), | |
| "top_k": parseInt(document.getElementById("topK").value), | |
| "top_p": parseFloat(document.getElementById("topP").value), | |
| }; | |
| } | |
| let createMessage = function (message, image, bot) { | |
| let message_template = ""; | |
| if(bot) { | |
| message_template += '<div class="message">'; | |
| message_template += ' <img alt="" src="' + image + '" />'; | |
| } | |
| else { | |
| message_template += '<div class="message right">'; | |
| message_template += ' <img alt="" src="https://static.ai-research.id/images/generated_photos_m_001.jpg" />'; | |
| } | |
| message_template += ' <div class="bubble">' + message; | |
| message_template += ' <div class="corner"></div>'; | |
| message_template += ' </div>'; | |
| message_template += '</div>'; | |
| return message_template; | |
| } | |
| let createFriends = function (persona_list) { | |
| html_template = ''; | |
| for (let i=0; i<persona_list.length; i++) { | |
| html_template += '<div class="friend">'; | |
| html_template += ' <img alt="" src="' + persona_list[i]["image"] + '" />'; | |
| html_template += ' <p>'; | |
| html_template += ' <strong>' + persona_list[i]["name"] + '</strong>'; | |
| html_template += ' <span>' + persona_list[i]["email"]+ '</span>'; | |
| html_template += ' <span class="persona_id">' + persona_list[i]["id"]+ '</span>'; | |
| html_template += ' </p>'; | |
| html_template += ' <div class="status available"></div>'; | |
| html_template += '</div>'; | |
| } | |
| return html_template; | |
| } | |
| let hoverMesssagePhoto = function (persona_id) { | |
| let id = '#chat_message_' + persona_id; | |
| let message_photo = $(id + ' .message:last-child img'); | |
| message_photo.hover(function () { | |
| let profile_photo_zoom = $('#photo-block img'); | |
| profile_photo_zoom[0].src = message_photo[0].src; | |
| $('#photo-block').fadeIn(); | |
| }, function () { | |
| $('#photo-block').fadeOut(800); | |
| }) | |
| } | |
| let processUserInput = function (userInput) { | |
| let parameters = getParameters(); | |
| parameters["action"] = "talk"; | |
| parameters["persona_id"] = currentPersonaID; | |
| parameters["utterance"] = userInput.value; | |
| websocket.send(JSON.stringify(parameters)); | |
| let message = createMessage(userInput.value, persona_ids[currentPersonaID]["image"], false); | |
| const element = htmlToElement(message).firstChild; | |
| userInput.value = ""; | |
| let chat_message = $('#chat_message_' + currentPersonaID)[0]; | |
| chat_message.appendChild(element); | |
| const margin_top = element.childNodes[3].offsetHeight - 25; | |
| element.childNodes[1].style = "margin-top:" + margin_top + "px"; | |
| chat_message.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"}); | |
| hoverMesssagePhoto(currentPersonaID); | |
| } | |
| userInputButton.onclick = function () { | |
| processUserInput(userInput); | |
| } | |
| userInput.addEventListener("keyup", function(event) { | |
| if (event.keyCode === 13) { | |
| // Cancel the default action, if needed | |
| event.preventDefault(); | |
| processUserInput(userInput); | |
| } | |
| }); | |
| websocket.onmessage = function (event) { | |
| let data = JSON.parse(event.data); | |
| switch (data.type) { | |
| case 'connection': | |
| console.log(data.value) | |
| websocket.send(JSON.stringify({action: 'dialog', personality: []})); | |
| break; | |
| case 'state': | |
| console.log("stat: " + data.value) | |
| break; | |
| case 'users': | |
| serverMessageValue.textContent = ( | |
| data.count.toString() + " user" + | |
| (data.count === 1 ? "" : "s") + " online"); | |
| break; | |
| case 'dialog': | |
| console.log(data.message) | |
| break; | |
| case 'talk': | |
| case 'persona_greeting': | |
| let message = createMessage(data.message, persona_ids[currentPersonaID]["image"], true); | |
| const element = htmlToElement(message).firstChild; | |
| let chat_message = $('#chat_message_' + currentPersonaID)[0]; | |
| chat_message.appendChild(element); | |
| margin_top = element.childNodes[3].offsetHeight - 25; | |
| element.childNodes[1].style = "margin-top:" + margin_top + "px"; | |
| chat_message.scrollIntoView({behavior: "smooth", block: "end", inline: "nearest"}); | |
| hoverMesssagePhoto(currentPersonaID); | |
| break; | |
| case 'personality': | |
| const elements = document.querySelectorAll(".bot-personality input") | |
| for (let i = 0; i < Math.min(elements.length, data.message.length); i++) { | |
| elements[i].value = data.message[i]; | |
| } | |
| break; | |
| case 'persona_list': | |
| persona_list = data.message; | |
| for(i=0; i<persona_list.length; i++) { | |
| persona_ids[persona_list[i]["id"]] = persona_list[i]; | |
| } | |
| html_template = createFriends(persona_list); | |
| friends.appendChild(htmlToElement(html_template)); | |
| document_ready(); | |
| break; | |
| case 'personality_reply': | |
| serverMessageValue.textContent = data.message | |
| setTimeout(function() { | |
| websocket.send(JSON.stringify({action: 'get_users'})); | |
| }, 3000); | |
| break; | |
| default: | |
| console.error( | |
| "unsupported event", data); | |
| } | |
| }; | |
| } | |
| let document_ready = function () { | |
| $("#searchfield").focus(function(){ | |
| if($(this).val() == "Search contacts..."){ | |
| $(this).val(""); | |
| } | |
| }); | |
| $("#searchfield").focusout(function(){ | |
| if($(this).val() == ""){ | |
| $(this).val("Search contacts..."); | |
| } | |
| }); | |
| $("#sendmessage input").focus(function(){ | |
| if($(this).val() == "Send message..."){ | |
| $(this).val(""); | |
| } | |
| }); | |
| $("#sendmessage input").focusout(function(){ | |
| if($(this).val() == ""){ | |
| $(this).val("Send message..."); | |
| } | |
| }); | |
| $("#searchfield").keyup(function(){ | |
| if($(this).val() === ""){ | |
| $('.friend').each(function(index){ | |
| $( this ).fadeIn(); | |
| }) | |
| } | |
| else { | |
| const searchtext = $(this).val().toLowerCase(); | |
| $('.friend strong').each(function(index){ | |
| console.log(index + ": " + $( this ).parent().parent().text()); | |
| if($(this).text().toLowerCase().search(searchtext) !== -1) | |
| $( this ).parent().parent().fadeIn(); | |
| else | |
| $( this ).parent().parent().fadeOut(); | |
| }) | |
| } | |
| }); | |
| $(".friend").each(function(){ | |
| $(this).click(function(){ | |
| let childOffset = $(this).offset(); | |
| let parentOffset = $(this).parent().parent().offset(); | |
| let childTop = childOffset.top - parentOffset.top; | |
| let clone = $(this).find('img').eq(0).clone(); | |
| let top = childTop+12+"px"; | |
| currentPersonaID = this.children[1].children[2].innerHTML; | |
| let chat_message = $('#chat_message_' + currentPersonaID); | |
| if(chat_message.length === 0) { | |
| html_template = '<div id="' + 'chat_message_' + currentPersonaID + '" class="chat_messages"></div>'; | |
| $('#chat-block').children().first().append(html_template) | |
| chat_message = $('#chat_message_' + currentPersonaID); | |
| websocket.send(JSON.stringify({action: 'persona_chosen', persona_id: currentPersonaID})); | |
| } | |
| else { | |
| chat_message.show(400, function () { | |
| chat_message[0].scrollIntoView({behavior: "auto", block: "end", inline: "nearest"}); | |
| }); | |
| } | |
| $(clone).css({'top': top}).addClass("floatingImg").appendTo("#chatbox"); | |
| setTimeout(function(){$("#profile p").addClass("animate");$("#profile").addClass("animate");}, 100); | |
| setTimeout(function(){ | |
| chat_message.addClass("animate"); | |
| $('.cx, .cy').addClass('s1'); | |
| setTimeout(function(){$('.cx, .cy').addClass('s2');}, 100); | |
| setTimeout(function(){$('.cx, .cy').addClass('s3');}, 200); | |
| }, 150); | |
| let profile_photo = $('.floatingImg'); | |
| profile_photo.animate({ | |
| 'width': "68px", | |
| 'left':'15px', | |
| 'top':'20px' | |
| }, 200); | |
| profile_photo.hover(function () { | |
| var profile_photo_zoom = $('#photo-block img'); | |
| console.log(profile_photo_zoom); | |
| profile_photo_zoom[0].src = profile_photo[0].src; | |
| $('#photo-block').fadeIn(); | |
| }, function () { | |
| $('#photo-block').fadeOut(800); | |
| }); | |
| var name = $(this).find("p strong").html(); | |
| var email = $(this).find("p span").html(); | |
| $("#profile p").html(name); | |
| $("#profile span").html(email); | |
| $(".message").not(".right").find("img").attr("src", $(clone).attr("src")); | |
| $('#friendslist').fadeOut(); | |
| $('#chat-block').show(); | |
| $('#config-block').hide(); | |
| $('#chatview').fadeIn(); | |
| $('#close').unbind("click").click(function(){ | |
| chat_message.removeClass("animate"); | |
| chat_message.hide(); | |
| $("#profile, #profile p").removeClass("animate"); | |
| $('.cx, .cy').removeClass("s1 s2 s3"); | |
| $('.floatingImg').animate({ | |
| 'width': "40px", | |
| 'top':top, | |
| 'left': '12px' | |
| }, 200, function(){$('.floatingImg').remove()}); | |
| setTimeout(function(){ | |
| $('#chatview').fadeOut(); | |
| $('#friendslist').fadeIn(); | |
| }, 50); | |
| }); | |
| personalities = ["", "", "", "", ""]; | |
| $('#personalities').unbind("click").click(function(){ | |
| personality_input = document.querySelectorAll(".bot-personality input") | |
| for (let i = 0; i < Math.min(personality_input.length, persona_ids[currentPersonaID]["personality"].length); i++) { | |
| personality_input[i].value = persona_ids[currentPersonaID]["personality"][i+3]; | |
| } | |
| setTimeout(function(){ | |
| $('#server_view').fadeOut(400, function () { | |
| $('#server_view').fadeIn(); | |
| }); | |
| $('#parameters_view').fadeOut(400, function (){ | |
| $('#about_view').fadeOut(400, function () { | |
| $('#personalities_view').fadeIn(); | |
| }); | |
| }); | |
| $('#about_view').fadeOut(400); | |
| $('#chat-block').fadeOut(400, function (){ | |
| $('#config-block').fadeIn(); | |
| }); | |
| }, 50); | |
| const elements = document.querySelectorAll(".bot-personality input") | |
| for (let i = 0; i < Math.min(elements.length, 5); i++) { | |
| personalities[i] = elements[i].value; | |
| } | |
| }); | |
| $('#personalities_cancel').unbind("click").click(function(){ | |
| const elements = document.querySelectorAll(".bot-personality input") | |
| for (let i = 0; i < Math.min(elements.length, 5); i++) { | |
| elements[i].value = personalities[i]; | |
| } | |
| setTimeout(function(){ | |
| $('#config-block').fadeOut(400, function (){ | |
| $('#chat-block').fadeIn(); | |
| }); | |
| }, 50); | |
| }); | |
| $('#personalities_update').unbind("click").click(function(){ | |
| const elements = document.querySelectorAll(".bot-personality input") | |
| let data = { | |
| "action": "personality", | |
| "persona_id": currentPersonaID, | |
| "message": [] | |
| } | |
| // persona_ids[currentPersonaID]["personality"] | |
| for (let i = 0; i < Math.min(elements.length, 5); i++) { | |
| if(elements[i].value.length >0) | |
| persona_ids[currentPersonaID]["personality"][i+3] = elements[i].value; | |
| data.message.push(elements[i].value); | |
| } | |
| websocket.send(JSON.stringify(data)); | |
| setTimeout(function(){ | |
| $('#config-block').fadeOut(400, function (){ | |
| $('#chat-block').fadeIn(); | |
| }); | |
| }, 500); | |
| }); | |
| $('#parameters').unbind("click").click(function(){ | |
| setTimeout(function(){ | |
| $('#server_view').fadeOut(400, function () { | |
| $('#server_view').fadeIn(); | |
| }); | |
| $('#personalities_view').fadeOut(400, function (){ | |
| $('#about_view').fadeOut(400, function () { | |
| $('#parameters_view').fadeIn(); | |
| }); | |
| }); | |
| $('#chat-block').fadeOut(400, function () { | |
| $('#config-block').fadeIn(); | |
| }); | |
| }, 50); | |
| }); | |
| $('#parameters_ok').unbind("click").click(function(){ | |
| setTimeout(function(){ | |
| $('#config-block').fadeOut(400, function (){ | |
| $('#chat-block').fadeIn(); | |
| }); | |
| }, 50); | |
| }); | |
| $('#about').unbind("click").click(function(){ | |
| setTimeout(function(){ | |
| $('#server_view').fadeOut(400, function () { | |
| $('#server_view').fadeIn(); | |
| }); | |
| $('#personalities_view').fadeOut(400, function (){ | |
| $('#parameters_view').fadeOut(400, function (){ | |
| $('#about_view').fadeIn(); | |
| }); | |
| }); | |
| $('#chat-block').fadeOut(400, function () { | |
| $('#config-block').fadeIn(); | |
| }); | |
| }, 50); | |
| }); | |
| $('#about_close').unbind("click").click(function(){ | |
| setTimeout(function(){ | |
| $('#config-block').fadeOut(400, function (){ | |
| $('#chat-block').fadeIn(); | |
| }); | |
| }, 50); | |
| }); | |
| }); | |
| }); | |
| // $("#friends")[0].firstElementChild.click() | |
| }; |