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.firstChild; } pageSetup = function() { const minus = document.querySelector('.minus'); const plus = document.querySelector('.plus'); const value = document.querySelector('.value'); // 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.querySelector('.messages'); const updatePersonality = document.getElementById("updatePersonality") const websocket = new WebSocket("wss://gpt2-chat.ai-research.id/"); //const websocket = new WebSocket("ws://localhost:8502/"); minus.onclick = function () { websocket.send(JSON.stringify({action: 'minus'})); } plus.onclick = function () { websocket.send(JSON.stringify({action: 'plus'})); } updatePersonality.onclick = function () { const elements = document.querySelectorAll(".bot-personality input") let data = { "action": "personality", "message": [] } for (let i = 0; i < Math.min(elements.length, 5); i++) { if(elements[i].value.length >0) data.message.push(elements[i].value); } websocket.send(JSON.stringify(data)); } 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 processUserInput = function (userInput) { let parameters = getParameters(); parameters["action"] = "talk"; parameters["utterance"] = userInput.value; websocket.send(JSON.stringify(parameters)); const element = htmlToElement("
" + userInput.value + "
"); userInput.value = ""; messages.appendChild(element); messages.scrollIntoView(false) } 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': value.textContent = 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': const element = htmlToElement("
" + data.message+ "
"); messages.appendChild(element); messages.scrollIntoView(false) 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 'personality_reply': serverMessageValue.textContent = data.message setTimeout(function() { websocket.send(JSON.stringify({action: 'get_users'})); }, 3000); break; default: console.error( "unsupported event", data); } }; }