Chat Completion: Adjust depth of 0-depth injects on continue with prefill (#4452)
Signed| @@ -905,7 +905,6 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul | ||
| 905 | 905 | |
| 906 | 906 | // Insert chat messages as long as there is budget available |
| 907 | 907 | const chatPool = [...messages].reverse(); |
| 908 | - const firstNonInjected = chatPool.find(x => !x.injected); | |
| 909 | 908 | for (let index = 0; index < chatPool.length; index++) { |
| 910 | 909 | const chatPrompt = chatPool[index]; |
| 911 | 910 | |
| @@ -946,22 +945,6 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul | ||
| 946 | 945 | } |
| 947 | 946 | |
| 948 | 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 | 948 | chatCompletion.insertAtStart(chatMessage, 'chatHistory'); |
| 966 | 949 | } else { |
| 967 | 950 | break; |
| @@ -1221,6 +1204,21 @@ async function populateChatCompletion(prompts, chatCompletion, { bias, quietProm | ||
| 1221 | 1204 | chatCompletion.reserveBudget(toolTokens); |
| 1222 | 1205 | } |
| 1223 | 1206 | |
| 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 | 1222 | // Add in-chat injections |
| 1225 | 1223 | messages = await populationInjectionPrompts(absolutePrompts, messages); |
| 1226 | 1224 | |