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
+
+
+
+
+
Mirostat
@@ -1315,18 +1339,6 @@
-
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;
}