');
- highlightSelectedAvatar();
- }
- //***************SETTINGS****************//
- ///////////////////////////////////////////
- async function getSettings(type) {//timer
-
- //console.log('getSettings() pinging server for settings request');
+async function getStatus() {
+ if (is_get_status) {
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;
- if (settings.world_info_depth !== undefined) world_info_depth = Number(settings.world_info_depth);
- if (settings.world_info_budget !== undefined) world_info_budget = Number(settings.world_info_budget);
-
- //load poweruser options
- if (settings.auto_connect !== undefined) auto_connect = !!settings.auto_connect;
- if (settings.auto_load_chat !== undefined) auto_load_chat = !!settings.auto_load_chat;
-
- 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');
-
- $('#auto-connect-checkbox').prop('checked', auto_connect);
- $('#auto-load-chat-checkbox').prop('checked', auto_load_chat);
-
- $('#max_context').val(max_context);
- $('#max_context_counter').html(max_context + ' Tokens');
-
- $('#amount_gen').val(amount_gen);
- $('#amount_gen_counter').html(amount_gen + ' Tokens');
-
- $('#world_info_depth_counter').html(`${world_info_depth} Messages`);
- $('#world_info_depth').val(world_info_depth);
-
- $('#world_info_budget_counter').html(`${world_info_budget} Tokens`);
- $('#world_info_budget').val(world_info_budget);
-
- 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");
-
- //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').trigger('change');
- } 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);
-
- // world info settings
- world_names = data.world_names?.length ? data.world_names : [];
-
- if (settings.world_info != undefined) {
- if (world_names.includes(settings.world_info)) {
- world_info = settings.world_info;
- }
- }
-
- world_names.forEach((item, i) => {
- $('#world_info').append(`
${item} `);
- // preselect world if saved
- if (item == world_info) {
- $('#world_info').val(i).change();
- }
- });
- // end world info settings
-
- if (data.enable_extensions) {
- const src = 'scripts/extensions.js';
- if ($(`script[src="${src}"]`).length === 0) {
- const script = document.createElement('script');
- script.type = 'text/javascript';
- 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);
-
- }
- });
-
- collapse_newlines = localStorage.getItem(storage_keys.collapse_newlines) == 'true';
- $('#collapse-newlines-checkbox').prop('checked', collapse_newlines);
- }
-
- async function saveSettings(type) {
- //console.log('Entering settings with name1 = '+name1);
- jQuery.ajax({
- type: 'POST',
- url: '/savesettings',
+ type: "POST", //
+ url: "/getstatus", //
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,
- auto_connect: auto_connect,
- auto_load_chat: auto_load_chat,
+ api_server:
+ main_api == "kobold" ? api_server : api_server_textgenerationwebui,
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,
}),
beforeSend: function () {
- //console.log('saveSettings() -- active_character -- '+active_character);
- if (type == 'change_name') {
- name1 = $('#your_name').val()
- // console.log('beforeSend name1 = '+name1);
+ if (is_api_button_press) {
+ //$("#api_loading").css("display", 'inline-block');
+ //$("#api_button").css("display", 'none');
}
- },
+ //$('#create_button').attr('value','Creating...'); //
+ },
cache: false,
dataType: "json",
+ crossDomain: true,
contentType: "application/json",
- //processData: false,
+ //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();
-
-
- }
+ online_status = data.result;
+ if (online_status == undefined) {
+ online_status = "no_connection";
+ }
+ if (online_status.toLowerCase().indexOf("pygmalion") != -1) {
+ is_pygmalion = true;
+ online_status += " (Pyg. formatting on)";
+ } else {
+ is_pygmalion = false;
+ }
+ //console.log(online_status);
+ resultCheckStatus();
+ if (online_status !== "no_connection") {
+ var checkStatusNow = setTimeout(getStatus, 3000); //getStatus();
+ }
},
error: function (jqXHR, exception) {
console.log(exception);
console.log(jqXHR);
+ online_status = "no_connection";
- }
- });
-
- localStorage.setItem(storage_keys.collapse_newlines, collapse_newlines);
- }
- 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...');
+ resultCheckStatus();
},
- 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();
+ });
+ } else {
+ if (is_get_status_novel != true) {
+ online_status = "no_connection";
+ }
+ }
+}
- 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);
+function resultCheckStatus() {
+ is_api_button_press = false;
+ checkOnlineStatus();
+ $("#api_loading").css("display", "none");
+ $("#api_button").css("display", "inline-block");
+ $("#api_loading_textgenerationwebui").css("display", "none");
+ $("#api_button_textgenerationwebui").css("display", "inline-block");
+}
+
+async function getSoftPromptsList() {
+ if (!api_server) {
+ return;
+ }
+
+ const response = await fetch("/getsoftprompts", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ api_server: api_server }),
+ });
+
+ if (response.ok) {
+ const data = await response.json();
+ updateSoftPromptsList(data.soft_prompts);
+ }
+}
+
+function clearSoftPromptsList() {
+ $('#softprompt option[value!=""]').each(function () {
+ $(this).remove();
+ });
+}
+
+function updateSoftPromptsList(soft_prompts) {
+ // Delete SPs removed from Kobold
+ $("#softprompt option").each(function () {
+ const value = $(this).attr("value");
+
+ if (value == "") {
+ return;
+ }
+
+ const prompt = soft_prompts.find((x) => x.name === value);
+ if (!prompt) {
+ $(this).remove();
+ }
+ });
+
+ // Add SPs added to Kobold
+ soft_prompts.forEach((prompt) => {
+ if ($(`#softprompt option[value="${prompt.name}"]`).length === 0) {
+ $("#softprompt").append(
+ `
${prompt.name} `
+ );
+
+ if (prompt.selected) {
+ $("#softprompt").val(prompt.name);
+ }
+ }
+ });
+
+ // No SP selected or no SPs
+ if (soft_prompts.length === 0 || !soft_prompts.some((x) => x.selected)) {
+ $("#softprompt").val("");
+ }
+}
+
+function printCharacters() {
+ //console.log('printCharacters() entered');
+
+ $("#rm_print_characters_block").empty();
+ //console.log('printCharacters() -- sees '+characters.length+' characters.');
+ characters.forEach(function (item, i, arr) {
+ var this_avatar = default_avatar;
+ if (item.avatar != "none") {
+ this_avatar = "characters/" + item.avatar + "?" + Date.now();
+ } //RossAscends: changed 'prepend' to 'append' to make alphabetical sorting display correctly.
+ $("#rm_print_characters_block").append(
+ "
"
+ );
+ //console.log('printcharacters() -- printing -- ChID '+i+' ('+item.name+')');
+ });
+ printGroups();
+}
+
+function printGroups() {
+ for (let group of groups) {
+ const template = $("#group_list_template .group_select").clone();
+ template.data("id", group.id);
+ template.find(".ch_name").html(group.name);
+ $("#rm_print_characters_block").prepend(template);
+ updateGroupAvatar(group);
+ }
+}
+
+function updateGroupAvatar(group) {
+ $("#rm_print_characters_block .group_select").each(function () {
+ if ($(this).data("id") == group.id) {
+ const avatar = getGroupAvatar(group);
+ if (avatar) {
+ $(this).find(".avatar").replaceWith(avatar);
+ }
+ }
+ });
+}
+
+function getGroupAvatar(group) {
+ const memberAvatars = [];
+ if (group && Array.isArray(group.members) && group.members.length) {
+ for (const member of group.members) {
+ const charIndex = characters.findIndex((x) => x.name === member);
+ if (charIndex !== -1 && characters[charIndex].avatar !== "none") {
+ const this_avatar = `characters/${characters[charIndex].avatar
+ }#${Date.now()}`;
+ memberAvatars.push(this_avatar);
+ }
+ if (memberAvatars.length === 4) {
+ break;
+ }
+ }
+ }
+
+ // Cohee: there's probably a smarter way to do this..
+ if (memberAvatars.length === 1) {
+ const groupAvatar = $("#group_avatars_template .collage_1").clone();
+ groupAvatar.find(".img_1").attr("src", memberAvatars[0]);
+ return groupAvatar;
+ }
+
+ if (memberAvatars.length === 2) {
+ const groupAvatar = $("#group_avatars_template .collage_2").clone();
+ groupAvatar.find(".img_1").attr("src", memberAvatars[0]);
+ groupAvatar.find(".img_2").attr("src", memberAvatars[1]);
+ return groupAvatar;
+ }
+
+ if (memberAvatars.length === 3) {
+ const groupAvatar = $("#group_avatars_template .collage_3").clone();
+ groupAvatar.find(".img_1").attr("src", memberAvatars[0]);
+ groupAvatar.find(".img_2").attr("src", memberAvatars[1]);
+ groupAvatar.find(".img_3").attr("src", memberAvatars[2]);
+ return groupAvatar;
+ }
+
+ if (memberAvatars.length === 4) {
+ const groupAvatar = $("#group_avatars_template .collage_4").clone();
+ groupAvatar.find(".img_1").attr("src", memberAvatars[0]);
+ groupAvatar.find(".img_2").attr("src", memberAvatars[1]);
+ groupAvatar.find(".img_3").attr("src", memberAvatars[2]);
+ groupAvatar.find(".img_4").attr("src", memberAvatars[3]);
+ return groupAvatar;
+ }
+
+ // default avatar
+ const groupAvatar = $("#group_avatars_template .collage_1").clone();
+ groupAvatar.find(".img_1").attr("src", group.avatar_url);
+ return groupAvatar;
+}
+
+async function getCharacters() {
+ await getGroups();
+
+ //console.log('getCharacters() -- entered');
+ //console.log(characters);
+ var response = await fetch("/getcharacters", {
+ //RossAscends: changed from const
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({
+ "": "",
+ }),
+ });
+ if (response.ok === true) {
+ var getData = ""; //RossAscends: reset to force array to update to account for deleted character.
+ var getData = await response.json(); //RossAscends: changed from const
+ //console.log(getData);
+
+ //var aa = JSON.parse(getData[0]);
+
+ var load_ch_count = Object.getOwnPropertyNames(getData); //RossAscends: change from const to create dynamic character load amounts.
+ var charCount = load_ch_count.length;
+ //console.log('/getcharacters -- expecting to load '+charCount+' characters.')
+ for (var i = 0; i < load_ch_count.length; i++) {
+ characters[i] = [];
+ characters[i] = getData[i];
+ //console.log('/getcharacters -- loaded character #'+(i+1)+' ('+characters[i].name+')');
+ }
+ //RossAscends: updated character sorting to be alphabetical
+ characters.sort(function (a, b) {
+ //console.log('sorting characters: '+a.name+' vs '+b.name);
+ if (a.name < b.name) {
+ return -1;
+ }
+ if (a.name > b.name) {
+ return 1;
+ }
+ return 0;
+ });
+ //console.log(characters);
+
+ //characters.reverse();
+ //console.log('/getcharacters -- this_chid -- '+this_chid);
+ if (this_chid != undefined && this_chid != "invalid-safety-id") {
+ $("#avatar_url_pole").val(characters[this_chid].avatar);
+ }
+
+ //console.log('/getcharacters -- sending '+i+' characters to /printcharacters');
+ printCharacters();
+ //console.log(propOwn.length);
+ //return JSON.parse(getData[0]);
+ //const getData = await response.json();
+ //var getMessage = getData.results[0].text;
+ }
+}
+
+async function getBackgrounds() {
+ const response = await fetch("/getbackgrounds", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({
+ "": "",
+ }),
+ });
+ if (response.ok === true) {
+ const getData = await response.json();
+ //background = getData;
+ //console.log(getData.length);
+ for (var i = 0; i < getData.length; i++) {
+ //console.log(1);
+ $("#bg_menu_content").append(
+ "
"
+ );
+ }
+ //var aa = JSON.parse(getData[0]);
+ //const load_ch_coint = Object.getOwnPropertyNames(getData);
+ }
+}
+async function isColab() {
+ is_checked_colab = true;
+ const response = await fetch("/iscolab", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({
+ "": "",
+ }),
+ });
+ if (response.ok === true) {
+ const getData = await response.json();
+ if (getData.colaburl != false) {
+ $("#colab_shadow_popup").css("display", "none");
+ is_colab = true;
+ let url = String(getData.colaburl).split("flare.com")[0] + "flare.com";
+ url = String(url).split("loca.lt")[0] + "loca.lt";
+ $("#api_url_text").val(url);
+ setTimeout(function () {
+ $("#api_button").click();
+ }, 2000);
+ }
+ }
+}
+
+async function setBackground(bg) {
+ /*
+ const response = await fetch("/setbackground", {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify({
+ "bg": bg
+ })
+
+ });
+ if (response.ok === true) {
+ //const getData = await response.json();
+ //background = getData;
+
+ //var aa = JSON.parse(getData[0]);
+ //const load_ch_coint = Object.getOwnPropertyNames(getData);
+ }*/
+ //console.log(bg);
+ jQuery.ajax({
+ type: "POST", //
+ url: "/setbackground", //
+ data: JSON.stringify({
+ bg: bg,
+ }),
+ beforeSend: function () {
+ //$('#create_button').attr('value','Creating...'); //
+ },
+ cache: false,
+ dataType: "json",
+ contentType: "application/json",
+ //processData: false,
+ success: function (html) {
+ //setBackground(html);
+ //$('body').css('background-image', 'linear-gradient(rgba(19,21,44,0.75), rgba(19,21,44,0.75)), url('+e.target.result+')');
+ //$("#form_bg_download").after("
");
+ },
+ error: function (jqXHR, exception) {
+ console.log(exception);
+ console.log(jqXHR);
+ },
+ });
+}
+
+async function delBackground(bg) {
+ const response = await fetch("/delbackground", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({
+ bg: bg,
+ }),
+ });
+ if (response.ok === true) {
+ //const getData = await response.json();
+ //background = getData;
+ //var aa = JSON.parse(getData[0]);
+ //const load_ch_coint = Object.getOwnPropertyNames(getData);
+ }
+}
+
+function printMessages() {
+ //console.log(chat);
+ //console.log('printMessages() -- printing messages for -- '+this_chid+' '+active_character+' '+characters[this_chid]);
+ chat.forEach(function (item, i, arr) {
+ addOneMessage(item);
+ });
+}
+
+function clearChat() {
+ count_view_mes = 0;
+ extension_prompts = {};
+ $("#chat").html("");
+}
+
+function messageFormating(mes, ch_name, isSystem, forceAvatar) {
+ if (this_chid != undefined && !isSystem)
+ mes = mes.replaceAll("<", "<").replaceAll(">", ">"); //for Chloe
+ if (this_chid === undefined) {
+ mes = mes
+ .replace(/\*\*(.+?)\*\*/g, "
$1 ")
+ .replace(/\*(.+?)\*/g, "
$1 ")
+ .replace(/\n/g, "
");
+ } else if (!isSystem) {
+ mes = converter.makeHtml(mes);
+ mes = mes.replace(/{([^}]+)}/g, "");
+ mes = mes.replace(/\n/g, "
");
+ mes = mes.trim();
+ }
+
+ if (forceAvatar) {
+ mes = mes.replaceAll(ch_name + ":", "");
+ }
+
+ if (ch_name !== name1) {
+ mes = mes.replaceAll(name2 + ":", "");
+ }
+ return mes;
+}
+
+function appendImageToMessage(mes, messageElement) {
+ if (mes.extra?.image) {
+ const image = document.createElement("img");
+ image.src = mes.extra?.image;
+ image.classList.add("img_extra");
+ messageElement.find(".mes_text").prepend(image);
+ }
+}
+
+function addOneMessage(mes) {
+ //var message = mes['mes'];
+ //message = mes['mes'].replace(/^\s+/g, '');
+ //console.log(message.indexOf(name1+":"));
+ var messageText = mes["mes"];
+ var characterName = name1;
+ var avatarImg = "User Avatars/" + user_avatar;
+ const isSystem = mes.is_system;
+ generatedPromtCache = "";
+ //thisText = thisText.split("\n").join("
");
+ var avatarImg = "User Avatars/" + user_avatar;
+ if (!mes["is_user"]) {
+ if (mes.force_avatar) {
+ avatarImg = mes.force_avatar;
+ } else if (this_chid == undefined || this_chid == "invalid-safety-id") {
+ avatarImg = "img/chloe.png";
+ } else {
+ if (characters[this_chid].avatar != "none") {
+ avatarImg = "characters/" + characters[this_chid].avatar;
+ if (is_mes_reload_avatar !== false) {
+ avatarImg += "?" + is_mes_reload_avatar;
+ //console.log(avatarImg);
+ }
+ } else {
+ avatarImg = "img/fluffy.png";
+ }
+ }
+
+ characterName = mes.is_system || mes.force_avatar ? mes.name : name2;
+ }
+
+ //Formating
+ //messageText = messageText.replace(/\*\*(.+?)\*\*/g, '
$1 ').replace(/\*(.+?)\*/g, '
$1 ').replace(/\n/g, '
');
+ //if(characterName != name1){
+ //messageText = messageText.replaceAll(name2+":", "");
+ //}
+ //console.log(messageText);
+ if (count_view_mes == 0) {
+ messageText = messageText.replace(/{{user}}/gi, name1);
+ messageText = messageText.replace(/{{char}}/gi, name2);
+ messageText = messageText.replace(/
/gi, name1);
+ messageText = messageText.replace(//gi, name2);
+ }
+ messageText = messageFormating(
+ messageText,
+ characterName,
+ isSystem,
+ mes.force_avatar
+ );
+ const bias = messageFormating(mes.extra?.bias ?? "");
+
+ $("#chat").append(
+ "
" +
+ characterName +
+ "
" +
+ `
${bias}
`
+ );
+
+ const newMessage = $(`#chat [mesid="${count_view_mes}"]`);
+ newMessage.data("isSystem", isSystem);
+
+ appendImageToMessage(mes, newMessage);
+
+ if (isSystem) {
+ newMessage.find(".mes_edit").hide();
+ }
+
+ if (!if_typing_text) {
+ //console.log(messageText);
+ $("#chat")
+ .children()
+ .filter('[mesid="' + count_view_mes + '"]')
+ .children(".mes_block")
+ .children(".mes_text")
+ .append(messageText);
+ } else {
+ typeWriter(
+ $("#chat")
+ .children()
+ .filter('[mesid="' + count_view_mes + '"]')
+ .children(".mes_block")
+ .children(".mes_text"),
+ messageText,
+ 50,
+ 0
+ );
+ }
+ count_view_mes++;
+ if (!add_mes_without_animation) {
+ $("#chat").children().last().css("opacity", 1.0);
+ $("#chat")
+ .children()
+ .last()
+ .transition({
+ opacity: 1.0,
+ duration: 700,
+ easing: "",
+ complete: function () { },
+ });
+ } else {
+ add_mes_without_animation = false;
+ }
+ var $textchat = $("#chat");
+ $textchat.scrollTop($textchat[0].scrollHeight);
+}
+
+function typeWriter(target, text, speed, i) {
+ if (i < text.length) {
+ //target.append(text.charAt(i));
+ target.html(target.html() + text.charAt(i));
+ i++;
+ setTimeout(() => typeWriter(target, text, speed, i), speed);
+ }
+}
+
+function newMesPattern(name) {
+ //Patern which denotes a new message
+ name = name + ":";
+ return name;
+}
+
+function substituteParams(content) {
+ content = content.replace(/{{user}}/gi, name1);
+ content = content.replace(/{{char}}/gi, name2);
+ content = content.replace(//gi, name1);
+ content = content.replace(//gi, name2);
+ return content;
+}
+
+function checkWorldInfo(chat) {
+ if (world_info_data.entries.length == 0) {
+ return "";
+ }
+
+ const messagesToLookBack = world_info_depth * 2;
+ let textToScan = chat.slice(0, messagesToLookBack).join("").toLowerCase();
+ let worldInfoBefore = "";
+ let worldInfoAfter = "";
+ let needsToScan = true;
+ let allActivatedEntries = new Set();
+
+ const sortedEntries = Object.keys(world_info_data.entries)
+ .map((x) => world_info_data.entries[x])
+ .sort((a, b) => b.order - a.order);
+ while (needsToScan) {
+ let activatedNow = new Set();
+
+ for (let entry of sortedEntries) {
+ if (allActivatedEntries.has(entry.uid)) {
+ continue;
+ }
+
+ if (entry.constant) {
+ activatedNow.add(entry.uid);
+ }
+
+ if (Array.isArray(entry.key) && entry.key.length) {
+ primary: for (let key of entry.key) {
+ if (key && textToScan.includes(key.trim().toLowerCase())) {
+ if (
+ entry.selective &&
+ Array.isArray(entry.keysecondary) &&
+ entry.keysecondary.length
+ ) {
+ secondary: for (let keysecondary of entry.keysecondary) {
+ if (
+ keysecondary &&
+ textToScan.includes(keysecondary.trim().toLowerCase())
+ ) {
+ activatedNow.add(entry.uid);
+ break secondary;
+ }
+ }
+ } else {
+ activatedNow.add(entry.uid);
+ break primary;
}
}
}
- //
-
- //
- //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);
-
}
- });
+ }
+
+ needsToScan = activatedNow.size > 0;
+ const newEntries = [...activatedNow]
+ .map((x) => world_info_data.entries[x])
+ .sort((a, b) => sortedEntries.indexOf(a) - sortedEntries.indexOf(b));
+
+ for (const entry of newEntries) {
+ if (entry.position === world_info_position.after) {
+ worldInfoAfter = `${substituteParams(
+ entry.content
+ )}\n${worldInfoAfter}`;
+ } else {
+ worldInfoBefore = `${substituteParams(
+ entry.content
+ )}\n${worldInfoBefore}`;
+ }
+
+ if (
+ encode(worldInfoBefore + worldInfoAfter).length >= world_info_budget
+ ) {
+ needsToScan = false;
+ break;
+ }
+ }
+
+ if (needsToScan) {
+ textToScan =
+ newEntries
+ .map((x) => x.content)
+ .join("\n")
+ .toLowerCase() + textToScan;
+ }
+
+ allActivatedEntries = new Set([...allActivatedEntries, ...activatedNow]);
}
- //************************************************************
- //************************Novel.AI****************************
- //************************************************************
- async function getStatusNovel() {
- if (is_get_status_novel) {
- var data = { key: api_key_novel };
+ return { worldInfoBefore, worldInfoAfter };
+}
+function isHelpRequest(message) {
+ const helpTokens = ["/?", "/help"];
+ return helpTokens.includes(message.trim().toLowerCase());
+}
+function sendSystemMessage(type, text) {
+ const systemMessage = system_messages[type];
+
+ if (!systemMessage) {
+ return;
+ }
+
+ const newMessage = { ...systemMessage, send_date: humanizedDateTime() };
+
+ if (text) {
+ newMessage.mes = text;
+ }
+
+ chat.push(newMessage);
+ addOneMessage(newMessage);
+ is_send_press = false;
+}
+
+function extractMessageBias(message) {
+ if (!message) {
+ return null;
+ }
+
+ const found = [];
+ const rxp = /{([^}]+)}/g;
+ let curMatch;
+
+ while ((curMatch = rxp.exec(message))) {
+ found.push(curMatch[1].trim());
+ }
+
+ if (!found.length) {
+ return "";
+ }
+
+ return ` ${found.join(" ")} `;
+}
+
+async function Generate(type, automatic_trigger) {
+ //encode("dsfs").length
+ tokens_already_generated = 0;
+ message_already_generated = name2 + ": ";
+
+ if (isHelpRequest($("#send_textarea").val())) {
+ sendSystemMessage(system_message_types.HELP);
+ $("#send_textarea").val("").trigger("input");
+ return;
+ }
+
+ if (selected_group && !is_group_generating) {
+ generateGroupWrapper(false);
+ return;
+ }
+
+ if (
+ online_status != "no_connection" &&
+ this_chid != undefined &&
+ this_chid !== "invalid-safety-id"
+ ) {
+ if (type !== "regenerate") {
+ is_send_press = true;
+ var textareaText = $("#send_textarea").val();
+ //console.log('Not a Regenerate call, so posting normall with input of: ' +textareaText);
+ $("#send_textarea").val("").trigger("input");
+ } else {
+ //console.log('Regenerate call detected')
+ var textareaText = "";
+ if (chat[chat.length - 1]["is_user"]) {
+ //If last message from You
+ } else {
+ //console.log('about to remove last msg')
+ chat.length = chat.length - 1;
+ count_view_mes -= 1;
+ //console.log('removing last msg')
+ $("#chat").children().last().remove();
+ }
+ }
+
+ $("#send_but").css("display", "none");
+ $("#loading_mes").css("display", "inline-block");
+
+ let promptBias = null;
+ let messageBias = extractMessageBias(textareaText);
+
+ // gets bias of the latest message where it was applied
+ for (let mes of chat) {
+ if (mes && mes.is_user && mes.extra && mes.extra.bias) {
+ promptBias = mes.extra.bias;
+ }
+ }
+
+ // bias from the latest message is top priority
+ promptBias = messageBias ?? promptBias ?? "";
+
+ var storyString = "";
+ var userSendString = "";
+ var finalPromt = "";
+
+ var postAnchorChar = "talks a lot with descriptions"; //'Talk a lot with description what is going on around';// in asterisks
+ var postAnchorStyle = "Writing style: very long messages"; //"[Genre: roleplay chat][Tone: very long messages with descriptions]";
+
+ var anchorTop = "";
+ var anchorBottom = "";
+ var topAnchorDepth = 8;
+
+ if (character_anchor && !is_pygmalion) {
+ if (anchor_order === 0) {
+ anchorTop = name2 + " " + postAnchorChar;
+ } else {
+ anchorBottom = "[" + name2 + " " + postAnchorChar + "]";
+ }
+ }
+ if (style_anchor && !is_pygmalion) {
+ if (anchor_order === 1) {
+ anchorTop = postAnchorStyle;
+ } else {
+ anchorBottom = "[" + postAnchorStyle + "]";
+ }
+ }
+
+ //*********************************
+ //PRE FORMATING STRING
+ //*********************************
+ if (textareaText != "" && !automatic_trigger) {
+ chat[chat.length] = {};
+ chat[chat.length - 1]["name"] = name1;
+ chat[chat.length - 1]["is_user"] = true;
+ chat[chat.length - 1]["is_name"] = true;
+ chat[chat.length - 1]["send_date"] = humanizedDateTime();
+ chat[chat.length - 1]["mes"] = textareaText;
+ chat[chat.length - 1]["extra"] = {};
+
+ if (messageBias) {
+ chat[chat.length - 1]["extra"]["bias"] = messageBias;
+ }
+
+ addOneMessage(chat[chat.length - 1]);
+ }
+ var chatString = "";
+ var arrMes = [];
+ var mesSend = [];
+ var charDescription = $.trim(characters[this_chid].description);
+ var charPersonality = $.trim(characters[this_chid].personality);
+ var Scenario = $.trim(characters[this_chid].scenario);
+ var mesExamples = $.trim(characters[this_chid].mes_example);
+ var checkMesExample = $.trim(mesExamples.replace(/
/gi, "")); //for check length without tag
+ if (checkMesExample.length == 0) mesExamples = "";
+ var mesExamplesArray = [];
+ //***Base replace***
+ if (mesExamples !== undefined) {
+ if (mesExamples.length > 0) {
+ if (is_pygmalion) {
+ mesExamples = mesExamples.replace(/{{user}}:/gi, "You:");
+ mesExamples = mesExamples.replace(/:/gi, "You:");
+ }
+ mesExamples = mesExamples.replace(/{{user}}/gi, name1);
+ mesExamples = mesExamples.replace(/{{char}}/gi, name2);
+ mesExamples = mesExamples.replace(//gi, name1);
+ mesExamples = mesExamples.replace(//gi, name2);
+ //mesExamples = mesExamples.replaceAll('', '[An example of how '+name2+' responds]');
+ let blocks = mesExamples.split(//gi);
+ mesExamplesArray = blocks
+ .slice(1)
+ .map((block) => `\n${block.trim()}\n`);
+ }
+ }
+ if (charDescription !== undefined) {
+ if (charDescription.length > 0) {
+ charDescription = charDescription.replace(/{{user}}/gi, name1);
+ charDescription = charDescription.replace(/{{char}}/gi, name2);
+ charDescription = charDescription.replace(//gi, name1);
+ charDescription = charDescription.replace(//gi, name2);
+ }
+ }
+ if (charPersonality !== undefined) {
+ if (charPersonality.length > 0) {
+ charPersonality = charPersonality.replace(/{{user}}/gi, name1);
+ charPersonality = charPersonality.replace(/{{char}}/gi, name2);
+ charPersonality = charPersonality.replace(//gi, name1);
+ charPersonality = charPersonality.replace(//gi, name2);
+ }
+ }
+ if (Scenario !== undefined) {
+ if (Scenario.length > 0) {
+ Scenario = Scenario.replace(/{{user}}/gi, name1);
+ Scenario = Scenario.replace(/{{char}}/gi, name2);
+ Scenario = Scenario.replace(//gi, name1);
+ Scenario = Scenario.replace(//gi, name2);
+ }
+ }
+
+ if (is_pygmalion) {
+ if (charDescription.length > 0) {
+ storyString = name2 + "'s Persona: " + charDescription + "\n";
+ }
+ if (charPersonality.length > 0) {
+ storyString += "Personality: " + charPersonality + "\n";
+ }
+ if (Scenario.length > 0) {
+ storyString += "Scenario: " + Scenario + "\n";
+ }
+ } else {
+ if (charDescription !== undefined) {
+ if (charPersonality.length > 0) {
+ charPersonality = name2 + "'s personality: " + charPersonality; //"["+name2+"'s personality: "+charPersonality+"]";
+ }
+ }
+ if (charDescription !== undefined) {
+ if ($.trim(charDescription).length > 0) {
+ if (
+ charDescription.slice(-1) !== "]" ||
+ charDescription.substr(0, 1) !== "["
+ ) {
+ //charDescription = '['+charDescription+']';
+ }
+ storyString += charDescription + "\n";
+ }
+ }
+
+ if (count_view_mes < topAnchorDepth) {
+ storyString += charPersonality + "\n";
+ }
+ }
+
+ var count_exm_add = 0;
+ var chat2 = [];
+ var j = 0;
+ for (var i = chat.length - 1; i >= 0; i--) {
+ if (j == 0) {
+ chat[j]["mes"] = chat[j]["mes"].replace(/{{user}}/gi, name1);
+ chat[j]["mes"] = chat[j]["mes"].replace(/{{char}}/gi, name2);
+ chat[j]["mes"] = chat[j]["mes"].replace(//gi, name1);
+ chat[j]["mes"] = chat[j]["mes"].replace(//gi, name2);
+ }
+ let this_mes_ch_name = "";
+ if (chat[j]["is_user"]) {
+ this_mes_ch_name = name1;
+ } else {
+ this_mes_ch_name = name2;
+ }
+ if (chat[j]["is_name"]) {
+ chat2[i] = this_mes_ch_name + ": " + chat[j]["mes"] + "\n";
+ } else {
+ chat2[i] = chat[j]["mes"] + "\n";
+ }
+ // system messages produce no text
+ if (chat[j]["is_system"]) {
+ chat2[i] = "";
+ }
+ // replace bias markup
+ chat2[i] = (chat2[i] ?? "").replace(/{([^}]+)}/g, "");
+ j++;
+ }
+ //chat2 = chat2.reverse();
+ var this_max_context = 1487;
+ if (main_api == "kobold") this_max_context = max_context;
+ if (main_api == "novel") {
+ if (novel_tier === 1) {
+ this_max_context = 1024;
+ } else {
+ this_max_context = 2048 - 60; //fix for fat tokens
+ if (model_novel == "krake-v2") {
+ this_max_context -= 160;
+ }
+ }
+ }
+
+ let worldInfoString = "",
+ worldInfoBefore = "",
+ worldInfoAfter = "";
+
+ if (world_info && world_info_data) {
+ const activatedWorldInfo = checkWorldInfo(chat2);
+ worldInfoBefore = activatedWorldInfo.worldInfoBefore;
+ worldInfoAfter = activatedWorldInfo.worldInfoAfter;
+ worldInfoString = worldInfoBefore + worldInfoAfter;
+ }
+
+ let extension_prompt = Object.keys(extension_prompts)
+ .sort()
+ .map((x) => extension_prompts[x])
+ .filter((x) => x)
+ .join("\n");
+ if (extension_prompt.length && !extension_prompt.endsWith("\n")) {
+ extension_prompt += "\n";
+ }
+
+ var i = 0;
+
+ for (var item of chat2) {
+ //console.log(encode("dsfs").length);
+ chatString = item + chatString;
+ if (
+ encode(
+ JSON.stringify(
+ worldInfoString +
+ storyString +
+ chatString +
+ anchorTop +
+ anchorBottom +
+ charPersonality +
+ promptBias +
+ extension_prompt
+ )
+ ).length +
+ 120 <
+ this_max_context
+ ) {
+ //(The number of tokens in the entire promt) need fix, it must count correctly (added +120, so that the description of the character does not hide)
+
+ //if (is_pygmalion && i == chat2.length-1) item='\n'+item;
+ arrMes[arrMes.length] = item;
+ } else {
+ i = chat.length - 1;
+ }
+ await delay(1); //For disable slow down (encode gpt-2 need fix)
+ //console.log(i+' '+chat.length);
+ count_exm_add = 0;
+ if (i == chat.length - 1) {
+ //arrMes[arrMes.length-1] = '\n'+arrMes[arrMes.length-1];
+ let mesExmString = "";
+ for (let iii = 0; iii < mesExamplesArray.length; iii++) {
+ //mesExamplesArray It need to make from end to start
+ mesExmString = mesExmString + mesExamplesArray[iii];
+ if (
+ encode(
+ JSON.stringify(
+ worldInfoString +
+ storyString +
+ mesExmString +
+ chatString +
+ anchorTop +
+ anchorBottom +
+ charPersonality +
+ promptBias +
+ extension_prompt
+ )
+ ).length +
+ 120 <
+ this_max_context
+ ) {
+ //example of dialogs
+ if (!is_pygmalion) {
+ mesExamplesArray[iii] = mesExamplesArray[iii].replace(
+ //i,
+ "This is how " + name2 + " should talk"
+ ); //An example of how '+name2+' responds
+ }
+ count_exm_add++;
+ await delay(1);
+
+ //arrMes[arrMes.length] = item;
+ } else {
+ iii = mesExamplesArray.length;
+ }
+ }
+
+ if (!is_pygmalion) {
+ if (Scenario !== undefined) {
+ if (Scenario.length > 0) {
+ storyString +=
+ "Circumstances and context of the dialogue: " + Scenario + "\n";
+ }
+ }
+ //storyString+='\nThen the roleplay chat between '+name1+' and '+name2+' begins.\n';
+ }
+ runGenerate();
+ return;
+ }
+ i++;
+ }
+
+ function runGenerate(cycleGenerationPromt = "") {
+ generatedPromtCache += cycleGenerationPromt;
+ if (generatedPromtCache.length == 0) {
+ chatString = "";
+ arrMes = arrMes.reverse();
+ var is_add_personality = false;
+ arrMes.forEach(function (item, i, arr) {
+ //For added anchors and others
+
+ if (
+ i >= arrMes.length - 1 &&
+ $.trim(item).substr(0, (name1 + ":").length) != name1 + ":"
+ ) {
+ if (textareaText == "") {
+ item = item.substr(0, item.length - 1);
+ }
+ }
+ if (
+ i === arrMes.length - topAnchorDepth &&
+ count_view_mes >= topAnchorDepth &&
+ !is_add_personality
+ ) {
+ is_add_personality = true;
+ //chatString = chatString.substr(0,chatString.length-1);
+ //anchorAndPersonality = "[Genre: roleplay chat][Tone: very long messages with descriptions]";
+ if ((anchorTop != "" || charPersonality != "") && !is_pygmalion) {
+ if (anchorTop != "") charPersonality += " ";
+ item += "[" + charPersonality + anchorTop + "]\n";
+ }
+ }
+ if (
+ i >= arrMes.length - 1 &&
+ count_view_mes > 8 &&
+ $.trim(item).substr(0, (name1 + ":").length) == name1 + ":" &&
+ !is_pygmalion
+ ) {
+ //For add anchor in end
+ item = item.substr(0, item.length - 1);
+ //chatString+=postAnchor+"\n";//"[Writing style: very long messages]\n";
+ item = item + anchorBottom + "\n";
+ }
+ if (is_pygmalion) {
+ if (
+ i >= arrMes.length - 1 &&
+ $.trim(item).substr(0, (name1 + ":").length) == name1 + ":"
+ ) {
+ //for add name2 when user sent
+ item = item + name2 + ":";
+ }
+ if (
+ i >= arrMes.length - 1 &&
+ $.trim(item).substr(0, (name1 + ":").length) != name1 + ":"
+ ) {
+ //for add name2 when continue
+ if (textareaText == "") {
+ item = item + "\n" + name2 + ":";
+ }
+ }
+ if ($.trim(item).indexOf(name1) === 0) {
+ item = item.replace(name1 + ":", "You:");
+ }
+ }
+ mesSend[mesSend.length] = item;
+ //chatString = chatString+item;
+ });
+ }
+ //finalPromt +=chatString;
+ //console.log(storyString);
+
+ //console.log(encode(characters[this_chid].description+chatString).length);
+ //console.log(encode(JSON.stringify(characters[this_chid].description+chatString)).length);
+ if (type == "force_name2") {
+ finalPromt += name2 + ":";
+ }
+ //console.log(JSON.stringify(storyString));
+ //Send story string
+ var mesSendString = "";
+ var mesExmString = "";
+
+ function setPromtString() {
+ mesSendString = "";
+ mesExmString = "";
+ for (let j = 0; j < count_exm_add; j++) {
+ mesExmString += mesExamplesArray[j];
+ }
+ for (let j = 0; j < mesSend.length; j++) {
+ mesSendString += mesSend[j];
+ }
+ }
+
+ function checkPromtSize() {
+ setPromtString();
+ let thisPromtContextSize =
+ encode(
+ JSON.stringify(
+ worldInfoString +
+ storyString +
+ mesExmString +
+ mesSendString +
+ anchorTop +
+ anchorBottom +
+ charPersonality +
+ generatedPromtCache +
+ promptBias +
+ extension_prompt
+ )
+ ).length + 120;
+
+ if (thisPromtContextSize > this_max_context) {
+ //if the prepared prompt is larger than the max context size...
+
+ if (count_exm_add > 0) {
+ // ..and we have example mesages..
+ //console.log('Context size: '+thisPromtContextSize+' -- too big, removing example message');
+ //mesExamplesArray.length = mesExamplesArray.length-1;
+ count_exm_add--; // remove the example messages...
+ checkPromtSize(); // and try agin...
+ } else if (mesSend.length > 0) {
+ // if the chat history is longer than 0
+ //console.log('Context size: '+thisPromtContextSize+' -- too big, removing oldest chat message');
+ mesSend.shift(); // remove the first (oldest) chat entry..
+ checkPromtSize(); // and check size again..
+ } else {
+ //end
+ }
+ }
+ }
+
+ if (generatedPromtCache.length > 0) {
+ //console.log('Generated Prompt Cache length: '+generatedPromtCache.length);
+ checkPromtSize();
+ } else {
+ setPromtString();
+ }
+
+ if (!is_pygmalion) {
+ mesSendString =
+ "\nThen the roleplay chat between " +
+ name1 +
+ " and " +
+ name2 +
+ " begins.\n" +
+ mesSendString;
+ } else {
+ mesSendString = "\n" + mesSendString;
+ //mesSendString = mesSendString; //This edit simply removes the first "" that is prepended to all context prompts
+ }
+ finalPromt =
+ worldInfoBefore +
+ storyString +
+ worldInfoAfter +
+ extension_prompt +
+ mesExmString +
+ mesSendString +
+ generatedPromtCache +
+ promptBias;
+ finalPromt = finalPromt.replace(/\r/gm, "");
+
+ //if we aren't using the kobold GUI settings...
+ if (
+ main_api == "textgenerationwebui" ||
+ (main_api == "kobold" && preset_settings != "gui")
+ ) {
+ var this_settings =
+ koboldai_settings[koboldai_setting_names[preset_settings]];
+
+ var this_amount_gen = parseInt(amount_gen); // how many tokens the AI will be requested to generate
+ if (is_pygmalion) {
+ // if we are using a pygmalion model...
+ if (tokens_already_generated === 0) {
+ // if nothing has been generated yet..
+ if (parseInt(amount_gen) >= 50) {
+ // if the max gen setting is > 50...(
+ this_amount_gen = 50; // then only try to make 50 this cycle..
+ } else {
+ this_amount_gen = parseInt(amount_gen); // otherwise, make as much as the max amount request.
+ }
+ } else {
+ // if we already recieved some generated text...
+ if (
+ parseInt(amount_gen) - tokens_already_generated <
+ tokens_cycle_count
+ ) {
+ // if the remaining tokens to be made is less than next potential cycle count
+ this_amount_gen = parseInt(amount_gen) - tokens_already_generated; // subtract already generated amount from the desired max gen amount
+ } else {
+ this_amount_gen = tokens_cycle_count; // otherwise make the standard cycle amont (frist 50, and 30 after that)
+ }
+ }
+ }
+ }
+
+ var generate_data;
+ if (main_api == "kobold") {
+ var generate_data = {
+ prompt: finalPromt,
+ gui_settings: true,
+ max_length: amount_gen,
+ temperature: temp,
+ max_context_length: max_context,
+ };
+ if (preset_settings != "gui") {
+ generate_data = {
+ prompt: finalPromt,
+ gui_settings: false,
+ sampler_order: this_settings.sampler_order,
+ max_context_length: parseInt(max_context), //this_settings.max_length,
+ max_length: this_amount_gen, //parseInt(amount_gen),
+ rep_pen: parseFloat(rep_pen),
+ rep_pen_range: parseInt(rep_pen_size),
+ rep_pen_slope: this_settings.rep_pen_slope,
+ temperature: parseFloat(temp),
+ tfs: this_settings.tfs,
+ top_a: this_settings.top_a,
+ top_k: this_settings.top_k,
+ top_p: this_settings.top_p,
+ typical: this_settings.typical,
+ s1: this_settings.sampler_order[0],
+ s2: this_settings.sampler_order[1],
+ s3: this_settings.sampler_order[2],
+ s4: this_settings.sampler_order[3],
+ s5: this_settings.sampler_order[4],
+ s6: this_settings.sampler_order[5],
+ s7: this_settings.sampler_order[6],
+ use_world_info: false,
+ };
+ }
+ }
+
+ if (main_api == "textgenerationwebui") {
+ const doSample = textgenerationwebui_settings.penalty_alpha == 0;
+ var generate_data = {
+ data: [
+ finalPromt,
+ this_amount_gen, // min_length
+ doSample, // do_sample
+ textgenerationwebui_settings.temp, // temperature
+ textgenerationwebui_settings.top_p, // top_p
+ textgenerationwebui_settings.typical_p, // typical_p
+ textgenerationwebui_settings.rep_pen, // repetition_penalty
+ textgenerationwebui_settings.top_k, // top_k
+ 0, // min_length
+ textgenerationwebui_settings.rep_pen_size, // no_repeat_ngram_size
+ 1, // num_beams
+ textgenerationwebui_settings.penalty_alpha, // penalty_alpha
+ 1, // length_penalty
+ false, // early_stopping
+ name1, // name1
+ name2, // name2
+ "", // Context
+ true, // stop at newline
+ max_context, // Maximum prompt size in tokens
+ 1, // num attempts
+ ],
+ };
+ }
+
+ if (main_api == "novel") {
+ var this_settings =
+ novelai_settings[novelai_setting_names[preset_settings_novel]];
+ generate_data = {
+ input: finalPromt,
+ model: model_novel,
+ use_string: true,
+ temperature: parseFloat(temp_novel),
+ max_length: this_settings.max_length,
+ min_length: this_settings.min_length,
+ tail_free_sampling: this_settings.tail_free_sampling,
+ repetition_penalty: parseFloat(rep_pen_novel),
+ repetition_penalty_range: parseInt(rep_pen_size_novel),
+ repetition_penalty_frequency:
+ this_settings.repetition_penalty_frequency,
+ repetition_penalty_presence:
+ this_settings.repetition_penalty_presence,
+ //"stop_sequences": {{187}},
+ //bad_words_ids = {{50256}, {0}, {1}};
+ //generate_until_sentence = true;
+ use_cache: false,
+ //use_string = true;
+ return_full_text: false,
+ prefix: "vanilla",
+ order: this_settings.order,
+ };
+ }
+ var generate_url = "";
+ if (main_api == "kobold") {
+ generate_url = "/generate";
+ } else if (main_api == "textgenerationwebui") {
+ generate_url = "/generate_textgenerationwebui";
+ } else if (main_api == "novel") {
+ generate_url = "/generate_novelai";
+ }
jQuery.ajax({
- type: 'POST', //
- url: '/getstatus_novelai', //
- data: JSON.stringify(data),
+ type: "POST", //
+ url: generate_url, //
+ data: JSON.stringify(generate_data),
beforeSend: function () {
- //$('#create_button').attr('value','Creating...');
+ //$('#create_button').attr('value','Creating...');
},
cache: false,
dataType: "json",
contentType: "application/json",
success: function (data) {
+ tokens_already_generated += this_amount_gen; // add new gen amt to any prev gen counter..
-
- if (data.error != true) {
- //var settings2 = JSON.parse(data);
+ //console.log('Tokens requested in total: '+tokens_already_generated);
+ //$("#send_textarea").focus();
+ //$("#send_textarea").removeAttr('disabled');
+ is_send_press = false;
+ if (!data.error) {
//const getData = await response.json();
- novel_tier = data.tier;
- if (novel_tier == undefined) {
- online_status = 'no_connection';
+ var getMessage = "";
+ if (main_api == "kobold") {
+ getMessage = data.results[0].text;
+ } else if (main_api == "textgenerationwebui") {
+ getMessage = data.data[0];
+ if (getMessage == null || data.error) {
+ popup_type = "default";
+ callPopup(
+ "Got empty response from Text generation web UI. Try restarting the API with recommended options. "
+ );
+ return;
+ }
+ getMessage = getMessage.substring(finalPromt.length);
+ } else if (main_api == "novel") {
+ getMessage = data.output;
}
- if (novel_tier === 0) {
- online_status = "Paper";
+
+ if (collapse_newlines) {
+ getMessage = getMessage.replaceAll(/\n+/g, "\n");
}
- if (novel_tier === 1) {
- online_status = "Tablet";
+
+ //Pygmalion run again // to make it continue generating so long as it's under max_amount and hasn't signaled
+ // an end to the character's response via typing "You:" or adding ""
+ if (is_pygmalion) {
+ if_typing_text = false;
+ message_already_generated += getMessage;
+ promptBias = "";
+ //console.log('AI Response so far: '+message_already_generated);
+ if (
+ message_already_generated.indexOf("You:") === -1 && //if there is no 'You:' in the response msg
+ message_already_generated.indexOf("<|endoftext|>") === -1 && //if there is no stamp in the response msg
+ tokens_already_generated < parseInt(amount_gen) && //if the gen'd msg is less than the max response length..
+ getMessage.length > 0
+ ) {
+ //if we actually have gen'd text at all...
+ runGenerate(getMessage); //generate again with the 'GetMessage' argument..
+ return;
+ }
+
+ getMessage = message_already_generated;
}
- if (novel_tier === 2) {
- online_status = "Scroll";
+ //Formating
+ getMessage = $.trim(getMessage);
+ if (is_pygmalion) {
+ getMessage = getMessage.replace(new RegExp("", "g"), name1);
+ getMessage = getMessage.replace(new RegExp("", "g"), name2);
+ getMessage = getMessage.replace(
+ new RegExp("You:", "g"),
+ name1 + ":"
+ );
}
- if (novel_tier === 3) {
- online_status = "Opus";
+ if (getMessage.indexOf(name1 + ":") != -1) {
+ getMessage = getMessage.substr(
+ 0,
+ getMessage.indexOf(name1 + ":")
+ );
}
+ if (getMessage.indexOf("<|endoftext|>") != -1) {
+ getMessage = getMessage.substr(
+ 0,
+ getMessage.indexOf("<|endoftext|>")
+ );
+ }
+ // clean-up group message from excessive generations
+ if (type == "group_chat" && selected_group) {
+ const group = groups.find((x) => x.id == selected_group);
+
+ if (group && Array.isArray(group.members) && group.members) {
+ for (let member of group.members) {
+ // Skip current speaker.
+ if (member === name2) {
+ continue;
+ }
+
+ const indexOfMember = getMessage.indexOf(member + ":");
+ if (indexOfMember != -1) {
+ getMessage = getMessage.substr(0, indexOfMember);
+ }
+ }
+ }
+ }
+ let this_mes_is_name = true;
+ if (getMessage.indexOf(name2 + ":") === 0) {
+ getMessage = getMessage.replace(name2 + ":", "");
+ getMessage = getMessage.trimStart();
+ } else {
+ this_mes_is_name = false;
+ }
+ if (type === "force_name2") this_mes_is_name = true;
+ //getMessage = getMessage.replace(/^\s+/g, '');
+ if (getMessage.length > 0) {
+ chat[chat.length] = {};
+ chat[chat.length - 1]["name"] = name2;
+ chat[chat.length - 1]["is_user"] = false;
+ chat[chat.length - 1]["is_name"] = this_mes_is_name;
+ chat[chat.length - 1]["send_date"] = humanizedDateTime();
+ getMessage = $.trim(getMessage);
+ chat[chat.length - 1]["mes"] = getMessage;
+
+ if (type === "group_chat") {
+ let avatarImg = "img/fluffy.png";
+ if (characters[this_chid].avatar != "none") {
+ avatarImg = `characters/${characters[this_chid].avatar
+ }?${Date.now()}`;
+ }
+ chat[chat.length - 1]["is_name"] = true;
+ chat[chat.length - 1]["force_avatar"] = avatarImg;
+ }
+
+ addOneMessage(chat[chat.length - 1]);
+ $("#send_but").css("display", "inline");
+ $("#loading_mes").css("display", "none");
+
+ if (type == "group_chat" && selected_group) {
+ saveGroupChat(selected_group);
+ } else {
+ saveChat();
+ }
+ //console.log('/savechat called by /Generate');
+ //let final_message_length = encode(JSON.stringify(getMessage)).length;
+ //console.log('AI Response: +'+getMessage+ '('+final_message_length+' tokens)');
+ } else {
+ Generate("force_name2");
+ }
+ } else {
+ $("#send_but").css("display", "inline");
+ $("#loading_mes").css("display", "none");
}
- resultCheckStatusNovel();
},
error: function (jqXHR, exception) {
- online_status = 'no_connection';
+ $("#send_textarea").removeAttr("disabled");
+ is_send_press = false;
+ $("#send_but").css("display", "inline");
+ $("#loading_mes").css("display", "none");
console.log(exception);
console.log(jqXHR);
- resultCheckStatusNovel();
- }
+ },
});
+ }
+ } else {
+ if (this_chid == undefined || this_chid == "invalid-safety-id") {
+ //send ch sel
+ popup_type = "char_not_selected";
+ callPopup("Сharacter is not selected ");
+ }
+ is_send_press = false;
+ }
+}
+
+async function saveChat() {
+ chat.forEach(function (item, i) {
+ if (item["is_user"]) {
+ var str = item["mes"].replace(name1 + ":", default_user_name + ":");
+ chat[i]["mes"] = str;
+ chat[i]["name"] = default_user_name;
+ }
+ });
+ var save_chat = [
+ {
+ user_name: default_user_name,
+ character_name: name2,
+ create_date: chat_create_date,
+ },
+ ...chat,
+ ];
+ jQuery.ajax({
+ type: "POST",
+ url: "/savechat",
+ data: JSON.stringify({
+ ch_name: characters[this_chid].name,
+ file_name: characters[this_chid].chat,
+ chat: save_chat,
+ avatar_url: characters[this_chid].avatar,
+ }),
+ beforeSend: function () {
+ //$('#create_button').attr('value','Creating...');
+ },
+ cache: false,
+ dataType: "json",
+ contentType: "application/json",
+ success: function (data) { },
+ error: function (jqXHR, exception) {
+ console.log(exception);
+ console.log(jqXHR);
+ },
+ });
+}
+
+async function getChat() {
+ console.log("/getchat -- entered for -- " + characters[this_chid].name);
+ jQuery.ajax({
+ type: "POST",
+ url: "/getchat",
+ data: JSON.stringify({
+ ch_name: characters[this_chid].name,
+ file_name: characters[this_chid].chat,
+ avatar_url: characters[this_chid].avatar,
+ }),
+ beforeSend: function () {
+ //$('#create_button').attr('value','Creating...');
+ },
+ cache: false,
+ dataType: "json",
+ contentType: "application/json",
+ success: function (data) {
+ //console.log(data);
+ //chat.length = 0;
+ if (data[0] !== undefined) {
+ for (let key in data) {
+ chat.push(data[key]);
+ }
+ //chat = data;
+ chat_create_date = chat[0]["create_date"];
+ //console.log('/getchat saw chat_create_date: '+chat_create_date);
+ chat.shift();
+ } else {
+ chat_create_date = humanizedDateTime();
+ }
+ //console.log(chat);
+ getChatResult();
+ saveChat();
+ },
+ error: function (jqXHR, exception) {
+ getChatResult();
+ console.log(exception);
+ console.log(jqXHR);
+ },
+ });
+}
+function getChatResult() {
+ name2 = characters[this_chid].name;
+ if (chat.length > 1) {
+ chat.forEach(function (item, i) {
+ if (item["is_user"]) {
+ var str = item["mes"].replace(default_user_name + ":", name1 + ":");
+ chat[i]["mes"] = str;
+ chat[i]["name"] = name1;
+ }
+ });
+ } else {
+ //console.log(characters[this_chid].first_mes);
+ chat[0] = {};
+ chat[0]["name"] = name2;
+ chat[0]["is_user"] = false;
+ chat[0]["is_name"] = true;
+ chat[0]["send_date"] = humanizedDateTime();
+ if (characters[this_chid].first_mes != "") {
+ chat[0]["mes"] = characters[this_chid].first_mes;
} else {
- if (is_get_status != true) {
- online_status = 'no_connection';
+ chat[0]["mes"] = default_ch_mes;
+ }
+ }
+ printMessages();
+ select_selected_character(this_chid);
+}
+async function generateGroupWrapper(by_auto_mode) {
+ if (online_status === "no_connection") {
+ is_group_generating = false;
+ is_send_press = false;
+ return;
+ }
+
+ const group = groups.find((x) => x.id === selected_group);
+
+ if (!group || !Array.isArray(group.members) || !group.members.length) {
+ sendSystemMessage(system_message_types.EMPTY);
+ return;
+ }
+
+ try {
+ is_group_generating = true;
+ this_chid = undefined;
+ name2 = "";
+ const userInput = $("#send_textarea").val();
+
+ let typingIndicator = $("#chat .typing_indicator");
+
+ if (typingIndicator.length === 0) {
+ typingIndicator = $(
+ "#typing_indicator_template .typing_indicator"
+ ).clone();
+ typingIndicator.hide();
+ $("#chat").append(typingIndicator);
+ }
+
+ let messagesBefore = chat.length;
+ let activationText = "";
+ if (userInput && userInput.length && !by_auto_mode) {
+ activationText = userInput;
+ messagesBefore++;
+ } else {
+ const lastMessage = chat[chat.length - 1];
+ if (lastMessage && !lastMessage.is_system) {
+ activationText = lastMessage.mes;
+ }
+ }
+
+ const activatedMembers = activateMembers(group.members, activationText);
+ // now the real generation begins: cycle through every character
+ for (const chId of activatedMembers) {
+ this_chid = chId;
+ name2 = characters[chId].name;
+
+ await Generate("group_chat", by_auto_mode);
+
+ // update indicator and scroll down
+ typingIndicator
+ .find(".typing_indicator_name")
+ .text(characters[chId].name);
+ $("#chat").append(typingIndicator);
+ typingIndicator.show(250, function () {
+ typingIndicator.get(0).scrollIntoView({ behavior: "smooth" });
+ });
+
+ while (true) {
+ // check if message generated already
+ if (chat.length == messagesBefore) {
+ await delay(10);
+ } else {
+ messagesBefore++;
+ break;
+ }
+ }
+
+ // hide and reapply the indicator to the bottom of the list
+ typingIndicator.hide(250);
+ $("#chat").append(typingIndicator);
+ }
+ } finally {
+ is_group_generating = false;
+ is_send_press = false;
+ this_chid = undefined;
+ }
+}
+function activateMembers(members, input) {
+ let activatedNames = [];
+
+ // find mentions
+ if (input && input.length) {
+ for (let inputWord of extractAllWords(input)) {
+ for (let member of members) {
+ if (extractAllWords(member).includes(inputWord)) {
+ activatedNames.push(member);
+ break;
+ }
}
}
}
- 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;
- }
+ // activation by talkativeness (in shuffled order)
+ const shuffledMembers = shuffle([...members]);
+ for (let member of shuffledMembers) {
+ const character = characters.find((x) => x.name === member);
- if (v1parts[i] === v2parts[i]) {
- continue;
+ if (!character) {
+ continue;
+ }
+
+ const rollValue = Math.random();
+ let talkativeness = Number(character.talkativeness);
+ talkativeness = Number.isNaN(talkativeness)
+ ? talkativeness_default
+ : talkativeness;
+ if (talkativeness >= rollValue) {
+ activatedNames.push(member);
+ }
+ }
+
+ // pick 1 at random if no one was activated
+ if (activatedNames.length === 0) {
+ const randomIndex = Math.floor(Math.random() * members.length);
+ activatedNames.push(members[randomIndex]);
+ }
+
+ // de-duplicate array of names
+ activatedNames = activatedNames.filter(onlyUnique);
+
+ // map to character ids
+ const memberIds = activatedNames
+ .map((x) => characters.findIndex((y) => y.name === x))
+ .filter((x) => x !== -1);
+ return memberIds;
+}
+function extractAllWords(value) {
+ const words = [];
+
+ if (!value) {
+ return words;
+ }
+
+ const matches = value.matchAll(/\b\w+\b/gim);
+ for (let match of matches) {
+ words.push(match[0].toLowerCase());
+ }
+ return words;
+}
+
+// Group chats
+async function getGroupChat(id) {
+ const response = await fetch("/getgroupchat", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ id: id }),
+ });
+
+ if (response.ok) {
+ const data = await response.json();
+ if (Array.isArray(data) && data.length) {
+ for (let key of data) {
+ chat.push(key);
}
- if (v1parts[i] > v2parts[i]) {
- return 1;
- }
- else {
- return -1;
+ printMessages();
+ } else {
+ sendSystemMessage(system_message_types.GROUP);
+ const group = groups.find((x) => x.id === id);
+ if (group && Array.isArray(group.members)) {
+ for (let name of group.members) {
+ const character = characters.find((x) => x.name === name);
+
+ if (!character) {
+ continue;
+ }
+
+ const mes = {};
+ mes["is_user"] = false;
+ mes["is_system"] = false;
+ mes["name"] = character.name;
+ mes["is_name"] = true;
+ mes["send_date"] = humanizedDateTime();
+ mes["mes"] = character.first_mes
+ ? substituteParams(character.first_mes.trim())
+ : (mes["mes"] = default_ch_mes);
+ mes["force_avatar"] =
+ character.avatar != "none"
+ ? `characters/${character.avatar}?${Date.now()}`
+ : "img/fluffy.png";
+ chat.push(mes);
+ addOneMessage(mes);
+ }
}
}
- if (v1parts.length != v2parts.length) {
+ await saveGroupChat(id);
+ }
+}
+
+async function saveGroupChat(id) {
+ const response = await fetch("/savegroupchat", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ id: id, chat: [...chat] }),
+ });
+}
+
+async function getGroups() {
+ const response = await fetch("/getgroups", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ });
+
+ if (response.ok) {
+ const data = await response.json();
+ groups = data.sort((a, b) => a.id - b.id);
+ }
+}
+
+async function deleteGroup(id) {
+ const response = await fetch("/deletegroup", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ id: id }),
+ });
+
+ if (response.ok) {
+ active_character = "invalid-safety-id"; //unsets the chid in settings (this prevents AutoLoadChat from trying to load the wrong ChID
+ this_chid = "invalid-safety-id"; //unsets expected chid before reloading (related to getCharacters/printCharacters from using old arrays)
+ selected_group = null;
+ characters.length = 0; // resets the characters array, forcing getcharacters to reset
+ name2 = "Chloe"; // replaces deleted charcter name with Chloe, since she wil be displayed next.
+ chat = [...safetychat]; // sets up chloe to tell user about having deleted a character
+
+ /* QuickRefresh(); */
+ $("#rm_info_avatar").html("");
+ $("#rm_info_block").transition({ opacity: 0, duration: 0 });
+ select_rm_info("Group deleted!");
+ $("#rm_info_block").transition({ opacity: 1.0, duration: 2000 });
+ }
+}
+
+async function editGroup(id, immediately) {
+ const group = groups.find((x) => x.id == id);
+
+ if (!group) {
+ return;
+ }
+
+ async function _save() {
+ const response = await fetch("/editgroup", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify(group),
+ });
+ }
+
+ if (immediately) {
+ return await _save();
+ }
+
+ clearTimeout(timerGroupSave);
+ timerGroupSave = setTimeout(async () => await _save(), durationSaveEdit);
+}
+
+async function groupChatAutoModeWorker() {
+ if (!is_group_automode_enabled || online_status === "no_connection") {
+ return;
+ }
+
+ if (!selected_group || is_send_press || is_group_generating) {
+ return;
+ }
+
+ const group = groups.find((x) => x.id === selected_group);
+
+ if (!group || !Array.isArray(group.members) || !group.members.length) {
+ return;
+ }
+
+ await generateGroupWrapper(true);
+}
+
+function select_group_chats(chat_id) {
+ menu_type = "group_chats";
+ const group = chat_id && groups.find((x) => x.id == chat_id);
+ const groupName = group?.name ?? "";
+
+ $("#rm_group_chat_name").val(groupName);
+ $("#rm_group_chat_name").off();
+ $("#rm_group_chat_name").on("input", async function () {
+ if (chat_id) {
+ group.name = $(this).val();
+ await editGroup(chat_id);
+ }
+ });
+ $("#rm_group_filter").val("").trigger("input");
+ $("#rm_group_chats_block").css("display", "flex");
+ $("#rm_group_chats_block").css("opacity", 0.0);
+ $("#rm_group_chats_block").transition({
+ opacity: 1.0,
+ duration: animation_rm_duration,
+ easing: animation_rm_easing,
+ complete: function () { },
+ });
+
+ $("#rm_ch_create_block").css("display", "none");
+ $("#rm_characters_block").css("display", "none");
+
+ async function memberClickHandler(event) {
+ event.stopPropagation();
+ const id = $(this).data("id");
+ const isDelete = !!$(this).closest("#rm_group_members").length;
+ const template = $(this).clone();
+ template.data("id", id);
+ template.click(memberClickHandler);
+
+ if (isDelete) {
+ template.find(".plus").show();
+ template.find(".minus").hide();
+ $("#rm_group_add_members").prepend(template);
+ } else {
+ template.find(".plus").hide();
+ template.find(".minus").show();
+ $("#rm_group_members").prepend(template);
+ }
+
+ if (group) {
+ if (isDelete) {
+ const index = group.members.findIndex((x) => x === id);
+ if (index !== -1) {
+ group.members.splice(index, 1);
+ }
+ } else {
+ group.members.push(id);
+ }
+ await editGroup(chat_id);
+ updateGroupAvatar(group);
+ }
+
+ $(this).remove();
+ const groupHasMembers = !!$("#rm_group_members").children().length;
+ $("#rm_group_submit").prop("disabled", !groupHasMembers);
+ }
+
+ // render characters list
+ $("#rm_group_add_members").empty();
+ $("#rm_group_members").empty();
+ for (let character of characters) {
+ const avatar =
+ character.avatar != "none"
+ ? `characters/${character.avatar}#${Date.now()}`
+ : default_avatar;
+ const template = $("#group_member_template .group_member").clone();
+ template.data("id", character.name);
+ template.find(".avatar img").attr("src", avatar);
+ template.find(".ch_name").html(character.name);
+ template.click(memberClickHandler);
+
+ if (
+ group &&
+ Array.isArray(group.members) &&
+ group.members.includes(character.name)
+ ) {
+ template.find(".plus").hide();
+ template.find(".minus").show();
+ $("#rm_group_members").append(template);
+ } else {
+ template.find(".plus").show();
+ template.find(".minus").hide();
+ $("#rm_group_add_members").append(template);
+ }
+ }
+
+ const groupHasMembers = !!$("#rm_group_members").children().length;
+ $("#rm_group_submit").prop("disabled", !groupHasMembers);
+
+ // bottom buttons
+ if (chat_id) {
+ $("#rm_group_submit").hide();
+ $("#rm_group_delete").show();
+ } else {
+ $("#rm_group_submit").show();
+ $("#rm_group_delete").hide();
+ }
+
+ $("#rm_group_delete").off();
+ $("#rm_group_delete").on("click", function () {
+ popup_type = "del_group";
+ $("#dialogue_popup").data("group_id", chat_id);
+ callPopup("Delete the group? ");
+ });
+
+ // top bar
+ if (group) {
+ var display_name = groupName;
+ $("#rm_button_selected_ch").children("h2").css(deselected_button_style);
+ $("#rm_button_selected_ch").children("h2").text("");
+ }
+}
+function openNavToggle() {
+ if (!$("#nav-toggle").prop("checked")) {
+ $("#nav-toggle").trigger("click");
+ }
+}
+function changeMainAPI() {
+ if ($("#main_api").find(":selected").val() == "kobold") {
+ $("#kobold_api").css("display", "block");
+ $("#novel_api").css("display", "none");
+ $("#textgenerationwebui_api").css("display", "none");
+ main_api = "kobold";
+ $("#max_context_block").css("display", "block");
+ $("#amount_gen_block").css("display", "block");
+ $("#softprompt_block").css("display", "block");
+ $("#settings_perset").trigger("change");
+ }
+ if ($("#main_api").find(":selected").val() == "textgenerationwebui") {
+ $("#kobold_api").css("display", "none");
+ $("#novel_api").css("display", "none");
+ $("#textgenerationwebui_api").css("display", "block");
+ main_api = "textgenerationwebui";
+ $("#max_context_block").css("display", "block");
+ $("#amount_gen_block").css("display", "block");
+ $("#softprompt_block").css("display", "block");
+ $("#amount_gen_block").children().prop("disabled", false);
+ $("#amount_gen_block").css("opacity", 1.0);
+ }
+
+ if ($("#main_api").find(":selected").val() == "novel") {
+ $("#kobold_api").css("display", "none");
+ $("#novel_api").css("display", "block");
+ $("#textgenerationwebui_api").css("display", "none");
+ main_api = "novel";
+ $("#max_context_block").css("display", "none");
+ $("#amount_gen_block").css("display", "none");
+ $("#softprompt_block").css("display", "none");
+ }
+}
+async function getUserAvatars() {
+ $("#user_avatar_block").html(""); //RossAscends: necessary to avoid doubling avatars each QuickRefresh.
+ $("#user_avatar_block").append('+
');
+ const response = await fetch("/getuseravatars", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({
+ "": "",
+ }),
+ });
+ if (response.ok === true) {
+ const getData = await response.json();
+ //background = getData;
+ //console.log(getData.length);
+
+ for (var i = 0; i < getData.length; i++) {
+ //console.log(1);
+ appendUserAvatar(getData[i]);
+ }
+ //var aa = JSON.parse(getData[0]);
+ //const load_ch_coint = Object.getOwnPropertyNames(getData);
+ }
+}
+
+function highlightSelectedAvatar() {
+ $("#user_avatar_block").find(".avatar").removeClass("selected");
+ $("#user_avatar_block")
+ .find(`.avatar[imgfile='${user_avatar}']`)
+ .addClass("selected");
+}
+
+function appendUserAvatar(name) {
+ const block = $("#user_avatar_block").append(
+ ''
+ );
+ 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;
+ if (settings.world_info_depth !== undefined)
+ world_info_depth = Number(settings.world_info_depth);
+ if (settings.world_info_budget !== undefined)
+ world_info_budget = Number(settings.world_info_budget);
+
+ //load poweruser options
+ if (settings.auto_connect !== undefined)
+ auto_connect = !!settings.auto_connect;
+ if (settings.auto_load_chat !== undefined)
+ auto_load_chat = !!settings.auto_load_chat;
+
+ 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"
+ );
+
+ $("#auto-connect-checkbox").prop("checked", auto_connect);
+ $("#auto-load-chat-checkbox").prop("checked", auto_load_chat);
+
+ $("#max_context").val(max_context);
+ $("#max_context_counter").html(max_context + " Tokens");
+
+ $("#amount_gen").val(amount_gen);
+ $("#amount_gen_counter").html(amount_gen + " Tokens");
+
+ $("#world_info_depth_counter").html(`${world_info_depth} Messages`);
+ $("#world_info_depth").val(world_info_depth);
+
+ $("#world_info_budget_counter").html(`${world_info_budget} Tokens`);
+ $("#world_info_budget").val(world_info_budget);
+
+ 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");
+
+ //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")
+ .trigger("change");
+ } 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);
+
+ // world info settings
+ world_names = data.world_names?.length ? data.world_names : [];
+
+ if (settings.world_info != undefined) {
+ if (world_names.includes(settings.world_info)) {
+ world_info = settings.world_info;
+ }
+ }
+
+ world_names.forEach((item, i) => {
+ $("#world_info").append(`
${item} `);
+ // preselect world if saved
+ if (item == world_info) {
+ $("#world_info").val(i).change();
+ }
+ });
+ // end world info settings
+
+ if (data.enable_extensions) {
+ const src = "scripts/extensions.js";
+ if ($(`script[src="${src}"]`).length === 0) {
+ const script = document.createElement("script");
+ script.type = "text/javascript";
+ 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);
+ },
+ });
+
+ collapse_newlines =
+ localStorage.getItem(storage_keys.collapse_newlines) == "true";
+ $("#collapse-newlines-checkbox").prop("checked", collapse_newlines);
+}
+
+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,
+ auto_connect: auto_connect,
+ auto_load_chat: auto_load_chat,
+ 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,
+ }),
+ 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);
+ },
+ });
+
+ localStorage.setItem(storage_keys.collapse_newlines, collapse_newlines);
+}
+
+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;
}
-
- return 0;
}
- function select_rm_info(text, charId = null) {
- $("#rm_characters_block").css("display", "none");
- $("#rm_api_block").css("display", "none");
- $("#rm_ch_create_block").css("display", "none");
- $("#rm_group_chats_block").css("display", "none");
- $("#rm_info_block").css("display", "flex");
- $("#rm_info_text").html('
' + text + ' ');
-
- $("#rm_button_characters").css("class", "deselected-right-tab");
- $("#rm_button_settings").css("class", "deselected-right-tab");
- $("#rm_button_selected_ch").css("class", "deselected-right-tab");
-
- prev_selected_char = charId;
+ if (v1parts.length != v2parts.length) {
+ return -1;
}
- 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");
- $("#rm_button_selected_ch").css("class", "selected-right-tab");
- var display_name = characters[chid].name;
+ return 0;
+}
- $("#rm_button_selected_ch").children("h2").text(display_name);
+function select_rm_info(text, charId = null) {
+ $("#rm_characters_block").css("display", "none");
+ $("#rm_api_block").css("display", "none");
+ $("#rm_ch_create_block").css("display", "none");
+ $("#rm_group_chats_block").css("display", "none");
+ $("#rm_info_block").css("display", "flex");
- //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");
- var i = 0;
- while ($("#rm_button_selected_ch").width() > 170 && i < 100) {
- display_name = display_name.slice(0, display_name.length - 2);
- //console.log(display_name);
- $("#rm_button_selected_ch").children("h2").text($.trim(display_name) + '...');
- i++;
- }
- $("#add_avatar_button").val('');
+ $("#rm_info_text").html("
" + text + " ");
- $('#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");
+ $("#rm_button_characters").css("class", "deselected-right-tab");
+ $("#rm_button_settings").css("class", "deselected-right-tab");
+ $("#rm_button_selected_ch").css("class", "deselected-right-tab");
- $("#form_create").attr("actiontype", "editcharacter");
- active_character = chid;
- //console.log('select_selected_character() -- active_character -- '+chid+'(ChID of '+display_name+')');
- saveSettings();
- //console.log('select_selected_character() -- called saveSettings() to save -- active_character -- '+active_character+'(ChID of '+display_name+')');
+ 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");
+ $("#rm_button_selected_ch").css("class", "selected-right-tab");
+ 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");
+ var i = 0;
+ while ($("#rm_button_selected_ch").width() > 170 && i < 100) {
+ display_name = display_name.slice(0, display_name.length - 2);
+ //console.log(display_name);
+ $("#rm_button_selected_ch")
+ .children("h2")
+ .text($.trim(display_name) + "...");
+ i++;
}
- function select_rm_create() {
- menu_type = 'create';
+ $("#add_avatar_button").val("");
- //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));
- }
+ $("#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+')');
+ saveSettings();
+ //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));
}
+ }
- $("#rm_characters_block").css("display", "none");
- $("#rm_api_block").css("display", "none");
- $("#rm_ch_create_block").css("display", "block");
- $("#rm_group_chats_block").css("display", "none");
+ $("#rm_characters_block").css("display", "none");
+ $("#rm_api_block").css("display", "none");
+ $("#rm_ch_create_block").css("display", "block");
+ $("#rm_group_chats_block").css("display", "none");
- $('#rm_ch_create_block').css('opacity', 0.0);
- $('#rm_ch_create_block').transition({
- opacity: 1.0,
- duration: animation_rm_duration,
- easing: animation_rm_easing,
- complete: function () { }
+ $("#rm_ch_create_block").css("opacity", 0.0);
+ $("#rm_ch_create_block").transition({
+ opacity: 1.0,
+ duration: animation_rm_duration,
+ easing: animation_rm_easing,
+ complete: function () { },
+ });
+ $("#rm_info_block").css("display", "none");
+
+ $("#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(' ');
+ $("#rm_button_characters").css("class", "deselected-right-tab");
+ $("#rm_button_settings").css("class", "deselected-right-tab");
+ $("#rm_button_selected_ch").css("class", "deselected-right-tab");
+
+ //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() {
+ /* QuickRefresh(true); */
+
+ 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";
+ $("#rm_characters_block").css("display", "block");
+ $("#rm_characters_block").css("opacity", 0.0);
+ $("#rm_characters_block").transition({
+ opacity: 1.0,
+ duration: animation_rm_duration,
+ easing: animation_rm_easing,
+ complete: function () { },
+ });
+
+ $("#rm_api_block").css("display", "none");
+ $("#rm_ch_create_block").css("display", "none");
+ $("#rm_info_block").css("display", "none");
+ $("#rm_group_chats_block").css("display", "none");
+
+ $("#rm_button_characters").css("class", "selected-right-tab");
+ $("#rm_button_settings").css("class", "deselected-right-tab");
+ $("#rm_button_selected_ch").css("class", "deselected-right-tab");
+}
+
+/// UTILS
+function onlyUnique(value, index, array) {
+ return array.indexOf(value) === index;
+}
+
+function shuffle(array) {
+ let currentIndex = array.length,
+ randomIndex;
+
+ while (currentIndex != 0) {
+ randomIndex = Math.floor(Math.random() * currentIndex);
+ currentIndex--;
+ [array[currentIndex], array[randomIndex]] = [
+ array[randomIndex],
+ array[currentIndex],
+ ];
+ }
+ return array;
+}
+
+function setExtensionPrompt(key, value) {
+ extension_prompts[key] = value;
+}
+
+async function updateWorldInfoList(importedWorldName) {
+ var result = await fetch("/getsettings", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({}),
+ });
+
+ if (result.ok) {
+ var data = await result.json();
+ world_names = data.world_names?.length ? data.world_names : [];
+ $("#world_info").find('option[value!="None"]').remove();
+
+ world_names.forEach((item, i) => {
+ $("#world_info").append(`${item} `);
});
- $("#rm_info_block").css("display", "none");
- $("#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(' ');
- $("#rm_button_characters").css("class", "deselected-right-tab");
- $("#rm_button_settings").css("class", "deselected-right-tab");
- $("#rm_button_selected_ch").css("class", "deselected-right-tab");
+ if (importedWorldName) {
+ const indexOf = world_names.indexOf(world_info);
+ $("#world_info").val(indexOf);
- //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('');
+ popup_type = "world_imported";
+ callPopup("World imported successfully! Select it now? ");
+ }
+ }
+}
+
+function download(content, fileName, contentType) {
+ var a = document.createElement("a");
+ var file = new Blob([content], { type: contentType });
+ a.href = URL.createObjectURL(file);
+ a.download = fileName;
+ a.click();
+}
+
+// World Info Editor
+async function showWorldEditor() {
+ if (!world_info) {
+ popup_type = "default";
+ callPopup("Select a world info first! ");
+ return;
+ }
+
+ is_world_edit_open = true;
+ $("#world_popup_name").val(world_info);
+ $("#world_popup").css("display", "flex");
+ await loadWorldInfoData();
+ displayWorldEntries(world_info_data);
+}
+
+async function loadWorldInfoData() {
+ if (!world_info) {
+ return;
+ }
+
+ const response = await fetch("/getworldinfo", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ name: world_info }),
+ });
+
+ if (response.ok) {
+ world_info_data = await response.json();
+ }
+}
+
+function hideWorldEditor() {
+ is_world_edit_open = false;
+ $("#world_popup").css("display", "none");
+}
+
+function displayWorldEntries(data) {
+ $("#world_popup_entries_list").empty();
+
+ if (!data || !("entries" in data)) {
+ return;
+ }
+
+ for (const entryUid in data.entries) {
+ const entry = data.entries[entryUid];
+ appendWorldEntry(entry);
+ }
+}
+
+function appendWorldEntry(entry) {
+ const template = $("#entry_edit_template .world_entry").clone();
+ template.data("uid", entry.uid);
+
+ // key
+ const keyInput = template.find('textarea[name="key"]');
+ keyInput.data("uid", entry.uid);
+ keyInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = $(this).val();
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop("scrollHeight") + "px");
+ world_info_data.entries[uid].key = value
+ .split(",")
+ .map((x) => x.trim())
+ .filter((x) => x);
+ saveWorldInfo();
+ });
+ keyInput.val(entry.key.join(",")).trigger("input");
+ keyInput.css("height", ""); //reset the height
+ keyInput.css("height", $(this).prop("scrollHeight") + "px");
+
+ // keysecondary
+ const keySecondaryInput = template.find('textarea[name="keysecondary"]');
+ keySecondaryInput.data("uid", entry.uid);
+ keySecondaryInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = $(this).val();
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop("scrollHeight") + "px");
+ world_info_data.entries[uid].keysecondary = value
+ .split(",")
+ .map((x) => x.trim())
+ .filter((x) => x);
+ saveWorldInfo();
+ });
+ keySecondaryInput.val(entry.keysecondary.join(",")).trigger("input");
+ keySecondaryInput.css("height", ""); //reset the height
+ keySecondaryInput.css("height", $(this).prop("scrollHeight") + "px");
+
+ // comment
+ const commentInput = template.find('textarea[name="comment"]');
+ commentInput.data("uid", entry.uid);
+ commentInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = $(this).val();
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop("scrollHeight") + "px");
+ world_info_data.entries[uid].comment = value;
+ saveWorldInfo();
+ });
+ commentInput.val(entry.comment).trigger("input");
+ commentInput.css("height", ""); //reset the height
+ commentInput.css("height", $(this).prop("scrollHeight") + "px");
+
+ // content
+ const contentInput = template.find('textarea[name="content"]');
+ contentInput.data("uid", entry.uid);
+ contentInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = $(this).val();
+ world_info_data.entries[uid].content = value;
+ $(this).css("height", ""); //reset the height
+ $(this).css("height", $(this).prop("scrollHeight") + "px");
+ saveWorldInfo();
+
+ // count tokens
+ const numberOfTokens = encode(value).length;
+ $(this)
+ .closest(".world_entry")
+ .find(".world_entry_form_token_counter")
+ .html(numberOfTokens);
+ });
+ contentInput.val(entry.content).trigger("input");
+ contentInput.css("height", ""); //reset the height
+ contentInput.css("height", $(this).prop("scrollHeight") + "px");
+
+ // selective
+ const selectiveInput = template.find('input[name="selective"]');
+ selectiveInput.data("uid", entry.uid);
+ selectiveInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = $(this).prop("checked");
+ world_info_data.entries[uid].selective = value;
+ saveWorldInfo();
+
+ const keysecondary = $(this)
+ .closest(".world_entry")
+ .find(".keysecondary");
+ value ? keysecondary.show() : keysecondary.hide();
+ });
+ selectiveInput.prop("checked", entry.selective).trigger("input");
+ selectiveInput.siblings(".checkbox_fancy").click(function () {
+ $(this).siblings("input").click();
+ });
+
+ // constant
+ const constantInput = template.find('input[name="constant"]');
+ constantInput.data("uid", entry.uid);
+ constantInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = $(this).prop("checked");
+ world_info_data.entries[uid].constant = value;
+ saveWorldInfo();
+ });
+ constantInput.prop("checked", entry.constant).trigger("input");
+ constantInput.siblings(".checkbox_fancy").click(function () {
+ $(this).siblings("input").click();
+ });
+
+ // order
+ const orderInput = template.find('input[name="order"]');
+ orderInput.data("uid", entry.uid);
+ orderInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = Number($(this).val());
+
+ world_info_data.entries[uid].order = !isNaN(value) ? value : 0;
+ saveWorldInfo();
+ });
+ orderInput.val(entry.order).trigger("input");
+
+ // position
+ if (entry.position === undefined) {
+ entry.position = 0;
+ }
+
+ const positionInput = template.find('input[name="position"]');
+ positionInput.data("uid", entry.uid);
+ positionInput.on("input", function () {
+ const uid = $(this).data("uid");
+ const value = Number($(this).val());
+ world_info_data.entries[uid].position = !isNaN(value) ? value : 0;
+ saveWorldInfo();
+ });
+ template
+ .find(`input[name="position"][value=${entry.position}]`)
+ .prop("checked", true)
+ .trigger("input");
+
+ // display uid
+ template.find(".world_entry_form_uid_value").html(entry.uid);
+
+ // delete button
+ const deleteButton = template.find("input.delete_entry_button");
+ deleteButton.data("uid", entry.uid);
+ deleteButton.on("click", function () {
+ const uid = $(this).data("uid");
+ deleteWorldInfoEntry(uid);
+ $(this).closest(".world_entry").remove();
+ saveWorldInfo();
+ });
+
+ template.appendTo("#world_popup_entries_list");
+ return template;
+}
+
+async function deleteWorldInfoEntry(uid) {
+ if (!world_info_data || !("entries" in world_info_data)) {
+ return;
+ }
+
+ delete world_info_data.entries[uid];
+}
+
+function createWorldInfoEntry() {
+ const newEntryTemplate = {
+ key: [],
+ keysecondary: [],
+ comment: "",
+ content: "",
+ constant: false,
+ selective: false,
+ order: 100,
+ position: 0,
+ };
+ const newUid = getFreeWorldEntryUid();
+
+ if (!Number.isInteger(newUid)) {
+ console.error("Couldn't assign UID to a new entry");
+ return;
+ }
+
+ const newEntry = { uid: newUid, ...newEntryTemplate };
+ world_info_data.entries[newUid] = newEntry;
+
+ const entryTemplate = appendWorldEntry(newEntry);
+ entryTemplate.get(0).scrollIntoView({ behavior: "smooth" });
+}
+
+async function saveWorldInfo(immediately) {
+ if (!world_info || !world_info_data) {
+ return;
+ }
+
+ async function _save() {
+ const response = await fetch("/editworldinfo", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ name: world_info, data: world_info_data }),
+ });
+ }
+
+ if (immediately) {
+ return await _save();
+ }
+
+ clearTimeout(timerWorldSave);
+ timerWorldSave = setTimeout(async () => await _save(), durationSaveEdit);
+}
+
+async function renameWorldInfo() {
+ const oldName = world_info;
+ const newName = $("#world_popup_name").val();
+
+ if (oldName === newName) {
+ return;
+ }
+
+ world_info = newName;
+ await saveWorldInfo(true);
+ await deleteWorldInfo(oldName, newName);
+}
+
+async function deleteWorldInfo(worldInfoName, selectWorldName) {
+ if (!world_names.includes(worldInfoName)) {
+ return;
+ }
+
+ const response = await fetch("/deleteworldinfo", {
+ method: "POST",
+ headers: {
+ "Content-Type": "application/json",
+ "X-CSRF-Token": token,
+ },
+ body: JSON.stringify({ name: worldInfoName }),
+ });
+
+ if (response.ok) {
+ await updateWorldInfoList();
+
+ const selectedIndex = world_names.indexOf(selectWorldName);
+ if (selectedIndex !== -1) {
+ $("#world_info").val(selectedIndex).change();
} 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() {
- /* QuickRefresh(true); */
-
- if (prev_selected_char) {
- let newChId = characters.findIndex(x => x.name == prev_selected_char);
- $(`.character_select[chid="${newChId}"]`).trigger('click');
- prev_selected_char = null;
+ $("#world_info").val("None").change();
}
- menu_type = 'characters';
- $("#rm_characters_block").css("display", "block");
- $('#rm_characters_block').css('opacity', 0.0);
- $('#rm_characters_block').transition({
- opacity: 1.0,
- duration: animation_rm_duration,
- easing: animation_rm_easing,
- complete: function () { }
- });
-
- $("#rm_api_block").css("display", "none");
- $("#rm_ch_create_block").css("display", "none");
- $("#rm_info_block").css("display", "none");
- $("#rm_group_chats_block").css("display", "none");
-
- $("#rm_button_characters").css("class", "selected-right-tab");
- $("#rm_button_settings").css("class", "deselected-right-tab");
- $("#rm_button_selected_ch").css("class", "deselected-right-tab");
+ hideWorldEditor();
}
-
+}
+
+function getFreeWorldEntryUid() {
+ if (!world_info_data || !("entries" in world_info_data)) {
+ return null;
+ }
+
+ const MAX_UID = 1_000_000; // <- should be safe enough :)
+ for (let uid = 0; uid < MAX_UID; uid++) {
+ if (uid in world_info_data.entries) {
+ continue;
+ }
+ return uid;
+ }
+
+ return null;
+}
+
+function getFreeWorldName() {
+ const MAX_FREE_NAME = 100_000;
+ for (let index = 1; index < MAX_FREE_NAME; index++) {
+ const newName = `New World (${index})`;
+ if (world_names.includes(newName)) {
+ continue;
+ }
+ return newName;
+ }
+
+ return undefined;
+}
+
+async function createNewWorldInfo() {
+ const worldInfoTemplate = { entries: {} };
+ const worldInfoName = getFreeWorldName();
+
+ if (!worldInfoName) {
+ return;
+ }
+
+ world_info = worldInfoName;
+ world_info_data = { ...worldInfoTemplate };
+ await saveWorldInfo(true);
+ await updateWorldInfoList();
+
+ const selectedIndex = world_names.indexOf(worldInfoName);
+ if (selectedIndex !== -1) {
+ $("#world_info").val(selectedIndex).change();
+ } else {
+ $("#world_info").val("None").change();
+ }
+}
+
+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,
+ };
+};
-import { encode, decode } from "../scripts/gpt-2-3-tokenizer/mod.js";
$(document).ready(function () {
-
-
-
-/* //RossAscends: a smaller load-up function to be used instead of refreshing the page in cases like deleting a character and changing username
- function QuickRefresh() {
- flushSettings();
- clearChat();
- //characters.length = 0 //if this could be enabled it would allow the GetCharacters function to detect files added or removed from the char dir on each panel load
- //console.log('quickRefresh() -- active_character -- '+active_character);
- //console.log('quickRefresh() -- this_chid -- '+this_chid);
- getSettings("def");
- getCharacters();
- getUserAvatars();
- //console.log(chat);
- printMessages();
-
- if (!this_chid || this_chid === 'invalid-safety-id') {
- $("#rm_button_selected_ch").css("class", "deselected-right-tab");
- $("#rm_button_selected_ch").children("h2").text('');
- }
-
- if (NavToggle.checked === false) {
- document.getElementById('nav-toggle').click();
- };
- } */
-
- $('#character_search_bar').on('input', function () {
+ $("#character_search_bar").on("input", function () {
const searchValue = $(this).val().trim().toLowerCase();
if (!searchValue) {
$("#rm_print_characters_block .character_select").show();
} else {
$("#rm_print_characters_block .character_select").each(function () {
- $(this).children('.ch_name').text().toLowerCase().includes(searchValue)
+ $(this).children(".ch_name").text().toLowerCase().includes(searchValue)
? $(this).show()
: $(this).hide();
});
}
});
-
-/* //RossAscends: a utility function for counting characters, even works for unsaved characters.
- function CountCharTokens() {
- $('#result_info').html('');
- if (selected_button == 'create') {
- var count_tokens = encode(JSON.stringify(create_save_description + create_save_personality + create_save_scenario + create_save_mes_example)).length;
- console.log('This unsaved character has ' + count_tokens + ' tokens in the defs.');
- } else {
- var count_tokens = encode(JSON.stringify(characters[this_chid].description + characters[this_chid].personality + characters[this_chid].scenario + characters[this_chid].mes_example)).length;
- console.log(characters[this_chid].name + ' has ' + count_tokens + ' tokens in the defs.');
- }
-
- if (count_tokens < 1024) {
- $('#result_info').html(count_tokens + " Tokens");
- } else {
- $('#result_info').html("" + count_tokens + " Tokens(TOO MANY TOKENS) ");
- }
- } */
-
- $('#characloud_url').click(function () {
- window.open('https://boosty.to/tavernai', '_blank');
+ $("#characloud_url").click(function () {
+ window.open("https://boosty.to/tavernai", "_blank");
});
$("#send_but").click(function () {
//$( "#send_but" ).css({"background": "url('img/load.gif')","background-size": "100%, 100%", "background-position": "center center"});
@@ -2945,32 +3658,37 @@ $(document).ready(function () {
//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.
+ //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) {
+ if (
+ !e.shiftKey &&
+ !e.ctrlKey &&
+ e.key == "Enter" &&
+ is_send_press == false
+ ) {
is_send_press = true;
e.preventDefault();
Generate();
}
});
-/* //RossAscends: Additional hotkeys
- document.addEventListener('keydown', (event) => {
-
- if (event.ctrlKey && event.key == "Enter") { // Ctrl+Enter for Regeneration Last Response
-
- if (is_send_press == false) {
- is_send_press = true;
- Generate('regenerate');
- }
- } else if (event.ctrlKey && event.key == "ArrowUp") { //Ctrl+UpArrow for Connect to last server
-
- document.getElementById('api_button').click();
-
- }
- }); */
+ /* //RossAscends: Additional hotkeys
+ document.addEventListener('keydown', (event) => {
+
+ if (event.ctrlKey && event.key == "Enter") { // Ctrl+Enter for Regeneration Last Response
+
+ if (is_send_press == false) {
+ is_send_press = true;
+ Generate('regenerate');
+ }
+ } else if (event.ctrlKey && event.key == "ArrowUp") { //Ctrl+UpArrow for Connect to last server
+
+ document.getElementById('api_button').click();
+
+ }
+ }); */
//menu buttons setup
var selected_button_style = {};
@@ -2980,16 +3698,16 @@ $(document).ready(function () {
$("#rm_button_characters").css("class", "deselected-right-tab");
$("#rm_button_settings").click(function () {
- selected_button = 'settings';
- menu_type = 'settings';
+ selected_button = "settings";
+ menu_type = "settings";
$("#rm_characters_block").css("display", "none");
$("#rm_api_block").css("display", "grid");
- $('#rm_api_block').css('opacity', 0.0);
- $('#rm_api_block').transition({
+ $("#rm_api_block").css("opacity", 0.0);
+ $("#rm_api_block").transition({
opacity: 1.0,
duration: animation_rm_duration,
easing: animation_rm_easing,
- complete: function () { }
+ complete: function () { },
});
$("#rm_ch_create_block").css("display", "none");
@@ -3000,24 +3718,24 @@ $(document).ready(function () {
$("#rm_button_selected_ch").css("class", "deselected-right-tab");
});
$("#rm_button_characters").click(function () {
- selected_button = 'characters';
+ selected_button = "characters";
select_rm_characters();
});
$("#rm_button_back").click(function () {
- selected_button = 'characters';
+ selected_button = "characters";
select_rm_characters();
});
$("#rm_button_create").click(function () {
- selected_button = 'create';
+ selected_button = "create";
select_rm_create();
});
$("#rm_button_selected_ch").click(function () {
- selected_button = 'character_edit';
+ selected_button = "character_edit";
select_selected_character(this_chid);
});
- $(document).on('click', '.group_select', async function () {
- const id = $(this).data('id');
- selected_button = 'group_chats';
+ $(document).on("click", ".group_select", async function () {
+ const id = $(this).data("id");
+ selected_button = "group_chats";
if (!is_send_press && !is_group_generating) {
if (selected_group !== id) {
@@ -3033,44 +3751,50 @@ $(document).ready(function () {
}
});
$("#rm_button_group_chats").click(function () {
- selected_button = 'group_chats';
+ selected_button = "group_chats";
select_group_chats();
});
$("#rm_button_back_from_group").click(function () {
- selected_button = 'characters';
+ selected_button = "characters";
select_rm_characters();
});
- $('#rm_group_filter').on('input', function () {
+ $("#rm_group_filter").on("input", function () {
const searchValue = $(this).val().trim().toLowerCase();
if (!searchValue) {
$("#rm_group_add_members .group_member").show();
} else {
$("#rm_group_add_members .group_member").each(function () {
- $(this).children('.ch_name').text().toLowerCase().includes(searchValue)
+ $(this).children(".ch_name").text().toLowerCase().includes(searchValue)
? $(this).show()
: $(this).hide();
});
}
});
- $('#rm_group_submit').click(async function () {
- let name = $('#rm_group_chat_name').val();
- const members = $('#rm_group_members .group_member').map((_, x) => $(x).data('id')).toArray();
+ $("#rm_group_submit").click(async function () {
+ let name = $("#rm_group_chat_name").val();
+ const members = $("#rm_group_members .group_member")
+ .map((_, x) => $(x).data("id"))
+ .toArray();
if (!name) {
- name = `Chat with ${members.join(', ')}`;
+ name = `Chat with ${members.join(", ")}`;
}
// placeholder
- const avatar_url = '/img/five.png';
+ const avatar_url = "/img/five.png";
- const createGroupResponse = await fetch('/creategroup', {
- method: 'POST',
+ const createGroupResponse = await fetch("/creategroup", {
+ method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": token,
},
- body: JSON.stringify({ name: name, members: members, avatar_url: avatar_url }),
+ body: JSON.stringify({
+ name: name,
+ members: members,
+ avatar_url: avatar_url,
+ }),
});
if (createGroupResponse.ok) {
@@ -3078,29 +3802,29 @@ $(document).ready(function () {
const id = createGroupData.id;
await getCharacters();
- $('#rm_info_avatar').html('');
- var avatar = $('#avatar_div_div').clone();
- avatar.find('img').attr('src', avatar_url);
- $('#rm_info_avatar').append(avatar);
- $('#rm_info_block').transition({ opacity: 0, duration: 0 });
+ $("#rm_info_avatar").html("");
+ var avatar = $("#avatar_div_div").clone();
+ avatar.find("img").attr("src", avatar_url);
+ $("#rm_info_avatar").append(avatar);
+ $("#rm_info_block").transition({ opacity: 0, duration: 0 });
select_rm_info("Group chat created");
- $('#rm_info_block').transition({ opacity: 1.0, duration: 2000 });
+ $("#rm_info_block").transition({ opacity: 1.0, duration: 2000 });
}
});
- $('#rm_group_automode').on('input', function () {
- const value = $(this).prop('checked');
+ $("#rm_group_automode").on("input", function () {
+ const value = $(this).prop("checked");
is_group_automode_enabled = value;
});
-
- $(document).on('click', '.character_select', function () {
- if (this_chid !== $(this).attr("chid")) { //if clicked on a different character from what was currently selected
+ $(document).on("click", ".character_select", function () {
+ if (this_chid !== $(this).attr("chid")) {
+ //if clicked on a different character from what was currently selected
if (!is_send_press) {
selected_group = null;
is_group_generating = false;
this_edit_mes_id = undefined;
- selected_button = 'character_edit';
+ selected_button = "character_edit";
this_chid = $(this).attr("chid");
active_character = this_chid;
clearChat();
@@ -3109,15 +3833,16 @@ $(document).ready(function () {
//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';
+ } else {
+ //if clicked on character that was already selected
+ selected_button = "character_edit";
select_selected_character(this_chid);
}
- $('#character_search_bar').val('').trigger('input');
+ $("#character_search_bar").val("").trigger("input");
});
var scroll_holder = 0;
var is_use_scroll_holder = false;
- $(document).on('input', '.edit_textarea', function () {
+ $(document).on("input", ".edit_textarea", function () {
scroll_holder = $("#chat").scrollTop();
$(this).height(0).height(this.scrollHeight);
is_use_scroll_holder = true;
@@ -3127,38 +3852,43 @@ $(document).ready(function () {
$("#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 () {
+ $(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", 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).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);
+ 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 () {
+ $(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);
+ $(".mes").each(function () {
+ if ($(this).attr("ch_name") == name1) {
+ $(this)
+ .children(".avatar")
+ .children("img")
+ .attr("src", "User Avatars/" + user_avatar);
}
});
saveSettings();
highlightSelectedAvatar();
});
- $(document).on('click', '#user_avatar_block .avatar_upload', function () {
- $('#avatar_upload_file').click();
+ $(document).on("click", "#user_avatar_block .avatar_upload", function () {
+ $("#avatar_upload_file").click();
});
- $('#avatar_upload_file').on('change', function (e) {
+ $("#avatar_upload_file").on("change", function (e) {
const file = e.target.files[0];
if (!file) {
@@ -3168,8 +3898,8 @@ $(document).ready(function () {
const formData = new FormData($("#form_upload_avatar").get(0));
jQuery.ajax({
- type: 'POST',
- url: '/uploaduseravatar',
+ type: "POST",
+ url: "/uploaduseravatar",
data: formData,
beforeSend: () => { },
cache: false,
@@ -3184,101 +3914,128 @@ $(document).ready(function () {
});
// Will allow to select the same file twice in a row
- $('#form_upload_avatar').trigger("reset");
+ $("#form_upload_avatar").trigger("reset");
});
- $('#logo_block').click(function (event) {
+ $("#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',
+ $("#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"); }
+ 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',
+ $("#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; }
+ 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
+ $(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
+ 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,
+ $("#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');
- }
+ 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 + '")');
+ $("#bg" + number_bg).css(
+ "background-image",
+ 'url("backgrounds/' + this_bgfile + '")'
+ );
setBackground(this_bgfile);
-
});
- $(document).on('click', '.bg_example_cross', function () {
+ $(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? ');
-
+ 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 });
+ $("#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_popup").css("display", "none");
}
});
$("#character_cross").click(function () {
is_advanced_char_open = false;
- $('#character_popup').css('display', 'none');
+ $("#character_popup").css("display", "none");
});
$("#character_popup_ok").click(function () {
is_advanced_char_open = false;
- $('#character_popup').css('display', 'none');
+ $("#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') {
+ $("#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
+ 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',
+ method: "POST",
+ url: "/deletecharacter",
beforeSend: function () {
select_rm_info("Character deleted");
- //$('#create_button').attr('value','Deleting...');
+ //$('#create_button').attr('value','Deleting...');
},
data: msg,
cache: false,
- success: function (html){
+ 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.
@@ -3288,8 +4045,13 @@ $(document).ready(function () {
characters.length = 0; // resets the characters array, forcing getcharacters to reset
name2 = "Chloe"; // replaces deleted charcter name with Chloe, since she will be displayed next.
chat = [...safetychat]; // sets up chloe to tell user about having deleted a character
- $(document.getElementById("rm_button_selected_ch")).css("class","deselected-right-tab"); // 'deselects' character's tab panel
- $(document.getElementById("rm_button_selected_ch")).children("h2").text(""); // removes character name from nav tabs
+ $(document.getElementById("rm_button_selected_ch")).css(
+ "class",
+ "deselected-right-tab"
+ ); // '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)
@@ -3297,78 +4059,83 @@ $(document).ready(function () {
//console.log("#dialogue_popup_ok(del-char) >>>> saving");
saveSettings(); // saving settings to keep changes to variables
//getCharacters();
- //$('#create_button_div').html(html);
- }
+ //$('#create_button_div').html(html);
+ },
});
}
- if (popup_type === 'world_imported' && imported_world_name) {
+ if (popup_type === "world_imported" && imported_world_name) {
world_names.forEach((item, i) => {
if (item === imported_world_name) {
- $('#world_info').val(i).change();
+ $("#world_info").val(i).change();
}
- })
- imported_world_name = '';
+ });
+ imported_world_name = "";
}
- if (popup_type === 'del_world' && world_info) {
+ if (popup_type === "del_world" && world_info) {
deleteWorldInfo(world_info);
}
- if (popup_type === 'del_group') {
- const groupId = $('#dialogue_popup').data('group_id');
+ 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
+ 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;
+ 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);
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
+ }, durationSaveEdit);
getChat();
-
}
});
$("#dialogue_popup_cancel").click(function () {
- $("#shadow_popup").css('display', 'none');
- $("#shadow_popup").css('opacity:', 0.0);
- popup_type = '';
+ $("#shadow_popup").css("display", "none");
+ $("#shadow_popup").css("opacity:", 0.0);
+ popup_type = "";
});
function callPopup(text) {
$("#dialogue_popup_cancel").css("display", "inline-block");
switch (popup_type) {
- case 'text':
- case 'char_not_selected':
-
+ case "text":
+ case "char_not_selected":
$("#dialogue_popup_ok").text("Ok");
$("#dialogue_popup_cancel").css("display", "none");
break;
- case 'world_imported':
- case 'new_chat':
-
-
+ case "world_imported":
+ case "new_chat":
$("#dialogue_popup_ok").text("Yes");
break;
- case 'del_world':
- case 'del_group':
+ 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 });
+ $("#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)
+ $("#bg_load_preview")
+ .attr("src", e.target.result)
.width(103)
.height(83);
@@ -3376,19 +4143,20 @@ $(document).ready(function () {
//console.log(formData);
jQuery.ajax({
- type: 'POST',
- url: '/downloadbackground',
+ type: "POST",
+ url: "/downloadbackground",
data: formData,
beforeSend: function () {
- //$('#create_button').attr('value','Creating...');
+ //$('#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
+ 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 {
@@ -3396,23 +4164,33 @@ $(document).ready(function () {
var number_bg = 1;
var target_opacity = 0.0;
}
- $('#bg2').transition({
+ $("#bg2").transition({
opacity: target_opacity,
- duration: 1300,//animation_rm_duration,
+ duration: 1300, //animation_rm_duration,
easing: "linear",
complete: function () {
- $("#options").css('display', 'none');
- }
+ $("#options").css("display", "none");
+ },
});
- $('#bg' + number_bg).css('background-image', 'url(' + e.target.result + ')');
- $("#form_bg_download").after("");
+ $("#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]);
@@ -3420,245 +4198,266 @@ $(document).ready(function () {
}
$("#add_bg_button").change(function () {
read_bg_load(this);
-
});
function read_avatar_load(input) {
-
if (input.files && input.files[0]) {
var reader = new FileReader();
- if (selected_button == 'create') {
-
+ if (selected_button == "create") {
create_save_avatar = input.files;
}
reader.onload = function (e) {
-
- if (selected_button == 'character_edit') {
-
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
+ if (selected_button == "character_edit") {
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
+ }, durationSaveEdit);
}
- $('#avatar_load_preview')
- .attr('src', e.target.result);
+ $("#avatar_load_preview").attr("src", e.target.result);
//.width(103)
//.height(83);
- //console.log(e.target.result.name);
-
+ //console.log(e.target.result.name);
};
reader.readAsDataURL(input.files[0]);
}
}
$("#add_avatar_button").change(function () {
-
is_mes_reload_avatar = Date.now();
read_avatar_load(this);
});
$("#form_create").submit(function (e) {
-
- $('#rm_info_avatar').html('');
+ $("#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)
+ 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',
+ type: "POST",
+ url: "/createcharacter",
data: formData,
beforeSend: function () {
- $('#create_button').attr('disabled', true);
- $('#create_button').attr('value', 'Creating...');
+ $("#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 = '';
+ $("#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');
+ $("#character_popup_text_h3").text("Create character");
- $("#scenario_pole").val('');
- create_save_scenario = '';
- $("#mes_example_textarea").val('');
- create_save_mes_example = '';
+ $("#scenario_pole").val("");
+ create_save_scenario = "";
+ $("#mes_example_textarea").val("");
+ create_save_mes_example = "";
- create_save_avatar = '';
+ create_save_avatar = "";
- $('#create_button').removeAttr("disabled");
- $("#add_avatar_button").replaceWith($("#add_avatar_button").val('').clone(true));
+ $("#create_button").removeAttr("disabled");
+ $("#add_avatar_button").replaceWith(
+ $("#add_avatar_button").val("").clone(true)
+ );
- $('#create_button').attr('value', 'Create');
+ $("#create_button").attr("value", "Create");
if (true) {
let oldSelectedChar = null;
- if (this_chid != undefined && this_chid != 'invalid-safety-id') {
+ 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);
+ $("#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 });
+ $("#rm_info_block").transition({ opacity: 1.0, duration: 2000 });
} else {
- $('#result_info').html(html);
+ $("#result_info").html(html);
}
},
error: function (jqXHR, exception) {
//alert('ERROR: '+xhr.status+ ' Status Text: '+xhr.statusText+' '+xhr.responseText);
- $('#create_button').removeAttr("disabled");
- }
+ $("#create_button").removeAttr("disabled");
+ },
});
} else {
- $('#result_info').html("Name not entered");
+ $("#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',
+ type: "POST",
+ url: "/editcharacter",
data: formData,
beforeSend: function () {
- $('#create_button').attr('disabled', true);
- $('#create_button').attr('value', 'Save');
+ $("#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'));
+ $(".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 ($("#firstmessage_textarea").val() != "") {
+ this_ch_mes = $("#firstmessage_textarea").val();
}
- if (this_ch_mes != $.trim($("#chat").children('.mes').children('.mes_block').children('.mes_text').text())) {
+ 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;
+ 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");
+ $("#create_button").removeAttr("disabled");
getCharacters();
- $("#add_avatar_button").replaceWith($("#add_avatar_button").val('').clone(true));
- $('#create_button').attr('value', 'Save');
+ $("#add_avatar_button").replaceWith(
+ $("#add_avatar_button").val("").clone(true)
+ );
+ $("#create_button").attr("value", "Save");
//console.log('/editcharacters -- this_chid -- '+this_chid);
-/* if (this_chid != undefined && this_chid != 'invalid-safety-id') { //added check to avoid trying to load tokens in case of character deletion
- CountCharTokens();
- } */
+ /* if (this_chid != undefined && this_chid != 'invalid-safety-id') { //added check to avoid trying to load tokens in case of character deletion
+ CountCharTokens();
+ } */
},
error: function (jqXHR, exception) {
- $('#create_button').removeAttr("disabled");
- $('#result_info').html("Error: no connection ");
- }
+ $("#create_button").removeAttr("disabled");
+ $("#result_info").html("Error: no connection ");
+ },
});
}
-
});
$("#delete_button").click(function () {
- popup_type = 'del_ch';
- callPopup('Delete the character? Page will reload and you will be returned to Chloe.');
+ popup_type = "del_ch";
+ callPopup(
+ "Delete the character? Page will reload and you will be returned to Chloe."
+ );
});
$("#rm_info_button").click(function () {
- $('#rm_info_avatar').html('');
+ $("#rm_info_avatar").html("");
select_rm_characters();
});
//@@@@@@@@@@@@@@@@@@@@@@@@
//character text poles creating and editing save
- $('#character_name_pole').on('change keyup paste', function () {
- if (menu_type == 'create') {
- create_save_name = $('#character_name_pole').val();
+ $("#character_name_pole").on("change keyup paste", function () {
+ if (menu_type == "create") {
+ create_save_name = $("#character_name_pole").val();
}
-
});
- $('#description_textarea').on('keyup paste cut', function () {//change keyup paste cut
+ $("#description_textarea").on("keyup paste cut", function () {
+ //change keyup paste cut
- if (menu_type == 'create') {
- create_save_description = $('#description_textarea').val();
+ if (menu_type == "create") {
+ create_save_description = $("#description_textarea").val();
CountCharTokens();
- } else {
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
- }
-
- });
- $('#personality_textarea').on('keyup paste cut', function () {
- if (menu_type == 'create') {
-
- create_save_personality = $('#personality_textarea').val();
- CountCharTokens();
- } else {
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
- }
- });
- $('#scenario_pole').on('keyup paste cut', function () {
- if (menu_type == 'create') {
- create_save_scenario = $('#scenario_pole').val();
- CountCharTokens();
- } else {
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
- }
- });
- $('#mes_example_textarea').on('keyup paste cut', function () {
- if (menu_type == 'create') {
-
- create_save_mes_example = $('#mes_example_textarea').val();
- CountCharTokens();
- } else {
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
- }
- });
- $('#firstmessage_textarea').on('keyup paste cut', function () {
-
- if (menu_type == 'create') {
- create_save_first_message = $('#firstmessage_textarea').val();
- CountCharTokens();
- } else {
- timerSaveEdit = setTimeout(() => { $("#create_button").click(); }, durationSaveEdit);
- }
- });
- $('#talkativeness_slider').on('input', function () {
- if (menu_type == 'create') {
- create_save_talkativeness = $('#talkativeness_slider').val();
} else {
timerSaveEdit = setTimeout(() => {
- $('#create_button').click();
+ $("#create_button").click();
+ }, durationSaveEdit);
+ }
+ });
+ $("#personality_textarea").on("keyup paste cut", function () {
+ if (menu_type == "create") {
+ create_save_personality = $("#personality_textarea").val();
+ CountCharTokens();
+ } else {
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
+ }, durationSaveEdit);
+ }
+ });
+ $("#scenario_pole").on("keyup paste cut", function () {
+ if (menu_type == "create") {
+ create_save_scenario = $("#scenario_pole").val();
+ CountCharTokens();
+ } else {
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
+ }, durationSaveEdit);
+ }
+ });
+ $("#mes_example_textarea").on("keyup paste cut", function () {
+ if (menu_type == "create") {
+ create_save_mes_example = $("#mes_example_textarea").val();
+ CountCharTokens();
+ } else {
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
+ }, durationSaveEdit);
+ }
+ });
+ $("#firstmessage_textarea").on("keyup paste cut", function () {
+ if (menu_type == "create") {
+ create_save_first_message = $("#firstmessage_textarea").val();
+ CountCharTokens();
+ } else {
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
+ }, durationSaveEdit);
+ }
+ });
+ $("#talkativeness_slider").on("input", function () {
+ if (menu_type == "create") {
+ create_save_talkativeness = $("#talkativeness_slider").val();
+ } else {
+ timerSaveEdit = setTimeout(() => {
+ $("#create_button").click();
}, durationSaveEdit);
}
});
$("#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();
+ 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/")) {
+ 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);
@@ -3673,13 +4472,23 @@ $(document).ready(function () {
});
$("#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();
+ 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);
+ 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";
@@ -3691,49 +4500,30 @@ $(document).ready(function () {
});
$("body").click(function () {
- if ($("#options").css('opacity') == 1.0) {
- $('#options').transition({
+ if ($("#options").css("opacity") == 1.0) {
+ $("#options").transition({
opacity: 0.0,
- duration: 100,//animation_rm_duration,
+ duration: 100, //animation_rm_duration,
easing: animation_rm_easing,
complete: function () {
- $("#options").css('display', 'none');
- }
- })
-
+ $("#options").css("display", "none");
+ },
+ });
}
});
-/* // RossAscends: Added functionality that will close the RightNav panel click outside of it or related panels (adv editing popup, or dialog popups)
-
- var NavToggle = document.getElementById("nav-toggle");
- var PanelPin = document.getElementById("rm_button_panel_pin");
- $('document').ready(function () {
- $("html").click(function (e) {
- if (NavToggle.checked === true && PanelPin.checked === false) {
- if ($(e.target).attr('id') !== "nav-toggle") {
- if (document.querySelector('#right-nav-panel').contains(e.target) === false) {
- if (document.querySelector('#character_popup').contains(e.target) === false) {
- if (document.querySelector('#dialogue_popup').contains(e.target) === false) {
- document.getElementById('nav-toggle').click();
- }
- }
- }
- }
- };
- });
- }); */
-
- $("#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
+ $("#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 () {
-
- }
+ complete: function () { },
});
}
});
@@ -3742,75 +4532,80 @@ $(document).ready(function () {
if (selected_group) {
// will open a chat selection screen
openNavToggle();
- $("#rm_button_characters").trigger('click');
+ $("#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 });
+ $("#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,
+ });
}
});
$("#option_start_new_chat").click(function () {
if (selected_group) {
// will open a group creation screen
openNavToggle();
- $("#rm_button_group_chats").trigger('click');
+ $("#rm_button_group_chats").trigger("click");
return;
}
if (this_chid != undefined && !is_send_press) {
- popup_type = 'new_chat';
- callPopup('Start new chat? ');
+ popup_type = "new_chat";
+ callPopup("Start new chat? ");
}
});
$("#option_regenerate").click(function () {
if (is_send_press == false) {
is_send_press = true;
- Generate('regenerate');
+ Generate("regenerate");
}
});
// this function hides the input form, and shows the delete/cancel buttons for deleting messages from chat
$("#option_delete_mes").click(function () {
- 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) {
+ 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');
+ $(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 () {
+ $("#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).parent().children(".for_checkbox").css("display", "block");
+ $(this).parent().css("background", css_mes_bg);
$(this).prop("checked", false);
-
});
this_del_mes = 0;
-
});
//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 () {
+ $("#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).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 + "']")
+ .nextAll("div")
+ .remove();
$(".mes[mesid='" + this_del_mes + "']").remove();
chat.length = this_del_mes;
count_view_mes = this_del_mes;
@@ -3819,20 +4614,18 @@ $(document).ready(function () {
} else {
saveChat();
}
- var $textchat = $('#chat');
+ var $textchat = $("#chat");
$textchat.scrollTop($textchat[0].scrollHeight);
}
this_del_mes = 0;
-
-
});
$("#world_info").change(async function () {
- const selectedWorld = $('#world_info').find(":selected").val();
+ const selectedWorld = $("#world_info").find(":selected").val();
world_info = null;
world_info_data = null;
- if (selectedWorld !== 'None') {
+ if (selectedWorld !== "None") {
const worldIndex = Number(selectedWorld);
world_info = !isNaN(worldIndex) ? world_names[worldIndex] : null;
await loadWorldInfoData();
@@ -3843,62 +4636,72 @@ $(document).ready(function () {
});
$("#settings_perset").change(function () {
-
- if ($('#settings_perset').find(":selected").val() != 'gui') {
- preset_settings = $('#settings_perset').find(":selected").text();
+ 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 =
+ 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);
+ $("#amount_gen").val(amount_gen);
+ $("#amount_gen_counter").html(amount_gen);
- $('#max_context').val(max_context);
- $('#max_context_counter').html(max_context + " Tokens");
+ $("#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").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");
+ $("#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);
+ $("#range_block").css("opacity", 1.0);
$("#amount_gen_block").children().prop("disabled", false);
- $("#amount_gen_block").css('opacity', 1.0);
-
+ $("#amount_gen_block").css("opacity", 1.0);
} else {
//$('.button').disableSelection();
- preset_settings = 'gui';
+ preset_settings = "gui";
$("#range_block").children().prop("disabled", true);
- $("#range_block").css('opacity', 0.5);
+ $("#range_block").css("opacity", 0.5);
$("#amount_gen_block").children().prop("disabled", true);
- $("#amount_gen_block").css('opacity', 0.45);
+ $("#amount_gen_block").css("opacity", 0.45);
}
saveSettings();
});
$("#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;
+ 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);
+ 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_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");
+ $("#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);
@@ -3908,20 +4711,20 @@ $(document).ready(function () {
is_pygmalion = false;
is_get_status = false;
is_get_status_novel = false;
- online_status = 'no_connection';
+ online_status = "no_connection";
clearSoftPromptsList();
checkOnlineStatus();
changeMainAPI();
saveSettings();
});
- $('#softprompt').change(async function () {
+ $("#softprompt").change(async function () {
if (!api_server) {
return;
}
- const selected = $('#softprompt').find(':selected').val();
- const response = await fetch('/setsoftprompt', {
- method: 'POST',
+ const selected = $("#softprompt").find(":selected").val();
+ const response = await fetch("/setsoftprompt", {
+ method: "POST",
headers: {
"Content-Type": "application/json",
"X-CSRF-Token": token,
@@ -3934,237 +4737,288 @@ $(document).ready(function () {
}
});
-
- 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');
+ 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");
+ $("#" + i + "_counter_textgenerationwebui").html($(this).val() + ".00");
} else {
- $('#' + i + '_counter_textgenerationwebui').html($(this).val());
+ $("#" + i + "_counter_textgenerationwebui").html($(this).val());
}
textgenerationwebui_settings[i] = parseFloat(val);
setTimeout(saveSettings, 500);
});
}
- $(document).on('input', '#temp', function () {
+ $(document).on("input", "#temp", function () {
temp = $(this).val();
if (isInt(temp)) {
- $('#temp_counter').html($(this).val() + ".00");
+ $("#temp_counter").html($(this).val() + ".00");
} else {
- $('#temp_counter').html($(this).val());
+ $("#temp_counter").html($(this).val());
}
var tempTimer = setTimeout(saveSettings, 500);
});
- $(document).on('input', '#amount_gen', function () {
+
+ $(document).on("input", "#amount_gen", function () {
amount_gen = $(this).val();
- $('#amount_gen_counter').html($(this).val());
+ $("#amount_gen_counter").html($(this).val());
var amountTimer = setTimeout(saveSettings, 500);
});
- $(document).on('input', '#max_context', function () {
+
+ $(document).on("input", "#max_context", function () {
max_context = parseInt($(this).val());
- $('#max_context_counter').html($(this).val() + ' Tokens');
+ $("#max_context_counter").html($(this).val() + " Tokens");
var max_contextTimer = setTimeout(saveSettings, 500);
});
- $(document).on('input', '#world_info_depth', function () {
+
+ $(document).on("input", "#world_info_depth", function () {
world_info_depth = Number($(this).val());
- $('#world_info_depth_counter').html(`${$(this).val()} Messages`);
+ $("#world_info_depth_counter").html(`${$(this).val()} Messages`);
setTimeout(saveSettings, 500);
});
- $(document).on('input', '#world_info_budget', function () {
+
+ $(document).on("input", "#world_info_budget", function () {
world_info_budget = Number($(this).val());
- $('#world_info_budget_counter').html(`${$(this).val()} Tokens`);
+ $("#world_info_budget_counter").html(`${$(this).val()} Tokens`);
setTimeout(saveSettings, 500);
- })
- $('#style_anchor').change(function () {
- style_anchor = !!$('#style_anchor').prop('checked');
+ });
+
+ $("#style_anchor").change(function () {
+ style_anchor = !!$("#style_anchor").prop("checked");
saveSettings();
});
- $('#character_anchor').change(function () {
- character_anchor = !!$('#character_anchor').prop('checked');
+
+ $("#character_anchor").change(function () {
+ character_anchor = !!$("#character_anchor").prop("checked");
saveSettings();
});
- $('#auto-connect-checkbox').change(function () {
- auto_connect = !!$('#auto-connect-checkbox').prop('checked');
+
+ $("#auto-connect-checkbox").change(function () {
+ auto_connect = !!$("#auto-connect-checkbox").prop("checked");
saveSettings();
});
- $('#auto-load-chat-checkbox').change(function () {
- auto_load_chat = !!$('#auto-load-chat-checkbox').prop('checked');
+
+ $("#auto-load-chat-checkbox").change(function () {
+ auto_load_chat = !!$("#auto-load-chat-checkbox").prop("checked");
saveSettings();
});
- $('#collapse-newlines-checkbox').change(function () {
- collapse_newlines = !!$('#collapse-newlines-checkbox').prop('checked');
+
+ $("#collapse-newlines-checkbox").change(function () {
+ collapse_newlines = !!$("#collapse-newlines-checkbox").prop("checked");
saveSettings();
});
- $(document).on('input', '#rep_pen', function () {
+
+ $(document).on("input", "#rep_pen", function () {
rep_pen = $(this).val();
if (isInt(rep_pen)) {
- $('#rep_pen_counter').html($(this).val() + ".00");
+ $("#rep_pen_counter").html($(this).val() + ".00");
} else {
- $('#rep_pen_counter').html($(this).val());
+ $("#rep_pen_counter").html($(this).val());
}
var repPenTimer = setTimeout(saveSettings, 500);
});
- $(document).on('input', '#rep_pen_size', function () {
+
+ $(document).on("input", "#rep_pen_size", function () {
rep_pen_size = $(this).val();
- $('#rep_pen_size_counter').html($(this).val() + " Tokens");
+ $("#rep_pen_size_counter").html($(this).val() + " Tokens");
var repPenSizeTimer = setTimeout(saveSettings, 500);
});
+
//Novel
- $(document).on('input', '#temp_novel', function () {
+ $(document).on("input", "#temp_novel", function () {
temp_novel = $(this).val();
if (isInt(temp_novel)) {
- $('#temp_counter_novel').html($(this).val() + ".00");
+ $("#temp_counter_novel").html($(this).val() + ".00");
} else {
- $('#temp_counter_novel').html($(this).val());
+ $("#temp_counter_novel").html($(this).val());
}
var tempTimer_novel = setTimeout(saveSettings, 500);
});
- $(document).on('input', '#rep_pen_novel', function () {
+
+ $(document).on("input", "#rep_pen_novel", function () {
rep_pen_novel = $(this).val();
if (isInt(rep_pen_novel)) {
- $('#rep_pen_counter_novel').html($(this).val() + ".00");
+ $("#rep_pen_counter_novel").html($(this).val() + ".00");
} else {
- $('#rep_pen_counter_novel').html($(this).val());
+ $("#rep_pen_counter_novel").html($(this).val());
}
var repPenTimer_novel = setTimeout(saveSettings, 500);
});
- $(document).on('input', '#rep_pen_size_novel', function () {
+
+ $(document).on("input", "#rep_pen_size_novel", function () {
rep_pen_size_novel = $(this).val();
- $('#rep_pen_size_counter_novel').html($(this).val() + " Tokens");
+ $("#rep_pen_size_counter_novel").html($(this).val() + " Tokens");
var repPenSizeTimer_novel = setTimeout(saveSettings, 500);
});
- $('#donation').click(function () {
- $('#shadow_tips_popup').css('display', 'block');
- $('#shadow_tips_popup').transition({
+ $("#donation").click(function () {
+ $("#shadow_tips_popup").css("display", "block");
+ $("#shadow_tips_popup").transition({
opacity: 1.0,
duration: 100,
easing: animation_rm_easing,
- complete: function () {
-
- }
+ complete: function () { },
});
});
- $('#tips_cross').click(function () {
- $('#shadow_tips_popup').transition({
+ $("#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');
- }
+ $("#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');
+ $("#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 () {
+ $(document).on("click", ".mes_edit", function () {
if (this_chid !== undefined || selected_group) {
- const message = $(this).closest('.mes');
+ const message = $(this).closest(".mes");
- if (message.data('isSystem')) {
+ 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');
+ let mes_edited = $("#chat")
+ .children()
+ .filter('[mesid="' + this_edit_mes_id + '"]')
+ .children(".mes_block")
+ .children(".ch_name")
+ .children(".mes_edit_done");
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).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']) {
+ 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 {
+ } 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);
+ $(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 () { }
+ 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);
+ 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 () {
+ $(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'];
+ 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).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 () {
+ $(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;
+ if (name1 === undefined || name1 == "") name1 = default_user_name;
console.log(name1);
- saveSettings('change_name');
-
+ 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();
+ 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);
saveSettings();
@@ -4175,15 +5029,15 @@ $(document).ready(function () {
function resultCheckStatusNovel() {
is_api_button_press_novel = false;
checkOnlineStatus();
- $("#api_loading_novel").css("display", 'none');
- $("#api_button_novel").css("display", 'inline-block');
+ $("#api_loading_novel").css("display", "none");
+ $("#api_button_novel").css("display", "inline-block");
}
$("#model_novel_select").change(function () {
- model_novel = $('#model_novel_select').find(":selected").val();
+ model_novel = $("#model_novel_select").find(":selected").val();
saveSettings();
});
$("#anchor_order").change(function () {
- anchor_order = parseInt($('#anchor_order').find(":selected").val());
+ anchor_order = parseInt($("#anchor_order").find(":selected").val());
saveSettings();
});
@@ -4192,14 +5046,17 @@ $(document).ready(function () {
$("#character_import_file").click();
});
$("#character_import_file").on("change", function (e) {
- $('#rm_info_avatar').html('');
+ $("#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")) {
+ if (
+ !ext ||
+ (ext[1].toLowerCase() != "json" && ext[1].toLowerCase() != "png")
+ ) {
return;
}
@@ -4209,42 +5066,43 @@ $(document).ready(function () {
var formData = new FormData($("#form_import").get(0));
jQuery.ajax({
- type: 'POST',
- url: '/importcharacter',
+ type: "POST",
+ url: "/importcharacter",
data: formData,
beforeSend: function () {
//$('#create_button').attr('disabled',true);
- //$('#create_button').attr('value','Creating...');
+ //$('#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);
+ $("#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') {
+ 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 });
+ $("#rm_info_block").transition({ opacity: 1, duration: 1000 });
}
},
error: function (jqXHR, exception) {
- $('#create_button').removeAttr("disabled");
- }
+ $("#create_button").removeAttr("disabled");
+ },
});
});
- $('#export_button').click(function () {
- var link = document.createElement('a');
- link.href = 'characters/' + characters[this_chid].avatar;
+ $("#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();
@@ -4260,7 +5118,10 @@ $(document).ready(function () {
return;
}
var ext = file.name.match(/\.(\w+)$/);
- if (!ext || (ext[1].toLowerCase() != "json" && ext[1].toLowerCase() != "jsonl")) {
+ if (
+ !ext ||
+ (ext[1].toLowerCase() != "json" && ext[1].toLowerCase() != "jsonl")
+ ) {
return;
}
@@ -4270,13 +5131,13 @@ $(document).ready(function () {
var formData = new FormData($("#form_import_chat").get(0));
//console.log('/importchat entered with: '+formData);
jQuery.ajax({
- type: 'POST',
- url: '/importchat',
+ type: "POST",
+ url: "/importchat",
data: formData,
beforeSend: function () {
- $('#select_chat_div').html('');
- $('#load_select_chat_div').css('display', 'block');
- //$('#create_button').attr('value','Creating...');
+ $("#select_chat_div").html("");
+ $("#load_select_chat_div").css("display", "block");
+ //$('#create_button').attr('value','Creating...');
},
cache: false,
contentType: false,
@@ -4285,27 +5146,25 @@ $(document).ready(function () {
//console.log(data);
if (data.res) {
getAllCharaChats();
-
-
}
},
error: function (jqXHR, exception) {
- $('#create_button').removeAttr("disabled");
- }
+ $("#create_button").removeAttr("disabled");
+ },
});
});
- $(document).on('click', '.select_chat_block', function () {
- let file_name = $(this).attr("file_name").replace('.jsonl', '');
+
+ $(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;
+ characters[this_chid]["chat"] = file_name;
clearChat();
chat.length = 0;
getChat();
- $('#selected_chat_pole').val(file_name);
+ $("#selected_chat_pole").val(file_name);
$("#create_button").click();
- $('#shadow_select_chat_popup').css('display', 'none');
- $('#load_select_chat_div').css('display', 'block');
-
+ $("#shadow_select_chat_popup").css("display", "none");
+ $("#load_select_chat_div").css("display", "block");
});
//**************************WORLD INFO IMPORT EXPORT*************************//
@@ -4321,15 +5180,15 @@ $(document).ready(function () {
}
const ext = file.name.match(/\.(\w+)$/);
- if (!ext || (ext[1].toLowerCase() !== "json")) {
+ if (!ext || ext[1].toLowerCase() !== "json") {
return;
}
var formData = new FormData($("#form_world_import").get(0));
jQuery.ajax({
- type: 'POST',
- url: '/importworldinfo',
+ type: "POST",
+ url: "/importworldinfo",
data: formData,
beforeSend: () => { },
cache: false,
@@ -4345,553 +5204,39 @@ $(document).ready(function () {
});
// Will allow to select the same file twice in a row
- $('#form_world_import').trigger("reset");
+ $("#form_world_import").trigger("reset");
});
- async function updateWorldInfoList(importedWorldName) {
- var result = await fetch('/getsettings', {
- method: 'POST',
- headers: {
- 'Content-Type': 'application/json',
- "X-CSRF-Token": token,
- },
- body: JSON.stringify({})
- });
-
- if (result.ok) {
- var data = await result.json();
- world_names = data.world_names?.length ? data.world_names : [];
- $('#world_info').find('option[value!="None"]').remove();
-
- world_names.forEach((item, i) => {
- $('#world_info').append(`${item} `);
- });
-
- if (importedWorldName) {
- const indexOf = world_names.indexOf(world_info);
- $('#world_info').val(indexOf);
-
- popup_type = 'world_imported';
- callPopup('World imported successfully! Select it now? ');
- }
- }
- }
-
- function download(content, fileName, contentType) {
- var a = document.createElement("a");
- var file = new Blob([content], { type: contentType });
- a.href = URL.createObjectURL(file);
- a.download = fileName;
- a.click();
- }
-
- // World Info Editor
- async function showWorldEditor() {
- if (!world_info) {
- popup_type = 'default';
- callPopup('Select a world info first! ');
- return;
- }
-
- is_world_edit_open = true;
- $('#world_popup_name').val(world_info);
- $('#world_popup').css('display', 'flex');
- await loadWorldInfoData();
- displayWorldEntries(world_info_data);
- }
-
- async function loadWorldInfoData() {
- if (!world_info) {
- return;
- }
-
- const response = await fetch("/getworldinfo", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- "X-CSRF-Token": token,
- },
- body: JSON.stringify({ name: world_info })
- });
-
- if (response.ok) {
- world_info_data = await response.json();
- }
- }
-
- function hideWorldEditor() {
- is_world_edit_open = false;
- $('#world_popup').css('display', 'none');
- }
-
- function displayWorldEntries(data) {
- $('#world_popup_entries_list').empty();
-
- if (!data || !('entries' in data)) {
- return;
- }
-
- for (const entryUid in data.entries) {
- const entry = data.entries[entryUid];
- appendWorldEntry(entry);
- }
- }
-
- function appendWorldEntry(entry) {
- const template = $('#entry_edit_template .world_entry').clone();
- template.data('uid', entry.uid);
-
- // key
- const keyInput = template.find('textarea[name="key"]');
- keyInput.data('uid', entry.uid);
- keyInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- world_info_data.entries[uid].key = value.split(',').map(x => x.trim()).filter(x => x);
- saveWorldInfo();
- });
- keyInput.val(entry.key.join(',')).trigger('input');
- keyInput.css("height", ""); //reset the height
- keyInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // keysecondary
- const keySecondaryInput = template.find('textarea[name="keysecondary"]');
- keySecondaryInput.data('uid', entry.uid);
- keySecondaryInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- world_info_data.entries[uid].keysecondary = value.split(',').map(x => x.trim()).filter(x => x);
- saveWorldInfo();
- });
- keySecondaryInput.val(entry.keysecondary.join(',')).trigger('input');
- keySecondaryInput.css("height", ""); //reset the height
- keySecondaryInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // comment
- const commentInput = template.find('textarea[name="comment"]');
- commentInput.data('uid', entry.uid);
- commentInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- world_info_data.entries[uid].comment = value;
- saveWorldInfo();
- });
- commentInput.val(entry.comment).trigger('input');
- commentInput.css("height", ""); //reset the height
- commentInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // content
- const contentInput = template.find('textarea[name="content"]');
- contentInput.data('uid', entry.uid);
- contentInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).val();
- world_info_data.entries[uid].content = value;
- $(this).css("height", ""); //reset the height
- $(this).css("height", $(this).prop('scrollHeight') + "px");
- saveWorldInfo();
-
- // count tokens
- const numberOfTokens = encode(value).length;
- $(this).closest('.world_entry').find('.world_entry_form_token_counter').html(numberOfTokens);
- });
- contentInput.val(entry.content).trigger('input');
- contentInput.css("height", ""); //reset the height
- contentInput.css("height", $(this).prop('scrollHeight') + "px");
-
- // selective
- const selectiveInput = template.find('input[name="selective"]');
- selectiveInput.data('uid', entry.uid);
- selectiveInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).prop('checked');
- world_info_data.entries[uid].selective = value;
- saveWorldInfo();
-
- const keysecondary = $(this).closest('.world_entry').find('.keysecondary');
- value ? keysecondary.show() : keysecondary.hide();
- });
- selectiveInput.prop('checked', entry.selective).trigger('input');
- selectiveInput.siblings('.checkbox_fancy').click(function () {
- $(this).siblings('input').click();
- });
-
-
- // constant
- const constantInput = template.find('input[name="constant"]');
- constantInput.data('uid', entry.uid);
- constantInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = $(this).prop('checked');
- world_info_data.entries[uid].constant = value;
- saveWorldInfo();
- });
- constantInput.prop('checked', entry.constant).trigger('input');
- constantInput.siblings('.checkbox_fancy').click(function () {
- $(this).siblings('input').click();
- });
-
- // order
- const orderInput = template.find('input[name="order"]');
- orderInput.data('uid', entry.uid);
- orderInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = Number($(this).val());
-
- world_info_data.entries[uid].order = !isNaN(value) ? value : 0;
- saveWorldInfo();
- });
- orderInput.val(entry.order).trigger('input');
-
- // position
- if (entry.position === undefined) {
- entry.position = 0;
- }
-
- const positionInput = template.find('input[name="position"]');
- positionInput.data('uid', entry.uid);
- positionInput.on('input', function () {
- const uid = $(this).data('uid');
- const value = Number($(this).val());
- world_info_data.entries[uid].position = !isNaN(value) ? value : 0;
- saveWorldInfo();
- })
- template.find(`input[name="position"][value=${entry.position}]`).prop('checked', true).trigger('input');
-
- // display uid
- template.find('.world_entry_form_uid_value').html(entry.uid);
-
- // delete button
- const deleteButton = template.find('input.delete_entry_button');
- deleteButton.data('uid', entry.uid);
- deleteButton.on('click', function () {
- const uid = $(this).data('uid');
- deleteWorldInfoEntry(uid);
- $(this).closest('.world_entry').remove();
- saveWorldInfo();
- });
-
- template.appendTo('#world_popup_entries_list');
- return template;
- }
-
- async function deleteWorldInfoEntry(uid) {
- if (!world_info_data || !('entries' in world_info_data)) {
- return;
- }
-
- delete world_info_data.entries[uid];
- }
-
- function createWorldInfoEntry() {
- const newEntryTemplate = {
- key: [],
- keysecondary: [],
- comment: '',
- content: '',
- constant: false,
- selective: false,
- order: 100,
- position: 0,
- };
- const newUid = getFreeWorldEntryUid();
-
- if (!Number.isInteger(newUid)) {
- console.error("Couldn't assign UID to a new entry");
- return;
- }
-
- const newEntry = { uid: newUid, ...newEntryTemplate };
- world_info_data.entries[newUid] = newEntry;
-
- const entryTemplate = appendWorldEntry(newEntry);
- entryTemplate.get(0).scrollIntoView({ behavior: 'smooth' });
- }
-
- async function saveWorldInfo(immediately) {
- if (!world_info || !world_info_data) {
- return;
- }
-
- async function _save() {
- const response = await fetch("/editworldinfo", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- "X-CSRF-Token": token,
- },
- body: JSON.stringify({ name: world_info, data: world_info_data })
- });
- }
-
- if (immediately) {
- return await _save();
- }
-
- clearTimeout(timerWorldSave);
- timerWorldSave = setTimeout(async () => await _save(), durationSaveEdit);
- }
-
- async function renameWorldInfo() {
- const oldName = world_info;
- const newName = $('#world_popup_name').val();
-
- if (oldName === newName) {
- return;
- }
-
- world_info = newName;
- await saveWorldInfo(true);
- await deleteWorldInfo(oldName, newName);
- }
-
- async function deleteWorldInfo(worldInfoName, selectWorldName) {
- if (!world_names.includes(worldInfoName)) {
- return;
- }
-
- const response = await fetch("/deleteworldinfo", {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- "X-CSRF-Token": token,
- },
- body: JSON.stringify({ name: worldInfoName })
- });
-
- if (response.ok) {
- await updateWorldInfoList();
-
- const selectedIndex = world_names.indexOf(selectWorldName);
- if (selectedIndex !== -1) {
- $('#world_info').val(selectedIndex).change();
- }
- else {
- $('#world_info').val('None').change();
- }
-
- hideWorldEditor();
- }
- }
-
- function getFreeWorldEntryUid() {
- if (!world_info_data || !('entries' in world_info_data)) {
- return null;
- }
-
- const MAX_UID = 1_000_000; // <- should be safe enough :)
- for (let uid = 0; uid < MAX_UID; uid++) {
- if (uid in world_info_data.entries) {
- continue;
- }
- return uid;
- }
-
- return null;
- }
-
- function getFreeWorldName() {
- const MAX_FREE_NAME = 100_000;
- for (let index = 1; index < MAX_FREE_NAME; index++) {
- const newName = `New World (${index})`;
- if (world_names.includes(newName)) {
- continue;
- }
- return newName;
- }
-
- return undefined;
- }
-
- async function createNewWorldInfo() {
- const worldInfoTemplate = { entries: {} };
- const worldInfoName = getFreeWorldName();
-
- if (!worldInfoName) {
- return;
- }
-
- world_info = worldInfoName;
- world_info_data = { ...worldInfoTemplate };
- await saveWorldInfo(true);
- await updateWorldInfoList();
-
- const selectedIndex = world_names.indexOf(worldInfoName);
- if (selectedIndex !== -1) {
- $('#world_info').val(selectedIndex).change();
- }
- else {
- $('#world_info').val('None').change();
- }
- }
-
- $('#world_info_edit_button').click(() => {
+ $("#world_info_edit_button").click(() => {
is_world_edit_open ? hideWorldEditor() : showWorldEditor();
});
- $('#world_popup_export').click(() => {
+ $("#world_popup_export").click(() => {
if (world_info && world_info_data) {
const jsonValue = JSON.stringify(world_info_data);
const fileName = `${world_info}.json`;
- download(jsonValue, fileName, 'application/json');
+ download(jsonValue, fileName, "application/json");
}
});
- $('#world_popup_delete').click(() => {
- popup_type = 'del_world';
- callPopup('Delete the World Info? ');
+ $("#world_popup_delete").click(() => {
+ popup_type = "del_world";
+ callPopup("Delete the World Info? ");
});
- $('#world_popup_new').click(() => {
+ $("#world_popup_new").click(() => {
createWorldInfoEntry();
});
- $('#world_cross').click(() => {
+ $("#world_cross").click(() => {
hideWorldEditor();
});
- $('#world_popup_name_button').click(() => {
+ $("#world_popup_name_button").click(() => {
renameWorldInfo();
});
- $('#world_create_button').click(() => {
+ $("#world_create_button").click(() => {
createNewWorldInfo();
});
-
- /// UTILS
- function onlyUnique(value, index, array) {
- return array.indexOf(value) === index;
- }
-
- function shuffle(array) {
- let currentIndex = array.length, randomIndex;
-
- while (currentIndex != 0) {
- randomIndex = Math.floor(Math.random() * currentIndex);
- currentIndex--;
- [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
- }
- return array;
- }
-
- function setExtensionPrompt(key, value) {
- extension_prompts[key] = value;
- }
-
- 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,
- };
- };
-
-/* //RossAscends: auto-load last character function (fires when active_character is defined and auto_load_chat is true)
- function autoloadchat() {
- console.log('starting autoloadchat routine');
- jQuery.ajax({
- type: 'POST',
- url: '/getsettings',
- data: JSON.stringify({}),
- beforeSend: function () {
- },
- cache: false,
- dataType: "json",
- contentType: "application/json",
- success: function (data) {
- if (data.result != 'file not find') {
- settings = JSON.parse(data.settings);
- //get the character to auto-load
- if (settings.active_character !== undefined) {
- if (settings.active_character !== '') {
- active_character = settings.active_character;
- }
- }
- }
- console.log('active_character = ' + active_character);
- console.log('auto_load_chat = ' + auto_load_chat);
-
- if (active_character !== undefined && auto_load_chat == true) {
- $('#CharID' + active_character).click(); //will auto-select and load chat of last selected character is auto_load_chat is true
- }
- },
- error: function (jqXHR, exception) {
- console.log(exception);
- console.log(jqXHR);
-
- }
- });
-
- }*/
- /* //RossAscends: auto-connect to last API function (fires when API URL exists in settings and auto_connect is true)
- function autoconnect() {
- console.log('starting autoconnect routine');
- 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') {
- settings = JSON.parse(data.settings);
-
- //Load the API server URL from settings
- api_server = settings.api_server;
- api_server_textgenerationwebui = settings.api_server_textgenerationwebui;
- api_key_novel = settings.api_key_novel;
- $('#api_url_text').val(api_server);
- $('#textgenerationwebui_api_url_text').val(api_server_textgenerationwebui);
- $('#api_key_novel').val(api_key_novel);
- }
-
- console.log('api_server = ' + api_server);
- console.log('api_server_textgenerationwebui = ' + api_server_textgenerationwebui);
- console.log('api_key_novel = ' + api_key_novel);
- console.log('auto_connect = ' + auto_connect);
- changeMainAPI();
-
- if (main_api === 'kobold' && api_server && auto_connect) {
- $('#api_button').click();
- }
-
- if (main_api === 'textgenerationwebui' && api_server_textgenerationwebui && auto_connect) {
- $('#api_button_textgenerationwebui').click();
- }
-
- if (main_api === 'novel' && api_key_novel && auto_connect) {
- $('#api_button_novel').click();
- }
- },
- error: function (jqXHR, exception) {
- console.log(exception);
- console.log(jqXHR);
-
- }
- });
- } */
});