Move Poe nudges to Generate anchors appendage

This commit is contained in:
SillyLossy
2023-05-24 11:48:39 +03:00
parent 6bff759f1c
commit 85ef2b6848
3 changed files with 27 additions and 24 deletions

View File

@ -945,7 +945,7 @@
Influences bot behavior in its responses. Influences bot behavior in its responses.
</div> </div>
<div class="wide100p"> <div class="wide100p">
<textarea id="poe_nudge_text" class="text_pole textarea_compact" rows="6" maxlength="250"></textarea> <textarea id="poe_nudge_text" class="text_pole textarea_compact" rows="6" maxlength="2500"></textarea>
</div> </div>
</div> </div>
<div class="range-block"> <div class="range-block">
@ -959,7 +959,7 @@
Prompt that is used for Impersonation function Prompt that is used for Impersonation function
</div> </div>
<div class="wide100p"> <div class="wide100p">
<textarea id="poe_impersonation_prompt" class="text_pole textarea_compact" rows="6" maxlength="250"></textarea> <textarea id="poe_impersonation_prompt" class="text_pole textarea_compact" rows="6" maxlength="2500"></textarea>
</div> </div>
</div> </div>
</div> </div>

View File

@ -105,6 +105,7 @@ import {
generatePoe, generatePoe,
is_get_status_poe, is_get_status_poe,
setPoeOnlineStatus, setPoeOnlineStatus,
appendPoeAnchors,
} from "./scripts/poe.js"; } from "./scripts/poe.js";
import { import {
@ -1901,11 +1902,17 @@ async function Generate(type, { automatic_trigger, force_name2, resolve, reject,
} }
// Extension added strings // Extension added strings
const allAnchors = getAllExtensionPrompts(); let allAnchors = getAllExtensionPrompts();
const afterScenarioAnchor = getExtensionPrompt(extension_prompt_types.AFTER_SCENARIO); const afterScenarioAnchor = getExtensionPrompt(extension_prompt_types.AFTER_SCENARIO);
let zeroDepthAnchor = getExtensionPrompt(extension_prompt_types.IN_CHAT, 0, ' '); let zeroDepthAnchor = getExtensionPrompt(extension_prompt_types.IN_CHAT, 0, ' ');
let { worldInfoString, worldInfoBefore, worldInfoAfter } = getWorldInfoPrompt(chat2); let { worldInfoString, worldInfoBefore, worldInfoAfter } = getWorldInfoPrompt(chat2);
// Moved here to not overflow the Poe context with added prompt bits
if (main_api == 'poe') {
allAnchors = appendPoeAnchors(type, allAnchors);
zeroDepthAnchor = appendPoeAnchors(type, zeroDepthAnchor);
}
// hack for regeneration of the first message // hack for regeneration of the first message
if (chat2.length == 0) { if (chat2.length == 0) {
chat2.push(''); chat2.push('');

View File

@ -86,6 +86,23 @@ function onBotChange() {
saveSettingsDebounced(); saveSettingsDebounced();
} }
export function appendPoeAnchors(type, prompt) {
const isImpersonate = type === 'impersonate';
const isQuiet = type === 'quiet';
if (poe_settings.character_nudge && !isQuiet && !isImpersonate) {
let characterNudge = '\n' + substituteParams(poe_settings.character_nudge_message);
prompt += characterNudge;
}
if (poe_settings.impersonation_prompt && isImpersonate) {
let impersonationNudge = '\n' + substituteParams(poe_settings.impersonation_prompt);
prompt += impersonationNudge;
}
return prompt;
}
async function generatePoe(type, finalPrompt, signal) { async function generatePoe(type, finalPrompt, signal) {
if (poe_settings.auto_purge) { if (poe_settings.auto_purge) {
let count_to_delete = -1; let count_to_delete = -1;
@ -115,28 +132,7 @@ async function generatePoe(type, finalPrompt, signal) {
console.log('Could not jailbreak the bot'); console.log('Could not jailbreak the bot');
} }
const isImpersonate = type === 'impersonate';
const isQuiet = type === 'quiet'; const isQuiet = type === 'quiet';
if (poe_settings.character_nudge && !isQuiet && !isImpersonate) {
let characterNudge = '\n' + substituteParams(poe_settings.character_nudge_message);
finalPrompt += characterNudge;
}
if (poe_settings.impersonation_prompt && isImpersonate) {
let impersonationNudge = '\n' + substituteParams(poe_settings.impersonation_prompt);
finalPrompt += impersonationNudge;
}
// If prompt overflows the max context, reduce it (or the generation would fail)
// Split by sentence boundary and remove sentence-by-sentence from the beginning
while (getTokenCount(finalPrompt) > max_context) {
const sentences = finalPrompt.split(/([.?!])\s+/);
const removed = sentences.shift();
console.log(`Reducing Poe context due to overflow. Sentence dropped from prompt: "${removed}"`);
finalPrompt = sentences.join('');
}
const reply = await sendMessage(finalPrompt, !isQuiet, signal); const reply = await sendMessage(finalPrompt, !isQuiet, signal);
got_reply = true; got_reply = true;
return reply; return reply;