(chatmessages: any[] = [], orgId: string)
| 744 | * @returns {BaseMessage[]} |
| 745 | */ |
| 746 | export const mapChatMessageToBaseMessage = async (chatmessages: any[] = [], orgId: string): Promise<BaseMessage[]> => { |
| 747 | const chatHistory = [] |
| 748 | |
| 749 | for (const message of chatmessages) { |
| 750 | if (message.role === 'apiMessage' || message.type === 'apiMessage') { |
| 751 | chatHistory.push(new AIMessage(message.content || '')) |
| 752 | } else if (message.role === 'userMessage' || message.type === 'userMessage') { |
| 753 | // check for image/files uploads |
| 754 | if (message.fileUploads) { |
| 755 | // example: [{"type":"stored-file","name":"0_DiXc4ZklSTo3M8J4.jpg","mime":"image/jpeg"}] |
| 756 | try { |
| 757 | let messageWithFileUploads = '' |
| 758 | const uploads: IFileUpload[] = JSON.parse(message.fileUploads) |
| 759 | const imageContents: MessageContentImageUrl[] = [] |
| 760 | for (const upload of uploads) { |
| 761 | if (upload.type === 'stored-file' && upload.mime.startsWith('image/')) { |
| 762 | const fileData = await getFileFromStorage(upload.name, orgId, message.chatflowid, message.chatId) |
| 763 | // as the image is stored in the server, read the file and convert it to base64 |
| 764 | const bf = 'data:' + upload.mime + ';base64,' + fileData.toString('base64') |
| 765 | |
| 766 | imageContents.push({ |
| 767 | type: 'image_url', |
| 768 | image_url: { |
| 769 | url: bf |
| 770 | } |
| 771 | }) |
| 772 | } else if (upload.type === 'url' && upload.mime.startsWith('image') && upload.data) { |
| 773 | imageContents.push({ |
| 774 | type: 'image_url', |
| 775 | image_url: { |
| 776 | url: upload.data |
| 777 | } |
| 778 | }) |
| 779 | } else if (upload.type === 'stored-file:full') { |
| 780 | const fileLoaderNodeModule = await import('../nodes/documentloaders/File/File') |
| 781 | // @ts-ignore |
| 782 | const fileLoaderNodeInstance = new fileLoaderNodeModule.nodeClass() |
| 783 | const options = { |
| 784 | retrieveAttachmentChatId: true, |
| 785 | chatflowid: message.chatflowid, |
| 786 | chatId: message.chatId, |
| 787 | orgId |
| 788 | } |
| 789 | let fileInputFieldFromMimeType = 'txtFile' |
| 790 | fileInputFieldFromMimeType = mapMimeTypeToInputField(upload.mime) |
| 791 | const nodeData = { |
| 792 | inputs: { |
| 793 | [fileInputFieldFromMimeType]: `FILE-STORAGE::${JSON.stringify([upload.name])}` |
| 794 | } |
| 795 | } |
| 796 | const documents: string = await fileLoaderNodeInstance.init(nodeData, '', options) |
| 797 | messageWithFileUploads += `<doc name='${upload.name}'>${handleEscapeCharacters(documents, true)}</doc>\n\n` |
| 798 | } |
| 799 | } |
| 800 | const messageContent = messageWithFileUploads ? `${messageWithFileUploads}\n\n${message.content}` : message.content |
| 801 | chatHistory.push( |
| 802 | new HumanMessage({ |
| 803 | content: [ |
no test coverage detected