Spaces:
Running
Running
/** | |
* 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' }); | |
} | |
} | |