MCPcopy Index your code
hub / github.com/FlowiseAI/Flowise / mapChatMessageToBaseMessage

Function mapChatMessageToBaseMessage

packages/components/src/utils.ts:746–822  ·  view source on GitHub ↗
(chatmessages: any[] = [], orgId: string)

Source from the content-addressed store, hash-verified

744 * @returns {BaseMessage[]}
745 */
746export 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: [

Callers 15

getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90
getChatMessagesMethod · 0.90

Calls 6

getFileFromStorageFunction · 0.90
mapMimeTypeToInputFieldFunction · 0.85
handleEscapeCharactersFunction · 0.85
stringifyMethod · 0.80
parseMethod · 0.65
initMethod · 0.65

Tested by

no test coverage detected