gradio

Форк
0
/
utils.ts 
57 строк · 1.7 Кб
1
import type { FileData } from "@gradio/client";
2
import { uploadToHuggingFace } from "@gradio/utils";
3

4
export const format_chat_for_sharing = async (
5
	chat: [string | FileData | null, string | FileData | null][]
6
): Promise<string> => {
7
	let messages = await Promise.all(
8
		chat.map(async (message_pair) => {
9
			return await Promise.all(
10
				message_pair.map(async (message, i) => {
11
					if (message === null) return "";
12
					let speaker_emoji = i === 0 ? "😃" : "🤖";
13
					let html_content = "";
14

15
					if (typeof message === "string") {
16
						const regexPatterns = {
17
							audio: /<audio.*?src="(\/file=.*?)"/g,
18
							video: /<video.*?src="(\/file=.*?)"/g,
19
							image: /<img.*?src="(\/file=.*?)".*?\/>|!\[.*?\]\((\/file=.*?)\)/g
20
						};
21

22
						html_content = message;
23

24
						for (let [_, regex] of Object.entries(regexPatterns)) {
25
							let match;
26

27
							while ((match = regex.exec(message)) !== null) {
28
								const fileUrl = match[1] || match[2];
29
								const newUrl = await uploadToHuggingFace(fileUrl, "url");
30
								html_content = html_content.replace(fileUrl, newUrl);
31
							}
32
						}
33
					} else {
34
						if (!message?.url) return "";
35
						const file_url = await uploadToHuggingFace(message.url, "url");
36
						if (message.mime_type?.includes("audio")) {
37
							html_content = `<audio controls src="${file_url}"></audio>`;
38
						} else if (message.mime_type?.includes("video")) {
39
							html_content = file_url;
40
						} else if (message.mime_type?.includes("image")) {
41
							html_content = `<img src="${file_url}" />`;
42
						}
43
					}
44

45
					return `${speaker_emoji}: ${html_content}`;
46
				})
47
			);
48
		})
49
	);
50
	return messages
51
		.map((message_pair) =>
52
			message_pair.join(
53
				message_pair[0] !== "" && message_pair[1] !== "" ? "\n" : ""
54
			)
55
		)
56
		.join("\n");
57
};
58

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.