Merge pull request #373 from TheBestReguile/dev

Move KAI Horde to dedicated dropdown
This commit is contained in:
Cohee
2023-05-24 12:36:53 +03:00
committed by GitHub
4 changed files with 127 additions and 116 deletions

View File

@ -980,26 +980,15 @@
<div id="main-API-selector-block"> <div id="main-API-selector-block">
<select id="main_api"> <select id="main_api">
<option value="kobold">KoboldAI</option> <option value="kobold">KoboldAI</option>
<option value="koboldhorde">KoboldAI Horde</option>
<option value="textgenerationwebui">Text Gen WebUI (ooba)</option> <option value="textgenerationwebui">Text Gen WebUI (ooba)</option>
<option value="novel">NovelAI</option> <option value="novel">NovelAI</option>
<option value="openai">OpenAI</option> <option value="openai">OpenAI</option>
<option value="poe">Poe</option> <option value="poe">Poe</option>
</select> </select>
</div> </div>
<div id="kobold_api" style="position: relative;"> <!-- shows the kobold settings --> <div id="kobold_horde" style="position: relative;"> <!-- shows the kobold settings -->
<form action="javascript:void(null);" method="post" enctype="multipart/form-data"> <form action="javascript:void(null);" method="post" enctype="multipart/form-data">
<label for="use_horde" class="checkbox_label">
<input id="use_horde" type="checkbox" />
Use Horde
</label>
<div id="kobold_api_block">
<h4>API url</h4>
<h5>Example: http://127.0.0.1:5000/api </h5>
<input id="api_url_text" name="api_url" class="text_pole" placeholder="http://127.0.0.1:5000/api" maxlength="500" value="" autocomplete="off">
<input id="api_button" class="menu_button" type="submit" value="Connect">
<div id="api_loading" class="api-load-icon fa-solid fa-hourglass fa-spin"></div>
</div>
<div id="kobold_horde_block"> <div id="kobold_horde_block">
<ul> <ul>
<li> <li>
@ -1041,6 +1030,21 @@
<select id="horde_model" multiple> <select id="horde_model" multiple>
<option>-- Horde models not loaded --</option> <option>-- Horde models not loaded --</option>
</select> </select>
</div>
<div id="online_status_horde">
<div id="online_status_indicator_horde"></div>
<div id="online_status_text_horde">Not connected</div>
</div>
</form>
</div>
<div id="kobold_api" style="position: relative;"> <!-- shows the kobold settings -->
<form action="javascript:void(null);" method="post" enctype="multipart/form-data">
<div id="kobold_api_block">
<h4>API url</h4>
<h5>Example: http://127.0.0.1:5000/api </h5>
<input id="api_url_text" name="api_url" class="text_pole" placeholder="http://127.0.0.1:5000/api" maxlength="500" value="" autocomplete="off">
<input id="api_button" class="menu_button" type="submit" value="Connect">
<div id="api_loading" class="api-load-icon fa-solid fa-hourglass fa-spin"></div>
</div> </div>
<div id="online_status2"> <div id="online_status2">
<div id="online_status_indicator2"></div> <div id="online_status_indicator2"></div>

View File

@ -628,6 +628,8 @@ function checkOnlineStatus() {
if (online_status == "no_connection") { if (online_status == "no_connection") {
$("#online_status_indicator2").css("background-color", "red"); //Kobold $("#online_status_indicator2").css("background-color", "red"); //Kobold
$("#online_status_text2").html("No connection..."); $("#online_status_text2").html("No connection...");
$("#online_status_indicator_horde").css("background-color", "red"); //Kobold Horde
$("#online_status_text_horde").html("No connection...");
$("#online_status_indicator3").css("background-color", "red"); //Novel $("#online_status_indicator3").css("background-color", "red"); //Novel
$("#online_status_text3").html("No connection..."); $("#online_status_text3").html("No connection...");
$(".online_status_indicator4").css("background-color", "red"); //OAI / ooba $(".online_status_indicator4").css("background-color", "red"); //OAI / ooba
@ -639,6 +641,8 @@ function checkOnlineStatus() {
} else { } else {
$("#online_status_indicator2").css("background-color", "green"); //kobold $("#online_status_indicator2").css("background-color", "green"); //kobold
$("#online_status_text2").html(online_status); $("#online_status_text2").html(online_status);
$("#online_status_indicator_horde").css("background-color", "green"); //Kobold Horde
$("#online_status_text_horde").html(online_status);
$("#online_status_indicator3").css("background-color", "green"); //novel $("#online_status_indicator3").css("background-color", "green"); //novel
$("#online_status_text3").html(online_status); $("#online_status_text3").html(online_status);
$(".online_status_indicator4").css("background-color", "green"); //OAI / ooba $(".online_status_indicator4").css("background-color", "green"); //OAI / ooba
@ -648,7 +652,7 @@ function checkOnlineStatus() {
async function getStatus() { async function getStatus() {
if (is_get_status) { if (is_get_status) {
if (main_api == "kobold" && horde_settings.use_horde) { if (main_api == "koboldhorde") {
try { try {
const hordeStatus = await checkHordeStatus(); const hordeStatus = await checkHordeStatus();
online_status = hordeStatus ? 'Connected' : 'no_connection'; online_status = hordeStatus ? 'Connected' : 'no_connection';
@ -694,7 +698,7 @@ async function getStatus() {
} }
// determine if we can use stop sequence // determine if we can use stop sequence
if (main_api == "kobold") { if (main_api === "kobold" || main_api === "koboldhorde") {
kai_settings.use_stop_sequence = canUseKoboldStopSequence(data.version); kai_settings.use_stop_sequence = canUseKoboldStopSequence(data.version);
} }
@ -1888,7 +1892,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
// Adjust token limit for Horde // Adjust token limit for Horde
let adjustedParams; let adjustedParams;
if (main_api == 'kobold' && horde_settings.use_horde && (horde_settings.auto_adjust_context_length || horde_settings.auto_adjust_response_length)) { if (main_api == 'koboldhorde' && (horde_settings.auto_adjust_context_length || horde_settings.auto_adjust_response_length)) {
try { try {
adjustedParams = await adjustHordeGenerationParams(max_context, amount_gen); adjustedParams = await adjustHordeGenerationParams(max_context, amount_gen);
} }
@ -2160,7 +2164,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
let thisPromptBits = []; let thisPromptBits = [];
if (main_api == 'kobold' && horde_settings.use_horde && horde_settings.auto_adjust_response_length) { if (main_api == 'koboldhorde' && horde_settings.auto_adjust_response_length) {
this_amount_gen = Math.min(this_amount_gen, adjustedParams.maxLength); this_amount_gen = Math.min(this_amount_gen, adjustedParams.maxLength);
this_amount_gen = Math.max(this_amount_gen, MIN_AMOUNT_GEN); // prevent validation errors this_amount_gen = Math.max(this_amount_gen, MIN_AMOUNT_GEN); // prevent validation errors
} }
@ -2176,10 +2180,13 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
singleline: kai_settings.single_line, singleline: kai_settings.single_line,
}; };
if (preset_settings != 'gui' || horde_settings.use_horde) { }
const maxContext = horde_settings.use_horde && horde_settings.auto_adjust_context_length ? adjustedParams.maxContextLength : max_context; else if(main_api == 'koboldhorde'){
if (preset_settings != 'gui') {
const maxContext = horde_settings.auto_adjust_context_length ? adjustedParams.maxContextLength : max_context;
generate_data = getKoboldGenerationData(finalPromt, this_settings, this_amount_gen, maxContext, isImpersonate); generate_data = getKoboldGenerationData(finalPromt, this_settings, this_amount_gen, maxContext, isImpersonate);
} }
} }
else if (main_api == 'textgenerationwebui') { else if (main_api == 'textgenerationwebui') {
generate_data = getTextGenGenerationData(finalPromt, this_amount_gen, isImpersonate); generate_data = getTextGenGenerationData(finalPromt, this_amount_gen, isImpersonate);
@ -2218,7 +2225,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
sendOpenAIRequest(type, generate_data.prompt).then(onSuccess).catch(onError); sendOpenAIRequest(type, generate_data.prompt).then(onSuccess).catch(onError);
} }
} }
else if (main_api == 'kobold' && horde_settings.use_horde) { else if (main_api == 'koboldhorde') {
generateHorde(finalPromt, generate_data).then(onSuccess).catch(onError); generateHorde(finalPromt, generate_data).then(onSuccess).catch(onError);
} }
else if (main_api == 'poe') { else if (main_api == 'poe') {
@ -2471,7 +2478,7 @@ function sendMessageAsUser(textareaText, messageBias) {
function getMaxContextSize() { function getMaxContextSize() {
let this_max_context = 1487; let this_max_context = 1487;
if (main_api == 'kobold' || main_api == 'textgenerationwebui') { if (main_api == 'kobold' || main_api == 'koboldhorde' || main_api == 'textgenerationwebui') {
this_max_context = (max_context - amount_gen); this_max_context = (max_context - amount_gen);
} }
if (main_api == 'novel') { if (main_api == 'novel') {
@ -3024,7 +3031,7 @@ function throwCircuitBreakerError() {
} }
function extractTitleFromData(data) { function extractTitleFromData(data) {
if (main_api == 'kobold' && horde_settings.use_horde) { if (main_api == 'koboldhorde') {
return data.workerName; return data.workerName;
} }
@ -3034,11 +3041,11 @@ function extractTitleFromData(data) {
function extractMessageFromData(data) { function extractMessageFromData(data) {
let getMessage = ""; let getMessage = "";
if (main_api == 'kobold' && !horde_settings.use_horde) { if (main_api == 'kobold') {
getMessage = data.results[0].text; getMessage = data.results[0].text;
} }
if (main_api == 'kobold' && horde_settings.use_horde) { if (main_api == 'koboldhorde') {
getMessage = data.text; getMessage = data.text;
} }
@ -3234,7 +3241,7 @@ function extractImageFromMessage(getMessage) {
} }
export function isMultigenEnabled() { export function isMultigenEnabled() {
return power_user.multigen && (main_api == 'textgenerationwebui' || main_api == 'kobold' || main_api == 'novel'); return power_user.multigen && (main_api == 'textgenerationwebui' || main_api == 'kobold' || main_api == 'koboldhorde' || main_api == 'novel');
} }
function activateSendButtons() { function activateSendButtons() {
@ -3546,6 +3553,15 @@ function changeMainAPI() {
const selectedVal = $("#main_api").val(); const selectedVal = $("#main_api").val();
//console.log(selectedVal); //console.log(selectedVal);
const apiElements = { const apiElements = {
"koboldhorde": {
apiSettings: $("#kobold_api-settings"),
apiConnector: $("#kobold_horde"),
apiPresets: $('#kobold_api-presets'),
apiRanges: $("#range_block"),
maxContextElem: $("#max_context_block"),
amountGenElem: $("#amount_gen_block"),
softPromptElem: $("#softprompt_block")
},
"kobold": { "kobold": {
apiSettings: $("#kobold_api-settings"), apiSettings: $("#kobold_api-settings"),
apiConnector: $("#kobold_api"), apiConnector: $("#kobold_api"),
@ -3595,32 +3611,47 @@ function changeMainAPI() {
//console.log('--- apiElements--- '); //console.log('--- apiElements--- ');
//console.log(apiElements); //console.log(apiElements);
//first, disable everything so the old elements stop showing
for (const apiName in apiElements) { for (const apiName in apiElements) {
const apiObj = apiElements[apiName]; const apiObj = apiElements[apiName];
const isCurrentApi = selectedVal === apiName; //do not hide items to then proceed to immediately show them.
if(selectedVal === apiName){
apiObj.apiSettings.css("display", isCurrentApi ? "block" : "none"); continue;
apiObj.apiConnector.css("display", isCurrentApi ? "block" : "none"); }
apiObj.apiRanges.css("display", isCurrentApi ? "block" : "none"); apiObj.apiSettings.css("display", "none");
apiObj.apiPresets.css("display", isCurrentApi ? "block" : "none"); apiObj.apiConnector.css("display", "none");
apiObj.apiRanges.css("display", "none");
if (isCurrentApi && apiName === "openai") { apiObj.apiPresets.css("display", "none");
apiObj.apiPresets.css("display", "flex");
} }
if (isCurrentApi && apiName === "kobold") { //then, find and enable the active item.
//This is split out of the loop so that different apis can share settings divs
let activeItem = apiElements[selectedVal];
activeItem.apiSettings.css("display", "block");
activeItem.apiConnector.css("display", "block");
activeItem.apiRanges.css("display", "block");
activeItem.apiPresets.css("display", "block");
if (selectedVal === "openai") {
activeItem.apiPresets.css("display", "flex");
}
if (selectedVal === "kobold" || selectedVal === 'koboldhorde') {
//console.log("enabling SP for kobold"); //console.log("enabling SP for kobold");
$("#softprompt_block").css("display", "block"); $("#softprompt_block").css("display", "block");
} }
if (isCurrentApi && (apiName === "textgenerationwebui" || apiName === "novel")) { if (selectedVal === "textgenerationwebui" || selectedVal === "novel") {
console.log("enabling amount_gen for ooba/novel"); console.log("enabling amount_gen for ooba/novel");
apiObj.amountGenElem.find('input').prop("disabled", false); activeItem.amountGenElem.find('input').prop("disabled", false);
apiObj.amountGenElem.css("opacity", 1.0); activeItem.amountGenElem.css("opacity", 1.0);
} }
// Hide common settings for OpenAI // Hide common settings for OpenAI
console.log('value?', selectedVal);
if (selectedVal == "openai") { if (selectedVal == "openai") {
console.log('hiding settings?');
$("#common-gen-settings-block").css("display", "none"); $("#common-gen-settings-block").css("display", "none");
} else { } else {
$("#common-gen-settings-block").css("display", "block"); $("#common-gen-settings-block").css("display", "block");
@ -3632,12 +3663,10 @@ function changeMainAPI() {
$("#amount_gen_block").css("display", "flex"); $("#amount_gen_block").css("display", "flex");
} }
}
main_api = selectedVal; main_api = selectedVal;
online_status = "no_connection"; online_status = "no_connection";
if (main_api == "kobold" && horde_settings.use_horde) { if (main_api == "koboldhorde") {
is_get_status = true; is_get_status = true;
getStatus(); getStatus();
getHordeModels(); getHordeModels();
@ -4579,7 +4608,7 @@ function setGenerationProgress(progress) {
} }
function isHordeGenerationNotAllowed() { function isHordeGenerationNotAllowed() {
if (main_api == "kobold" && horde_settings.use_horde && preset_settings == "gui") { if (main_api == "koboldhorde" && preset_settings == "gui") {
toastr.error('GUI Settings preset is not supported for Horde. Please select another preset.'); toastr.error('GUI Settings preset is not supported for Horde. Please select another preset.');
return true; return true;
} }
@ -5683,7 +5712,7 @@ $(document).ready(function () {
$("#api_button").click(function (e) { $("#api_button").click(function (e) {
e.stopPropagation(); e.stopPropagation();
if ($("#api_url_text").val() != "" && !horde_settings.use_horde) { if ($("#api_url_text").val() != "") {
let value = formatKoboldUrl($.trim($("#api_url_text").val())); let value = formatKoboldUrl($.trim($("#api_url_text").val()));
if (!value) { if (!value) {
@ -5704,12 +5733,6 @@ $(document).ready(function () {
clearSoftPromptsList(); clearSoftPromptsList();
getSoftPromptsList(); getSoftPromptsList();
} }
else if (horde_settings.use_horde) {
main_api = "kobold";
is_get_status = true;
getStatus();
clearSoftPromptsList();
}
}); });
$("#api_button_textgenerationwebui").click(function (e) { $("#api_button_textgenerationwebui").click(function (e) {

View File

@ -16,7 +16,6 @@ let models = [];
let horde_settings = { let horde_settings = {
models: [], models: [],
use_horde: false,
auto_adjust_response_length: true, auto_adjust_response_length: true,
auto_adjust_context_length: false, auto_adjust_context_length: false,
}; };
@ -180,7 +179,6 @@ function loadHordeSettings(settings) {
Object.assign(horde_settings, settings.horde_settings); Object.assign(horde_settings, settings.horde_settings);
} }
$('#use_horde').prop("checked", horde_settings.use_horde).trigger('input');
$('#horde_auto_adjust_response_length').prop("checked", horde_settings.auto_adjust_response_length); $('#horde_auto_adjust_response_length').prop("checked", horde_settings.auto_adjust_response_length);
$('#horde_auto_adjust_context_length').prop("checked", horde_settings.auto_adjust_context_length); $('#horde_auto_adjust_context_length').prop("checked", horde_settings.auto_adjust_context_length);
} }
@ -208,23 +206,6 @@ async function showKudos() {
} }
jQuery(function () { jQuery(function () {
$("#use_horde").on("input", async function () {
horde_settings.use_horde = !!$(this).prop("checked");
if (horde_settings.use_horde) {
$('#kobold_api_block').hide();
$('#kobold_horde_block').show();
}
else {
$('#kobold_api_block').show();
$('#kobold_horde_block').hide();
}
// Trigger status check
changeMainAPI();
saveSettingsDebounced();
});
$("#horde_model").on("change", function () { $("#horde_model").on("change", function () {
horde_settings.models = $('#horde_model').val(); horde_settings.models = $('#horde_model').val();
console.log('Updated Horde models', horde_settings.models); console.log('Updated Horde models', horde_settings.models);

View File

@ -1721,6 +1721,7 @@ input[type=search]:focus::-webkit-search-cancel-button {
/* ------ online status indicators and texts. 2 = kobold AI, 3 = Novel AI ----------*/ /* ------ online status indicators and texts. 2 = kobold AI, 3 = Novel AI ----------*/
#online_status2, #online_status2,
#online_status_horde,
.online_status4 { .online_status4 {
opacity: 0.5; opacity: 0.5;
margin-top: 2px; margin-top: 2px;
@ -1728,6 +1729,7 @@ input[type=search]:focus::-webkit-search-cancel-button {
} }
#online_status_indicator2, #online_status_indicator2,
#online_status_indicator_horde,
.online_status_indicator4 { .online_status_indicator4 {
border-radius: 7px; border-radius: 7px;
width: 14px; width: 14px;
@ -1737,6 +1739,7 @@ input[type=search]:focus::-webkit-search-cancel-button {
} }
#online_status_text2, #online_status_text2,
#online_status_text_horde,
.online_status_text4 { .online_status_text4 {
margin-left: 4px; margin-left: 4px;
display: inline-block; display: inline-block;