| 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 | // If system role message immediately follows an assistant message, change its role to user | 569 | // 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') { |