(Beta) Add instruct mode #250

This commit is contained in:
SillyLossy
2023-05-10 02:13:14 +03:00
parent f5b2a9a213
commit 730e3578ab
3 changed files with 152 additions and 27 deletions

View File

@ -7,9 +7,11 @@ import {
reloadMarkdownProcessor,
reloadCurrentChat,
getRequestHeaders,
substituteParams,
} from "../script.js";
import {
groups,
selected_group,
} from "./group-chats.js";
export {
@ -109,6 +111,16 @@ let power_user = {
allow_name2_display: false,
hotswap_enabled: true,
timer_enabled: true,
instruct: {
enabled: false,
wrap: true,
names: false,
system_prompt: "Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\nWrite {{char}}'s next reply in a fictional roleplay chat between {{user}} and {{char}}. Write 1 reply only.",
system_sequence: '',
input_sequence: '### Instruction:',
output_sequence: '### Response:',
}
};
let themes = [];
@ -514,6 +526,59 @@ function loadPowerUserSettings(settings, data) {
$(`#character_sort_order option[data-order="${power_user.sort_order}"][data-field="${power_user.sort_field}"]`).prop("selected", true);
sortCharactersList();
reloadMarkdownProcessor(power_user.render_formulas);
loadInstructMode();
}
function loadInstructMode() {
const controls = [
{ id: "instruct_enabled", property: "enabled", isCheckbox: true },
{ id: "instruct_wrap", property: "wrap", isCheckbox: true },
{ id: "instruct_system_prompt", property: "system_prompt", isCheckbox: false },
{ id: "instruct_system_sequence", property: "system_sequence", isCheckbox: false },
{ id: "instruct_input_sequence", property: "input_sequence", isCheckbox: false },
{ id: "instruct_output_sequence", property: "output_sequence", isCheckbox: false },
{ id: "instruct_names", property: "names", isCheckbox: true },
];
controls.forEach(control => {
const $element = $(`#${control.id}`);
if (control.isCheckbox) {
$element.prop('checked', power_user.instruct[control.property]);
} else {
$element.val(power_user.instruct[control.property]);
}
$element.on('input', function () {
power_user.instruct[control.property] = control.isCheckbox ? $(this).prop('checked') : $(this).val();
saveSettingsDebounced();
});
});
}
export function formatInstructModeChat(name, mes, isUser) {
const includeNames = power_user.instruct.names || (selected_group && !isUser);
const sequence = isUser ? power_user.instruct.input_sequence : power_user.instruct.output_sequence;
const separator = power_user.instruct.wrap ? '\n' : '';
const textArray = includeNames ? [sequence, name, ': ', mes, separator] : [sequence, mes, separator];
const text = textArray.filter(x => x).join(separator);
return text;
}
export function formatInstructStoryString(story) {
const sequence = power_user.instruct.system_sequence || '';
const prompt = substituteParams(power_user.instruct.system_prompt) || '';
const separator = power_user.instruct.wrap ? '\n' : '';
const textArray = [sequence, prompt, story, separator];
const text = textArray.filter(x => x).join(separator);
return text;
}
export function formatInstructModePrompt(isImpersonate) {
const sequence = isImpersonate ? power_user.instruct.input_sequence : power_user.instruct.output_sequence;
const separator = power_user.instruct.wrap ? '\n' : '';
const text = separator + sequence;
return text;
}
const sortFunc = (a, b) => power_user.sort_order == 'asc' ? compareFunc(a, b) : compareFunc(b, a);