2021-05-02 18:48:47 -04:00
|
|
|
//=================================================================//
|
|
|
|
// VARIABLES
|
|
|
|
//=================================================================//
|
2021-05-05 03:04:06 -04:00
|
|
|
|
|
|
|
// Socket IO Object
|
2021-05-02 18:48:47 -04:00
|
|
|
var socket;
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
// UI references for jQuery
|
2021-05-07 14:32:10 -04:00
|
|
|
var connect_status;
|
2021-05-04 09:56:48 -04:00
|
|
|
var button_newgame;
|
|
|
|
var button_save;
|
|
|
|
var button_load;
|
|
|
|
var button_settings;
|
2021-05-02 18:48:47 -04:00
|
|
|
var button_send;
|
|
|
|
var button_actedit;
|
|
|
|
var button_actmem;
|
|
|
|
var button_actback;
|
|
|
|
var button_actretry;
|
|
|
|
var button_delete;
|
|
|
|
var game_text;
|
|
|
|
var input_text;
|
|
|
|
var message_text;
|
2021-05-07 14:32:10 -04:00
|
|
|
var settings_menu;
|
2021-05-05 03:04:06 -04:00
|
|
|
var anote_menu;
|
|
|
|
var anote_input;
|
|
|
|
var anote_labelcur;
|
|
|
|
var anote_slider;
|
2021-05-02 18:48:47 -04:00
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
// Key states
|
|
|
|
var shift_down = false;
|
2021-05-02 18:48:47 -04:00
|
|
|
var do_clear_ent = false;
|
|
|
|
|
|
|
|
//=================================================================//
|
|
|
|
// METHODS
|
|
|
|
//=================================================================//
|
|
|
|
|
2021-05-07 14:32:10 -04:00
|
|
|
function addSetting(ob) {
|
|
|
|
// Add setting block to Settings Menu
|
|
|
|
settings_menu.append("<div class=\"settingitem\">\
|
|
|
|
<div class=\"settinglabel\">\
|
|
|
|
<div class=\"justifyleft\">\
|
|
|
|
"+ob.label+" <span class=\"helpicon\">?<span class=\"helptext\">"+ob.tooltip+"</span></span>\
|
|
|
|
</div>\
|
|
|
|
<div class=\"justifyright\" id=\""+ob.id+"cur\">\
|
|
|
|
"+ob.default+"\
|
|
|
|
</div>\
|
|
|
|
</div>\
|
|
|
|
<div>\
|
|
|
|
<input type=\"range\" class=\"form-range airange\" min=\""+ob.min+"\" max=\""+ob.max+"\" step=\""+ob.step+"\" id=\""+ob.id+"\">\
|
|
|
|
</div>\
|
|
|
|
<div class=\"settingminmax\">\
|
|
|
|
<div class=\"justifyleft\">\
|
|
|
|
"+ob.min+"\
|
|
|
|
</div>\
|
|
|
|
<div class=\"justifyright\">\
|
|
|
|
"+ob.max+"\
|
|
|
|
</div>\
|
|
|
|
</div>\
|
|
|
|
</div>");
|
|
|
|
// Set references to HTML objects
|
|
|
|
refin = $("#"+ob.id);
|
|
|
|
reflb = $("#"+ob.id+"cur");
|
|
|
|
window["setting_"+ob.id] = refin;
|
|
|
|
window["label_"+ob.id] = reflb;
|
|
|
|
// Add event function to input
|
|
|
|
refin.on("input", function () {
|
|
|
|
socket.send({'cmd': $(this).attr('id'), 'data': $(this).val()});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
function enableButtons(refs) {
|
|
|
|
for(i=0; i<refs.length; i++) {
|
|
|
|
refs[i].prop("disabled",false);
|
|
|
|
refs[i].removeClass("btn-secondary");
|
|
|
|
refs[i].addClass("btn-primary");
|
|
|
|
}
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
function disableButtons(refs) {
|
|
|
|
for(i=0; i<refs.length; i++) {
|
|
|
|
refs[i].prop("disabled",true);
|
|
|
|
refs[i].removeClass("btn-primary");
|
|
|
|
refs[i].addClass("btn-secondary");
|
|
|
|
}
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function enableSendBtn() {
|
2021-05-05 03:04:06 -04:00
|
|
|
enableButtons([button_send])
|
2021-05-02 18:48:47 -04:00
|
|
|
button_send.html("Submit");
|
|
|
|
}
|
|
|
|
|
|
|
|
function disableSendBtn() {
|
2021-05-05 03:04:06 -04:00
|
|
|
disableButtons([button_send])
|
2021-05-02 18:48:47 -04:00
|
|
|
button_send.html("");
|
|
|
|
}
|
|
|
|
|
|
|
|
function showMessage(msg) {
|
|
|
|
message_text.removeClass();
|
|
|
|
message_text.addClass("color_green");
|
|
|
|
message_text.html(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
function errMessage(msg) {
|
|
|
|
message_text.removeClass();
|
|
|
|
message_text.addClass("color_red");
|
|
|
|
message_text.html(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
function hideMessage() {
|
|
|
|
message_text.html("");
|
|
|
|
message_text.removeClass();
|
|
|
|
}
|
|
|
|
|
|
|
|
function showWaitAnimation() {
|
|
|
|
$("#inputrowright").append("<img id=\"waitanim\" src=\"static/thinking.gif\"/>");
|
|
|
|
}
|
|
|
|
|
|
|
|
function hideWaitAnimation() {
|
|
|
|
$('#waitanim').remove();
|
|
|
|
}
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
function hide(refs) {
|
|
|
|
for(i=0; i<refs.length; i++) {
|
|
|
|
refs[i].addClass("hidden");
|
|
|
|
}
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
function show(refs) {
|
|
|
|
for(i=0; i<refs.length; i++) {
|
|
|
|
refs[i].removeClass("hidden");
|
|
|
|
}
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function enterEditMode() {
|
|
|
|
// Add class to each story chunk
|
|
|
|
showMessage("Please select a story chunk to edit above.");
|
|
|
|
button_actedit.html("Cancel");
|
|
|
|
game_text.children('chunk').addClass("chunkhov");
|
|
|
|
game_text.on('click', '> *', function() {
|
|
|
|
editModeSelect($(this).attr("n"));
|
|
|
|
});
|
|
|
|
disableSendBtn();
|
2021-05-05 03:04:06 -04:00
|
|
|
hide([button_actback, button_actmem, button_actretry]);
|
|
|
|
show([button_delete]);
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function exitEditMode() {
|
|
|
|
// Remove class to each story chunk
|
|
|
|
hideMessage();
|
|
|
|
button_actedit.html("Edit");
|
|
|
|
game_text.children('chunk').removeClass("chunkhov");
|
|
|
|
game_text.off('click', '> *');
|
|
|
|
enableSendBtn();
|
2021-05-05 03:04:06 -04:00
|
|
|
show([button_actback, button_actmem, button_actretry]);
|
|
|
|
hide([button_delete]);
|
2021-05-02 18:48:47 -04:00
|
|
|
input_text.val("");
|
|
|
|
}
|
|
|
|
|
|
|
|
function editModeSelect(n) {
|
|
|
|
socket.send({'cmd': 'editline', 'data': n});
|
|
|
|
}
|
|
|
|
|
|
|
|
function enterMemoryMode() {
|
|
|
|
showMessage("Edit the memory to be sent with each request to the AI.");
|
|
|
|
button_actmem.html("Cancel");
|
2021-05-05 03:04:06 -04:00
|
|
|
hide([button_actback, button_actretry, button_actedit, button_delete]);
|
|
|
|
// Display Author's Note field
|
|
|
|
anote_menu.slideDown("fast");
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function exitMemoryMode() {
|
|
|
|
hideMessage();
|
|
|
|
button_actmem.html("Memory");
|
2021-05-05 03:04:06 -04:00
|
|
|
show([button_actback, button_actretry, button_actedit]);
|
2021-05-02 18:48:47 -04:00
|
|
|
input_text.val("");
|
2021-05-05 03:04:06 -04:00
|
|
|
// Hide Author's Note field
|
|
|
|
anote_menu.slideUp("fast");
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
function dosubmit() {
|
|
|
|
var txt = input_text.val();
|
|
|
|
socket.send({'cmd': 'submit', 'data': txt});
|
|
|
|
input_text.val("");
|
|
|
|
hideMessage();
|
|
|
|
}
|
|
|
|
|
|
|
|
function newTextHighlight(ref) {
|
|
|
|
ref.addClass("color_green");
|
|
|
|
ref.addClass("colorfade");
|
|
|
|
setTimeout(function () {
|
|
|
|
ref.removeClass("color_green")
|
|
|
|
setTimeout(function () {
|
|
|
|
ref.removeClass("colorfade")
|
|
|
|
}, 1000);
|
|
|
|
}, 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
//=================================================================//
|
|
|
|
// READY/RUNTIME
|
|
|
|
//=================================================================//
|
|
|
|
|
|
|
|
$(document).ready(function(){
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
// Bind UI references
|
2021-05-07 14:32:10 -04:00
|
|
|
connect_status = $('#connectstatus');
|
2021-05-02 18:48:47 -04:00
|
|
|
button_newgame = $('#btn_newgame');
|
|
|
|
button_save = $('#btn_save');
|
|
|
|
button_load = $('#btn_load');
|
2021-05-04 09:56:48 -04:00
|
|
|
button_settings = $('#btn_settings');
|
2021-05-02 18:48:47 -04:00
|
|
|
button_send = $('#btnsend');
|
|
|
|
button_actedit = $('#btn_actedit');
|
|
|
|
button_actmem = $('#btn_actmem');
|
|
|
|
button_actback = $('#btn_actundo');
|
|
|
|
button_actretry = $('#btn_actretry');
|
|
|
|
button_delete = $('#btn_delete');
|
|
|
|
game_text = $('#gametext');
|
|
|
|
input_text = $('#input_text');
|
|
|
|
message_text = $('#messagefield');
|
2021-05-07 14:32:10 -04:00
|
|
|
settings_menu = $("#settingsmenu");
|
2021-05-05 03:04:06 -04:00
|
|
|
anote_menu = $('#anoterowcontainer');
|
|
|
|
anote_input = $('#anoteinput');
|
|
|
|
anote_labelcur = $('#anotecur');
|
|
|
|
anote_slider = $('#anotedepth');
|
2021-05-02 18:48:47 -04:00
|
|
|
|
|
|
|
// Connect to SocketIO server
|
|
|
|
socket = io.connect('http://127.0.0.1:5000');
|
|
|
|
|
|
|
|
socket.on('from_server', function(msg) {
|
|
|
|
if(msg.cmd == "connected") {
|
|
|
|
// Connected to Server Actions
|
2021-05-07 14:32:10 -04:00
|
|
|
connect_status.html("<b>Connected to KoboldAI Process!</b>");
|
|
|
|
connect_status.removeClass("color_orange");
|
|
|
|
connect_status.addClass("color_green");
|
|
|
|
// Reset Settings Menu
|
|
|
|
settings_menu.html("");
|
2021-05-02 18:48:47 -04:00
|
|
|
} else if(msg.cmd == "updatescreen") {
|
|
|
|
// Send game content to Game Screen
|
|
|
|
game_text.html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
// Scroll to bottom of text
|
|
|
|
setTimeout(function () {
|
|
|
|
$('#gamescreen').animate({scrollTop: $('#gamescreen').prop('scrollHeight')}, 1000);
|
|
|
|
}, 5);
|
2021-05-02 18:48:47 -04:00
|
|
|
} else if(msg.cmd == "setgamestate") {
|
|
|
|
// Enable or Disable buttons
|
|
|
|
if(msg.data == "ready") {
|
|
|
|
enableSendBtn();
|
2021-05-05 03:04:06 -04:00
|
|
|
enableButtons([button_actedit, button_actmem, button_actback, button_actretry]);
|
2021-05-02 18:48:47 -04:00
|
|
|
hideWaitAnimation();
|
|
|
|
} else if(msg.data == "wait") {
|
|
|
|
disableSendBtn();
|
2021-05-05 03:04:06 -04:00
|
|
|
disableButtons([button_actedit, button_actmem, button_actback, button_actretry]);
|
2021-05-02 18:48:47 -04:00
|
|
|
showWaitAnimation();
|
|
|
|
} else if(msg.data == "start") {
|
|
|
|
enableSendBtn();
|
2021-05-05 03:04:06 -04:00
|
|
|
enableButtons([button_actmem]);
|
|
|
|
disableButtons([button_actedit, button_actback, button_actretry]);
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
} else if(msg.cmd == "editmode") {
|
|
|
|
// Enable or Disable edit mode
|
|
|
|
if(msg.data == "true") {
|
|
|
|
enterEditMode();
|
|
|
|
} else {
|
|
|
|
exitEditMode();
|
|
|
|
}
|
|
|
|
} else if(msg.cmd == "setinputtext") {
|
|
|
|
// Set input box text for edit mode
|
|
|
|
input_text.val(msg.data);
|
|
|
|
} else if(msg.cmd == "enablesubmit") {
|
|
|
|
// Enables the submit button
|
|
|
|
enableSendBtn();
|
|
|
|
} else if(msg.cmd == "memmode") {
|
|
|
|
// Enable or Disable memory edit mode
|
|
|
|
if(msg.data == "true") {
|
|
|
|
enterMemoryMode();
|
|
|
|
} else {
|
|
|
|
exitMemoryMode();
|
|
|
|
}
|
|
|
|
} else if(msg.cmd == "errmsg") {
|
|
|
|
// Send error message
|
|
|
|
errMessage(msg.data);
|
|
|
|
} else if(msg.cmd == "texteffect") {
|
|
|
|
// Apply color highlight to line of text
|
|
|
|
newTextHighlight($("#n"+msg.data))
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "updatetemp") {
|
|
|
|
// Send current temp value to input
|
2021-05-07 14:32:10 -04:00
|
|
|
$("#settemp").val(parseFloat(msg.data));
|
|
|
|
$("#settempcur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "updatetopp") {
|
2021-05-07 14:32:10 -04:00
|
|
|
// Send current top p value to input
|
|
|
|
$("#settopp").val(parseFloat(msg.data));
|
|
|
|
$("#settoppcur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "updatereppen") {
|
2021-05-07 14:32:10 -04:00
|
|
|
// Send current rep pen value to input
|
|
|
|
$("#setreppen").val(parseFloat(msg.data));
|
|
|
|
$("#setreppencur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "updateoutlen") {
|
2021-05-07 14:32:10 -04:00
|
|
|
// Send current output amt value to input
|
|
|
|
$("#setoutput").val(parseInt(msg.data));
|
|
|
|
$("#setoutputcur").html(msg.data);
|
|
|
|
} else if(msg.cmd == "updatetknmax") {
|
|
|
|
// Send current max tokens value to input
|
|
|
|
$("#settknmax").val(parseInt(msg.data));
|
|
|
|
$("#settknmaxcur").html(msg.data);
|
|
|
|
} else if(msg.cmd == "updateikgen") {
|
|
|
|
// Send current max tokens value to input
|
|
|
|
$("#setikgen").val(parseInt(msg.data));
|
|
|
|
$("#setikgencur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "setlabeltemp") {
|
|
|
|
// Update setting label with value from server
|
2021-05-07 14:32:10 -04:00
|
|
|
$("#settempcur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "setlabeltopp") {
|
|
|
|
// Update setting label with value from server
|
2021-05-07 14:32:10 -04:00
|
|
|
$("#settoppcur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "setlabelreppen") {
|
|
|
|
// Update setting label with value from server
|
2021-05-07 14:32:10 -04:00
|
|
|
$("#setreppencur").html(msg.data);
|
2021-05-04 09:56:48 -04:00
|
|
|
} else if(msg.cmd == "setlabeloutput") {
|
|
|
|
// Update setting label with value from server
|
2021-05-07 14:32:10 -04:00
|
|
|
$("#setoutputcur").html(msg.data);
|
|
|
|
} else if(msg.cmd == "setlabeltknmax") {
|
|
|
|
// Update setting label with value from server
|
|
|
|
$("#settknmaxcur").html(msg.data);
|
|
|
|
} else if(msg.cmd == "setlabelikgen") {
|
|
|
|
// Update setting label with value from server
|
|
|
|
$("#setikgencur").html(msg.data);
|
|
|
|
} else if(msg.cmd == "updateanotedepth") {
|
2021-05-05 03:04:06 -04:00
|
|
|
// Send current Author's Note depth value to input
|
|
|
|
anote_slider.val(parseInt(msg.data));
|
|
|
|
anote_labelcur.html(msg.data);
|
|
|
|
} else if(msg.cmd == "setlabelanotedepth") {
|
|
|
|
// Update setting label with value from server
|
|
|
|
anote_labelcur.html(msg.data);
|
|
|
|
} else if(msg.cmd == "getanote") {
|
|
|
|
// Request contents of Author's Note field
|
|
|
|
var txt = anote_input.val();
|
|
|
|
socket.send({'cmd': 'anote', 'data': txt});
|
|
|
|
} else if(msg.cmd == "setanote") {
|
|
|
|
// Set contents of Author's Note field
|
|
|
|
anote_input.val(msg.data);
|
2021-05-07 14:32:10 -04:00
|
|
|
} else if(msg.cmd == "addsetting") {
|
|
|
|
// Add setting controls
|
|
|
|
addSetting(msg.data);
|
2021-05-02 18:48:47 -04:00
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
socket.on('disconnect', function() {
|
2021-05-07 14:32:10 -04:00
|
|
|
connect_status.html("<b>Lost connection...</b>");
|
|
|
|
connect_status.removeClass("color_green");
|
|
|
|
connect_status.addClass("color_orange");
|
2021-05-02 18:48:47 -04:00
|
|
|
});
|
|
|
|
|
|
|
|
// Bind actions to UI buttons
|
|
|
|
button_send.on("click", function(ev) {
|
|
|
|
dosubmit();
|
|
|
|
});
|
|
|
|
|
|
|
|
button_actretry.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'retry', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_actback.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'back', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_actedit.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'edit', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_delete.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'delete', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_actmem.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'memory', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_save.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'save', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_load.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'load', 'data': ''});
|
|
|
|
});
|
|
|
|
|
|
|
|
button_newgame.on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'newgame', 'data': ''});
|
|
|
|
});
|
|
|
|
|
2021-05-04 09:56:48 -04:00
|
|
|
button_settings.on("click", function(ev) {
|
|
|
|
$('#settingsmenu').slideToggle("slow");
|
|
|
|
});
|
|
|
|
|
2021-05-07 14:32:10 -04:00
|
|
|
$("#btn_savesettings").on("click", function(ev) {
|
|
|
|
socket.send({'cmd': 'savesettings', 'data': ''});
|
2021-05-04 09:56:48 -04:00
|
|
|
});
|
|
|
|
|
2021-05-02 18:48:47 -04:00
|
|
|
// Bind Enter button to submit
|
|
|
|
input_text.keydown(function (ev) {
|
|
|
|
if (ev.which == 13 && !shift_down) {
|
|
|
|
do_clear_ent = true;
|
|
|
|
dosubmit();
|
|
|
|
} else if(ev.which == 16) {
|
|
|
|
shift_down = true;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2021-05-05 03:04:06 -04:00
|
|
|
// Enter to submit, but not if holding shift
|
2021-05-02 18:48:47 -04:00
|
|
|
input_text.keyup(function (ev) {
|
|
|
|
if (ev.which == 13 && do_clear_ent) {
|
|
|
|
input_text.val("");
|
|
|
|
do_clear_ent = false;
|
|
|
|
} else if(ev.which == 16) {
|
|
|
|
shift_down = false;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|
|
|
|
|