import type { Message } from '~/lib/persistence/message'; import { generateId } from './fileUtils'; import JSZip from 'jszip'; interface FileArtifact { content: string; path: string; } export async function getFileRepositoryContents(files: File[]): Promise { const artifacts: FileArtifact[] = await Promise.all( files.map(async (file) => { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => { const content = reader.result as string; const relativePath = file.webkitRelativePath.split('/').slice(1).join('/'); resolve({ content, path: relativePath, }); }; reader.onerror = reject; reader.readAsText(file); }); }), ); const zip = new JSZip(); for (const { path, content } of artifacts) { zip.file(path, content); } return await zip.generateAsync({ type: 'base64' }); } // TODO: Common up with createMessagesForRepository. export function createChatFromFolder(folderName: string, repositoryId: string): Message[] { const filesContent = `I've imported the contents of the "${folderName}" folder.`; const userMessage: Message = { role: 'user', id: generateId(), content: `Import the "${folderName}" folder`, type: 'text', }; const filesMessage: Message = { role: 'assistant', content: filesContent, id: generateId(), repositoryId, type: 'text', }; const messages = [userMessage, filesMessage]; return messages; }