'
);
highlightSelectedAvatar();
}
//***************SETTINGS****************//
///////////////////////////////////////////
async function getSettings(type) {
//timer
//console.log('getSettings() pinging server for settings request');
jQuery.ajax({
type: "POST",
url: "/getsettings",
data: JSON.stringify({}),
beforeSend: function () { },
cache: false,
dataType: "json",
contentType: "application/json",
//processData: false,
success: function (data) {
if (data.result != "file not find" && data.settings) {
settings = JSON.parse(data.settings);
if (settings.username !== undefined) {
if (settings.username !== "") {
name1 = settings.username;
$("#your_name").val(name1);
}
}
//Load which API we are using
if (settings.main_api != undefined) {
main_api = settings.main_api;
$("#main_api option[value=" + main_api + "]").attr(
"selected",
"true"
);
changeMainAPI();
}
//load Novel API KEY is exists
if (settings.api_key_novel != undefined) {
api_key_novel = settings.api_key_novel;
$("#api_key_novel").val(api_key_novel);
}
//load the rest of the Novel settings without any checks
model_novel = settings.model_novel;
$("#model_novel_select option[value=" + model_novel + "]").attr(
"selected",
"true"
);
novelai_setting_names = data.novelai_setting_names;
novelai_settings = data.novelai_settings;
novelai_settings.forEach(function (item, i, arr) {
novelai_settings[i] = JSON.parse(item);
});
var arr_holder = {};
$("#settings_perset_novel").empty();
novelai_setting_names.forEach(function (item, i, arr) {
arr_holder[item] = i;
$("#settings_perset_novel").append(
"
" + item + " "
);
});
novelai_setting_names = {};
novelai_setting_names = arr_holder;
preset_settings_novel = settings.preset_settings_novel;
$(
"#settings_perset_novel option[value=" +
novelai_setting_names[preset_settings_novel] +
"]"
).attr("selected", "true");
//Load KoboldAI settings
koboldai_setting_names = data.koboldai_setting_names;
koboldai_settings = data.koboldai_settings;
koboldai_settings.forEach(function (item, i, arr) {
koboldai_settings[i] = JSON.parse(item);
});
var arr_holder = {};
$("#settings_perset").empty(); //RossAscends: uncommented this to prevent settings selector from doubling preset list on QuickRefresh
$("#settings_perset").append(
'
GUI KoboldAI Settings '
); //adding in the GUI settings, since it is not loaded dynamically
koboldai_setting_names.forEach(function (item, i, arr) {
arr_holder[item] = i;
$("#settings_perset").append(
"
" + item + " "
);
//console.log('loading preset #'+i+' -- '+item);
});
koboldai_setting_names = {};
koboldai_setting_names = arr_holder;
preset_settings = settings.preset_settings;
//Load AI model config settings (temp, context length, anchors, and anchor order)
textgenerationwebui_settings =
settings.textgenerationwebui_settings || textgenerationwebui_settings;
temp = settings.temp;
amount_gen = settings.amount_gen;
if (settings.max_context !== undefined)
max_context = parseInt(settings.max_context);
if (settings.anchor_order !== undefined)
anchor_order = parseInt(settings.anchor_order);
if (settings.style_anchor !== undefined)
style_anchor = !!settings.style_anchor;
if (settings.character_anchor !== undefined)
character_anchor = !!settings.character_anchor;
rep_pen = settings.rep_pen;
rep_pen_size = settings.rep_pen_size;
var addZeros = "";
if (isInt(temp)) addZeros = ".00";
$("#temp").val(temp);
$("#temp_counter").html(temp + addZeros);
$("#style_anchor").prop("checked", style_anchor);
$("#character_anchor").prop("checked", character_anchor);
$("#anchor_order option[value=" + anchor_order + "]").attr(
"selected",
"true"
);
$("#max_context").val(max_context);
$("#max_context_counter").html(max_context + " Tokens");
$("#amount_gen").val(amount_gen);
$("#amount_gen_counter").html(amount_gen + " Tokens");
addZeros = "";
if (isInt(rep_pen)) addZeros = ".00";
$("#rep_pen").val(rep_pen);
$("#rep_pen_counter").html(rep_pen + addZeros);
$("#rep_pen_size").val(rep_pen_size);
$("#rep_pen_size_counter").html(rep_pen_size + " Tokens");
swipes = !!settings.swipes; //// swipecode
$('#swipes-checkbox').prop('checked', swipes); /// swipecode
console.log('getSettings -- swipes = ' + swipes + '. toggling box');
hideSwipeButtons();
showSwipeButtons();
//Novel
temp_novel = settings.temp_novel;
rep_pen_novel = settings.rep_pen_novel;
rep_pen_size_novel = settings.rep_pen_size_novel;
addZeros = "";
if (isInt(temp_novel)) addZeros = ".00";
$("#temp_novel").val(temp_novel);
$("#temp_counter_novel").html(temp_novel + addZeros);
addZeros = "";
if (isInt(rep_pen_novel)) addZeros = ".00";
$("#rep_pen_novel").val(rep_pen_novel);
$("#rep_pen_counter_novel").html(rep_pen_novel + addZeros);
$("#rep_pen_size_novel").val(rep_pen_size_novel);
$("#rep_pen_size_counter_novel").html(rep_pen_size_novel + " Tokens");
//Enable GUI deference settings if GUI is selected for Kobold
if (preset_settings == "gui") {
$("#settings_perset option[value=gui]")
.attr("selected", "true")
.trigger("change");
$("#range_block").children().prop("disabled", true);
$("#range_block").css("opacity", 0.5);
$("#amount_gen_block").children().prop("disabled", true);
$("#amount_gen_block").css("opacity", 0.45);
} else {
if (typeof koboldai_setting_names[preset_settings] !== "undefined") {
$(`#settings_perset option[value=${koboldai_setting_names[preset_settings]}]`)
.attr("selected", "true");
} else {
$("#range_block").children().prop("disabled", true);
$("#range_block").css("opacity", 0.5);
$("#amount_gen_block").children().prop("disabled", true);
$("#amount_gen_block").css("opacity", 0.45);
preset_settings = "gui";
$("#settings_perset option[value=gui]")
.attr("selected", "true")
.trigger("change");
}
}
//Load User's Name and Avatar
user_avatar = settings.user_avatar;
$(".mes").each(function () {
if ($(this).attr("ch_name") == name1) {
$(this)
.children(".avatar")
.children("img")
.attr("src", "User Avatars/" + user_avatar);
}
});
//Load the API server URL from settings
api_server = settings.api_server;
$("#api_url_text").val(api_server);
setWorldInfoSettings(settings, data);
if (data.enable_extensions) {
const src = "scripts/extensions.js";
if ($(`script[src="${src}"]`).length === 0) {
const script = document.createElement("script");
script.type = "module";
script.src = src;
$("body").append(script);
}
}
//get the character to auto-load
if (settings.active_character !== undefined) {
if (settings.active_character !== "") {
active_character = settings.active_character;
}
}
api_server_textgenerationwebui =
settings.api_server_textgenerationwebui;
$("#textgenerationwebui_api_url_text").val(
api_server_textgenerationwebui
);
for (var i of [
"temp",
"rep_pen",
"rep_pen_size",
"top_k",
"top_p",
"typical_p",
"penalty_alpha",
]) {
$("#" + i + "_textgenerationwebui").val(
textgenerationwebui_settings[i]
);
$("#" + i + "_counter_textgenerationwebui").html(
textgenerationwebui_settings[i]
);
}
/* //RossAscends: getting variables added/adjusted/applied with RA-mods
active_character = settings.active_character;
this_chid = settings.active_character; //forcing variable sameness for chid and this_chid with active_character in order to load RA_ALC
var chid = settings.active_character; //forcing variable sameness for chid and this_chid with active_character in order to load RA_ALC
console.log(
"getSettings -- loaded from file -- active_character : " +
settings.active_character
);
auto_connect = settings.auto_connect;
auto_load_chat = settings.auto_load_chat; */
selected_button = settings.selected_button;
/* NavOpenClosePref = settings.NavOpenClosePref;
stickyNavPref = settings.stickyNavPref; */
/* $("#nav-toggle").prop("checked", NavOpenClosePref);
$("#rm_button_panel_pin").prop("checked", stickyNavPref);
$("#auto-connect-checkbox").prop("checked", auto_connect);
$("#auto-load-chat-checkbox").prop("checked", auto_load_chat); */
}
if (!is_checked_colab) isColab();
},
error: function (jqXHR, exception) {
console.log(exception);
console.log(jqXHR);
},
});
}
async function saveSettings(type) {
//console.log('Entering settings with name1 = '+name1);
jQuery.ajax({
type: "POST",
url: "/savesettings",
data: JSON.stringify({
username: name1,
api_server: api_server,
api_server_textgenerationwebui: api_server_textgenerationwebui,
preset_settings: preset_settings,
preset_settings_novel: preset_settings_novel,
user_avatar: user_avatar,
temp: temp,
amount_gen: amount_gen,
max_context: max_context,
anchor_order: anchor_order,
style_anchor: style_anchor,
character_anchor: character_anchor,
main_api: main_api,
api_key_novel: api_key_novel,
rep_pen: rep_pen,
rep_pen_size: rep_pen_size,
model_novel: model_novel,
temp_novel: temp_novel,
rep_pen_novel: rep_pen_novel,
rep_pen_size_novel: rep_pen_size_novel,
world_info: world_info,
world_info_depth: world_info_depth,
world_info_budget: world_info_budget,
active_character: active_character,
textgenerationwebui_settings: textgenerationwebui_settings,
swipes: swipes,
}),
beforeSend: function () {
//console.log('saveSettings() -- active_character -- '+active_character);
if (type == "change_name") {
name1 = $("#your_name").val();
// console.log('beforeSend name1 = '+name1);
}
},
cache: false,
dataType: "json",
contentType: "application/json",
//processData: false,
success: function (data) {
//online_status = data.result;
if (type == "change_name") {
//console.log('got name change');
//console.log('success: reading from settings = ' + settings.username);
//name1 = settings.username;
clearChat();
printMessages();
}
},
error: function (jqXHR, exception) {
console.log(exception);
console.log(jqXHR);
},
});
}
function isInt(value) {
return (
!isNaN(value) &&
parseInt(Number(value)) == value &&
!isNaN(parseInt(value, 10))
);
}
function messageEditDone(div) {
var text = div
.parent()
.parent()
.children(".mes_text")
.children(".edit_textarea")
.val();
//var text = chat[this_edit_mes_id];
text = text.trim();
const bias = extractMessageBias(text);
chat[this_edit_mes_id]["mes"] = text;
// editing old messages
if (!chat[this_edit_mes_id]["extra"]) {
chat[this_edit_mes_id]["extra"] = {};
}
chat[this_edit_mes_id]["extra"]["bias"] = bias ?? null;
div.parent().parent().children(".mes_text").empty();
div.css("display", "none");
div.parent().children(".mes_edit_cancel").css("display", "none");
div.parent().children(".mes_edit").css("display", "inline-block");
div
.parent()
.parent()
.children(".mes_text")
.append(messageFormating(text, this_edit_mes_chname));
div.parent().parent().children(".mes_bias").empty();
div.parent().parent().children(".mes_bias").append(messageFormating(bias));
appendImageToMessage(chat[this_edit_mes_id], div.closest(".mes"));
this_edit_mes_id = undefined;
if (selected_group) {
saveGroupChat(selected_group);
} else {
saveChat();
}
}
async function getAllCharaChats() {
//console.log('getAllCharaChats() pinging server for character chat history.');
$("#select_chat_div").html("");
//console.log(characters[this_chid].chat);
jQuery.ajax({
type: "POST",
url: "/getallchatsofcharacter",
data: JSON.stringify({ avatar_url: characters[this_chid].avatar }),
beforeSend: function () {
//$('#create_button').attr('value','Creating...');
},
cache: false,
dataType: "json",
contentType: "application/json",
success: function (data) {
$("#load_select_chat_div").css("display", "none");
let dataArr = Object.values(data);
data = dataArr.sort((a, b) =>
a["file_name"].localeCompare(b["file_name"])
);
data = data.reverse();
for (const key in data) {
let strlen = 300;
let mes = data[key]["mes"];
if (mes !== undefined) {
if (mes.length > strlen) {
mes = "..." + mes.substring(mes.length - strlen);
}
$("#select_chat_div").append(
'
' +
data[key]["file_name"] +
'
' +
mes +
"
"
);
if (
characters[this_chid]["chat"] ==
data[key]["file_name"].replace(".jsonl", "")
) {
//children().last()
$("#select_chat_div")
.children(":nth-last-child(1)")
.attr("highlight", true);
}
}
}
//
//
//console.log(data);
//chat.length = 0;
//chat = data;
//getChatResult();
//saveChat();
//console.log('getAllCharaChats() -- Finished successfully');
},
error: function (jqXHR, exception) {
//getChatResult();
//console.log('getAllCharaChats() -- Failed');
console.log(exception);
console.log(jqXHR);
},
});
}
//************************************************************
//************************Novel.AI****************************
//************************************************************
async function getStatusNovel() {
if (is_get_status_novel) {
var data = { key: api_key_novel };
jQuery.ajax({
type: "POST", //
url: "/getstatus_novelai", //
data: JSON.stringify(data),
beforeSend: function () {
//$('#create_button').attr('value','Creating...');
},
cache: false,
dataType: "json",
contentType: "application/json",
success: function (data) {
if (data.error != true) {
//var settings2 = JSON.parse(data);
//const getData = await response.json();
novel_tier = data.tier;
if (novel_tier == undefined) {
online_status = "no_connection";
}
if (novel_tier === 0) {
online_status = "Paper";
}
if (novel_tier === 1) {
online_status = "Tablet";
}
if (novel_tier === 2) {
online_status = "Scroll";
}
if (novel_tier === 3) {
online_status = "Opus";
}
}
resultCheckStatusNovel();
},
error: function (jqXHR, exception) {
online_status = "no_connection";
console.log(exception);
console.log(jqXHR);
resultCheckStatusNovel();
},
});
} else {
if (is_get_status != true) {
online_status = "no_connection";
}
}
}
function compareVersions(v1, v2) {
const v1parts = v1.split(".");
const v2parts = v2.split(".");
for (let i = 0; i < v1parts.length; ++i) {
if (v2parts.length === i) {
return 1;
}
if (v1parts[i] === v2parts[i]) {
continue;
}
if (v1parts[i] > v2parts[i]) {
return 1;
} else {
return -1;
}
}
if (v1parts.length != v2parts.length) {
return -1;
}
return 0;
}
function selectRightMenuWithAnimation(selectedMenuId) {
const displayModes = {
'rm_info_block': 'flex',
'rm_group_chats_block': 'flex',
'rm_api_block': 'grid',
'rm_characters_block': 'flex',
};
document.querySelectorAll('#right-nav-panel .right_menu').forEach((menu) => {
$(menu).css('display', 'none');
if (selectedMenuId && selectedMenuId.replace('#', '') === menu.id) {
const mode = displayModes[menu.id] ?? 'block';
$(menu).css('display', mode);
$(menu).css("opacity", 0.0);
$(menu).transition({
opacity: 1.0,
duration: animation_rm_duration,
easing: animation_rm_easing,
complete: function () { },
});
}
})
}
function setRightTabSelectedClass(selectedButtonId) {
document.querySelectorAll('#right-nav-panel-tabs .right_menu_button').forEach((button) => {
button.classList.remove('selected-right-tab');
if (selectedButtonId && selectedButtonId.replace('#', '') === button.id) {
button.classList.add('selected-right-tab');
}
});
}
function select_rm_info(text, charId = null) {
$("#rm_info_text").html("
" + text + " ");
selectRightMenuWithAnimation('rm_info_block');
setRightTabSelectedClass();
prev_selected_char = charId;
}
function select_selected_character(chid) {
//character select
//console.log('select_selected_character() -- starting with input of -- '+chid+' (name:'+characters[chid].name+')');
select_rm_create();
menu_type = "character_edit";
$("#delete_button").css("display", "block");
$("#export_button").css("display", "block");
setRightTabSelectedClass('rm_button_selected_ch');
var display_name = characters[chid].name;
$("#rm_button_selected_ch").children("h2").text(display_name);
//create text poles
$("#rm_button_back").css("display", "none");
//$("#character_import_button").css("display", "none");
$("#create_button").attr("value", "Save");
$("#create_button").css("display", "none");
$("#rm_button_selected_ch").children("h2").text(display_name);
$("#add_avatar_button").val("");
$("#character_popup_text_h3").text(characters[chid].name);
$("#character_name_pole").val(characters[chid].name);
$("#description_textarea").val(characters[chid].description);
$("#personality_textarea").val(characters[chid].personality);
$("#firstmessage_textarea").val(characters[chid].first_mes);
$("#scenario_pole").val(characters[chid].scenario);
$("#talkativeness_slider").val(
characters[chid].talkativeness ?? talkativeness_default
);
$("#mes_example_textarea").val(characters[chid].mes_example);
$("#selected_chat_pole").val(characters[chid].chat);
$("#create_date_pole").val(characters[chid].create_date);
$("#avatar_url_pole").val(characters[chid].avatar);
$("#chat_import_avatar_url").val(characters[chid].avatar);
$("#chat_import_character_name").val(characters[chid].name);
//$("#avatar_div").css("display", "none");
var this_avatar = default_avatar;
if (characters[chid].avatar != "none") {
this_avatar = "characters/" + characters[chid].avatar;
}
$("#avatar_load_preview").attr("src", this_avatar + "?" + Date.now());
$("#name_div").css("display", "none");
$("#form_create").attr("actiontype", "editcharacter");
active_character = chid;
//console.log('select_selected_character() -- active_character -- '+chid+'(ChID of '+display_name+')');
saveSettingsDebounced();
//console.log('select_selected_character() -- called saveSettings() to save -- active_character -- '+active_character+'(ChID of '+display_name+')');
}
function select_rm_create() {
menu_type = "create";
//console.log('select_rm_Create() -- selected button: '+selected_button);
if (selected_button == "create") {
if (create_save_avatar != "") {
$("#add_avatar_button").get(0).files = create_save_avatar;
read_avatar_load($("#add_avatar_button").get(0));
}
}
selectRightMenuWithAnimation('rm_ch_create_block');
setRightTabSelectedClass();
$("#delete_button_div").css("display", "none");
$("#delete_button").css("display", "none");
$("#export_button").css("display", "none");
$("#create_button").css("display", "block");
$("#create_button").attr("value", "Create");
//RossAscends: commented this out as part of the auto-loading token counter
//$('#result_info').html(' ');
//create text poles
$("#rm_button_back").css("display", "inline-block");
$("#character_import_button").css("display", "inline-block");
$("#character_popup_text_h3").text("Create character");
$("#character_name_pole").val(create_save_name);
$("#description_textarea").val(create_save_description);
$("#personality_textarea").val(create_save_personality);
$("#firstmessage_textarea").val(create_save_first_message);
$("#talkativeness_slider").val(create_save_talkativeness);
$("#scenario_pole").val(create_save_scenario);
if ($.trim(create_save_mes_example).length == 0) {
$("#mes_example_textarea").val("
");
} else {
$("#mes_example_textarea").val(create_save_mes_example);
}
$("#avatar_div").css("display", "grid");
$("#avatar_load_preview").attr("src", default_avatar);
$("#name_div").css("display", "block");
$("#form_create").attr("actiontype", "createcharacter");
}
function select_rm_characters() {
if (prev_selected_char) {
let newChId = characters.findIndex((x) => x.name == prev_selected_char);
$(`.character_select[chid="${newChId}"]`).trigger("click");
prev_selected_char = null;
}
menu_type = "characters";
selectRightMenuWithAnimation('rm_characters_block');
setRightTabSelectedClass('rm_button_characters');
}
function setExtensionPrompt(key, value) {
extension_prompts[key] = value;
}
function callPopup(text, type) {
if (type) {
popup_type = type;
}
$("#dialogue_popup_cancel").css("display", "inline-block");
switch (popup_type) {
case "text":
case "char_not_selected":
$("#dialogue_popup_ok").text("Ok");
$("#dialogue_popup_cancel").css("display", "none");
break;
case "world_imported":
case "new_chat":
$("#dialogue_popup_ok").text("Yes");
break;
case "del_world":
case "del_group":
default:
$("#dialogue_popup_ok").text("Delete");
}
$("#dialogue_popup_text").html(text);
$("#shadow_popup").css("display", "block");
$("#shadow_popup").transition({
opacity: 1.0,
duration: animation_rm_duration,
easing: animation_rm_easing,
});
}
function read_bg_load(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$("#bg_load_preview")
.attr("src", e.target.result)
.width(103)
.height(83);
var formData = new FormData($("#form_bg_download").get(0));
//console.log(formData);
jQuery.ajax({
type: "POST",
url: "/downloadbackground",
data: formData,
beforeSend: function () {
//$('#create_button').attr('value','Creating...');
},
cache: false,
contentType: false,
processData: false,
success: function (html) {
setBackground(html);
if (bg1_toggle == true) {
// this is a repeat of the background setting function for when user uploads a new BG image
bg1_toggle = false; // should make the Bg setting a modular function to be called in both cases
var number_bg = 2;
var target_opacity = 1.0;
} else {
bg1_toggle = true;
var number_bg = 1;
var target_opacity = 0.0;
}
$("#bg2").transition({
opacity: target_opacity,
duration: 1300, //animation_rm_duration,
easing: "linear",
complete: function () {
$("#options").css("display", "none");
},
});
$("#bg" + number_bg).css(
"background-image",
"url(" + e.target.result + ")"
);
$("#form_bg_download").after(
""
);
},
error: function (jqXHR, exception) {
console.log(exception);
console.log(jqXHR);
},
});
};
reader.readAsDataURL(input.files[0]);
}
}
function showSwipeButtons() {
if (
chat[chat.length - 1].name === 'TavernAI' ||
!swipes ||
$('.mes:last').attr('mesid') <= 0 ||
chat[chat.length - 1].is_user ||
count_view_mes <= 1
) { return; }
const currentMessage = $("#chat").children().filter(`[mesid="${count_view_mes - 1}"]`);
const swipeId = chat[chat.length - 1].swipe_id;
if (swipeId !== undefined && swipeId != 0) {
currentMessage.children('.swipe_left').css('display', 'flex');
}
currentMessage.children('.swipe_right').css('display', 'flex');
}
function hideSwipeButtons() {
//console.log('hideswipebuttons entered');
$("#chat").children().filter('[mesid="' + (count_view_mes - 1) + '"]').children('.swipe_right').css('display', 'none');
$("#chat").children().filter('[mesid="' + (count_view_mes - 1) + '"]').children('.swipe_left').css('display', 'none');
}
window["TavernAI"].getContext = function () {
return {
chat: chat,
characters: characters,
groups: groups,
worldInfo: world_info_data,
name1: name1,
name2: name2,
characterId: this_chid,
groupId: selected_group,
chatId: this_chid && characters[this_chid] && characters[this_chid].chat,
onlineStatus: online_status,
addOneMessage: addOneMessage,
generate: Generate,
encode: encode,
extensionPrompts: extension_prompts,
setExtensionPrompt: setExtensionPrompt,
saveChat: saveChat,
sendSystemMessage: sendSystemMessage,
};
};
$(document).ready(function () {
$('#swipes-checkbox').change(function () {
console.log('detected swipes-checkbox changed values')
swipes = !!$('#swipes-checkbox').prop('checked');
if (swipes) {
showSwipeButtons();
} else {
hideSwipeButtons();
}
});
///// SWIPE BUTTON CLICKS ///////
$(document).on('click', '.swipe_right', function () { //when we click swipe right button
const swipe_duration = 120;
const swipe_range = 700;
//console.log(swipe_range);
let run_generate = false;
let run_swipe_right = false;
if (chat[chat.length - 1]['swipe_id'] === undefined) { // if there is no swipe-message in the last spot of the chat array
chat[chat.length - 1]['swipe_id'] = 0; // set it to id 0
chat[chat.length - 1]['swipes'] = []; // empty the array
chat[chat.length - 1]['swipes'][0] = chat[chat.length - 1]['mes']; //assign swipe array with last message from chat
}
chat[chat.length - 1]['swipe_id']++; //make new slot in array
//console.log(chat[chat.length-1]['swipes']);
if (parseInt(chat[chat.length - 1]['swipe_id']) === chat[chat.length - 1]['swipes'].length) { //if swipe id of last message is the same as the length of the 'swipes' array
run_generate = true;
} else if (parseInt(chat[chat.length - 1]['swipe_id']) < chat[chat.length - 1]['swipes'].length) { //otherwise, if the id is less than the number of swipes
chat[chat.length - 1]['mes'] = chat[chat.length - 1]['swipes'][chat[chat.length - 1]['swipe_id']]; //load the last mes box with the latest generation
run_swipe_right = true; //then swipe
}
if (chat[chat.length - 1]['swipe_id'] > chat[chat.length - 1]['swipes'].length) { //if we swipe right while generating (the swipe ID is greater than what we are viewing now)
chat[chat.length - 1]['swipe_id'] = chat[chat.length - 1]['swipes'].length; //show that message slot (will be '...' while generating)
}
if (run_generate) { //hide swipe arrows while generating
$(this).css('display', 'none');
}
if (run_generate || run_swipe_right) { // handles animated transitions when swipe right, specifically height transitions between messages
let this_mes_div = $(this).parent();
let this_mes_block = $(this).parent().children('.mes_block').children('.mes_text');
const this_mes_div_height = this_mes_div[0].scrollHeight;
const this_mes_block_height = this_mes_block[0].scrollHeight;
this_mes_div.children('.swipe_left').css('display', 'flex');
this_mes_div.children('.mes_block').transition({ // this moves the div back and forth
x: '-' + swipe_range,
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
const is_animation_scroll = ($('#chat').scrollTop() >= ($('#chat').prop("scrollHeight") - $('#chat').outerHeight()) - 10);
//console.log(parseInt(chat[chat.length-1]['swipe_id']));
//console.log(chat[chat.length-1]['swipes'].length);
if (run_generate && parseInt(chat[chat.length - 1]['swipe_id']) === chat[chat.length - 1]['swipes'].length) {
//console.log('showing ...');
$("#chat").children().filter('[mesid="' + (count_view_mes - 1) + '"]').children('.mes_block').children('.mes_text').html('...'); //shows ... while generating
} else {
//console.log('showing previously generated swipe candidate, or "..."');
addOneMessage(chat[chat.length - 1], 'swipe');
}
let new_height = this_mes_div_height - (this_mes_block_height - this_mes_block[0].scrollHeight);
if (new_height < 103) new_height = 103;
this_mes_div.animate({ height: new_height + 'px' }, {
duration: 100,
queue: false,
progress: function () {
// Scroll the chat down as the message expands
if (is_animation_scroll) $("#chat").scrollTop($("#chat")[0].scrollHeight);
},
complete: function () {
this_mes_div.css('height', 'auto');
// Scroll the chat down to the bottom once the animation is complete
if (is_animation_scroll) $("#chat").scrollTop($("#chat")[0].scrollHeight);
}
});
this_mes_div.children('.mes_block').transition({
x: swipe_range,
duration: 0,
easing: animation_rm_easing,
queue: false,
complete: function () {
this_mes_div.children('.mes_block').transition({
x: '0px',
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
if (run_generate && !is_send_press && parseInt(chat[chat.length - 1]['swipe_id']) === chat[chat.length - 1]['swipes'].length) {
console.log('caught here 2');
is_send_press = true;
Generate('swipe');
} else {
if (parseInt(chat[chat.length - 1]['swipe_id']) !== chat[chat.length - 1]['swipes'].length) {
console.log('caught here 3');
saveChat();
}
}
}
});
}
});
}
});
$(this).parent().children('.avatar').transition({ // moves avatar aong with swipe
x: '-' + swipe_range,
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
$(this).parent().children('.avatar').transition({
x: swipe_range,
duration: 0,
easing: animation_rm_easing,
queue: false,
complete: function () {
$(this).parent().children('.avatar').transition({
x: '0px',
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
}
});
}
});
}
});
}
});
$(document).on('click', '.swipe_left', function () { // when we swipe left..but no generation.
const swipe_duration = 120;
const swipe_range = '700px';
chat[chat.length - 1]['swipe_id']--;
if (chat[chat.length - 1]['swipe_id'] >= 0) { // hide the left arrow if we are viewing the first candidate of the last message block
$(this).parent().children('swipe_right_button').css('display', 'flex');
if (chat[chat.length - 1]['swipe_id'] === 0) {
$(this).css('display', 'none');
}
let this_mes_div = $(this).parent();
let this_mes_block = $(this).parent().children('.mes_block').children('.mes_text');
const this_mes_div_height = this_mes_div[0].scrollHeight;
this_mes_div.css('height', this_mes_div_height);
const this_mes_block_height = this_mes_block[0].scrollHeight;
chat[chat.length - 1]['mes'] = chat[chat.length - 1]['swipes'][chat[chat.length - 1]['swipe_id']];
$(this).parent().children('.mes_block').transition({
x: swipe_range,
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
const is_animation_scroll = ($('#chat').scrollTop() >= ($('#chat').prop("scrollHeight") - $('#chat').outerHeight()) - 10);
console.log('sipwing left after tr5ansition calls addOneMessage');
addOneMessage(chat[chat.length - 1], 'swipe');
let new_height = this_mes_div_height - (this_mes_block_height - this_mes_block[0].scrollHeight);
if (new_height < 103) new_height = 103;
this_mes_div.animate({ height: new_height + 'px' }, {
duration: 100,
queue: false,
progress: function () {
// Scroll the chat down as the message expands
if (is_animation_scroll) $("#chat").scrollTop($("#chat")[0].scrollHeight);
},
complete: function () {
this_mes_div.css('height', 'auto');
// Scroll the chat down to the bottom once the animation is complete
if (is_animation_scroll) $("#chat").scrollTop($("#chat")[0].scrollHeight);
}
});
$(this).parent().children('.mes_block').transition({
x: '-' + swipe_range,
duration: 0,
easing: animation_rm_easing,
queue: false,
complete: function () {
$(this).parent().children('.mes_block').transition({
x: '0px',
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
saveChat();
}
});
}
});
}
});
$(this).parent().children('.avatar').transition({
x: swipe_range,
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
$(this).parent().children('.avatar').transition({
x: '-' + swipe_range,
duration: 0,
easing: animation_rm_easing,
queue: false,
complete: function () {
$(this).parent().children('.avatar').transition({
x: '0px',
duration: swipe_duration,
easing: animation_rm_easing,
queue: false,
complete: function () {
}
});
}
});
}
});
}
if (chat[chat.length - 1]['swipe_id'] < 0) {
chat[chat.length - 1]['swipe_id'] = 0;
}
});
$("#character_search_bar").on("input", function () {
const selector = ['#rm_print_characters_block .character_select', '#rm_print_characters_block .group_select'].join(',');
const searchValue = $(this).val().trim().toLowerCase();
if (!searchValue) {
$(selector).show();
} else {
$(selector).each(function () {
$(this).children(".ch_name").text().toLowerCase().includes(searchValue)
? $(this).show()
: $(this).hide();
});
}
});
$("#characloud_url").click(function () {
window.open("https://boosty.to/tavernai", "_blank");
});
$("#send_but").click(function () {
if (is_send_press == false) {
hideSwipeButtons();
is_send_press = true;
Generate();
}
});
//hotkey to send input with enter (shift+enter generates a new line in the chat input box)
//this is not ideal for touch device users with virtual keyboards.
//ideally we would detect if the user is using a virtual keyboard, and disable this shortcut for them.
//because mobile users' hands are always near the screen, tapping the send button is better for them, and enter should always make a new line.
//note: CAI seems to have this handled. PC: shift+enter = new line, enter = send. iOS: shift+enter AND enter both make new lines, and only the send button sends.
//maybe a way to simulate this would be to disable the eventListener for people iOS.
$("#send_textarea").keydown(function (e) {
if (!e.shiftKey && !e.ctrlKey && e.key == "Enter" && is_send_press == false) {
hideSwipeButtons();
is_send_press = true;
e.preventDefault();
Generate();
}
});
//menu buttons setup
$("#rm_button_settings").click(function () {
selected_button = "settings";
menu_type = "settings";
selectRightMenuWithAnimation('rm_api_block');
setRightTabSelectedClass('rm_button_settings');
});
$("#rm_button_characters").click(function () {
selected_button = "characters";
select_rm_characters();
});
$("#rm_button_back").click(function () {
selected_button = "characters";
select_rm_characters();
});
$("#rm_button_create").click(function () {
selected_button = "create";
select_rm_create();
});
$("#rm_button_selected_ch").click(function () {
selected_button = "character_edit";
select_selected_character(this_chid);
});
$(document).on("click", ".character_select", function () {
if (selected_group && is_group_generating) {
return;
}
if (this_chid !== $(this).attr("chid")) {
//if clicked on a different character from what was currently selected
if (!is_send_press) {
resetSelectedGroup();
this_edit_mes_id = undefined;
selected_button = "character_edit";
this_chid = $(this).attr("chid");
active_character = this_chid;
clearChat();
chat.length = 0;
getChat();
//console.log('Clicked on '+characters[this_chid].name+' Active_Character set to: '+active_character+' (ChID:'+this_chid+')');
}
} else {
//if clicked on character that was already selected
selected_button = "character_edit";
select_selected_character(this_chid);
}
$("#character_search_bar").val("").trigger("input");
});
$(document).on("input", ".edit_textarea", function () {
scroll_holder = $("#chat").scrollTop();
$(this).height(0).height(this.scrollHeight);
is_use_scroll_holder = true;
});
$("#chat").on("scroll", function () {
if (is_use_scroll_holder) {
$("#chat").scrollTop(scroll_holder);
is_use_scroll_holder = false;
}
});
$(document).on("click", ".del_checkbox", function () {
//when a 'delete message' checkbox is clicked
$(".del_checkbox").each(function () {
$(this).prop("checked", false);
$(this).parent().css("background", css_mes_bg);
});
$(this).parent().css("background", "#600"); //sets the bg of the mes selected for deletion
var i = $(this).parent().attr("mesid"); //checks the message ID in the chat
this_del_mes = i;
while (i < chat.length) {
//as long as the current message ID is less than the total chat length
$(".mes[mesid='" + i + "']").css("background", "#600"); //sets the bg of the all msgs BELOW the selected .mes
$(".mes[mesid='" + i + "']")
.children(".del_checkbox")
.prop("checked", true);
i++;
//console.log(i);
}
});
$(document).on("click", "#user_avatar_block .avatar", function () {
user_avatar = $(this).attr("imgfile");
$(".mes").each(function () {
if ($(this).attr("ch_name") == name1) {
$(this)
.children(".avatar")
.children("img")
.attr("src", "User Avatars/" + user_avatar);
}
});
saveSettingsDebounced();
highlightSelectedAvatar();
});
$(document).on("click", "#user_avatar_block .avatar_upload", function () {
$("#avatar_upload_file").click();
});
$("#avatar_upload_file").on("change", function (e) {
const file = e.target.files[0];
if (!file) {
return;
}
const formData = new FormData($("#form_upload_avatar").get(0));
jQuery.ajax({
type: "POST",
url: "/uploaduseravatar",
data: formData,
beforeSend: () => { },
cache: false,
contentType: false,
processData: false,
success: function (data) {
if (data.path) {
appendUserAvatar(data.path);
}
},
error: (jqXHR, exception) => { },
});
// Will allow to select the same file twice in a row
$("#form_upload_avatar").trigger("reset");
});
$("#logo_block").click(function (event) {
if (!bg_menu_toggle) {
$("#bg_menu_button").transition({
perspective: "100px",
rotate3d: "1,1,0,180deg",
});
$("#bg_menu_content").transition({
opacity: 1.0,
height: "90vh",
duration: 340,
easing: "in",
complete: function () {
bg_menu_toggle = true;
$("#bg_menu_content").css("overflow-y", "auto");
},
});
} else {
$("#bg_menu_button").transition({
perspective: "100px",
rotate3d: "1,1,0,360deg",
});
$("#bg_menu_content").css("overflow-y", "hidden");
$("#bg_menu_content").transition({
opacity: 0.0,
height: "0px",
duration: 340,
easing: "in",
complete: function () {
bg_menu_toggle = false;
},
});
}
});
$(document).on("click", ".bg_example_img", function () {
//when user clicks on a BG thumbnail...
var this_bgfile = $(this).attr("bgfile"); // this_bgfile = whatever they clicked
if (bg1_toggle == true) {
//if bg1 is toggled true (initially set as true in first JS vars)
bg1_toggle = false; // then toggle it false
var number_bg = 2; // sets a variable for bg2
var target_opacity = 1.0; // target opacity is 100%
} else {
//if bg1 is FALSE
bg1_toggle = true; // make it true
var number_bg = 1; // set variable to bg1..
var target_opacity = 0.0; // set target opacity to 0
}
$("#bg2").stop(); // first, stop whatever BG transition was happening before
$("#bg2").transition({
// start a new BG transition routine
opacity: target_opacity, // set opacity to previously set variable
duration: 1300, //animation_rm_duration,
easing: "linear",
complete: function () {
// why does the BG transition completion make the #options (right nav) invisible?
$("#options").css("display", "none");
},
});
$("#bg" + number_bg).css(
"background-image",
'url("backgrounds/' + this_bgfile + '")'
);
setBackground(this_bgfile);
});
$(document).on("click", ".bg_example_cross", function () {
bg_file_for_del = $(this);
//$(this).parent().remove();
//delBackground(this_bgfile);
popup_type = "del_bg";
callPopup("Delete the background? ");
});
$("#advanced_div").click(function () {
if (!is_advanced_char_open) {
is_advanced_char_open = true;
$("#character_popup").css("display", "grid");
$("#character_popup").css("opacity", 0.0);
$("#character_popup").transition({
opacity: 1.0,
duration: animation_rm_duration,
easing: animation_rm_easing,
});
} else {
is_advanced_char_open = false;
$("#character_popup").css("display", "none");
}
});
$("#character_cross").click(function () {
is_advanced_char_open = false;
$("#character_popup").css("display", "none");
});
$("#character_popup_ok").click(function () {
is_advanced_char_open = false;
$("#character_popup").css("display", "none");
});
$("#dialogue_popup_ok").click(function () {
$("#shadow_popup").css("display", "none");
$("#shadow_popup").css("opacity:", 0.0);
if (popup_type == "del_bg") {
delBackground(bg_file_for_del.attr("bgfile"));
bg_file_for_del.parent().remove();
}
if (popup_type == "del_ch") {
console.log(
"Deleting character -- ChID: " +
this_chid +
" -- Name: " +
characters[this_chid].name
);
var msg = jQuery("#form_create").serialize(); // ID form
jQuery.ajax({
method: "POST",
url: "/deletecharacter",
beforeSend: function () {
select_rm_info("Character deleted");
//$('#create_button').attr('value','Deleting...');
},
data: msg,
cache: false,
success: function (html) {
//RossAscends: New handling of character deletion that avoids page refreshes and should have fixed char corruption due to cache problems.
//due to how it is handled with 'popup_type', i couldn't find a way to make my method completely modular, so keeping it in TAI-main.js as a new default.
//this allows for dynamic refresh of character list after deleting a character.
$("#character_cross").click(); // closes advanced editing popup
this_chid = "invalid-safety-id"; // unsets expected chid before reloading (related to getCharacters/printCharacters from using old arrays)
characters.length = 0; // resets the characters array, forcing getcharacters to reset
name2 = systemUserName; // replaces deleted charcter name with system user since she will be displayed next.
chat = [...safetychat]; // sets up system user to tell user about having deleted a character
setRightTabSelectedClass() // 'deselects' character's tab panel
$(document.getElementById("rm_button_selected_ch"))
.children("h2")
.text(""); // removes character name from nav tabs
clearChat(); // removes deleted char's chat
this_chid = undefined; // prevents getCharacters from trying to load an invalid char.
getCharacters(); // gets the new list of characters (that doesn't include the deleted one)
printMessages(); // prints out system user's 'deleted character' message
//console.log("#dialogue_popup_ok(del-char) >>>> saving");
saveSettingsDebounced(); // saving settings to keep changes to variables
//getCharacters();
//$('#create_button_div').html(html);
},
});
}
if (popup_type === "world_imported") {
selectImportedWorldInfo();
}
if (popup_type === "del_world" && world_info) {
deleteWorldInfo(world_info);
}
if (popup_type === "del_group") {
const groupId = $("#dialogue_popup").data("group_id");
if (groupId) {
deleteGroup(groupId);
}
}
//Make a new chat for selected character
if (
popup_type == "new_chat" &&
this_chid != undefined &&
menu_type != "create"
) {
//Fix it; New chat doesn't create while open create character menu
clearChat();
chat.length = 0;
characters[this_chid].chat = name2 + " - " + humanizedDateTime(); //RossAscends: added character name to new chat filenames and replaced Date.now() with humanizedDateTime;
$("#selected_chat_pole").val(characters[this_chid].chat);
saveCharacterDebounced();
getChat();
}
});
$("#dialogue_popup_cancel").click(function () {
$("#shadow_popup").css("display", "none");
$("#shadow_popup").css("opacity:", 0.0);
popup_type = "";
});
$("#add_bg_button").change(function () {
read_bg_load(this);
});
$("#add_avatar_button").change(function () {
is_mes_reload_avatar = Date.now();
read_avatar_load(this);
});
$("#form_create").submit(function (e) {
$("#rm_info_avatar").html("");
var formData = new FormData($("#form_create").get(0));
if ($("#form_create").attr("actiontype") == "createcharacter") {
if ($("#character_name_pole").val().length > 0) {
//if the character name text area isn't empty (only posible when creating a new character)
//console.log('/createcharacter entered');
jQuery.ajax({
type: "POST",
url: "/createcharacter",
data: formData,
beforeSend: function () {
$("#create_button").attr("disabled", true);
$("#create_button").attr("value", "Creating...");
},
cache: false,
contentType: false,
processData: false,
success: async function (html) {
$("#character_cross").click(); //closes the advanced character editing popup
$("#character_name_pole").val("");
create_save_name = "";
$("#description_textarea").val("");
create_save_description = "";
$("#personality_textarea").val("");
create_save_personality = "";
$("#firstmessage_textarea").val("");
create_save_first_message = "";
$("#talkativeness_slider").val(talkativeness_default);
create_save_talkativeness = talkativeness_default;
$("#character_popup_text_h3").text("Create character");
$("#scenario_pole").val("");
create_save_scenario = "";
$("#mes_example_textarea").val("");
create_save_mes_example = "";
create_save_avatar = "";
$("#create_button").removeAttr("disabled");
$("#add_avatar_button").replaceWith(
$("#add_avatar_button").val("").clone(true)
);
$("#create_button").attr("value", "Create");
if (true) {
let oldSelectedChar = null;
if (this_chid != undefined && this_chid != "invalid-safety-id") {
oldSelectedChar = characters[this_chid].name;
}
await getCharacters();
$("#rm_info_block").transition({ opacity: 0, duration: 0 });
var $prev_img = $("#avatar_div_div").clone();
$("#rm_info_avatar").append($prev_img);
select_rm_info("Character created", oldSelectedChar);
$("#rm_info_block").transition({ opacity: 1.0, duration: 2000 });
} else {
$("#result_info").html(html);
}
},
error: function (jqXHR, exception) {
//alert('ERROR: '+xhr.status+ ' Status Text: '+xhr.statusText+' '+xhr.responseText);
$("#create_button").removeAttr("disabled");
},
});
} else {
$("#result_info").html("Name not entered");
}
} else {
//console.log('/editcharacter -- entered.');
//console.log('Avatar Button Value:'+$("#add_avatar_button").val());
jQuery.ajax({
type: "POST",
url: "/editcharacter",
data: formData,
beforeSend: function () {
$("#create_button").attr("disabled", true);
$("#create_button").attr("value", "Save");
},
cache: false,
contentType: false,
processData: false,
success: function (html) {
$(".mes").each(function () {
if ($(this).attr("ch_name") != name1) {
$(this)
.children(".avatar")
.children("img")
.attr("src", $("#avatar_load_preview").attr("src"));
}
});
if (chat.length === 1) {
var this_ch_mes = default_ch_mes;
if ($("#firstmessage_textarea").val() != "") {
this_ch_mes = $("#firstmessage_textarea").val();
}
if (
this_ch_mes !=
$.trim(
$("#chat")
.children(".mes")
.children(".mes_block")
.children(".mes_text")
.text()
)
) {
clearChat();
chat.length = 0;
chat[0] = {};
chat[0]["name"] = name2;
chat[0]["is_user"] = false;
chat[0]["is_name"] = true;
chat[0]["mes"] = this_ch_mes;
add_mes_without_animation = true;
addOneMessage(chat[0]);
}
}
$("#create_button").removeAttr("disabled");
getCharacters();
$("#add_avatar_button").replaceWith(
$("#add_avatar_button").val("").clone(true)
);
$("#create_button").attr("value", "Save");
},
error: function (jqXHR, exception) {
$("#create_button").removeAttr("disabled");
$("#result_info").html("Error: no connection ");
},
});
}
});
$("#delete_button").click(function () {
popup_type = "del_ch";
callPopup(
"Delete the character? Your chat will be closed."
);
});
$("#rm_info_button").click(function () {
$("#rm_info_avatar").html("");
select_rm_characters();
});
//////// OPTIMIZED ALL CHAR CREATION/EDITING TEXTAREA LISTENERS ///////////////
$("#character_name_pole").on("change keyup paste", function () {
if (menu_type == "create") {
create_save_name = $("#character_name_pole").val();
}
});
$("#description_textarea, #personality_textarea, #scenario_pole" +
"#mes_example_textarea, #firstmessage_textarea")
.on("keyup paste cut", function () {
if (menu_type == "create") {
create_save_description = $("#description_textarea").val();
create_save_personality = $("#personality_textarea").val();
create_save_scenario = $("#scenario_pole").val();
create_save_mes_example = $("#mes_example_textarea").val();
create_save_first_message = $("#firstmessage_textarea").val();
} else {
saveCharacterDebounced();
}
});
$("#talkativeness_slider").on("input", function () {
if (menu_type == "create") {
create_save_talkativeness = $("#talkativeness_slider").val();
} else {
saveCharacterDebounced();
}
});
///////////////////////////////////////////////////////////////////////////////////
$("#api_button").click(function () {
if ($("#api_url_text").val() != "") {
$("#api_loading").css("display", "inline-block");
$("#api_button").css("display", "none");
api_server = $("#api_url_text").val();
api_server = $.trim(api_server);
//console.log("1: "+api_server);
if (api_server.substr(api_server.length - 1, 1) == "/") {
api_server = api_server.substr(0, api_server.length - 1);
}
if (
!(
api_server.substr(api_server.length - 3, 3) == "api" ||
api_server.substr(api_server.length - 4, 4) == "api/"
)
) {
api_server = api_server + "/api";
}
//console.log("2: "+api_server);
main_api = "kobold";
saveSettingsDebounced();
is_get_status = true;
is_api_button_press = true;
getStatus();
clearSoftPromptsList();
getSoftPromptsList();
}
});
$("#api_button_textgenerationwebui").click(function () {
if ($("#textgenerationwebui_api_url_text").val() != "") {
$("#api_loading_textgenerationwebui").css("display", "inline-block");
$("#api_button_textgenerationwebui").css("display", "none");
api_server_textgenerationwebui = $(
"#textgenerationwebui_api_url_text"
).val();
api_server_textgenerationwebui = $.trim(api_server_textgenerationwebui);
if (
api_server_textgenerationwebui.substr(
api_server_textgenerationwebui.length - 1,
1
) == "/"
) {
api_server_textgenerationwebui = api_server_textgenerationwebui.substr(
0,
api_server_textgenerationwebui.length - 1
);
}
//console.log("2: "+api_server_textgenerationwebui);
main_api = "textgenerationwebui";
saveSettingsDebounced();
is_get_status = true;
is_api_button_press = true;
getStatus();
}
});
$("body").click(function () {
if ($("#options").css("opacity") == 1.0) {
$("#options").transition({
opacity: 0.0,
duration: 100, //animation_rm_duration,
easing: animation_rm_easing,
complete: function () {
$("#options").css("display", "none");
},
});
}
});
$("#options_button").click(function () {
// this is the options button click function, shows the options menu if closed
if (
$("#options").css("display") === "none" &&
$("#options").css("opacity") == 0.0
) {
$("#options").css("display", "block");
$("#options").transition({
opacity: 1.0, // the manual setting of CSS via JS is what allows the click-away feature to work
duration: 100,
easing: animation_rm_easing,
complete: function () { },
});
}
});
///////////// OPTIMIZED LISTENERS FOR LEFT SIDE OPTIONS POPUP MENU //////////////////////
$("#options_button [id]").on("click", function () {
var id = $(this).attr("id");
if (id == "option_select_chat") {
if (selected_group) {
// will open a chat selection screen
openNavToggle();
$("#rm_button_characters").trigger("click");
return;
}
if (this_chid != undefined && !is_send_press) {
getAllCharaChats();
$("#shadow_select_chat_popup").css("display", "block");
$("#shadow_select_chat_popup").css("opacity", 0.0);
$("#shadow_select_chat_popup").transition({
opacity: 1.0,
duration: animation_rm_duration,
easing: animation_rm_easing,
});
}
}
else if (id == "option_start_new_chat") {
if (selected_group) {
// will open a group creation screen
openNavToggle();
$("#rm_button_group_chats").trigger("click");
return;
}
if (this_chid != undefined && !is_send_press) {
popup_type = "new_chat";
callPopup("Start new chat? ");
}
}
else if (id == "option_regenerate") {
if (is_send_press == false) {
hideSwipeButtons();
is_send_press = true;
Generate("regenerate");
}
}
else if (id == "option_delete_mes") {
hideSwipeButtons();
if ((this_chid != undefined && !is_send_press) || (selected_group && !is_group_generating)) {
$("#dialogue_del_mes").css("display", "block");
$("#send_form").css("display", "none");
$(".del_checkbox").each(function () {
if ($(this).parent().attr("mesid") != 0) {
$(this).css("display", "block");
$(this).parent().children(".for_checkbox").css("display", "none");
}
});
}
}
});
//////////////////////////////////////////////////////////////////////////////////////////////
//functionality for the cancel delete messages button, reverts to normal display of input form
$("#dialogue_del_mes_cancel").click(function () {
$("#dialogue_del_mes").css("display", "none");
$("#send_form").css("display", css_send_form_display);
$(".del_checkbox").each(function () {
$(this).css("display", "none");
$(this).parent().children(".for_checkbox").css("display", "block");
$(this).parent().css("background", css_mes_bg);
$(this).prop("checked", false);
});
this_del_mes = 0;
showSwipeButtons();
});
//confirms message delation with the "ok" button
$("#dialogue_del_mes_ok").click(function () {
$("#dialogue_del_mes").css("display", "none");
$("#send_form").css("display", css_send_form_display);
$(".del_checkbox").each(function () {
$(this).css("display", "none");
$(this).parent().children(".for_checkbox").css("display", "block");
$(this).parent().css("background", css_mes_bg);
$(this).prop("checked", false);
});
if (this_del_mes != 0) {
$(".mes[mesid='" + this_del_mes + "']")
.nextAll("div")
.remove();
$(".mes[mesid='" + this_del_mes + "']").remove();
chat.length = this_del_mes;
count_view_mes = this_del_mes;
if (selected_group) {
saveGroupChat(selected_group);
} else {
saveChat();
}
var $textchat = $("#chat");
$textchat.scrollTop($textchat[0].scrollHeight);
}
this_del_mes = 0;
$('#chat .mes').last().addClass('last_mes');
$('#chat .mes').eq(-2).removeClass('last_mes');
showSwipeButtons();
});
$("#settings_perset").change(function () {
if ($("#settings_perset").find(":selected").val() != "gui") {
preset_settings = $("#settings_perset").find(":selected").text();
temp = koboldai_settings[koboldai_setting_names[preset_settings]].temp;
amount_gen =
koboldai_settings[koboldai_setting_names[preset_settings]].genamt;
rep_pen =
koboldai_settings[koboldai_setting_names[preset_settings]].rep_pen;
rep_pen_size =
koboldai_settings[koboldai_setting_names[preset_settings]]
.rep_pen_range;
max_context =
koboldai_settings[koboldai_setting_names[preset_settings]].max_length;
$("#temp").val(temp);
$("#temp_counter").html(temp);
$("#amount_gen").val(amount_gen);
$("#amount_gen_counter").html(amount_gen);
$("#max_context").val(max_context);
$("#max_context_counter").html(max_context + " Tokens");
$("#rep_pen").val(rep_pen);
$("#rep_pen_counter").html(rep_pen);
$("#rep_pen_size").val(rep_pen_size);
$("#rep_pen_size_counter").html(rep_pen_size + " Tokens");
$("#range_block").children().prop("disabled", false);
$("#range_block").css("opacity", 1.0);
$("#amount_gen_block").children().prop("disabled", false);
$("#amount_gen_block").css("opacity", 1.0);
} else {
//$('.button').disableSelection();
preset_settings = "gui";
$("#range_block").children().prop("disabled", true);
$("#range_block").css("opacity", 0.5);
$("#amount_gen_block").children().prop("disabled", true);
$("#amount_gen_block").css("opacity", 0.45);
}
saveSettingsDebounced();
});
$("#settings_perset_novel").change(function () {
preset_settings_novel = $("#settings_perset_novel")
.find(":selected")
.text();
temp_novel =
novelai_settings[novelai_setting_names[preset_settings_novel]]
.temperature;
//amount_gen = koboldai_settings[koboldai_setting_names[preset_settings]].genamt;
rep_pen_novel =
novelai_settings[novelai_setting_names[preset_settings_novel]]
.repetition_penalty;
rep_pen_size_novel =
novelai_settings[novelai_setting_names[preset_settings_novel]]
.repetition_penalty_range;
$("#temp_novel").val(temp_novel);
$("#temp_counter_novel").html(temp_novel);
//$('#amount_gen').val(amount_gen);
//$('#amount_gen_counter').html(amount_gen);
$("#rep_pen_novel").val(rep_pen_novel);
$("#rep_pen_counter_novel").html(rep_pen_novel);
$("#rep_pen_size_novel").val(rep_pen_size_novel);
$("#rep_pen_size_counter_novel").html(rep_pen_size_novel + " Tokens");
//$("#range_block").children().prop("disabled", false);
//$("#range_block").css('opacity',1.0);
saveSettingsDebounced();
});
$("#main_api").change(function () {
is_pygmalion = false;
is_get_status = false;
is_get_status_novel = false;
online_status = "no_connection";
clearSoftPromptsList();
checkOnlineStatus();
changeMainAPI();
saveSettingsDebounced();
});
$("#softprompt").change(async function () {
if (!api_server) {
return;
}
const selected = $("#softprompt").find(":selected").val();
const response = await fetch("/setsoftprompt", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": token,
},
body: JSON.stringify({ name: selected, api_server: api_server }),
});
if (!response.ok) {
console.error("Couldn't change soft prompt");
}
});
for (var i of [
"temp",
"rep_pen",
"rep_pen_size",
"top_k",
"top_p",
"typical_p",
"penalty_alpha",
]) {
$("#" + i + "_textgenerationwebui").attr("x-setting-id", i);
$(document).on("input", "#" + i + "_textgenerationwebui", function () {
var i = $(this).attr("x-setting-id");
var val = $(this).val();
if (isInt(val)) {
$("#" + i + "_counter_textgenerationwebui").html($(this).val() + ".00");
} else {
$("#" + i + "_counter_textgenerationwebui").html($(this).val());
}
textgenerationwebui_settings[i] = parseFloat(val);
saveSettingsDebounced();
});
}
////////////////// OPTIMIZED RANGE SLIDER LISTENERS////////////////
const sliders = [
{
sliderId: "#temp",
counterId: "#temp_counter",
format: (val) => isInt(val) ? val + ".00" : val
},
{
sliderId: "#amount_gen",
counterId: "#amount_gen_counter",
format: (val) => val
},
{
sliderId: "#max_context",
counterId: "#max_context_counter",
format: (val) => val + " Tokens"
},
{
sliderId: "#rep_pen",
counterId: "#rep_pen_counter",
format: (val) => isInt(val) ? val + ".00" : val
},
{
sliderId: "#rep_pen_size",
counterId: "#rep_pen_size_counter",
format: (val) => val + " Tokens"
},
{
sliderId: "#temp_novel",
counterId: "#temp_counter_novel",
format: (val) => isInt(val) ? val + ".00" : val
},
{
sliderId: "#rep_pen_novel",
counterId: "#rep_pen_counter_novel",
format: (val) => isInt(val) ? val + ".00" : val
},
{
sliderId: "#rep_pen_size_novel",
counterId: "#rep_pen_size_counter_novel",
format: (val) => val + " Tokens"
}
];
sliders.forEach(slider => {
$(document).on("input", slider.sliderId, function () {
const value = $(this).val();
const formattedValue = slider.format(value);
$(slider.counterId).html(formattedValue);
console.log('saving');
saveSettingsDebounced();
});
});
//////////////////////////////////////////////////////////////
$("#style_anchor").change(function () {
style_anchor = !!$("#style_anchor").prop("checked");
saveSettingsDebounced();
});
$("#character_anchor").change(function () {
character_anchor = !!$("#character_anchor").prop("checked");
saveSettingsDebounced();
});
$("#donation").click(function () {
$("#shadow_tips_popup").css("display", "block");
$("#shadow_tips_popup").transition({
opacity: 1.0,
duration: 100,
easing: animation_rm_easing,
complete: function () { },
});
});
$("#tips_cross").click(function () {
$("#shadow_tips_popup").transition({
opacity: 0.0,
duration: 100,
easing: animation_rm_easing,
complete: function () {
$("#shadow_tips_popup").css("display", "none");
},
});
});
$("#select_chat_cross").click(function () {
$("#shadow_select_chat_popup").css("display", "none");
$("#load_select_chat_div").css("display", "block");
});
//********************
//***Message Editor***
$(document).on("click", ".mes_edit", function () {
if (this_chid !== undefined || selected_group) {
const message = $(this).closest(".mes");
if (message.data("isSystem")) {
return;
}
let chatScrollPosition = $("#chat").scrollTop();
if (this_edit_mes_id !== undefined) {
let mes_edited = $("#chat")
.children()
.filter('[mesid="' + this_edit_mes_id + '"]')
.children(".mes_block")
.children(".ch_name")
.children(".mes_edit_done");
if (edit_mes_id == count_view_mes - 1) { //if the generating swipe (...)
if (chat[edit_mes_id]['swipe_id'] !== undefined) {
if (chat[edit_mes_id]['swipes'].length === chat[edit_mes_id]['swipe_id']) {
run_edit = false;
}
}
if (run_edit) {
hideSwipeButtons();
}
}
messageEditDone(mes_edited);
}
$(this).parent().parent().children(".mes_text").empty();
$(this).css("display", "none");
$(this)
.parent()
.children(".mes_edit_done")
.css("display", "inline-block");
$(this).parent().children(".mes_edit_done").css("opacity", 0.0);
$(this)
.parent()
.children(".mes_edit_cancel")
.css("display", "inline-block");
$(this).parent().children(".mes_edit_cancel").css("opacity", 0.0);
$(this)
.parent()
.children(".mes_edit_done")
.transition({
opacity: 1.0,
duration: 600,
easing: "",
complete: function () { },
});
$(this)
.parent()
.children(".mes_edit_cancel")
.transition({
opacity: 1.0,
duration: 600,
easing: "",
complete: function () { },
});
var edit_mes_id = $(this).parent().parent().parent().attr("mesid");
this_edit_mes_id = edit_mes_id;
var text = chat[edit_mes_id]["mes"];
if (chat[edit_mes_id]["is_user"]) {
this_edit_mes_chname = name1;
} else if (chat[edit_mes_id]["forced_avatar"]) {
this_edit_mes_chname = chat[edit_mes_id]["name"];
} else {
this_edit_mes_chname = name2;
}
text = text.trim();
$(this)
.parent()
.parent()
.children(".mes_text")
.append(
'"
);
let edit_textarea = $(this)
.parent()
.parent()
.children(".mes_text")
.children(".edit_textarea");
edit_textarea.css("opacity", 0.0);
edit_textarea.transition({
opacity: 1.0,
duration: 0,
easing: "",
complete: function () { },
});
edit_textarea.height(0);
edit_textarea.height(edit_textarea[0].scrollHeight);
edit_textarea.focus();
edit_textarea[0].setSelectionRange(
edit_textarea.val().length,
edit_textarea.val().length
);
if (this_edit_mes_id == count_view_mes - 1) {
$("#chat").scrollTop(chatScrollPosition);
}
}
});
$(document).on("click", ".mes_edit_cancel", function () {
//var text = $(this).parent().parent().children('.mes_text').children('.edit_textarea').val();
var text = chat[this_edit_mes_id]["mes"];
$(this).parent().parent().children(".mes_text").empty();
$(this).css("display", "none");
$(this).parent().children(".mes_edit_done").css("display", "none");
$(this).parent().children(".mes_edit").css("display", "inline-block");
$(this)
.parent()
.parent()
.children(".mes_text")
.append(messageFormating(text, this_edit_mes_chname));
appendImageToMessage(chat[this_edit_mes_id], $(this).closest(".mes"));
this_edit_mes_id = undefined;
});
$(document).on("click", ".mes_edit_done", function () {
messageEditDone($(this));
});
$("#your_name_button").click(function () {
if (!is_send_press) {
name1 = $("#your_name").val();
if (name1 === undefined || name1 == "") name1 = default_user_name;
console.log(name1);
saveSettings("change_name");
}
});
//Select chat
$("#api_button_novel").click(function () {
if ($("#api_key_novel").val() != "") {
$("#api_loading_novel").css("display", "inline-block");
$("#api_button_novel").css("display", "none");
api_key_novel = $("#api_key_novel").val();
api_key_novel = $.trim(api_key_novel);
//console.log("1: "+api_server);
saveSettingsDebounced();
is_get_status_novel = true;
is_api_button_press_novel = true;
}
});
$("#model_novel_select").change(function () {
model_novel = $("#model_novel_select").find(":selected").val();
saveSettings();
});
$("#anchor_order").change(function () {
anchor_order = parseInt($("#anchor_order").find(":selected").val());
saveSettings();
});
//**************************CHARACTER IMPORT EXPORT*************************//
$("#character_import_button").click(function () {
$("#character_import_file").click();
});
$("#character_import_file").on("change", function (e) {
$("#rm_info_avatar").html("");
var file = e.target.files[0];
//console.log(1);
if (!file) {
return;
}
var ext = file.name.match(/\.(\w+)$/);
if (
!ext ||
(ext[1].toLowerCase() != "json" && ext[1].toLowerCase() != "png")
) {
return;
}
var format = ext[1].toLowerCase();
$("#character_import_file_type").val(format);
//console.log(format);
var formData = new FormData($("#form_import").get(0));
jQuery.ajax({
type: "POST",
url: "/importcharacter",
data: formData,
beforeSend: function () {
//$('#create_button').attr('disabled',true);
//$('#create_button').attr('value','Creating...');
},
cache: false,
contentType: false,
processData: false,
success: async function (data) {
if (data.file_name !== undefined) {
$("#rm_info_block").transition({ opacity: 0, duration: 0 });
var $prev_img = $("#avatar_div_div").clone();
$prev_img
.children("img")
.attr("src", "characters/" + data.file_name + ".png");
$("#rm_info_avatar").append($prev_img);
let oldSelectedChar = null;
if (this_chid != undefined && this_chid != "invalid-safety-id") {
oldSelectedChar = characters[this_chid].name;
}
await getCharacters();
select_rm_info("Character created", oldSelectedChar);
$("#rm_info_block").transition({ opacity: 1, duration: 1000 });
}
},
error: function (jqXHR, exception) {
$("#create_button").removeAttr("disabled");
},
});
});
$("#export_button").click(function () {
var link = document.createElement("a");
link.href = "characters/" + characters[this_chid].avatar;
link.download = characters[this_chid].avatar;
document.body.appendChild(link);
link.click();
});
//**************************CHAT IMPORT EXPORT*************************//
$("#chat_import_button").click(function () {
$("#chat_import_file").click();
});
$("#chat_import_file").on("change", function (e) {
var file = e.target.files[0];
//console.log(1);
if (!file) {
return;
}
var ext = file.name.match(/\.(\w+)$/);
if (
!ext ||
(ext[1].toLowerCase() != "json" && ext[1].toLowerCase() != "jsonl")
) {
return;
}
var format = ext[1].toLowerCase();
$("#chat_import_file_type").val(format);
//console.log(format);
var formData = new FormData($("#form_import_chat").get(0));
//console.log('/importchat entered with: '+formData);
jQuery.ajax({
type: "POST",
url: "/importchat",
data: formData,
beforeSend: function () {
$("#select_chat_div").html("");
$("#load_select_chat_div").css("display", "block");
//$('#create_button').attr('value','Creating...');
},
cache: false,
contentType: false,
processData: false,
success: function (data) {
//console.log(data);
if (data.res) {
getAllCharaChats();
}
},
error: function (jqXHR, exception) {
$("#create_button").removeAttr("disabled");
},
});
});
$("#rm_button_group_chats").click(function () {
selected_button = "group_chats";
select_group_chats();
});
$("#rm_button_back_from_group").click(function () {
selected_button = "characters";
select_rm_characters();
});
$("#rm_button_extensions").click(function () {
menu_type = 'extennsions';
selected_button = 'extensions';
setRightTabSelectedClass('rm_button_extensions');
selectRightMenuWithAnimation('rm_extensions_block');
});
$(document).on("click", ".select_chat_block", function () {
let file_name = $(this).attr("file_name").replace(".jsonl", "");
//console.log(characters[this_chid]['chat']);
characters[this_chid]["chat"] = file_name;
clearChat();
chat.length = 0;
getChat();
$("#selected_chat_pole").val(file_name);
$("#create_button").click();
$("#shadow_select_chat_popup").css("display", "none");
$("#load_select_chat_div").css("display", "block");
});
});