import { z } from "zod"; import { guarded, body, sse } from "@/lib/api"; import { getMessage, deactivateFrom } from "@/lib/chat/store"; import { runAssistant } from "@/lib/chat/engine"; export const maxDuration = 900; /** Regenerate an assistant message (optionally with another model). The previous answer stays as an inactive sibling. */ export const POST = guarded(async (req) => { 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() })); const m = await getMessage(b.messageId); if (!m || m.role !== "assistant" || !m.parent_id) return Response.json({ error: "Message assistant introuvable" }, { status: 404 }); await deactivateFrom(m.conversation_id, m.id, true); return sse(async (emit, signal) => { emit("conversation", { id: m.conversation_id, userMessageId: m.parent_id, regenerated: m.id }); 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 }); }, req.signal); });