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 | // Insert chat messages as long as there is budget available | 906 | // 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]; |
| 911 | 910 | ||
| @@ -946,22 +945,6 @@ async function populateChatHistory(messages, prompts, chatCompletion, type = nul | |||
| 946 | } | 945 | } |
| 947 | 946 | ||
| 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 | } |
| 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 | // Add in-chat injections | 1222 | // Add in-chat injections |
| 1225 | messages = await populationInjectionPrompts(absolutePrompts, messages); | 1223 | messages = await populationInjectionPrompts(absolutePrompts, messages); |
| 1226 | 1224 | ||