spb/chat-spboucher-ai
Public
1import { guarded, json } from "@/lib/api";2import { openaiTranscribe } from "@/lib/ai/openai";3import { recordUsage } from "@/lib/usage";45export const maxDuration = 120;67/** multipart: audio (File), language? → { text } using gpt-4o-mini-transcribe (verified). */8export const POST = guarded(async (req) => {9 const form = await req.formData();10 const audio = form.get("audio");11 if (!(audio instanceof File)) return json({ error: "audio requis" }, { status: 400 });12 if (audio.size > 25 * 1024 * 1024) return json({ error: "Audio > 25 Mo" }, { status: 413 });13 const model = (form.get("model") as string) || "gpt-4o-mini-transcribe";14 const t0 = Date.now();15 const text = await openaiTranscribe(audio, model, (form.get("language") as string) || undefined);16 const minutes = Number(form.get("durationSec") ?? 0) / 60;17 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 });18 return json({ text, model });19});20