import type { Message } from "$lib/types/Message"; import type { EndpointMessage } from "./endpoints"; import { downloadFile } from "../files/downloadFile"; import type { ObjectId } from "mongodb"; export async function preprocessMessages( messages: Message[], convId: ObjectId ): Promise { return Promise.resolve(messages) .then((msgs) => downloadFiles(msgs, convId)) .then((msgs) => injectClipboardFiles(msgs)); } async function downloadFiles(messages: Message[], convId: ObjectId): Promise { return Promise.all( messages.map>((message) => Promise.all((message.files ?? []).map((file) => downloadFile(file.value, convId))).then( (files) => ({ ...message, files }) ) ) ); } async function injectClipboardFiles(messages: EndpointMessage[]) { return Promise.all( messages.map((message) => { const plaintextFiles = message.files ?.filter((file) => file.mime === "application/vnd.chatui.clipboard") .map((file) => Buffer.from(file.value, "base64").toString("utf-8")); if (!plaintextFiles || plaintextFiles.length === 0) return message; return { ...message, content: `${plaintextFiles.join("\n\n")}\n\n${message.content}`, files: message.files?.filter((file) => file.mime !== "application/vnd.chatui.clipboard"), }; }) ); }