diff --git a/package-lock.json b/package-lock.json index 282dc6ca3..248e48e13 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2413,9 +2413,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", diff --git a/package.json b/package.json index 1c6f278de..db996b17c 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,9 @@ }, "vectra": { "openai": "^4.17.0" + }, + "axios": { + "follow-redirects": "^1.15.4" } }, "name": "sillytavern", diff --git a/public/index.html b/public/index.html index cb3c04def..0fd9b2906 100644 --- a/public/index.html +++ b/public/index.html @@ -1161,8 +1161,8 @@ Temperature
- - + +
@@ -1270,6 +1270,30 @@
--> +
+

+
+
+ + +
+ Dynamic Temperature +
+
+

+
+
+ Minimum Temp + + +
+
+ Maximum Temp + + +
+
+

Mirostat
@@ -1315,18 +1339,6 @@

-
-

DynaTemp -
-

-
-
- DynaTemp Range - - -
-
-

Contrast Search
diff --git a/public/script.js b/public/script.js index adf3e1eaf..e5624965a 100644 --- a/public/script.js +++ b/public/script.js @@ -3473,7 +3473,7 @@ async function Generate(type, { automatic_trigger, force_name2, quiet_prompt, qu // need a detection for what the quiet prompt is being asked for... // Bail out early? - if (quietToLoud !== true) { + if (!isInstruct && !quietToLoud) { return lastMesString; } } @@ -3481,7 +3481,7 @@ async function Generate(type, { automatic_trigger, force_name2, quiet_prompt, qu // Get instruct mode line if (isInstruct && !isContinue) { - const name = isImpersonate ? name1 : name2; + const name = (quiet_prompt && !quietToLoud) ? 'System' : (isImpersonate ? name1 : name2); lastMesString += formatInstructModePrompt(name, isImpersonate, promptBias, name1, name2); } diff --git a/public/scripts/extensions/gallery/index.js b/public/scripts/extensions/gallery/index.js index e297c2589..815170897 100644 --- a/public/scripts/extensions/gallery/index.js +++ b/public/scripts/extensions/gallery/index.js @@ -4,7 +4,7 @@ import { characters, getRequestHeaders, } from '../../../script.js'; -import { selected_group } from '../../group-chats.js'; +import { groups, selected_group } from '../../group-chats.js'; import { loadFileToDocument, delay } from '../../utils.js'; import { loadMovingUIState } from '../../power-user.js'; import { dragElement } from '../../RossAscends-mods.js'; @@ -416,7 +416,26 @@ function viewWithDragbox(items) { // Registers a simple command for opening the char gallery. registerSlashCommand('show-gallery', showGalleryCommand, ['sg'], '– shows the gallery', true, true); +registerSlashCommand('list-gallery', listGalleryCommand, ['lg'], '[optional char=charName] [optional group=groupName] – list images in the gallery of the current char / group or a specified char / group', true, true); function showGalleryCommand(args) { showCharGallery(); } + +async function listGalleryCommand(args) { + try { + let url = args.char ?? (args.group ? groups.find(it=>it.name == args.group)?.id : null) ?? (selected_group || this_chid); + if (!args.char && !args.group && !selected_group && this_chid) { + const char = characters[this_chid]; + url = char.avatar.replace('.png', ''); + } + + const items = await getGalleryItems(url); + return JSON.stringify(items.map(it=>it.src)); + + } catch (err) { + console.trace(); + console.error(err); + } + return JSON.stringify([]); +} diff --git a/public/scripts/power-user.js b/public/scripts/power-user.js index 035ed9d83..1f40c72b2 100644 --- a/public/scripts/power-user.js +++ b/public/scripts/power-user.js @@ -608,7 +608,8 @@ async function CreateZenSliders(elmnt) { sliderID == 'rep_pen_range') { decimals = 0; } - if (sliderID == 'dynatemp_range_textgenerationwebui') { + if (sliderID == 'min_temp_textgenerationwebui' || + sliderID == 'max_temp_textgenerationwebui') { decimals = 2; } if (sliderID == 'eta_cutoff_textgenerationwebui' || @@ -635,13 +636,14 @@ async function CreateZenSliders(elmnt) { sliderID == 'tfs_textgenerationwebui' || sliderID == 'min_p_textgenerationwebui' || sliderID == 'temp_textgenerationwebui' || - sliderID == 'temp' || - sliderID == 'dynatemp_range_textgenerationwebui') { + sliderID == 'temp') { numSteps = 20; } if (sliderID == 'mirostat_eta_textgenerationwebui' || sliderID == 'penalty_alpha_textgenerationwebui' || - sliderID == 'length_penalty_textgenerationwebui') { + sliderID == 'length_penalty_textgenerationwebui' || + sliderID == 'min_temp_textgenerationwebui' || + sliderID == 'max_temp_textgenerationwebui') { numSteps = 50; } //customize off values diff --git a/public/scripts/textgen-settings.js b/public/scripts/textgen-settings.js index ed834c38a..037bb1b5d 100644 --- a/public/scripts/textgen-settings.js +++ b/public/scripts/textgen-settings.js @@ -79,7 +79,9 @@ const settings = { presence_pen: 0, do_sample: true, early_stopping: false, - dynatemp_range: 0, + dynatemp: false, + min_temp: 0, + max_temp: 2.0, seed: -1, preset: 'Default', add_bos_token: true, @@ -138,7 +140,9 @@ const setting_names = [ 'num_beams', 'length_penalty', 'min_length', - 'dynatemp_range', + 'dynatemp', + 'min_temp', + 'max_temp', 'encoder_rep_pen', 'freq_pen', 'presence_pen', @@ -706,7 +710,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate, 'model': getModel(), 'max_new_tokens': maxTokens, 'max_tokens': maxTokens, - 'temperature': settings.temp, + 'temperature': settings.dynatemp ? (settings.min_temp + settings.max_temp) / 2 : settings.temp, 'top_p': settings.top_p, 'typical_p': settings.typical_p, 'min_p': settings.min_p, @@ -720,7 +724,10 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate, 'length_penalty': settings.length_penalty, 'early_stopping': settings.early_stopping, 'add_bos_token': settings.add_bos_token, - 'dynatemp_range': settings.dynatemp_range, + 'dynamic_temperature': settings.dynatemp, + 'dynatemp_low': settings.min_temp, + 'dynatemp_high': settings.max_temp, + 'dynatemp_range': settings.dynatemp ? (settings.max_temp - settings.min_temp) / 2 : 0, 'stopping_strings': getStoppingStrings(isImpersonate, isContinue), 'stop': getStoppingStrings(isImpersonate, isContinue), 'truncation_length': max_context, diff --git a/public/scripts/world-info.js b/public/scripts/world-info.js index 13e7ae683..bc116f6e9 100644 --- a/public/scripts/world-info.js +++ b/public/scripts/world-info.js @@ -1916,6 +1916,11 @@ async function checkWorldInfo(chat, maxContext) { needsToScan = false; } + if (newEntries.length === 0) { + console.debug('No new entries activated, stopping'); + needsToScan = false; + } + if (needsToScan) { const text = newEntries .filter(x => !failedProbabilityChecks.has(x)) @@ -2017,13 +2022,17 @@ function filterByInclusionGroups(newEntries, allActivatedEntries) { for (const [key, group] of Object.entries(grouped)) { console.debug(`Checking inclusion group '${key}' with ${group.length} entries`, group); - if (!Array.isArray(group) || group.length <= 1) { - console.debug('Skipping inclusion group check, only one entry'); + if (Array.from(allActivatedEntries).some(x => x.group === key)) { + console.debug(`Skipping inclusion group check, group already activated '${key}'`); + // We need to forcefully deactivate all other entries in the group + for (const entry of group) { + newEntries.splice(newEntries.indexOf(entry), 1); + } continue; } - if (Array.from(allActivatedEntries).some(x => x.group === key)) { - console.debug(`Skipping inclusion group check, group already activated '${key}'`); + if (!Array.isArray(group) || group.length <= 1) { + console.debug('Skipping inclusion group check, only one entry'); continue; }