import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() export async function POST( request: Request, ) { const global_headers = { Authorization: `Bearer ${process.env.NEXT_PUBLIC_APP_HF_TOKEN}`, 'Content-Type': 'application/json', ['x-use-cache']: "0" } const { inputs, negative_prompt } = await request.json() const response = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/models/stabilityai/stable-diffusion-xl-base-1.0`, { method: 'POST', body: JSON.stringify({ inputs, negative_prompt }), headers: global_headers, }) const res = await response.clone().json().catch(() => ({})); if (res?.error) return Response.json({ status: response.status, ok: false, message: res.error }); const blob = await response.blob() const headers = new Headers(); headers.set("Content-Type", "image/*"); const checkIfIsNSFW = (blob: Blob) => { return new Promise(async (resolve, reject) => { const response_nsfw = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/models/DamarJati/NSFW-Filterization-DecentScan`, { method: 'POST', headers: { ...global_headers, ...headers, }, body: blob, }) const isNSFW = await response_nsfw.clone().json().catch(() => ({})); if (isNSFW?.error && isNSFW?.estimated_time) { console.log("retrying...") setTimeout(() => { checkIfIsNSFW(blob) }, isNSFW?.estimated_time * 1000); } else resolve(isNSFW) }) } const isNSFW: any = await checkIfIsNSFW(blob) console.log(isNSFW) if (isNSFW?.error) return Response.json({ status: 500, ok: false, message: isNSFW?.error }); if (isNSFW?.length) { const scoreNotSafe = isNSFW?.find((n: { label: string }) => n.label === "no_safe"); if (scoreNotSafe?.score > 0.8) { return Response.json({ status: 401, ok: false, message: "Image is not safe for work." }); } } const arrayBuffer = await blob.arrayBuffer() const bytes = Buffer.from(arrayBuffer) const new_blob = await prisma.image.create({ data: { prompt: inputs, blob: bytes, }, }) return Response.json({ blob: new_blob, status: 200, ok: true, headers }); }