From 32575828cdf49b976480912b50d9391477e7bed1 Mon Sep 17 00:00:00 2001 From: vinodkiran Date: Fri, 8 Dec 2023 17:21:53 +0530 Subject: [PATCH] GPT Vision: Converting vision into Multi Modal. Base Changes. --- .../nodes/multimodal/OpenAI/AudioWhisper.ts | 61 ++++++++++++++++++ .../OpenAI}/OpenAIVisionChain.ts | 41 +++++++----- .../OpenAI}/VLLMChain.ts | 0 .../nodes/multimodal/OpenAI/audio.svg | 1 + .../OpenAI}/chain.svg | 0 .../nodes/multimodal/OpenAI/list.png | Bin 0 -> 5002 bytes packages/server/src/index.ts | 16 +++-- packages/ui/src/assets/images/wave-sound.jpg | Bin 0 -> 330686 bytes .../ui/src/views/chatmessage/ChatMessage.js | 55 +++++++++------- 9 files changed, 129 insertions(+), 45 deletions(-) create mode 100644 packages/components/nodes/multimodal/OpenAI/AudioWhisper.ts rename packages/components/nodes/{chains/VisionChain => multimodal/OpenAI}/OpenAIVisionChain.ts (94%) rename packages/components/nodes/{chains/VisionChain => multimodal/OpenAI}/VLLMChain.ts (100%) create mode 100644 packages/components/nodes/multimodal/OpenAI/audio.svg rename packages/components/nodes/{chains/VisionChain => multimodal/OpenAI}/chain.svg (100%) create mode 100644 packages/components/nodes/multimodal/OpenAI/list.png create mode 100644 packages/ui/src/assets/images/wave-sound.jpg diff --git a/packages/components/nodes/multimodal/OpenAI/AudioWhisper.ts b/packages/components/nodes/multimodal/OpenAI/AudioWhisper.ts new file mode 100644 index 00000000..b308a7c5 --- /dev/null +++ b/packages/components/nodes/multimodal/OpenAI/AudioWhisper.ts @@ -0,0 +1,61 @@ +import { INode, INodeData, INodeParams } from '../../../src' + +class OpenAIAudioWhisper implements INode { + label: string + name: string + version: number + description: string + type: string + icon: string + category: string + baseClasses: string[] + inputs: INodeParams[] + + constructor() { + this.label = 'Open AI Whisper' + this.name = 'openAIAudioWhisper' + this.version = 1.0 + this.type = 'OpenAIWhisper' + this.description = 'Speech to text using OpenAI Whisper API' + this.icon = 'audio.svg' + this.category = 'MultiModal' + this.baseClasses = [this.type] + this.inputs = [ + { + label: 'Purpose', + name: 'purpose', + type: 'options', + options: [ + { + label: 'transcription', + name: 'transcription' + }, + { + label: 'translation', + name: 'translation' + } + ] + }, + { + label: 'Accepted Upload Types', + name: 'allowedUploadTypes', + type: 'string', + default: 'audio/mpeg;audio/x-wav;audio/mp4', + hidden: true + }, + { + label: 'Maximum Upload Size (MB)', + name: 'maxUploadSize', + type: 'number', + default: '5', + hidden: true + } + ] + } + + async init(nodeData: INodeData): Promise { + return {} + } +} + +module.exports = { nodeClass: OpenAIAudioWhisper } diff --git a/packages/components/nodes/chains/VisionChain/OpenAIVisionChain.ts b/packages/components/nodes/multimodal/OpenAI/OpenAIVisionChain.ts similarity index 94% rename from packages/components/nodes/chains/VisionChain/OpenAIVisionChain.ts rename to packages/components/nodes/multimodal/OpenAI/OpenAIVisionChain.ts index 6d19235c..4151b4b0 100644 --- a/packages/components/nodes/chains/VisionChain/OpenAIVisionChain.ts +++ b/packages/components/nodes/multimodal/OpenAI/OpenAIVisionChain.ts @@ -19,14 +19,14 @@ class OpenAIVisionChain_Chains implements INode { credential: INodeParams constructor() { - this.label = 'Open AI Vision Chain' - this.name = 'openAIVisionChain' + this.label = 'Open AI MultiModal Chain' + this.name = 'openAIMultiModalChain' this.version = 1.0 - this.type = 'OpenAIVisionChain' + this.type = 'OpenAIMultiModalChain' this.icon = 'chain.svg' this.category = 'Chains' this.badge = 'BETA' - this.description = 'Chain to run queries against OpenAI (GPT-4) Vision .' + this.description = 'Chain to query against Image and Audio Input.' this.baseClasses = [this.type, ...getBaseClasses(VLLMChain)] this.credential = { label: 'Connect Credential', @@ -36,16 +36,9 @@ class OpenAIVisionChain_Chains implements INode { } this.inputs = [ { - label: 'Model Name', - name: 'modelName', - type: 'options', - options: [ - { - label: 'gpt-4-vision-preview', - name: 'gpt-4-vision-preview' - } - ], - default: 'gpt-4-vision-preview', + label: 'Audio Input', + name: 'audioInput', + type: 'OpenAIWhisper', optional: true }, { @@ -54,6 +47,22 @@ class OpenAIVisionChain_Chains implements INode { type: 'BasePromptTemplate', optional: true }, + { + label: 'Model Name', + name: 'modelName', + type: 'options', + options: [ + { + label: 'gpt-4-vision-preview', + name: 'gpt-4-vision-preview' + }, + { + label: 'whisper-1', + name: 'whisper-1' + } + ], + default: 'gpt-4-vision-preview' + }, { label: 'Image Resolution', description: 'This parameter controls the resolution in which the model views the image.', @@ -122,8 +131,8 @@ class OpenAIVisionChain_Chains implements INode { ] this.outputs = [ { - label: 'Open AI Vision Chain', - name: 'openAIVisionChain', + label: 'Open AI MultiModal Chain', + name: 'OpenAIMultiModalChain', baseClasses: [this.type, ...getBaseClasses(VLLMChain)] }, { diff --git a/packages/components/nodes/chains/VisionChain/VLLMChain.ts b/packages/components/nodes/multimodal/OpenAI/VLLMChain.ts similarity index 100% rename from packages/components/nodes/chains/VisionChain/VLLMChain.ts rename to packages/components/nodes/multimodal/OpenAI/VLLMChain.ts diff --git a/packages/components/nodes/multimodal/OpenAI/audio.svg b/packages/components/nodes/multimodal/OpenAI/audio.svg new file mode 100644 index 00000000..3bcbbdcd --- /dev/null +++ b/packages/components/nodes/multimodal/OpenAI/audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/components/nodes/chains/VisionChain/chain.svg b/packages/components/nodes/multimodal/OpenAI/chain.svg similarity index 100% rename from packages/components/nodes/chains/VisionChain/chain.svg rename to packages/components/nodes/multimodal/OpenAI/chain.svg diff --git a/packages/components/nodes/multimodal/OpenAI/list.png b/packages/components/nodes/multimodal/OpenAI/list.png new file mode 100644 index 0000000000000000000000000000000000000000..acb4e5d68f200207a97e10ee63125eb4e040fcec GIT binary patch literal 5002 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 { if (this.uploadAllowedNodes.indexOf(node.data.type) > -1) { logger.debug(`[server]: Found Eligible Node ${node.data.type}, Allowing Uploads.`) allowUploads = true + const allowance: any = {} node.data.inputParams.map((param: any) => { if (param.name === 'allowedUploadTypes') { - allowedTypes = param.default.split(';') + allowance.allowedTypes = param.default.split(';') } if (param.name === 'maxUploadSize') { - maxUploadSize = parseInt(param.default ? param.default : '0') + allowance.maxUploadSize = parseInt(param.default ? param.default : '0') } }) + if (allowance.allowedTypes && allowance.maxUploadSize) { + allowances.push(allowance) + } } }) return { allowUploads, - allowedTypes, - maxUploadSize + allowed: allowances } } diff --git a/packages/ui/src/assets/images/wave-sound.jpg b/packages/ui/src/assets/images/wave-sound.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f56d67d968643d91c1dce1689a84711d977220d GIT binary patch literal 330686 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

m2M)*TRE&r3t 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 literal 0 HcmV?d00001 diff --git a/packages/ui/src/views/chatmessage/ChatMessage.js b/packages/ui/src/views/chatmessage/ChatMessage.js index d2ff51d8..79a9b6e0 100644 --- a/packages/ui/src/views/chatmessage/ChatMessage.js +++ b/packages/ui/src/views/chatmessage/ChatMessage.js @@ -8,6 +8,7 @@ import rehypeRaw from 'rehype-raw' import remarkGfm from 'remark-gfm' import remarkMath from 'remark-math' import axios from 'axios' +import audioUploadSVG from 'assets/images/wave-sound.jpg' import { Box, @@ -85,23 +86,21 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => { e.preventDefault() } const isFileAllowedForUpload = (file) => { - // check if file type is allowed - if (getAllowChatFlowUploads.data?.allowedTypes?.length > 0) { - const allowedFileTypes = getAllowChatFlowUploads.data?.allowedTypes - if (!allowedFileTypes.includes(file.type)) { - alert(`File ${file.name} is not allowed.\nAllowed file types are ${allowedFileTypes.join(', ')}.`) - return false - } - } - // check if file size is allowed - if (getAllowChatFlowUploads.data?.maxUploadSize > 0) { + const constraints = getAllowChatFlowUploads.data + let acceptFile = false + if (constraints.allowUploads) { + const fileType = file.type const sizeInMB = file.size / 1024 / 1024 - if (sizeInMB > getAllowChatFlowUploads.data?.maxUploadSize) { - alert(`File ${file.name} is too large.\nMaximum allowed size is ${getAllowChatFlowUploads.data?.maxUploadSize} MB.`) - return false - } + constraints.allowed.map((allowed) => { + if (allowed.allowedTypes.includes(fileType) && sizeInMB <= allowed.maxUploadSize) { + acceptFile = true + } + }) } - return true + if (!acceptFile) { + alert(`Cannot upload file. Kindly check the allowed file types and maximum allowed size.`) + } + return acceptFile } const handleDrop = async (e) => { if (!isChatFlowAvailableForUploads) { @@ -124,9 +123,15 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => { return } const { result } = evt.target + let previewUrl + if (file.type.startsWith('audio/')) { + previewUrl = audioUploadSVG + } else if (file.type.startsWith('image/')) { + previewUrl = URL.createObjectURL(file) + } resolve({ data: result, - preview: URL.createObjectURL(file), + preview: previewUrl, type: 'file', name: name, mime: file.type @@ -240,7 +245,7 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => { } const previewStyle = { - width: '64px', + width: '128px', height: '64px', objectFit: 'cover' // This makes the image cover the area, cropping it if necessary } @@ -514,11 +519,17 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => { onDrop={handleDrop} className={`file-drop-field`} > - {isDragOver && ( + {isDragOver && getAllowChatFlowUploads.data?.allowUploads && ( Drop here to upload - {getAllowChatFlowUploads.data?.allowedTypes?.join(', ')} - Max Allowed Size: {getAllowChatFlowUploads.data?.maxUploadSize} MB + {getAllowChatFlowUploads.data.allowed.map((allowed) => { + return ( + <> + {allowed.allowedTypes?.join(', ')} + Max Allowed Size: {allowed.maxUploadSize} MB + + ) + })} )}

@@ -727,7 +738,7 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => { {previews.map((item, index) => ( - + { alt={`preview ${index}`} style={previewStyle} /> - +