import { NextRequest, NextResponse } from 'next/server'; import { LlamaParseReader } from 'llamaindex'; import { writeFile } from 'fs/promises'; import { join } from 'path'; import { existsSync, mkdirSync } from 'fs'; const UPLOAD_DIR = join(process.cwd(), 'uploads'); // Ensure uploads directory exists if (!existsSync(UPLOAD_DIR)) { mkdirSync(UPLOAD_DIR); } export async function POST(request: NextRequest) { try { const formData = await request.formData(); const file = formData.get('file') as File; if (!file) { return NextResponse.json( { error: 'No file uploaded' }, { status: 400 } ); } // Save file temporarily const bytes = await file.arrayBuffer(); const buffer = Buffer.from(bytes); const filePath = join(UPLOAD_DIR, file.name); await writeFile(filePath, buffer); // Extract text using LlamaParser const reader = new LlamaParseReader({ resultType: 'markdown' }); const documents = await reader.loadData(filePath); // Combine all document chunks const fullText = documents.map(doc => doc.text).join('\n\n'); // Clean up the temporary file await writeFile(filePath, ''); return NextResponse.json({ fileName: file.name, text: fullText }); } catch (error) { console.error('Error processing file:', error); return NextResponse.json( { error: 'Error processing file' }, { status: 500 } ); } }