(CC) Move continue nudge at the end of completion (#3611) * Move continue nudge at the end of completion Closes #3607 * Move continue message together with nudge

070de9df2dabb722a4194f7643c631716f202f87

Cohee <18619528+Cohee1207@users.noreply.github.com>

Signed
3 files changed, +23 -14Showing whitespace changes
default/content/presets/openai/Default.json+1 -1
@@ -32,7 +32,7 @@
32 "new_chat_prompt": "[Start a new Chat]",32 "new_chat_prompt": "[Start a new Chat]",
33 "new_group_chat_prompt": "[Start a new group chat. Group members: {{group}}]",33 "new_group_chat_prompt": "[Start a new group chat. Group members: {{group}}]",
34 "new_example_chat_prompt": "[Example Chat]",34 "new_example_chat_prompt": "[Example Chat]",
35 "continue_nudge_prompt": "[Continue the following message. Do not include ANY parts of the original message. Use capitalization and punctuation as if your reply is a part of the original message: {{lastChatMessage}}]",35 "continue_nudge_prompt": "[Continue your last message without repeating its original content.]",
36 "bias_preset_selected": "Default (none)",36 "bias_preset_selected": "Default (none)",
37 "reverse_proxy": "",37 "reverse_proxy": "",
38 "proxy_password": "",38 "proxy_password": "",
default/content/settings.json+1 -1
@@ -593,7 +593,7 @@
593 "new_chat_prompt": "[Start a new Chat]",593 "new_chat_prompt": "[Start a new Chat]",
594 "new_group_chat_prompt": "[Start a new group chat. Group members: {{group}}]",594 "new_group_chat_prompt": "[Start a new group chat. Group members: {{group}}]",
595 "new_example_chat_prompt": "[Example Chat]",595 "new_example_chat_prompt": "[Example Chat]",
596 "continue_nudge_prompt": "[Continue the following message. Do not include ANY parts of the original message. Use capitalization and punctuation as if your reply is a part of the original message: {{lastChatMessage}}]",596 "continue_nudge_prompt": "[Continue your last message without repeating its original content.]",
597 "bias_preset_selected": "Default (none)",597 "bias_preset_selected": "Default (none)",
598 "bias_presets": {598 "bias_presets": {
599 "Default (none)": [],599 "Default (none)": [],
public/scripts/openai.js+21 -12
@@ -100,7 +100,7 @@ const default_wi_format = '{0}';
100const default_new_chat_prompt = '[Start a new Chat]';100const default_new_chat_prompt = '[Start a new Chat]';
101const default_new_group_chat_prompt = '[Start a new group chat. Group members: {{group}}]';101const default_new_group_chat_prompt = '[Start a new group chat. Group members: {{group}}]';
102const default_new_example_chat_prompt = '[Example Chat]';102const default_new_example_chat_prompt = '[Example Chat]';
103const default_continue_nudge_prompt = '[Continue the following message. Do not include ANY parts of the original message. Use capitalization and punctuation as if your reply is a part of the original message: {{lastChatMessage}}]';103const default_continue_nudge_prompt = '[Continue your last message without repeating its original content.]';
104const default_bias = 'Default (none)';104const default_bias = 'Default (none)';
105const default_personality_format = '{{personality}}';105const default_personality_format = '{{personality}}';
106const default_scenario_format = '{{scenario}}';106const default_scenario_format = '{{scenario}}';
@@ -792,7 +792,7 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
792 }792 }
793793
794 // Reserve budget for continue nudge794 // Reserve budget for continue nudge
795 let continueMessage = null;795 let continueMessageCollection = null;
796 if (type === 'continue' && cyclePrompt && !oai_settings.continue_prefill) {796 if (type === 'continue' && cyclePrompt && !oai_settings.continue_prefill) {
797 const promptObject = {797 const promptObject = {
798 identifier: 'continueNudge',798 identifier: 'continueNudge',
@@ -800,10 +800,19 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
800 content: substituteParamsExtended(oai_settings.continue_nudge_prompt, { lastChatMessage: String(cyclePrompt).trim() }),800 content: substituteParamsExtended(oai_settings.continue_nudge_prompt, { lastChatMessage: String(cyclePrompt).trim() }),
801 system_prompt: true,801 system_prompt: true,
802 };802 };
803 const continuePrompt = new Prompt(promptObject);803 continueMessageCollection = new MessageCollection('continueNudge');
804 const preparedPrompt = promptManager.preparePrompt(continuePrompt);804 const continueMessageIndex = messages.findLastIndex(x => !x.injected);
805 continueMessage = await Message.fromPromptAsync(preparedPrompt);805 if (continueMessageIndex >= 0) {
806 chatCompletion.reserveBudget(continueMessage);806 const continueMessage = messages.splice(continueMessageIndex, 1)[0];
807 const prompt = new Prompt(continueMessage);
808 const chatMessage = await Message.fromPromptAsync(promptManager.preparePrompt(prompt));
809 continueMessageCollection.add(chatMessage);
810 }
811 const continueNudgePrompt = new Prompt(promptObject);
812 const preparedNudgePrompt = promptManager.preparePrompt(continueNudgePrompt);
813 const continueNudgeMessage = await Message.fromPromptAsync(preparedNudgePrompt);
814 continueMessageCollection.add(continueNudgeMessage);
815 chatCompletion.reserveBudget(continueMessageCollection);
807 }816 }
808817
809 const lastChatPrompt = messages[messages.length - 1];818 const lastChatPrompt = messages[messages.length - 1];
@@ -887,9 +896,9 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
887 }896 }
888897
889 // Insert and free continue nudge898 // Insert and free continue nudge
890 if (type === 'continue' && continueMessage) {899 if (type === 'continue' && continueMessageCollection) {
891 chatCompletion.freeBudget(continueMessage);900 chatCompletion.freeBudget(continueMessageCollection);
892 chatCompletion.insertAtEnd(continueMessage, 'chatHistory');901 chatCompletion.add(continueMessageCollection, -1);
893 }902 }
894}903}
895904
@@ -2970,7 +2979,7 @@ export class ChatCompletion {
2970 /**2979 /**
2971 * Checks if the token budget can afford the tokens of the specified message.2980 * Checks if the token budget can afford the tokens of the specified message.
2972 *2981 *
2973 * @param {Message} message - The message to check for affordability.2982 * @param {Message|MessageCollection} message - The message to check for affordability.
2974 * @returns {boolean} True if the budget can afford the message, false otherwise.2983 * @returns {boolean} True if the budget can afford the message, false otherwise.
2975 */2984 */
2976 canAfford(message) {2985 canAfford(message) {
@@ -3058,7 +3067,7 @@ export class ChatCompletion {
3058 * Validates if the given argument is an instance of MessageCollection.3067 * Validates if the given argument is an instance of MessageCollection.
3059 * Throws an error if the validation fails.3068 * Throws an error if the validation fails.
3060 *3069 *
3061 * @param {MessageCollection} collection - The collection to validate.3070 * @param {MessageCollection|Message} collection - The collection to validate.
3062 */3071 */
3063 validateMessageCollection(collection) {3072 validateMessageCollection(collection) {
3064 if (!(collection instanceof MessageCollection)) {3073 if (!(collection instanceof MessageCollection)) {
@@ -3084,7 +3093,7 @@ export class ChatCompletion {
3084 * Checks if the token budget can afford the tokens of the given message.3093 * Checks if the token budget can afford the tokens of the given message.
3085 * Throws an error if the budget can't afford the message.3094 * Throws an error if the budget can't afford the message.
3086 *3095 *
3087 * @param {Message} message - The message to check.3096 * @param {Message|MessageCollection} message - The message to check.
3088 * @param {string} identifier - The identifier of the message.3097 * @param {string} identifier - The identifier of the message.
3089 */3098 */
3090 checkTokenBudget(message, identifier) {3099 checkTokenBudget(message, identifier) {