import { NextResponse } from "next/server"; import { GoogleGenerativeAI } from "@google/generative-ai"; const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY!); const MODEL_ID = "gemini-2.0-flash"; export async function POST(request: Request) { try { const formData = await request.formData(); const file = formData.get("file") as File; const schema = JSON.parse(formData.get("schema") as string); // Convert PDF to base64 const buffer = await file.arrayBuffer(); const base64 = Buffer.from(buffer).toString("base64"); const model = genAI.getGenerativeModel({ model: MODEL_ID, generationConfig: { responseMimeType: "application/json", responseSchema: schema, }, }); const prompt = "Extract the structured data from the following PDF file"; const result = await model.generateContent([ prompt, { inlineData: { mimeType: "application/pdf", data: base64, }, }, ]); const response = await result.response; const extractedData = JSON.parse(response.text()); return NextResponse.json(extractedData); } catch (error) { console.error("Error extracting data:", error); return NextResponse.json( { error: "Failed to extract data, open a thread in discussions, could be be a rate limit issue.s", }, { status: 500 } ); } }