New-Riffusion / pages /api /edit.ts
Gertie2013's picture
Create pages/api/edit.ts
3fd0bae verified
Raw
History Blame Contribute Delete
2.13 kB
import type { NextApiRequest, NextApiResponse } from "next";
import { VALID_MODELS, validateModel, validateApiKey } from "../../lib/config";
import type { EditRequestBody } from "../../lib/types";
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
res.setHeader("Content-Type", "application/json");
if (req.method !== "POST") {
return res.status(405).json({ error: "Method not allowed" });
}
const hfApiKey = process.env.HF_API_KEY;
if (!validateApiKey(hfApiKey)) {
return res.status(500).json({ error: "Invalid or missing Hugging Face API key" });
}
const model = VALID_MODELS.DREAM_VAE;
if (!validateModel(model)) {
return res.status(500).json({ error: "Invalid DreamVAE model configuration" });
}
let body: EditRequestBody;
try {
body = req.body as EditRequestBody;
} catch {
return res.status(400).json({ error: "Invalid JSON body" });
}
const { operation, trackId, params = {} } = body;
if (!operation || !trackId) {
return res.status(400).json({ error: "operation and trackId are required" });
}
try {
const payload = {
inputs: {
track_id: trackId,
operation,
params,
},
};
const hfUrl = `https://api-inference.huggingface.co/models/${encodeURIComponent(model)}`;
const response = await fetch(hfUrl, {
method: "POST",
headers: {
Authorization: `Bearer ${hfApiKey}`,
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify(payload),
});
if (!response.ok) {
const errText = await response.text().catch(() => "");
return res.status(response.status).json({
error: "DreamVAE request failed",
details: errText || response.statusText,
});
}
const result = await response.json();
return res.status(200).json({
model,
operation,
trackId,
result,
});
} catch (e: any) {
return res.status(500).json({
error: "Unexpected error during editing",
details: e?.message ?? "Unknown error",
});
}
}