diff --git a/public/index.html b/public/index.html index f511b7533..1ccd3bb96 100644 --- a/public/index.html +++ b/public/index.html @@ -1621,12 +1621,16 @@
-
-

text

+
+
+

text

+
+ +
+ + +
- - -
diff --git a/public/script.js b/public/script.js index a03920876..57aa469d6 100644 --- a/public/script.js +++ b/public/script.js @@ -94,7 +94,17 @@ import { import { debounce, delay } from "./scripts/utils.js"; import { extension_settings, loadExtensionSettings } from "./scripts/extensions.js"; import { executeSlashCommands, getSlashCommandsHelp } from "./scripts/slash-commands.js"; -import { tag_map, tags, loadTagsSettings, printTags, isElementTagged, getTagsList, appendTagToList, createTagMapFromList, renameTagKey } from "./scripts/tags.js"; +import { + tag_map, + tags, + loadTagsSettings, + printTags, + isElementTagged, + getTagsList, + appendTagToList, + createTagMapFromList, + renameTagKey, +} from "./scripts/tags.js"; //exporting functions and vars for mods export { @@ -1678,7 +1688,17 @@ async function Generate(type, automatic_trigger, force_name2) { let examplesString = ''; let chatString = ''; function canFitMessages() { - const encodeString = JSON.stringify(worldInfoString + storyString + examplesString + chatString + anchorTop + anchorBottom + charPersonality + promptBias + allAnchors); + const encodeString = [ + worldInfoString, + storyString, + examplesString, + chatString, + anchorTop, + anchorBottom, + charPersonality, + promptBias, + allAnchors + ].join('').replace(/\r/gm, ''); return getTokenCount(encodeString, padding_tokens) < this_max_context; } @@ -1816,18 +1836,25 @@ async function Generate(type, automatic_trigger, force_name2) { function checkPromtSize() { setPromtString(); - const prompt = JSON.stringify(worldInfoString + storyString + mesExmString + mesSendString + anchorTop + anchorBottom + charPersonality + generatedPromtCache + promptBias + allAnchors); + const prompt = [ + worldInfoString, + storyString, + mesExmString, + mesSendString, + anchorTop, + anchorBottom, + charPersonality, + generatedPromtCache, + promptBias, + allAnchors + ].join('').replace(/\r/gm, ''); let thisPromtContextSize = getTokenCount(prompt, padding_tokens); 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 { @@ -1861,7 +1888,14 @@ async function Generate(type, automatic_trigger, force_name2) { mesSendString = '\n' + mesSendString; //mesSendString = mesSendString; //This edit simply removes the first "" that is prepended to all context prompts } - let finalPromt = worldInfoBefore + storyString + worldInfoAfter + afterScenarioAnchor + mesExmString + mesSendString + generatedPromtCache + promptBias; + let finalPromt = worldInfoBefore + + storyString + + worldInfoAfter + + afterScenarioAnchor + + mesExmString + + mesSendString + + generatedPromtCache + + promptBias; if (zeroDepthAnchor && zeroDepthAnchor.length) { if (!isMultigenEnabled() || tokens_already_generated == 0) { @@ -1937,65 +1971,15 @@ async function Generate(type, automatic_trigger, force_name2) { } if (main_api == 'textgenerationwebui') { - generate_data = - { - 'prompt': finalPromt, - 'max_new_tokens': this_amount_gen, - 'do_sample': textgenerationwebui_settings.do_sample, - 'temperature': textgenerationwebui_settings.temp, - 'top_p': textgenerationwebui_settings.top_p, - 'typical_p': textgenerationwebui_settings.typical_p, - 'repetition_penalty': textgenerationwebui_settings.rep_pen, - 'encoder_repetition_penalty': textgenerationwebui_settings.encoder_rep_pen, - 'top_k': textgenerationwebui_settings.top_k, - 'min_length': textgenerationwebui_settings.min_length, - 'no_repeat_ngram_size': textgenerationwebui_settings.no_repeat_ngram_size, - 'num_beams': textgenerationwebui_settings.num_beams, - 'penalty_alpha': textgenerationwebui_settings.penalty_alpha, - 'length_penalty': textgenerationwebui_settings.length_penalty, - 'early_stopping': textgenerationwebui_settings.early_stopping, - 'seed': textgenerationwebui_settings.seed, - 'add_bos_token': textgenerationwebui_settings.add_bos_token, - 'stopping_strings': getStoppingStrings(isImpersonate, false), - 'truncation_length': max_context, - 'ban_eos_token': textgenerationwebui_settings.ban_eos_token, - 'skip_special_tokens': textgenerationwebui_settings.skip_special_tokens, - }; + generate_data = getTextGenGenerationData(finalPromt, this_amount_gen, isImpersonate); } if (main_api == 'novel') { const this_settings = novelai_settings[novelai_setting_names[nai_settings.preset_settings_novel]]; - generate_data = { - "input": finalPromt, - "model": nai_settings.model_novel, - "use_string": true, - "temperature": parseFloat(nai_settings.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(nai_settings.rep_pen_novel), - "repetition_penalty_range": parseInt(nai_settings.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 - }; + generate_data = getNovelGenerationData(finalPromt, this_settings); } - let 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'; - } + let generate_url = getGenerateUrl(); console.log('rungenerate calling API'); if (main_api == 'openai') { @@ -2170,6 +2154,70 @@ async function Generate(type, automatic_trigger, force_name2) { //console.log('generate ending'); } //generate ends +// TODO: move to textgen-settings.js +function getTextGenGenerationData(finalPromt, this_amount_gen, isImpersonate) { + return { + 'prompt': finalPromt, + 'max_new_tokens': this_amount_gen, + 'do_sample': textgenerationwebui_settings.do_sample, + 'temperature': textgenerationwebui_settings.temp, + 'top_p': textgenerationwebui_settings.top_p, + 'typical_p': textgenerationwebui_settings.typical_p, + 'repetition_penalty': textgenerationwebui_settings.rep_pen, + 'encoder_repetition_penalty': textgenerationwebui_settings.encoder_rep_pen, + 'top_k': textgenerationwebui_settings.top_k, + 'min_length': textgenerationwebui_settings.min_length, + 'no_repeat_ngram_size': textgenerationwebui_settings.no_repeat_ngram_size, + 'num_beams': textgenerationwebui_settings.num_beams, + 'penalty_alpha': textgenerationwebui_settings.penalty_alpha, + 'length_penalty': textgenerationwebui_settings.length_penalty, + 'early_stopping': textgenerationwebui_settings.early_stopping, + 'seed': textgenerationwebui_settings.seed, + 'add_bos_token': textgenerationwebui_settings.add_bos_token, + 'stopping_strings': getStoppingStrings(isImpersonate, false), + 'truncation_length': max_context, + 'ban_eos_token': textgenerationwebui_settings.ban_eos_token, + 'skip_special_tokens': textgenerationwebui_settings.skip_special_tokens, + }; +} + +// TODO: move to nai-settings.js +function getNovelGenerationData(finalPromt, this_settings) { + return { + "input": finalPromt, + "model": nai_settings.model_novel, + "use_string": true, + "temperature": parseFloat(nai_settings.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(nai_settings.rep_pen_novel), + "repetition_penalty_range": parseInt(nai_settings.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 + }; +} + +function getGenerateUrl() { + let 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'; + } + return generate_url; +} + function shouldContinueMultigen(getMessage) { const nameString = is_pygmalion ? 'You:' : `${name1}:`; return message_already_generated.indexOf(nameString) === -1 && //if there is no 'You:' in the response msg @@ -2382,12 +2430,18 @@ function deactivateSendButtons() { } function resetChatState() { - 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) - name2 = systemUserName; // replaces deleted charcter name with system user since it will be displayed next. - chat = [...safetychat]; // sets up system user to tell user about having deleted a character - chat_metadata = {}; // resets chat metadata - characters.length = 0; // resets the characters array, forcing getcharacters to reset + //unsets the chid in settings (this prevents AutoLoadChat from trying to load the wrong ChID + active_character = "invalid-safety-id"; + //unsets expected chid before reloading (related to getCharacters/printCharacters from using old arrays) + this_chid = "invalid-safety-id"; + // replaces deleted charcter name with system user since it will be displayed next. + name2 = systemUserName; + // sets up system user to tell user about having deleted a character + chat = [...safetychat]; + // resets chat metadata + chat_metadata = {}; + // resets the characters array, forcing getcharacters to reset + characters.length = 0; } function setCharacterId(value) { @@ -2455,7 +2509,7 @@ async function renameCharacter() { throw new Error('New character not selected'); } - callPopup('Character renamed! Sprites folder (if any) should be renamed manually.', 'text'); + callPopup('

Character renamed!

Sprites folder (if any) should be renamed manually.', 'text'); } else { throw new Error('Newly renamed character was lost?'); @@ -2626,12 +2680,6 @@ async function openCharacterChat(file_name) { $("#load_select_chat_div").css("display", "block"); } -/* function openNavToggle() { - if (!$("#nav-toggle").prop("checked")) { - $("#nav-toggle").trigger("click"); - } -} */ - ////////// OPTIMZED MAIN API CHANGE FUNCTION //////////// function changeMainAPI() { @@ -3295,9 +3343,7 @@ function select_selected_character(chid) { $("#form_create").attr("actiontype", "editcharacter"); active_character = chid; - //console.log('select_selected_character() -- active_character -- '+chid+'(ChID of '+display_name+')'); saveSettingsDebounced(); - //console.log('select_selected_character() -- called saveSettings() to save -- active_character -- '+active_character+'(ChID of '+display_name+')'); } function select_rm_create() { @@ -3730,7 +3776,12 @@ $(document).ready(function () { //console.log('showing ""..."'); /* if (!selected_group) { } else { */ - $("#chat").children().filter('[mesid="' + (count_view_mes - 1) + '"]').children('.mes_block').children('.mes_text').html('...'); //shows "..." while generating + $("#chat") + .children() + .filter('[mesid="' + (count_view_mes - 1) + '"]') + .children('.mes_block') + .children('.mes_text') + .html('...'); //shows "..." while generating /* } */ } else { //console.log('showing previously generated swipe candidate, or "..."'); @@ -3927,7 +3978,11 @@ $(document).ready(function () { }) } else { $(selector).each(function () { - const isValidSearch = $(this).children(".flex-container").children(".ch_name").text().toLowerCase().includes(searchValue); + const isValidSearch = $(this) + .find(".ch_name") + .text() + .toLowerCase() + .includes(searchValue); if (isValidSearch) { if (selectedTagId && !isElementTagged(this, selectedTagId)) { @@ -4013,8 +4068,6 @@ $(document).ready(function () { chat.length = 0; chat_metadata = {}; getChat(); - - //console.log('Clicked on '+characters[this_chid].name+' Active_Character set to: '+active_character+' (ChID:'+this_chid+')'); } } else { //if clicked on character that was already selected @@ -4198,12 +4251,17 @@ $(document).ready(function () { data: msg, cache: false, success: function (html) { - //RossAscends: New handling of character deletion that avoids page refreshes and should have fixed char corruption due to cache problems. - //due to how it is handled with 'popup_type', i couldn't find a way to make my method completely modular, so keeping it in TAI-main.js as a new default. + //RossAscends: New handling of character deletion that avoids page refreshes and should have + // fixed char corruption due to cache problems. + //due to how it is handled with 'popup_type', i couldn't find a way to make my method completely + // modular, so keeping it in TAI-main.js as a new default. //this allows for dynamic refresh of character list after deleting a character. - $("#character_cross").click(); // closes advanced editing popup - this_chid = "invalid-safety-id"; // unsets expected chid before reloading (related to getCharacters/printCharacters from using old arrays) - characters.length = 0; // resets the characters array, forcing getcharacters to reset + // closes advanced editing popup + $("#character_cross").click(); + // unsets expected chid before reloading (related to getCharacters/printCharacters from using old arrays) + this_chid = "invalid-safety-id"; + // resets the characters array, forcing getcharacters to reset + characters.length = 0; name2 = systemUserName; // replaces deleted charcter name with system user since she will be displayed next. chat = [...safetychat]; // sets up system user to tell user about having deleted a character chat_metadata = {}; // resets chat metadata @@ -4217,8 +4275,6 @@ $(document).ready(function () { printMessages(); // prints out system user's 'deleted character' message //console.log("#dialogue_popup_ok(del-char) >>>> saving"); saveSettingsDebounced(); // saving settings to keep changes to variables - //getCharacters(); - //$('#create_button_div').html(html); }, }); } @@ -5258,11 +5314,19 @@ $(document).ready(function () { $("html").on('touchstart mousedown', function (e) { var clickTarget = $(e.target); - if ($('#export_format_popup').is(':visible') && clickTarget.closest('#export_button').length == 0 && clickTarget.closest('#export_format_popup').length == 0) { + if ($('#export_format_popup').is(':visible') + && clickTarget.closest('#export_button').length == 0 + && clickTarget.closest('#export_format_popup').length == 0) { $('#export_format_popup').hide(); } - const forbiddenTargets = ['#character_cross', '#avatar-and-name-block', '#shadow_popup', '#world_popup']; + const forbiddenTargets = [ + '#character_cross', + '#avatar-and-name-block', + '#shadow_popup', + '#world_popup', + '.ui-widget-content' + ]; for (const id of forbiddenTargets) { if (clickTarget.closest(id).length > 0) { return; diff --git a/public/style.css b/public/style.css index 4a38938b9..61e9a5dfa 100644 --- a/public/style.css +++ b/public/style.css @@ -1332,8 +1332,7 @@ input[type=search]:focus::-webkit-search-cancel-button { } #dialogue_popup { - - width: 300px; + width: 500px; position: absolute; z-index: 9999; margin-left: auto; @@ -1347,22 +1346,43 @@ input[type=search]:focus::-webkit-search-cancel-button { padding: 4px; background-color: var(--black70a); border-radius: 10px; + max-height: 90svh; + display: flex; + flex-direction: column; + overflow-y: hidden; +} + +#dialogue_popup_holder { + display: flex; + flex-direction: column; + height: 100%; + overflow-y: hidden; + padding: 0 10px; +} + +#dialogue_popup_text { + flex-grow: 1; + overflow-y: auto; + height: 100%; +} + +#dialogue_popup_controls { + display: flex; + align-self: center; + gap: 20px; } #dialogue_popup_ok { - display: inline-block; - margin-right: 20px; background-color: var(--crimson70a); cursor: pointer; } #dialogue_popup_input { + margin: 10px 0; width: 100%; } #dialogue_popup_cancel { - display: inline-block; - margin-left: 20px; cursor: pointer; } @@ -3765,7 +3785,7 @@ body.noShadows * { } */ #rm_ch_create_block textarea { - max-height: 200px; + max-height: 180px; } #talkativeness_hint span {