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 += '
'; message_template += ' '; } else { message_template += '
'; message_template += ' '; } message_template += '
' + message; message_template += '
'; message_template += '
'; message_template += '
'; return message_template; } let createFriends = function (persona_list) { html_template = ''; for (let i=0; i'; html_template += '

'; html_template += ' ' + persona_list[i]["name"] + ''; html_template += ' ' + persona_list[i]["email"]+ ''; html_template += ' ' + persona_list[i]["id"]+ ''; html_template += '

'; html_template += '
'; html_template += '
'; } 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'; $('#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() };