TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import { withUser, parseBody } from "@/lib/api";2import { arenaStreamSchema } from "@/lib/chat/schemas";3import { runArenaModel } from "@/lib/arena/service";4import { sseResponse } from "@/lib/chat/sse";5import { LIMITS } from "@/lib/rate-limit";67export const dynamic = "force-dynamic";8export const maxDuration = 900;910export const POST = withUser(11 async (ctx) => {12 const body = await parseBody(ctx.req, arenaStreamSchema);13 return sseResponse(14 async (emit, signal) => {15 const controller = new AbortController();16 const onAbort = () => controller.abort();17 signal.addEventListener("abort", onAbort, { once: true });18 ctx.req.signal?.addEventListener("abort", onAbort, { once: true });19 await runArenaModel({ userId: ctx.user.id, requestId: ctx.requestId }, body.sessionId, body.modelKey, emit, controller.signal);20 },21 { requestId: ctx.requestId },22 );23 },24 { limit: { max: LIMITS.arena.max * 4, windowMs: LIMITS.arena.windowMs, key: "arena-stream" } },25);26