import { withUser, parseBody } from "@/lib/api"; import { arenaStreamSchema } from "@/lib/chat/schemas"; import { runArenaModel } from "@/lib/arena/service"; import { sseResponse } from "@/lib/chat/sse"; import { LIMITS } from "@/lib/rate-limit"; export const dynamic = "force-dynamic"; export const maxDuration = 900; export const POST = withUser( async (ctx) => { const body = await parseBody(ctx.req, arenaStreamSchema); return sseResponse( async (emit, signal) => { const controller = new AbortController(); const onAbort = () => controller.abort(); signal.addEventListener("abort", onAbort, { once: true }); ctx.req.signal?.addEventListener("abort", onAbort, { once: true }); await runArenaModel({ userId: ctx.user.id, requestId: ctx.requestId }, body.sessionId, body.modelKey, emit, controller.signal); }, { requestId: ctx.requestId }, ); }, { limit: { max: LIMITS.arena.max * 4, windowMs: LIMITS.arena.windowMs, key: "arena-stream" } }, );