/** * Copyright 2025 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Next.js API route support: https://nextjs.org/docs/api-routes/introduction import { GoogleGenerativeAI } from "@google/generative-ai"; const MODEL_NAME = "gemini-2.0-flash-exp"; export const config = { api: { bodyParser: { sizeLimit: '10mb', }, }, }; export default async function handler(req, res) { if (req.method !== 'POST') { return res.status(405).json({ error: 'Method not allowed' }); } try { const { imageBase64, prompt, userInput } = req.body; const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY); const model = genAI.getGenerativeModel({ model: MODEL_NAME }); const image = { inlineData: { data: imageBase64.split(",")[1], mimeType: "image/jpeg", }, }; const finalPrompt = userInput.trim() ? `${prompt}\n\nUser input: ${userInput}` : prompt; const result = await model.generateContent([finalPrompt, image]); const response = result.response.text(); const regex = /```(?:javascript|js)?\s*([\s\S]*?)```/g; const match = regex.exec(response); const extractedCode = match ? match[1].trim() : response; res.status(200).json({ fullResponse: response, code: extractedCode }); } catch (error) { console.error('Error:', error); res.status(500).json({ error: 'Failed to generate code' }); } }