Merge pull request #1004 from SillyTavern/prompt-manager-persona-description
Prompt manager persona description
This commit is contained in:
commit
9aa03402fa
|
@ -2887,6 +2887,7 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
|
||||||
cyclePrompt: cyclePrompt,
|
cyclePrompt: cyclePrompt,
|
||||||
systemPromptOverride: systemPrompt,
|
systemPromptOverride: systemPrompt,
|
||||||
jailbreakPromptOverride: jailbreakPrompt,
|
jailbreakPromptOverride: jailbreakPrompt,
|
||||||
|
personaDescription: personaDescription
|
||||||
}, dryRun);
|
}, dryRun);
|
||||||
generate_data = { prompt: prompt };
|
generate_data = { prompt: prompt };
|
||||||
|
|
||||||
|
|
|
@ -1772,6 +1772,12 @@ const chatCompletionDefaultPrompts = {
|
||||||
"system_prompt": true,
|
"system_prompt": true,
|
||||||
"marker": true,
|
"marker": true,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"identifier": "personaDescription",
|
||||||
|
"name": "Persona Description",
|
||||||
|
"system_prompt": true,
|
||||||
|
"marker": true,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1788,6 +1794,10 @@ const promptManagerDefaultPromptOrder = [
|
||||||
"identifier": "worldInfoBefore",
|
"identifier": "worldInfoBefore",
|
||||||
"enabled": true
|
"enabled": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"identifier": "personaDescription",
|
||||||
|
"enabled": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"identifier": "charDescription",
|
"identifier": "charDescription",
|
||||||
"enabled": true
|
"enabled": true
|
||||||
|
|
|
@ -339,7 +339,7 @@ function setupChatCompletionPromptManager(openAiSettings) {
|
||||||
},
|
},
|
||||||
promptOrder: {
|
promptOrder: {
|
||||||
strategy: 'global',
|
strategy: 'global',
|
||||||
dummyId: 100000
|
dummyId: 100001
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -577,6 +577,7 @@ function populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, ty
|
||||||
addToChatCompletion('charDescription');
|
addToChatCompletion('charDescription');
|
||||||
addToChatCompletion('charPersonality');
|
addToChatCompletion('charPersonality');
|
||||||
addToChatCompletion('scenario');
|
addToChatCompletion('scenario');
|
||||||
|
addToChatCompletion('personaDescription')
|
||||||
|
|
||||||
// Collection of control prompts that will always be positioned last
|
// Collection of control prompts that will always be positioned last
|
||||||
const controlPrompts = new MessageCollection('controlPrompts');
|
const controlPrompts = new MessageCollection('controlPrompts');
|
||||||
|
@ -626,34 +627,6 @@ function populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, ty
|
||||||
if (true === afterScenario) chatCompletion.insert(authorsNote, 'scenario');
|
if (true === afterScenario) chatCompletion.insert(authorsNote, 'scenario');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Persona Description
|
|
||||||
if (power_user.persona_description) {
|
|
||||||
const personaDescription = Message.fromPrompt(prompts.get('personaDescription'));
|
|
||||||
|
|
||||||
try {
|
|
||||||
switch (power_user.persona_description_position) {
|
|
||||||
case persona_description_positions.BEFORE_CHAR:
|
|
||||||
chatCompletion.insertAtStart(personaDescription, 'charDescription');
|
|
||||||
break;
|
|
||||||
case persona_description_positions.AFTER_CHAR:
|
|
||||||
chatCompletion.insertAtEnd(personaDescription, 'charDescription');
|
|
||||||
break;
|
|
||||||
case persona_description_positions.TOP_AN:
|
|
||||||
chatCompletion.insertAtStart(personaDescription, 'authorsNote');
|
|
||||||
break;
|
|
||||||
case persona_description_positions.BOTTOM_AN:
|
|
||||||
chatCompletion.insertAtEnd(personaDescription, 'authorsNote');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
if (error instanceof IdentifierNotFoundError) {
|
|
||||||
// Error is acceptable in this context
|
|
||||||
} else {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Decide whether dialogue examples should always be added
|
// Decide whether dialogue examples should always be added
|
||||||
if (power_user.pin_examples) {
|
if (power_user.pin_examples) {
|
||||||
populateDialogueExamples(prompts, chatCompletion);
|
populateDialogueExamples(prompts, chatCompletion);
|
||||||
|
@ -679,10 +652,12 @@ function populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, ty
|
||||||
* @param {string} quietPrompt - The quiet prompt to be used in the conversation.
|
* @param {string} quietPrompt - The quiet prompt to be used in the conversation.
|
||||||
* @param {string} bias - The bias to be added in the conversation.
|
* @param {string} bias - The bias to be added in the conversation.
|
||||||
* @param {Object} extensionPrompts - An object containing additional prompts.
|
* @param {Object} extensionPrompts - An object containing additional prompts.
|
||||||
*
|
* @param {string} systemPromptOverride
|
||||||
|
* @param {string} jailbreakPromptOverride
|
||||||
|
* @param {string} personaDescription
|
||||||
* @returns {Object} prompts - The prepared and merged system and user-defined prompts.
|
* @returns {Object} prompts - The prepared and merged system and user-defined prompts.
|
||||||
*/
|
*/
|
||||||
function preparePromptsForChatCompletion(Scenario, charPersonality, name2, worldInfoBefore, worldInfoAfter, charDescription, quietPrompt, bias, extensionPrompts, systemPromptOverride, jailbreakPromptOverride) {
|
function preparePromptsForChatCompletion({Scenario, charPersonality, name2, worldInfoBefore, worldInfoAfter, charDescription, quietPrompt, bias, extensionPrompts, systemPromptOverride, jailbreakPromptOverride, personaDescription} = {}) {
|
||||||
const scenarioText = Scenario ? `[Circumstances and context of the dialogue: ${Scenario}]` : '';
|
const scenarioText = Scenario ? `[Circumstances and context of the dialogue: ${Scenario}]` : '';
|
||||||
const charPersonalityText = charPersonality ? `[${name2}'s personality: ${charPersonality}]` : ''
|
const charPersonalityText = charPersonality ? `[${name2}'s personality: ${charPersonality}]` : ''
|
||||||
const groupNudge = `[Write the next reply only as ${name2}]`;
|
const groupNudge = `[Write the next reply only as ${name2}]`;
|
||||||
|
@ -695,6 +670,7 @@ function preparePromptsForChatCompletion(Scenario, charPersonality, name2, world
|
||||||
{ role: 'system', content: charDescription, identifier: 'charDescription' },
|
{ role: 'system', content: charDescription, identifier: 'charDescription' },
|
||||||
{ role: 'system', content: charPersonalityText, identifier: 'charPersonality' },
|
{ role: 'system', content: charPersonalityText, identifier: 'charPersonality' },
|
||||||
{ role: 'system', content: scenarioText, identifier: 'scenario' },
|
{ role: 'system', content: scenarioText, identifier: 'scenario' },
|
||||||
|
{ role: 'system', content: personaDescription, identifier: 'personaDescription' },
|
||||||
// Unordered prompts without marker
|
// Unordered prompts without marker
|
||||||
{ role: 'system', content: oai_settings.nsfw_avoidance_prompt, identifier: 'nsfwAvoidance' },
|
{ role: 'system', content: oai_settings.nsfw_avoidance_prompt, identifier: 'nsfwAvoidance' },
|
||||||
{ role: 'system', content: oai_settings.impersonation_prompt, identifier: 'impersonate' },
|
{ role: 'system', content: oai_settings.impersonation_prompt, identifier: 'impersonate' },
|
||||||
|
@ -793,6 +769,7 @@ function prepareOpenAIMessages({
|
||||||
cyclePrompt,
|
cyclePrompt,
|
||||||
systemPromptOverride,
|
systemPromptOverride,
|
||||||
jailbreakPromptOverride,
|
jailbreakPromptOverride,
|
||||||
|
personaDescription
|
||||||
} = {}, dryRun) {
|
} = {}, dryRun) {
|
||||||
// Without a character selected, there is no way to accurately calculate tokens
|
// Without a character selected, there is no way to accurately calculate tokens
|
||||||
if (!promptManager.activeCharacter && dryRun) return [null, false];
|
if (!promptManager.activeCharacter && dryRun) return [null, false];
|
||||||
|
@ -805,7 +782,19 @@ function prepareOpenAIMessages({
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Merge markers and ordered user prompts with system prompts
|
// Merge markers and ordered user prompts with system prompts
|
||||||
const prompts = preparePromptsForChatCompletion(Scenario, charPersonality, name2, worldInfoBefore, worldInfoAfter, charDescription, quietPrompt, bias, extensionPrompts, systemPromptOverride, jailbreakPromptOverride);
|
const prompts = preparePromptsForChatCompletion({
|
||||||
|
Scenario,
|
||||||
|
charPersonality,
|
||||||
|
name2,
|
||||||
|
worldInfoBefore,
|
||||||
|
worldInfoAfter,
|
||||||
|
charDescription,
|
||||||
|
quietPrompt,
|
||||||
|
bias,
|
||||||
|
extensionPrompts,
|
||||||
|
systemPromptOverride,
|
||||||
|
jailbreakPromptOverride,
|
||||||
|
personaDescription});
|
||||||
|
|
||||||
// Fill the chat completion with as much context as the budget allows
|
// Fill the chat completion with as much context as the budget allows
|
||||||
populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, type, cyclePrompt });
|
populateChatCompletion(prompts, chatCompletion, { bias, quietPrompt, type, cyclePrompt });
|
||||||
|
|
Loading…
Reference in New Issue