From 853b249cbb54bbc777f6d630efe18eed7e5eeeb5 Mon Sep 17 00:00:00 2001 From: Cai GoGwilt <cai@ironcladhq.com> Date: Fri, 17 Nov 2023 10:07:03 -0800 Subject: [PATCH] Fix gpt-4 vision support for node executor Image to base64 conversion relied on FileReader, which does not exist in Node.js. So, use Buffer when running in Node.js instead. --- packages/core/src/utils/base64.ts | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/core/src/utils/base64.ts b/packages/core/src/utils/base64.ts index b13e780a4..df24d03de 100644 --- a/packages/core/src/utils/base64.ts +++ b/packages/core/src/utils/base64.ts @@ -1,11 +1,17 @@ export async function uint8ArrayToBase64(uint8Array: Uint8Array) { - const blob = new Blob([uint8Array], { type: 'application/octet-stream' }); - const dataUrl = await new Promise<string>((resolve) => { - const reader = new FileReader(); - reader.onload = () => resolve(reader.result as string); - reader.readAsDataURL(blob); - }); - return dataUrl.split(',')[1]; + if (typeof window === 'undefined') { + // Node executor + return Buffer.from(uint8Array).toString('base64'); + } else { + // Browser executor + const blob = new Blob([uint8Array], { type: 'application/octet-stream' }); + const dataUrl = await new Promise<string>((resolve) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result as string); + reader.readAsDataURL(blob); + }); + return dataUrl.split(',')[1]; + } } export function base64ToUint8Array(base64: string) {