import { guarded, json } from "@/lib/api"; import { openaiTranscribe } from "@/lib/ai/openai"; import { recordUsage } from "@/lib/usage"; export const maxDuration = 120; /** multipart: audio (File), language? → { text } using gpt-4o-mini-transcribe (verified). */ export const POST = guarded(async (req) => { const form = await req.formData(); const audio = form.get("audio"); if (!(audio instanceof File)) return json({ error: "audio requis" }, { status: 400 }); if (audio.size > 25 * 1024 * 1024) return json({ error: "Audio > 25 Mo" }, { status: 413 }); const model = (form.get("model") as string) || "gpt-4o-mini-transcribe"; const t0 = Date.now(); const text = await openaiTranscribe(audio, model, (form.get("language") as string) || undefined); const minutes = Number(form.get("durationSec") ?? 0) / 60; await recordUsage({ provider: "openai", modelId: model, kind: "stt", usage: { input: 0, output: 0 }, costEstimated: minutes ? minutes * (model === "gpt-4o-transcribe" ? 0.006 : 0.003) : null, latencyMs: Date.now() - t0 }); return json({ text, model }); });