SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
1.6 KB · 42 lines typescript
Raw Blame History
1import { z } from "zod";2import { withUser, parseBody, json } from "@/lib/api";3import { listConversations, createConversation } from "@/lib/conversations/service";4import { isProviderId } from "@/lib/ai/core/types";56export const dynamic = "force-dynamic";78export const GET = withUser(async ({ req, user }) => {9  const url = new URL(req.url);10  const p = url.searchParams;11  const provider = p.get("provider");12  const res = await listConversations(user.id, {13    q: p.get("q") ?? undefined,14    provider: provider && isProviderId(provider) ? provider : undefined,15    modelKey: p.get("model") ?? undefined,16    folderId: p.get("folder") ?? undefined,17    projectId: p.get("projectId") ?? undefined,18    archived: p.get("archived") === "1",19    pinned: p.get("pinned") === "1" ? true : undefined,20    since: p.get("since") ? new Date(p.get("since")!) : undefined,21    until: p.get("until") ? new Date(p.get("until")!) : undefined,22    limit: p.get("limit") ? Number(p.get("limit")) : undefined,23    cursor: p.get("cursor") ?? undefined,24  });25  return json(res);26});2728const createSchema = z.object({29  title: z.string().max(200).optional(),30  modelKey: z.string().max(120).nullable().optional(),31  systemPrompt: z.string().max(50_000).nullable().optional(),32  folderId: z.string().max(64).nullable().optional(),33  projectId: z.string().max(64).nullable().optional(),34  settings: z.record(z.string(), z.unknown()).optional(),35});3637export const POST = withUser(async ({ req, user }) => {38  const body = await parseBody(req, createSchema);39  const c = await createConversation(user.id, body);40  return json({ conversation: c }, { status: 201 });41});42