spb/chat-spboucher-ai
Public
1import { z } from "zod";2import { guarded, body, sse } from "@/lib/api";3import { getMessage, deactivateFrom } from "@/lib/chat/store";4import { runAssistant } from "@/lib/chat/engine";56export const maxDuration = 900;78/** Regenerate an assistant message (optionally with another model). The previous answer stays as an inactive sibling. */9export const POST = guarded(async (req) => {10 const b = await body(req, z.object({ messageId: z.string(), modelId: z.string().optional(), routingMode: z.enum(["manual", "fast", "quality", "economy", "auto"]).optional(), settings: z.record(z.string(), z.unknown()).optional(), toolsEnabled: z.boolean().optional() }));11 const m = await getMessage(b.messageId);12 if (!m || m.role !== "assistant" || !m.parent_id) return Response.json({ error: "Message assistant introuvable" }, { status: 404 });13 await deactivateFrom(m.conversation_id, m.id, true);14 return sse(async (emit, signal) => {15 emit("conversation", { id: m.conversation_id, userMessageId: m.parent_id, regenerated: m.id });16 await runAssistant({ conversationId: m.conversation_id, modelId: b.modelId ?? m.model_id ?? undefined, routingMode: b.routingMode ?? "manual", settings: b.settings as never, toolsEnabled: b.toolsEnabled, parentMessageId: m.parent_id!, signal, emit });17 }, req.signal);18});19