Add Samplers menu

This commit is contained in:
Gnome Ann 2022-06-13 20:18:09 -04:00
parent 4c7d6f42d9
commit 6231106f95
4 changed files with 143 additions and 7 deletions

View File

@ -2873,6 +2873,8 @@ def get_message(msg):
elif(msg['cmd'] == 'uslistrequest'): elif(msg['cmd'] == 'uslistrequest'):
unloaded, loaded = getuslist() unloaded, loaded = getuslist()
emit('from_server', {'cmd': 'buildus', 'data': {"unloaded": unloaded, "loaded": loaded}}) emit('from_server', {'cmd': 'buildus', 'data': {"unloaded": unloaded, "loaded": loaded}})
elif(msg['cmd'] == 'samplerlistrequest'):
emit('from_server', {'cmd': 'buildsamplers', 'data': vars.sampler_order})
elif(msg['cmd'] == 'usloaded'): elif(msg['cmd'] == 'usloaded'):
vars.userscripts = [] vars.userscripts = []
for userscript in msg['data']: for userscript in msg['data']:
@ -2886,6 +2888,16 @@ def get_message(msg):
load_lua_scripts() load_lua_scripts()
unloaded, loaded = getuslist() unloaded, loaded = getuslist()
sendUSStatItems() sendUSStatItems()
elif(msg['cmd'] == 'samplers'):
sampler_order = msg["data"]
if(not isinstance(sampler_order, list)):
raise ValueError(f"Sampler order must be a list, but got a {type(sampler_order)}")
if(len(sampler_order) != len(vars.sampler_order)):
raise ValueError(f"Sampler order must be a list of length {len(vars.sampler_order)}, but got a list of length {len(sampler_order)}")
if(not all(isinstance(e, int) for e in sampler_order)):
raise ValueError(f"Sampler order must be a list of ints, but got a list with at least one non-int element")
vars.sampler_order = sampler_order
settingschanged()
elif(msg['cmd'] == 'loadselect'): elif(msg['cmd'] == 'loadselect'):
vars.loadselect = msg["data"] vars.loadselect = msg["data"]
elif(msg['cmd'] == 'spselect'): elif(msg['cmd'] == 'spselect'):

View File

@ -20,6 +20,7 @@ var button_settings;
var button_format; var button_format;
var button_softprompt; var button_softprompt;
var button_userscripts; var button_userscripts;
var button_samplers;
var button_mode; var button_mode;
var button_mode_label; var button_mode_label;
var button_send; var button_send;
@ -109,6 +110,9 @@ var do_clear_ent = false;
// Whether or not an entry in the Userscripts menu is being dragged // Whether or not an entry in the Userscripts menu is being dragged
var us_dragging = false; var us_dragging = false;
// Whether or not an entry in the Samplers menu is being dragged
var samplers_dragging = false;
// Display vars // Display vars
var allowtoggle = false; var allowtoggle = false;
var formatcount = 0; var formatcount = 0;
@ -976,6 +980,16 @@ function hideUSPopup() {
spcontent.html(""); spcontent.html("");
} }
function showSamplersPopup() {
samplerspopup.removeClass("hidden");
samplerspopup.addClass("flex");
}
function hideSamplersPopup() {
samplerspopup.removeClass("flex");
samplerspopup.addClass("hidden");
}
function buildLoadList(ar) { function buildLoadList(ar) {
disableButtons([load_accept]); disableButtons([load_accept]);
loadcontent.html(""); loadcontent.html("");
@ -1109,6 +1123,29 @@ function buildUSList(unloaded, loaded) {
} }
} }
function buildSamplerList(samplers) {
samplerslist.html("");
showSamplersPopup();
var i;
var samplers_lookup_table = [
"Top-k Sampling",
"Top-a Sampling",
"Top-p Sampling",
"Tail-free Sampling",
"Typical Sampling",
"Temperature",
]
for(i=0; i<samplers.length; i++) {
samplerslist.append("<div class=\"flex\">\
<div class=\"samplerslistitem flex-row-container\" sid=\""+samplers[i]+"\">\
<div class=\"flex-row\">\
<div>"+samplers_lookup_table[samplers[i]]+"</div>\
</div>\
</div>\
</div>");
}
}
function highlightLoadLine(ref) { function highlightLoadLine(ref) {
$("#loadlistcontent > div > div.popuplistselected").removeClass("popuplistselected"); $("#loadlistcontent > div > div.popuplistselected").removeClass("popuplistselected");
ref.addClass("popuplistselected"); ref.addClass("popuplistselected");
@ -1838,6 +1875,7 @@ $(document).ready(function(){
button_format = $('#btn_format'); button_format = $('#btn_format');
button_softprompt = $("#btn_softprompt"); button_softprompt = $("#btn_softprompt");
button_userscripts= $("#btn_userscripts"); button_userscripts= $("#btn_userscripts");
button_samplers = $("#btn_samplers");
button_mode = $('#btnmode') button_mode = $('#btnmode')
button_mode_label = $('#btnmode_label') button_mode_label = $('#btnmode_label')
button_send = $('#btnsend'); button_send = $('#btnsend');
@ -1886,6 +1924,10 @@ $(document).ready(function(){
usloaded = $("#uslistloaded"); usloaded = $("#uslistloaded");
us_accept = $("#btn_usaccept"); us_accept = $("#btn_usaccept");
us_close = $("#btn_usclose"); us_close = $("#btn_usclose");
samplerspopup = $("#samplerscontainer");
samplerslist = $("#samplerslist");
samplers_accept = $("#btn_samplersaccept");
samplers_close = $("#btn_samplersclose");
nspopup = $("#newgamecontainer"); nspopup = $("#newgamecontainer");
ns_accept = $("#btn_nsaccept"); ns_accept = $("#btn_nsaccept");
ns_close = $("#btn_nsclose"); ns_close = $("#btn_nsclose");
@ -1908,7 +1950,7 @@ $(document).ready(function(){
modelname = msg.modelname; modelname = msg.modelname;
} }
refreshTitle(); refreshTitle();
connect_status.html("<b>Connected to KoboldAI Process!</b>"); connect_status.html("<b>Connected to KoboldAI!</b>");
connect_status.removeClass("color_orange"); connect_status.removeClass("color_orange");
connect_status.addClass("color_green"); connect_status.addClass("color_green");
// Reset Menus // Reset Menus
@ -2310,6 +2352,8 @@ $(document).ready(function(){
buildSPList(msg.data); buildSPList(msg.data);
} else if(msg.cmd == "buildus") { } else if(msg.cmd == "buildus") {
buildUSList(msg.data.unloaded, msg.data.loaded); buildUSList(msg.data.unloaded, msg.data.loaded);
} else if(msg.cmd == "buildsamplers") {
buildSamplerList(msg.data);
} else if(msg.cmd == "askforoverwrite") { } else if(msg.cmd == "askforoverwrite") {
// Show overwrite warning // Show overwrite warning
show([$(".saveasoverwrite")]); show([$(".saveasoverwrite")]);
@ -2436,6 +2480,20 @@ $(document).ready(function(){
}, 10); }, 10);
} }
var samplers_click_handler = function(ev) {
setTimeout(function() {
if (samplers_dragging) {
return;
}
var target = $(ev.target).closest(".samplerslistitem");
var next = target.parent().next().find(".samplerslistitem");
if (!next.length) {
return;
}
next.parent().after(target.parent());
}, 10);
}
// Make the userscripts menu sortable // Make the userscripts menu sortable
var us_sortable_settings = { var us_sortable_settings = {
placeholder: "ussortable-placeholder", placeholder: "ussortable-placeholder",
@ -2456,6 +2514,22 @@ $(document).ready(function(){
connectWith: "#uslistunloaded", connectWith: "#uslistunloaded",
}, us_sortable_settings)).on("click", ".uslistitem", us_click_handler); }, us_sortable_settings)).on("click", ".uslistitem", us_click_handler);
// Make the samplers menu sortable
var samplers_sortable_settings = {
placeholder: "samplerssortable-placeholder",
start: function() { samplers_dragging = true; },
stop: function() { samplers_dragging = false; },
delay: 2,
cursor: "move",
tolerance: "pointer",
opacity: 0.21,
revert: 173,
scrollSensitivity: 64,
scrollSpeed: 10,
}
samplerslist.sortable($.extend({
}, samplers_sortable_settings)).on("click", ".samplerslistitem", samplers_click_handler);
// Bind actions to UI buttons // Bind actions to UI buttons
button_send.on("click", function(ev) { button_send.on("click", function(ev) {
dosubmit(); dosubmit();
@ -2590,6 +2664,10 @@ $(document).ready(function(){
button_userscripts.on("click", function(ev) { button_userscripts.on("click", function(ev) {
socket.send({'cmd': 'uslistrequest', 'data': ''}); socket.send({'cmd': 'uslistrequest', 'data': ''});
}); });
button_samplers.on("click", function(ev) {
socket.send({'cmd': 'samplerlistrequest', 'data': ''});
});
load_close.on("click", function(ev) { load_close.on("click", function(ev) {
hideLoadPopup(); hideLoadPopup();
@ -2623,6 +2701,16 @@ $(document).ready(function(){
socket.send({'cmd': 'usload', 'data': ''}); socket.send({'cmd': 'usload', 'data': ''});
hideUSPopup(); hideUSPopup();
}); });
samplers_close.on("click", function(ev) {
hideSamplersPopup();
});
samplers_accept.on("click", function(ev) {
hideMessage();
socket.send({'cmd': 'samplers', 'data': samplerslist.find(".samplerslistitem").map(function() { return parseInt($(this).attr("sid")); }).toArray()});
hideSamplersPopup();
});
button_newgame.on("click", function(ev) { button_newgame.on("click", function(ev) {
if(connected) { if(connected) {

View File

@ -457,6 +457,26 @@ body.connected #popupfooter, #popupfooter.always-available {
overflow-wrap: anywhere; overflow-wrap: anywhere;
} }
#samplerspopup {
width: 300px;
background-color: #262626;
margin-top: 100px;
}
@media (max-width: 768px) {
#samplerspopup {
width: 100%;
background-color: #262626;
margin-top: 100px;
}
}
#samplerslist {
height: 300px;
overflow-y: scroll;
overflow-wrap: anywhere;
}
#nspopup { #nspopup {
width: 350px; width: 350px;
background-color: #262626; background-color: #262626;
@ -750,7 +770,7 @@ body.connected .dropdown-item:hover, .dropdown-item.always-available:hover {
background-color: #3bf723; background-color: #3bf723;
} }
.ussortable-placeholder { .ussortable-placeholder, .samplerssortable-placeholder {
height: 4px; height: 4px;
background-color: #3bf723; background-color: #3bf723;
} }
@ -1340,7 +1360,7 @@ body.connected .popupfooter, .popupfooter.always-available {
background-color: #688f1f; background-color: #688f1f;
} }
.uslistitem { .uslistitem, .samplerslistitem {
padding: 12px 10px 12px 10px; padding: 12px 10px 12px 10px;
display: flex; display: flex;
flex-grow: 1; flex-grow: 1;
@ -1352,11 +1372,11 @@ body.connected .popupfooter, .popupfooter.always-available {
transition: background-color 0.25s ease-in; transition: background-color 0.25s ease-in;
} }
.uslistitemsub { .uslistitemsub, .samplerslistitemsub {
color: #ba9; color: #ba9;
} }
.uslistitem:hover { .uslistitem:hover, .samplerslistitem:hover {
cursor: move; cursor: move;
background-color: #688f1f; background-color: #688f1f;
} }

View File

@ -9,7 +9,7 @@
<link rel="stylesheet" href="static/bootstrap.min.css"> <link rel="stylesheet" href="static/bootstrap.min.css">
<link rel="stylesheet" href="static/bootstrap-toggle.min.css"> <link rel="stylesheet" href="static/bootstrap-toggle.min.css">
<link rel="stylesheet" href="static/open-iconic-bootstrap.min.css"> <link rel="stylesheet" href="static/open-iconic-bootstrap.min.css">
<link rel="stylesheet" href="static/custom.css?ver=1.18b"> <link rel="stylesheet" href="static/custom.css?ver=1.18c">
<script src="static/jquery-3.6.0.min.js"></script> <script src="static/jquery-3.6.0.min.js"></script>
<script src="static/jquery-ui.sortable.min.js"></script> <script src="static/jquery-ui.sortable.min.js"></script>
@ -17,7 +17,7 @@
<script src="static/bootstrap.min.js"></script> <script src="static/bootstrap.min.js"></script>
<script src="static/bootstrap-toggle.min.js"></script> <script src="static/bootstrap-toggle.min.js"></script>
<script src="static/rangy-core.min.js"></script> <script src="static/rangy-core.min.js"></script>
<script src="static/application.js?ver=1.18d"></script> <script src="static/application.js?ver=1.18e"></script>
</head> </head>
<body> <body>
<input type="file" id="remote-save-select" accept="application/json" style="display:none"> <input type="file" id="remote-save-select" accept="application/json" style="display:none">
@ -71,6 +71,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="#" id="btn_format">Formatting</a> <a class="nav-link" href="#" id="btn_format">Formatting</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" href="#" id="btn_samplers">Samplers</a>
</li>
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="#" id="btn_userscripts">Userscripts</a> <a class="nav-link" href="#" id="btn_userscripts">Userscripts</a>
</li> </li>
@ -299,6 +302,19 @@
</div> </div>
</div> </div>
</div> </div>
<div class="popupcontainer hidden" id="samplerscontainer">
<div id="samplerspopup">
<div class="popuptitlebar">
<div class="popuptitletext">Drag-and-drop to change the order in which the samplers are applied</div>
</div>
<div id="samplerslist">
</div>
<div class="popupfooter">
<button type="button" class="btn btn-primary" id="btn_samplersaccept">Save</button>
<button type="button" class="btn btn-primary" id="btn_samplersclose">Cancel</button>
</div>
</div>
</div>
<div class="popupcontainer hidden" id="loadcontainerdelete"> <div class="popupcontainer hidden" id="loadcontainerdelete">
<div id="loadpopupdelete"> <div id="loadpopupdelete">
<div class="popuptitlebar"> <div class="popuptitlebar">