Spaces:
Runtime error
Runtime error
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<string> => { | |
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: /<audio.*?src="(\/file=.*?)"/g, | |
video: /<video.*?src="(\/file=.*?)"/g, | |
image: /<img.*?src="(\/file=.*?)".*?\/>|!\[.*?\]\((\/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 = `<audio controls src="${file_url}"></audio>`; | |
} else if (message.mime_type?.includes("video")) { | |
html_content = file_url; | |
} else if (message.mime_type?.includes("image")) { | |
html_content = `<img src="${file_url}" />`; | |
} | |
} | |
return `${speaker_emoji}: ${html_content}`; | |
}) | |
); | |
}) | |
); | |
return messages | |
.map((message_pair) => | |
message_pair.join( | |
message_pair[0] !== "" && message_pair[1] !== "" ? "\n" : "" | |
) | |
) | |
.join("\n"); | |
}; | |