diff --git a/public/script.js b/public/script.js index 94c2b5fd5..df429ad9a 100644 --- a/public/script.js +++ b/public/script.js @@ -1028,7 +1028,7 @@ function getStoppingStrings(isImpersonate, addSpace) { const charString = `\n${name2}:`; const userString = is_pygmalion ? `\nYou:` : `\n${name1}:`; const result = isImpersonate ? charString : userString; - return addSpace ? `${result} ` : result; + return [addSpace ? `${result} ` : result]; } function getSlashCommand(message, type) { @@ -1458,21 +1458,8 @@ async function Generate(type, automatic_trigger, force_name2) { storyString += appendToStoryString(charPersonality, power_user.disable_personality_formatting ? '' : 'Personality: '); storyString += appendToStoryString(Scenario, power_user.disable_scenario_formatting ? '' : 'Scenario: '); } else { - if (charDescription !== undefined) { - if (charPersonality.length > 0 && !power_user.disable_personality_formatting) { - charPersonality = name2 + "'s personality: " + charPersonality; - } - } - storyString += appendToStoryString(charDescription, ''); - - if (storyString.endsWith('\n')) { - storyString = storyString.slice(0, -1); - } - - if (count_view_mes < topAnchorDepth) { - storyString += '\n' + appendToStoryString(charPersonality, ''); - } + storyString += appendToStoryString(charPersonality, power_user.disable_personality_formatting ? '' : name2 + "'s personality: "); } if (power_user.custom_chat_separator && power_user.custom_chat_separator.length) { @@ -1484,9 +1471,6 @@ async function Generate(type, automatic_trigger, force_name2) { if (power_user.pin_examples && main_api !== 'openai') { for (let example of mesExamplesArray) { if (!is_pygmalion) { - if (!storyString.endsWith('\n')) { - storyString += '\n'; - } const replaceString = power_user.disable_examples_formatting ? '' : `This is how ${name2} should talk`; example = example.replace(//i, replaceString); } @@ -1645,9 +1629,6 @@ async function Generate(type, automatic_trigger, force_name2) { } } if (!is_pygmalion && Scenario && Scenario.length > 0) { - if (!storyString.endsWith('\n')) { - storyString += '\n'; - } storyString += !power_user.disable_scenario_formatting ? `Circumstances and context of the dialogue: ${Scenario}\n` : `${Scenario}\n`; } console.log('calling runGenerate'); @@ -1682,9 +1663,9 @@ async function Generate(type, automatic_trigger, force_name2) { 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'; + let personalityAndAnchor = [ charPersonality, anchorTop ].filter(x => x).join(' '); + if (personalityAndAnchor && !is_pygmalion) { + item += "[" + personalityAndAnchor + ']\n'; } } if (i >= arrMes.length - 1 && count_view_mes > 8 && $.trim(item).substr(0, (name1 + ":").length) == name1 + ":" && !is_pygmalion) {//For add anchor in end @@ -1898,7 +1879,7 @@ async function Generate(type, automatic_trigger, force_name2) { 'early_stopping': textgenerationwebui_settings.early_stopping, 'seed': textgenerationwebui_settings.seed, 'add_bos_token': textgenerationwebui_settings.add_bos_token, - 'custom_stopping_strings': JSON.stringify(getStoppingStrings(isImpersonate, false)), + '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, @@ -2196,13 +2177,15 @@ function cleanUpMessage(getMessage, isImpersonate) { getMessage = getMessage.trim(); } - const stoppingString = getStoppingStrings(isImpersonate, false); + const stoppingStrings = getStoppingStrings(isImpersonate, false); - if (stoppingString.length) { - for (let j = stoppingString.length - 1; j > 0; j--) { - if (getMessage.slice(-j) === stoppingString.slice(0, j)) { - getMessage = getMessage.slice(0, -j); - break; + for (const stoppingString of stoppingStrings) { + if (stoppingString.length) { + for (let j = stoppingString.length - 1; j > 0; j--) { + if (getMessage.slice(-j) === stoppingString.slice(0, j)) { + getMessage = getMessage.slice(0, -j); + break; + } } } } diff --git a/public/scripts/kai-settings.js b/public/scripts/kai-settings.js index 654d36a1a..842a571e2 100644 --- a/public/scripts/kai-settings.js +++ b/public/scripts/kai-settings.js @@ -85,7 +85,7 @@ function getKoboldGenerationData(finalPromt, this_settings, this_amount_gen, thi s7: this_settings.sampler_order[6], use_world_info: false, singleline: kai_settings.single_line, - stop_sequence: kai_settings.use_stop_sequence ? [getStoppingStrings(isImpersonate, false)] : undefined, + stop_sequence: kai_settings.use_stop_sequence ? getStoppingStrings(isImpersonate, false) : undefined, }; return generate_data; } diff --git a/public/scripts/textgen-settings.js b/public/scripts/textgen-settings.js index 918d1995e..687bdf7f8 100644 --- a/public/scripts/textgen-settings.js +++ b/public/scripts/textgen-settings.js @@ -26,11 +26,11 @@ let textgenerationwebui_settings = { seed: -1, preset: 'Default', add_bos_token: true, - custom_stopping_strings: [], + stopping_strings: [], truncation_length: 2048, ban_eos_token: false, streaming: false, - fn_index: 34, + fn_index: 43, skip_special_tokens: true, }; diff --git a/public/style.css b/public/style.css index a6210110b..917acef65 100644 --- a/public/style.css +++ b/public/style.css @@ -169,12 +169,12 @@ code { #bg1 { background-image: url(backgrounds/tavern1.jpg); - z-index: 0; + z-index: -2; } #bg_custom { background-image: none; - z-index: 1; + z-index: -1; } /*TOPPER margin*/ diff --git a/readme.md b/readme.md index 2eca04a15..a73f55c09 100644 --- a/readme.md +++ b/readme.md @@ -61,7 +61,8 @@ https://rentry.org/TAI_Termux | Character Expressions | See your character reacting to your messages!

**You need to provide your own character images!**

1. Create a folder in TavernAI called `public/characters/`, where `` is the name of your character.
2. For the base emotion classification model, put six PNG files there with the following names: `joy.png`, `anger.png`, `fear.png`, `love.png`, `sadness.png`, `surprise.png`. Other models may provide other options.
3. Images only display in desktop mode. | `classify` | image | | Memory | Chatbot long-term memory simulation using automatic message context summarization. | `summarize` | image | | D&D Dice | A set of 7 classic D&D dice for all your dice rolling needs.

*I used to roll the dice.
Feel the fear in my enemies' eyes* | None | image | -| Author's Note | Built-in extension that allows you to append notes that will be added to the context and steer the story and character in a specific direction. Because it's sent after the character description, it has a lot of weight. Thanks Aliážµ#2222 for pitching the idea! | None | ![image](https://user-images.githubusercontent.com/128647114/230311637-d809cd9b-af66-4dd1-a310-7a27e847c011.png) +| Author's Note | Built-in extension that allows you to append notes that will be added to the context and steer the story and character in a specific direction. Because it's sent after the character description, it has a lot of weight. Thanks Aliážµ#2222 for pitching the idea! | None | ![image](https://user-images.githubusercontent.com/128647114/230311637-d809cd9b-af66-4dd1-a310-7a27e847c011.png) | +| Character Backgrounds | Built-in extension to assign unique backgrounds to specific chats or groups. | None | image | ## UI/CSS/Quality of Life tweaks by RossAscends diff --git a/server.js b/server.js index 7031a752f..c42ac630a 100644 --- a/server.js +++ b/server.js @@ -424,7 +424,7 @@ app.post("/generate_textgenerationwebui", jsonParser, async function (request, r let result = JSON.parse(request.body.data)[0]; let prompt = result; - let stopping_strings = JSON.parse(request.body.data)[1].custom_stopping_strings; + let stopping_strings = JSON.parse(request.body.data)[1].stopping_strings; try { for await (const text of readWebsocket()) {