gaojintao01
Add files using Git LFS
f8b5d42
/**
* Extracts text content from a multimodal message
* If the content has multiple text items, it will join them together with a newline.
* @param {string|Array} content - Message content that could be string or array of content objects
* @returns {string} - The text content
*/
function extractTextContent(content) {
if (!Array.isArray(content)) return content;
return content
.filter((item) => item.type === "text")
.map((item) => item.text)
.join("\n");
}
/**
* Detects mime type from a base64 data URL string, defaults to PNG if not detected
* @param {string} dataUrl - The data URL string (e.g. data:image/jpeg;base64,...)
* @returns {string} - The mime type or 'image/png' if not detected
*/
function getMimeTypeFromDataUrl(dataUrl) {
try {
const matches = dataUrl.match(/^data:([^;]+);base64,/);
return matches ? matches[1].toLowerCase() : "image/png";
} catch (e) {
return "image/png";
}
}
/**
* Extracts attachments from a multimodal message
* The attachments provided are in OpenAI format since this util is used in the OpenAI compatible chat.
* However, our backend internal chat uses the Attachment type we use elsewhere in the app so we have to convert it.
* @param {Array} content - Message content that could be string or array of content objects
* @returns {import("../../../utils/helpers").Attachment[]} - The attachments
*/
function extractAttachments(content) {
if (!Array.isArray(content)) return [];
return content
.filter((item) => item.type === "image_url")
.map((item, index) => ({
name: `uploaded_image_${index}`,
mime: getMimeTypeFromDataUrl(item.image_url.url),
contentString: item.image_url.url,
}));
}
module.exports = {
extractTextContent,
extractAttachments,
};