import type { FileData } from "@gradio/client"; import { uploadToHuggingFace } from "@gradio/utils"; export const format_chat_for_sharing = async ( chat: [string | FileData | null, string | FileData | null][] ): Promise => { let messages = await Promise.all( chat.map(async (message_pair) => { return await Promise.all( message_pair.map(async (message, i) => { if (message === null) return ""; let speaker_emoji = i === 0 ? "😃" : "🤖"; let html_content = ""; if (typeof message === "string") { const regexPatterns = { audio: /|!\[.*?\]\((\/file=.*?)\)/g }; html_content = message; for (let [_, regex] of Object.entries(regexPatterns)) { let match; while ((match = regex.exec(message)) !== null) { const fileUrl = match[1] || match[2]; const newUrl = await uploadToHuggingFace(fileUrl, "url"); html_content = html_content.replace(fileUrl, newUrl); } } } else { if (!message?.url) return ""; const file_url = await uploadToHuggingFace(message.url, "url"); if (message.mime_type?.includes("audio")) { html_content = ``; } else if (message.mime_type?.includes("video")) { html_content = file_url; } else if (message.mime_type?.includes("image")) { html_content = ``; } } return `${speaker_emoji}: ${html_content}`; }) ); }) ); return messages .map((message_pair) => message_pair.join( message_pair[0] !== "" && message_pair[1] !== "" ? "\n" : "" ) ) .join("\n"); };