improved preset selection logic

This commit is contained in:
Stefan Daniel Schwarz
2023-08-23 22:22:52 +02:00
parent 9b932dfa15
commit 7cafa5d374
2 changed files with 70 additions and 41 deletions

View File

@ -77,18 +77,20 @@ function highlightDefaultPreset() {
* @param {string} preset Preset name. * @param {string} preset Preset name.
*/ */
function selectContextPreset(preset) { function selectContextPreset(preset) {
// If preset is not already selected, select it // If context template is not already selected, select it
if (power_user.context.preset !== preset) { if (preset !== power_user.context.preset) {
$('#context_presets').val(preset).trigger('change'); $('#context_presets').val(preset).trigger('change');
toastr.info(`Context Template: preset "${preset}" auto-selected`); toastr.info(`Context Template: preset "${preset}" auto-selected`);
// If instruct mode is disabled, enable it
if (!power_user.instruct.enabled) {
$('#instruct_enabled').prop('checked', true).trigger('change');
power_user.instruct.enabled = true;
toastr.info(`Instruct Mode enabled`);
}
} }
// If instruct mode is disabled, enable it, except for default context template
if (!power_user.instruct.enabled && preset !== 'Default') {
power_user.instruct.enabled = true;
$('#instruct_enabled').prop('checked', true).trigger('change');
toastr.info(`Instruct Mode enabled`);
}
saveSettingsDebounced();
} }
/** /**
@ -96,18 +98,20 @@ function selectContextPreset(preset) {
* @param {string} preset Preset name. * @param {string} preset Preset name.
*/ */
export function selectInstructPreset(preset) { export function selectInstructPreset(preset) {
// If preset is not already selected, select it // If instruct preset is not already selected, select it
if (power_user.instruct.preset !== preset) { if (preset !== power_user.instruct.preset) {
$('#instruct_presets').val(preset).trigger('change'); $('#instruct_presets').val(preset).trigger('change');
toastr.info(`Instruct Mode: preset "${preset}" auto-selected`); toastr.info(`Instruct Mode: preset "${preset}" auto-selected`);
// If instruct mode is disabled, enable it
if (!power_user.instruct.enabled) {
$('#instruct_enabled').prop('checked', true).trigger('change');
power_user.instruct.enabled = true;
toastr.info(`Instruct Mode enabled`);
}
} }
// If instruct mode is disabled, enable it
if (!power_user.instruct.enabled) {
power_user.instruct.enabled = true;
$('#instruct_enabled').prop('checked', true).trigger('change');
toastr.info(`Instruct Mode enabled`);
}
saveSettingsDebounced();
} }
/** /**
@ -122,30 +126,42 @@ export function autoSelectInstructPreset(modelId) {
return false; return false;
} }
for (const preset of instruct_presets) { // Select matching instruct preset
// If context template matches the preset name let foundMatch = false;
if (power_user.context.preset === preset.name) { for (const instruct_preset of instruct_presets) {
selectInstructPreset(preset.name); // If instruct preset matches the context template
// Else if activation regex is set, check if it matches the model id if (instruct_preset.name === power_user.context.preset) {
} else if (preset.activation_regex) { foundMatch = true;
try { selectInstructPreset(instruct_preset.name);
const regex = new RegExp(preset.activation_regex, 'i'); break;
// Stop on first match so it won't cycle back and forth between presets if multiple regexes match
if (regex.test(modelId)) {
selectInstructPreset(preset.name);
}
} catch {
// If regex is invalid, ignore it
console.warn(`Invalid instruct activation regex in preset "${preset.name}"`);
}
} }
} }
// If no match was found, auto-select instruct preset
if (!foundMatch) {
for (const preset of instruct_presets) {
// If activation regex is set, check if it matches the model id
if (preset.activation_regex) {
try {
const regex = new RegExp(preset.activation_regex, 'i');
if (power_user.default_instruct && power_user.instruct.preset !== power_user.default_instruct) { // Stop on first match so it won't cycle back and forth between presets if multiple regexes match
if (instruct_presets.some(p => p.name === power_user.default_instruct)) { if (regex.test(modelId)) {
console.log(`Instruct mode: default preset "${power_user.default_instruct}" selected`); selectInstructPreset(preset.name);
$('#instruct_presets').val(power_user.default_instruct).trigger('change');
return true;
}
} catch {
// If regex is invalid, ignore it
console.warn(`Invalid instruct activation regex in preset "${preset.name}"`);
}
}
}
if (power_user.default_instruct && power_user.instruct.preset !== power_user.default_instruct) {
if (instruct_presets.some(p => p.name === power_user.default_instruct)) {
console.log(`Instruct mode: default preset "${power_user.default_instruct}" selected`);
$('#instruct_presets').val(power_user.default_instruct).trigger('change');
}
} }
} }
@ -301,6 +317,9 @@ jQuery(() => {
// When instruct mode gets enabled, select context template matching selected instruct preset // When instruct mode gets enabled, select context template matching selected instruct preset
if (power_user.instruct.enabled) { if (power_user.instruct.enabled) {
$('#instruct_presets').trigger('change'); $('#instruct_presets').trigger('change');
// When instruct mode gets disabled, select default context preset
} else {
selectContextPreset('Default');
} }
}); });
@ -326,12 +345,20 @@ jQuery(() => {
} }
}); });
// Select matching context template
let foundMatch = false;
for (const context_preset of context_presets) { for (const context_preset of context_presets) {
// If context template matches the instruct preset // If context template matches the instruct preset
if (context_preset.name === name) { if (context_preset.name === name) {
selectContextPreset(name); foundMatch = true;
selectContextPreset(context_preset.name);
break;
} }
} }
if (!foundMatch) {
// If no match was found, select default context preset
selectContextPreset('Default');
}
highlightDefaultPreset(); highlightDefaultPreset();
}); });

View File

@ -936,10 +936,12 @@ function loadContextSettings() {
} }
}); });
// Select matching instruct preset
for (const instruct_preset of instruct_presets) { for (const instruct_preset of instruct_presets) {
// If instruct preset matches the context template // If instruct preset matches the context template
if (instruct_preset.name === name) { if (instruct_preset.name === name) {
selectInstructPreset(name); selectInstructPreset(instruct_preset.name);
break;
} }
} }
}); });