import { z } from "zod"; import { withUser, parseBody, json } from "@/lib/api"; import { arenaRunSchema } from "@/lib/chat/schemas"; import { createArenaSession, listArenaSessions, rateArenaResponse } from "@/lib/arena/service"; import { LIMITS } from "@/lib/rate-limit"; export const dynamic = "force-dynamic"; export const GET = withUser(async ({ user }) => json({ sessions: await listArenaSessions(user.id) })); /** POST /api/arena — create a session (validates keys/models); the client then opens one stream per model. */ export const POST = withUser( async ({ req, user }) => { const body = await parseBody(req, arenaRunSchema, 500_000); const session = await createArenaSession(user.id, body); return json({ session: { ...session, createdAt: session.createdAt.toISOString() } }, { status: 201 }); }, { limit: { ...LIMITS.arena, key: "arena" } }, ); export const PATCH = withUser(async ({ req, user }) => { const body = await parseBody(req, z.object({ responseId: z.string().max(64), ratings: z.record(z.string().max(32), z.boolean()) })); return json({ response: await rateArenaResponse(user.id, body.responseId, body.ratings) }); });