"Squash system messages" is back

This commit is contained in:
Cohee
2025-11-28 17:21:12 +02:00
parent d03a0b12b9
commit 59ba22fa9e
4 changed files with 68 additions and 1 deletions
@@ -231,6 +231,7 @@
"assistant_prefill": "",
"assistant_impersonation": "",
"use_sysprompt": false,
"squash_system_messages": false,
"media_inlining": true,
"bypass_status_check": false,
"continue_prefill": false,
+3 -1
View File
@@ -631,6 +631,8 @@
"show_external_models": false,
"proxy_password": "",
"assistant_prefill": "",
"assistant_impersonation": ""
"assistant_impersonation": "",
"use_sysprompt": false,
"squash_system_messages": false
}
}
+13
View File
@@ -1930,6 +1930,19 @@
</span>
</div>
</div>
<div class="range-block">
<label for="squash_system_messages" title="Squash system messages" data-i18n="[title]Squash system messages" class="checkbox_label widthFreeExpand">
<input id="squash_system_messages" type="checkbox" />
<span data-i18n="Squash system messages">
Squash system messages
</span>
</label>
<div class="toggle-description justifyLeft">
<span data-i18n="Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.">
Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.
</span>
</div>
</div>
<div class="range-block" data-source="claude,makersuite,vertexai">
<label for="use_sysprompt" class="checkbox_label widthFreeExpand">
<input id="use_sysprompt" type="checkbox" />
+51
View File
@@ -334,6 +334,7 @@ export const settingsToUpdate = {
vertexai_auth_mode: ['#vertexai_auth_mode', 'vertexai_auth_mode', false, true],
vertexai_region: ['#vertexai_region', 'vertexai_region', false, true],
vertexai_express_project_id: ['#vertexai_express_project_id', 'vertexai_express_project_id', false, true],
squash_system_messages: ['#squash_system_messages', 'squash_system_messages', true, false],
media_inlining: ['#openai_media_inlining', 'media_inlining', true, false],
inline_image_quality: ['#openai_inline_image_quality', 'inline_image_quality', false, false],
continue_prefill: ['#continue_prefill', 'continue_prefill', true, false],
@@ -430,6 +431,7 @@ const default_settings = {
vertexai_auth_mode: 'express',
vertexai_region: 'us-central1',
vertexai_express_project_id: '',
squash_system_messages: false,
media_inlining: true,
inline_image_quality: 'auto',
bypass_status_check: false,
@@ -1448,6 +1450,10 @@ export async function prepareOpenAIMessages({
// Pass chat completion to prompt manager for inspection
promptManager.setChatCompletion(chatCompletion);
if (oai_settings.squash_system_messages && dryRun == false) {
await chatCompletion.squashSystemMessages();
}
// All information is up-to-date, render.
if (false === dryRun) promptManager.render(false);
}
@@ -3274,6 +3280,46 @@ class MessageCollection {
*
*/
export class ChatCompletion {
/**
* Combines consecutive system messages into one if they have no name attached.
* @returns {Promise<void>}
*/
async squashSystemMessages() {
const excludeList = ['newMainChat', 'newChat', 'groupNudge'];
this.messages.collection = this.messages.flatten();
let lastMessage = null;
let squashedMessages = [];
for (let message of this.messages.collection) {
// Force exclude empty messages
if (message.role === 'system' && !message.content) {
continue;
}
const shouldSquash = (message) => {
return !excludeList.includes(message.identifier) && message.role === 'system' && !message.name;
};
if (shouldSquash(message)) {
if (lastMessage && shouldSquash(lastMessage)) {
lastMessage.content += '\n' + message.content;
lastMessage.tokens = await tokenHandler.countAsync({ role: lastMessage.role, content: lastMessage.content });
}
else {
squashedMessages.push(message);
lastMessage = message;
}
}
else {
squashedMessages.push(message);
lastMessage = message;
}
}
this.messages.collection = squashedMessages;
}
/**
* Initializes a new instance of ChatCompletion.
* Sets up the initial token budget and a new message collection.
@@ -6112,6 +6158,11 @@ export function initOpenAI() {
saveSettingsDebounced();
});
$('#squash_system_messages').on('input', function () {
oai_settings.squash_system_messages = !!$(this).prop('checked');
saveSettingsDebounced();
});
$('#openai_media_inlining').on('input', function () {
oai_settings.media_inlining = !!$(this).prop('checked');
updateFeatureSupportFlags();