SPB Git
1.1 KB · 20 lines typescript
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
Files · main
Menu

Theme