import { PDFLoader } from "@langchain/community/document_loaders/fs/pdf" import { DocxLoader } from "@langchain/community/document_loaders/fs/docx" import { NextResponse } from 'next/server' import { writeFile } from 'fs/promises' import { join } from 'path' import { Document } from '@langchain/core/documents' import { mkdir } from 'fs/promises' export async function POST(request: Request) { try { const formData = await request.formData() const files = formData.getAll('files') as File[] if (!files?.length) { return NextResponse.json( { error: 'No files uploaded' }, { status: 400 } ) } // Ensure temp directory exists const tempDir = '/tmp' try { await mkdir(tempDir, { recursive: true }) } catch (err) { console.error('Error creating temp directory:', err) } const documents: { text: string }[] = [] for (const file of files) { try { const bytes = await file.arrayBuffer() const buffer = Buffer.from(bytes) const tempPath = join(tempDir, `${Date.now()}-${file.name}`) await writeFile(tempPath, buffer) console.log('File written to:', tempPath) let docs: Document[] = [] if (file.name.toLowerCase().endsWith('.pdf')) { const loader = new PDFLoader(tempPath) docs = await loader.load() } else if (file.name.toLowerCase().endsWith('.docx')) { const loader = new DocxLoader(tempPath) docs = await loader.load() } documents.push(...docs.map(doc => ({ text: doc.pageContent .replace(/\s+/g, ' ') .trim() }))) } catch (err) { console.error(`Error processing file ${file.name}:`, err) } } if (documents.length === 0) { return NextResponse.json( { error: 'No documents could be processed' }, { status: 400 } ) } return NextResponse.json({ documents }) } catch (error) { console.error('Upload error:', error) return NextResponse.json( { error: 'Failed to process files' }, { status: 500 } ) } }