mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-02-09 00:28:52 +01:00
Fix prompts object reference being shared
By deepcloning a copy
This commit is contained in:
parent
f2c4645207
commit
a9fa42524d
@ -6,10 +6,10 @@ import {power_user} from "./power-user.js";
|
||||
* Register migrations for the prompt manager when settings are loaded or an Open AI preset is loaded.
|
||||
*/
|
||||
const registerPromptManagerMigration = () => {
|
||||
const migrate = (settings) => {
|
||||
const migrate = (settings, savePreset = null, presetName = null) => {
|
||||
if (settings.main_prompt || settings.nsfw_prompt || settings.jailbreak_prompt) {
|
||||
console.log('Running prompt manager configuration migration');
|
||||
if (settings.prompts === undefined || settings.prompts.length === 0) settings.prompts = chatCompletionDefaultPrompts.prompts;
|
||||
if (settings.prompts === undefined || settings.prompts.length === 0) settings.prompts = structuredClone(chatCompletionDefaultPrompts.prompts);
|
||||
|
||||
const findPrompt = (identifier) => settings.prompts.find(prompt => identifier === prompt.identifier);
|
||||
if (settings.main_prompt) {
|
||||
@ -26,11 +26,13 @@ const registerPromptManagerMigration = () => {
|
||||
findPrompt('jailbreak').content = settings.jailbreak_prompt
|
||||
delete settings.jailbreak_prompt;
|
||||
}
|
||||
|
||||
if (savePreset && presetName) savePreset(presetName, settings, false);
|
||||
}
|
||||
};
|
||||
|
||||
eventSource.on(event_types.SETTINGS_LOADED_BEFORE, settings => migrate(settings));
|
||||
eventSource.on(event_types.OAI_PRESET_CHANGED, event => migrate(event.preset));
|
||||
eventSource.on(event_types.OAI_PRESET_CHANGED, event => migrate(event.preset, event.savePreset, event.presetName));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2022,6 +2022,14 @@ function trySelectPresetByName(name) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Persist a settings preset with the given name
|
||||
*
|
||||
* @param name - Name of the preset
|
||||
* @param settings The OpenAi settings object
|
||||
* @param triggerUi Whether the change event of preset UI element should be emitted
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async function saveOpenAIPreset(name, settings, triggerUi = true) {
|
||||
const presetBody = {
|
||||
chat_completion_source: settings.chat_completion_source,
|
||||
@ -2354,16 +2362,6 @@ async function onLogitBiasPresetDeleteClick() {
|
||||
|
||||
// Load OpenAI preset settings
|
||||
function onSettingsPresetChange() {
|
||||
const presetName = $('#settings_perset_openai').find(":selected").text();
|
||||
oai_settings.preset_settings_openai = presetName;
|
||||
const preset = openai_settings[openai_setting_names[oai_settings.preset_settings_openai]];
|
||||
|
||||
eventSource.emit(event_types.OAI_PRESET_CHANGED, {preset: preset, settings: oai_settings})
|
||||
.then(() => saveOpenAIPreset(presetName, preset, false));
|
||||
|
||||
const updateInput = (selector, value) => $(selector).val(value).trigger('input');
|
||||
const updateCheckbox = (selector, value) => $(selector).prop('checked', value).trigger('input');
|
||||
|
||||
const settingsToUpdate = {
|
||||
chat_completion_source: ['#chat_completion_source', 'chat_completion_source', false],
|
||||
temperature: ['#temp_openai', 'temp_openai', false],
|
||||
@ -2402,21 +2400,37 @@ function onSettingsPresetChange() {
|
||||
assistant_prefill: ['#claude_assistant_prefill', 'assistant_prefill', false],
|
||||
};
|
||||
|
||||
for (const [key, [selector, setting, isCheckbox]] of Object.entries(settingsToUpdate)) {
|
||||
if (preset[key] !== undefined) {
|
||||
if (isCheckbox) {
|
||||
updateCheckbox(selector, preset[key]);
|
||||
} else {
|
||||
updateInput(selector, preset[key]);
|
||||
const presetName = $('#settings_perset_openai').find(":selected").text();
|
||||
oai_settings.preset_settings_openai = presetName;
|
||||
const preset = openai_settings[openai_setting_names[oai_settings.preset_settings_openai]];
|
||||
|
||||
const updateInput = (selector, value) => $(selector).val(value).trigger('input');
|
||||
const updateCheckbox = (selector, value) => $(selector).prop('checked', value).trigger('input');
|
||||
|
||||
// Allow subscribers to alter the preset before applying deltas
|
||||
eventSource.emit(event_types.OAI_PRESET_CHANGED, {
|
||||
preset: preset,
|
||||
presetName: presetName,
|
||||
settingsToUpdate: settingsToUpdate,
|
||||
settings: oai_settings,
|
||||
savePreset: saveOpenAIPreset
|
||||
}).finally(r =>{
|
||||
for (const [key, [selector, setting, isCheckbox]] of Object.entries(settingsToUpdate)) {
|
||||
if (preset[key] !== undefined) {
|
||||
if (isCheckbox) {
|
||||
updateCheckbox(selector, preset[key]);
|
||||
} else {
|
||||
updateInput(selector, preset[key]);
|
||||
}
|
||||
oai_settings[setting] = preset[key];
|
||||
}
|
||||
oai_settings[setting] = preset[key];
|
||||
}
|
||||
}
|
||||
|
||||
$(`#chat_completion_source`).trigger('change');
|
||||
$(`#openai_logit_bias_preset`).trigger('change');
|
||||
$(`#chat_completion_source`).trigger('change');
|
||||
$(`#openai_logit_bias_preset`).trigger('change');
|
||||
|
||||
saveSettingsDebounced();
|
||||
saveSettingsDebounced();
|
||||
});
|
||||
}
|
||||
|
||||
function getMaxContextOpenAI(value) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user