Files
TaxHacker/ai/attachments.ts
2025-05-03 10:23:13 +02:00

36 lines
1.1 KiB
TypeScript

import { fileExists, fullPathForFile } from "@/lib/files"
import { generateFilePreviews } from "@/lib/previews/generate"
import { File, User } from "@/prisma/client"
import fs from "fs/promises"
const MAX_PAGES_TO_ANALYZE = 4
export type AnalyzeAttachment = {
filename: string
contentType: string
base64: string
}
export const loadAttachmentsForAI = async (user: User, file: File): Promise<AnalyzeAttachment[]> => {
const fullFilePath = await fullPathForFile(user, file)
const isFileExists = await fileExists(fullFilePath)
if (!isFileExists) {
throw new Error("File not found on disk")
}
const { contentType, previews } = await generateFilePreviews(user, fullFilePath, file.mimetype)
return Promise.all(
previews.slice(0, MAX_PAGES_TO_ANALYZE).map(async (preview) => ({
filename: file.filename,
contentType: contentType,
base64: await loadFileAsBase64(preview),
}))
)
}
export const loadFileAsBase64 = async (filePath: string): Promise<string> => {
const buffer = await fs.readFile(filePath)
return Buffer.from(buffer).toString("base64")
}