| 544 | 544 | } |
| 545 | 545 | }); |
| 546 | 546 | |
| 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 | 569 | // If system role message immediately follows an assistant message, change its role to user |
| 548 | 570 | for (let i = 0; i < messages.length - 1; i++) { |
| 549 | 571 | if (messages[i].role === 'assistant' && messages[i + 1].role === 'system') { |