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
906 // Insert chat messages as long as there is budget available906 // Insert chat messages as long as there is budget available
907 const chatPool = [...messages].reverse();907 const chatPool = [...messages].reverse();
908 const firstNonInjected = chatPool.find(x => !x.injected);
909 for (let index = 0; index < chatPool.length; index++) {908 for (let index = 0; index < chatPool.length; index++) {
910 const chatPrompt = chatPool[index];909 const chatPrompt = chatPool[index];
911910
@@ -946,22 +945,6 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul
946 }945 }
947946
948 if (chatCompletion.canAfford(chatMessage)) {947 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
965 chatCompletion.insertAtStart(chatMessage, 'chatHistory');948 chatCompletion.insertAtStart(chatMessage, 'chatHistory');
966 } else {949 } else {
967 break;950 break;
@@ -1221,6 +1204,21 @@ async function populateChatCompletion(prompts, chatCompletion, { bias, quietProm
1221 chatCompletion.reserveBudget(toolTokens);1204 chatCompletion.reserveBudget(toolTokens);
1222 }1205 }
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
1224 // Add in-chat injections1222 // Add in-chat injections
1225 messages = await populationInjectionPrompts(absolutePrompts, messages);1223 messages = await populationInjectionPrompts(absolutePrompts, messages);
12261224