TypeScript 98.3%
CSS 0.9%
Shell 0.7%
1import { NextResponse } from "next/server";2import { z } from "zod";3import { apiError, parseBody } from "@/lib/api.ts";4import { assertSameOrigin, requireRole } from "@/lib/auth/session.ts";5import { run, setSetting } from "@/lib/db/index.ts";6import { listModels, invalidateModelCache, getPresets, DEFAULT_PRESETS } from "@/lib/openrouter/registry.ts";78export async function GET() {9 try {10 await requireRole("instructor");11 const models = await listModels({ includeDisabled: true });12 return NextResponse.json({ models, presets: getPresets(), defaultPresets: DEFAULT_PRESETS });13 } catch (e) {14 return apiError(e);15 }16}1718const toggleSchema = z.object({19 action: z.literal("override"),20 modelId: z.string().min(1).max(200),21 enabled: z.boolean().optional(),22 favorite: z.boolean().optional(),23 note: z.string().max(300).optional(),24});25const presetSchema = z.object({26 action: z.literal("presets"),27 presets: z.record(z.string(), z.object({ label: z.string().max(60), models: z.array(z.string()).max(10), description: z.string().max(200) })),28});2930export async function POST(req: Request) {31 try {32 await assertSameOrigin();33 await requireRole("admin");34 const body = await parseBody(req, z.discriminatedUnion("action", [toggleSchema, presetSchema]));35 if (body.action === "override") {36 run(37 `INSERT INTO model_overrides (model_id, enabled, favorite, note) VALUES (?, ?, ?, ?)38 ON CONFLICT(model_id) DO UPDATE SET39 enabled = COALESCE(?, enabled), favorite = COALESCE(?, favorite), note = COALESCE(?, note)`,40 body.modelId,41 body.enabled === undefined ? 1 : body.enabled ? 1 : 0,42 body.favorite === undefined ? 0 : body.favorite ? 1 : 0,43 body.note ?? "",44 body.enabled === undefined ? null : body.enabled ? 1 : 0,45 body.favorite === undefined ? null : body.favorite ? 1 : 0,46 body.note ?? null47 );48 } else {49 setSetting("model_presets", body.presets);50 }51 invalidateModelCache();52 return NextResponse.json({ ok: true });53 } catch (e) {54 return apiError(e);55 }56}57