(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
Signed| @@ -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": "", |
| @@ -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)": [], |
| @@ -100,7 +100,7 @@ const default_wi_format = '{0}'; | |||
| 100 | const default_new_chat_prompt = '[Start a new Chat]'; | 100 | const default_new_chat_prompt = '[Start a new Chat]'; |
| 101 | const default_new_group_chat_prompt = '[Start a new group chat. Group members: {{group}}]'; | 101 | const default_new_group_chat_prompt = '[Start a new group chat. Group members: {{group}}]'; |
| 102 | const default_new_example_chat_prompt = '[Example Chat]'; | 102 | const default_new_example_chat_prompt = '[Example Chat]'; |
| 103 | const 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}}]'; | 103 | const default_continue_nudge_prompt = '[Continue your last message without repeating its original content.]'; |
| 104 | const default_bias = 'Default (none)'; | 104 | const default_bias = 'Default (none)'; |
| 105 | const default_personality_format = '{{personality}}'; | 105 | const default_personality_format = '{{personality}}'; |
| 106 | const default_scenario_format = '{{scenario}}'; | 106 | const default_scenario_format = '{{scenario}}'; |
| @@ -792,7 +792,7 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul | |||
| 792 | } | 792 | } |
| 793 | 793 | ||
| 794 | // Reserve budget for continue nudge | 794 | // 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 | } |
| 808 | 817 | ||
| 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 | } |
| 888 | 897 | ||
| 889 | // Insert and free continue nudge | 898 | // 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 | } |
| 895 | 904 | ||
| @@ -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) { |