TypeScript 97.4%
SQL 1%
JavaScript 0.9%
CSS 0.6%
1import "server-only";2import { and, eq } from "drizzle-orm";3import { getDb, userModelLabels } from "@/db";45/** User-defined labels ("My research model") keyed by model key. */6export async function modelLabels(userId: string): Promise<Record<string, string>> {7 const rows = await getDb().select({ modelKey: userModelLabels.modelKey, label: userModelLabels.label }).from(userModelLabels).where(eq(userModelLabels.userId, userId));8 return Object.fromEntries(rows.map((r) => [r.modelKey, r.label]));9}1011export async function setModelLabel(userId: string, modelKey: string, label: string | null): Promise<void> {12 const db = getDb();13 const clean = label?.trim().slice(0, 60) ?? "";14 if (!clean) {15 await db.delete(userModelLabels).where(and(eq(userModelLabels.userId, userId), eq(userModelLabels.modelKey, modelKey)));16 return;17 }18 await db19 .insert(userModelLabels)20 .values({ userId, modelKey, label: clean })21 .onConflictDoUpdate({ target: [userModelLabels.userId, userModelLabels.modelKey], set: { label: clean, updatedAt: new Date() } });22}23