Chat Completion: Adjust depth of 0-depth injects on continue with prefill (#4452)

ddb97d78d307640c96390e1d89ec9472cc739962

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

Signed
1 files changed, +15 -17Showing whitespace changes
public/scripts/openai.js+15 -17
@@ -905,7 +905,6 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
905905
906906 // Insert chat messages as long as there is budget available
907907 const chatPool = [...messages].reverse();
908- const firstNonInjected = chatPool.find(x => !x.injected);
909908 for (let index = 0; index < chatPool.length; index++) {
910909 const chatPrompt = chatPool[index];
911910
@@ -946,22 +945,6 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
946945 }
947946
948947 if (chatCompletion.canAfford(chatMessage)) {
949- if (type === 'continue' && oai_settings.continue_prefill && chatPrompt === firstNonInjected) {
950- // in case we are using continue_prefill and the latest message is an assistant message, we want to prepend the users assistant prefill on the message
951- if (chatPrompt.role === 'assistant') {
952- const supportsAssistantPrefill = oai_settings.chat_completion_source === chat_completion_sources.CLAUDE;
953- const assistantPrefill = supportsAssistantPrefill ? substituteParams(oai_settings.assistant_prefill) : '';
954- const messageContent = [assistantPrefill, chatMessage.content].filter(x => x).join('\n\n');
955- const continueMessage = await Message.createAsync(chatMessage.role, messageContent, chatMessage.identifier);
956- const collection = new MessageCollection('continuePrefill', continueMessage);
957- chatCompletion.add(collection, -1);
958- continue;
959- }
960- const collection = new MessageCollection('continuePrefill', chatMessage);
961- chatCompletion.add(collection, -1);
962- continue;
963- }
964-
965948 chatCompletion.insertAtStart(chatMessage, 'chatHistory');
966949 } else {
967950 break;
@@ -1221,6 +1204,21 @@ async function populateChatCompletion(prompts, chatCompletion, { bias, quietProm
12211204 chatCompletion.reserveBudget(toolTokens);
12221205 }
12231206
1207+ // Displace the message to be continued from its original position before performing in-chat injections
1208+ // In case if it is an assistant message, we want to prepend the users assistant prefill on the message
1209+ if (type === 'continue' && oai_settings.continue_prefill && messages.length) {
1210+ const chatMessage = messages.shift();
1211+ const isAssistantRole = chatMessage.role === 'assistant';
1212+ const supportsAssistantPrefill = oai_settings.chat_completion_source === chat_completion_sources.CLAUDE;
1213+ const namesInCompletion = oai_settings.names_behavior === character_names_behavior.COMPLETION;
1214+ const assistantPrefill = isAssistantRole && supportsAssistantPrefill ? substituteParams(oai_settings.assistant_prefill) : '';
1215+ const messageContent = [assistantPrefill, chatMessage.content].filter(x => x).join('\n\n');
1216+ const continueMessage = await Message.createAsync(chatMessage.role, messageContent, 'continuePrefill');
1217+ chatMessage.name && namesInCompletion && await continueMessage.setName(promptManager.sanitizeName(chatMessage.name));
1218+ controlPrompts.add(continueMessage);
1219+ chatCompletion.reserveBudget(continueMessage);
1220+ }
1221+
12241222 // Add in-chat injections
12251223 messages = await populationInjectionPrompts(absolutePrompts, messages);
12261224