| 680 | } | 680 | } |
| 681 | | 681 | |
| 682 | /** | 682 | /** |
| | 683 | * Convert a prompt from the messages objects to the format used by xAI. |
| | 684 | * @param {object[]} messages Array of messages |
| | 685 | * @param {PromptNames} names Prompt names |
| | 686 | * @returns {object[]} Prompt for xAI |
| | 687 | */ |
| | 688 | export function convertXAIMessages(messages, names) { |
| | 689 | if (!Array.isArray(messages)) { |
| | 690 | return []; |
| | 691 | } |
| | 692 | |
| | 693 | messages.forEach(msg => { |
| | 694 | if (!msg.name || msg.role === 'user') { |
| | 695 | return; |
| | 696 | } |
| | 697 | |
| | 698 | const needsCharNamePrefix = [ |
| | 699 | { role: 'assistant', condition: names.charName && !msg.content.startsWith(`${names.charName}: `) && !names.startsWithGroupName(msg.content) }, |
| | 700 | { role: 'system', name: 'example_assistant', condition: names.charName && !msg.content.startsWith(`${names.charName}: `) && !names.startsWithGroupName(msg.content) }, |
| | 701 | { role: 'system', name: 'example_user', condition: names.userName && !msg.content.startsWith(`${names.userName}: `) }, |
| | 702 | ]; |
| | 703 | |
| | 704 | const matchingRule = needsCharNamePrefix.find(rule => |
| | 705 | msg.role === rule.role && (!rule.name || msg.name === rule.name) && rule.condition, |
| | 706 | ); |
| | 707 | |
| | 708 | if (matchingRule) { |
| | 709 | const prefix = msg.role === 'system' && msg.name === 'example_user' ? names.userName : names.charName; |
| | 710 | msg.content = `${prefix}: ${msg.content}`; |
| | 711 | } |
| | 712 | |
| | 713 | delete msg.name; |
| | 714 | }); |
| | 715 | |
| | 716 | return messages; |
| | 717 | } |
| | 718 | |
| | 719 | /** |
| 683 | * Merge messages with the same consecutive role, removing names if they exist. | 720 | * Merge messages with the same consecutive role, removing names if they exist. |
| 684 | * @param {any[]} messages Messages to merge | 721 | * @param {any[]} messages Messages to merge |
| 685 | * @param {PromptNames} names Prompt names | 722 | * @param {PromptNames} names Prompt names |