📷 fix: Pass Base64 to Gemini Vision Payload when using CDN URLs (#1705)

This commit is contained in:
Danny Avila 2024-02-02 01:37:40 -05:00 committed by GitHub
parent 8479ac7293
commit 5f6d431136
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,5 +1,27 @@
const axios = require('axios');
const { EModelEndpoint, FileSources } = require('librechat-data-provider');
const { getStrategyFunctions } = require('../strategies');
const { logger } = require('~/config');
/**
* Fetches an image from a URL and returns its base64 representation.
*
* @async
* @param {string} url The URL of the image.
* @returns {Promise<string>} The base64-encoded string of the image.
* @throws {Error} If there's an issue fetching the image or encoding it.
*/
async function fetchImageToBase64(url) {
try {
const response = await axios.get(url, {
responseType: 'arraybuffer',
});
return Buffer.from(response.data).toString('base64');
} catch (error) {
logger.error('Error fetching image to convert to base64', error);
throw error;
}
}
/**
* Encodes and formats the given files.
@ -26,6 +48,13 @@ async function encodeAndFormat(req, files, endpoint) {
}
encodingMethods[source] = prepareImagePayload;
/* Google doesn't support passing URLs to payload */
if (source !== FileSources.local && endpoint === EModelEndpoint.google) {
const [_file, imageURL] = await prepareImagePayload(req, file);
promises.push([_file, await fetchImageToBase64(imageURL)]);
continue;
}
promises.push(prepareImagePayload(req, file));
}