Mistral: Squash user messages that follow tools

f66261a52cb57c092bedeca7164ae5fb468a2375

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

1 files changed, +22 -0Ignore whitespace
src/prompt-converters.js+22 -0
@@ -544,6 +544,28 @@ function convertMistralMessages(messages, charName = '', userName = '') {
544 }544 }
545 });545 });
546546
547 // If user role message immediately follows a tool message, append it to the last user message
548 const fixToolMessages = () => {
549 let rerun = true;
550 while (rerun) {
551 rerun = false;
552 messages.forEach((message, i) => {
553 if (i === messages.length - 1) {
554 return;
555 }
556 if (message.role === 'tool' && messages[i + 1].role === 'user') {
557 const lastUserMessage = messages.slice(0, i).findLastIndex(m => m.role === 'user' && m.content);
558 if (lastUserMessage !== -1) {
559 messages[lastUserMessage].content += '\n\n' + messages[i + 1].content;
560 messages.splice(i + 1, 1);
561 rerun = true;
562 }
563 }
564 });
565 }
566 }
567 fixToolMessages();
568
547 // If system role message immediately follows an assistant message, change its role to user569 // If system role message immediately follows an assistant message, change its role to user
548 for (let i = 0; i < messages.length - 1; i++) {570 for (let i = 0; i < messages.length - 1; i++) {
549 if (messages[i].role === 'assistant' && messages[i + 1].role === 'system') {571 if (messages[i].role === 'assistant' && messages[i + 1].role === 'system') {