SPB Git
1.4 KB · 22 lines typescript
1import { z } from "zod";2import { guarded, body, sse } from "@/lib/api";3import { getMessage, deactivateFrom, insertMessage } from "@/lib/chat/store";4import { runAssistant } from "@/lib/chat/engine";5import type { Part } from "@/lib/ai/types";67export const maxDuration = 900;89/** Edit a user message: creates a sibling user message (same parent), deactivates the old branch, and answers it. */10export const POST = guarded(async (req) => {11  const b = await body(req, z.object({ messageId: z.string(), text: z.string().min(1).max(200_000), modelId: z.string().optional(), routingMode: z.enum(["manual", "fast", "quality", "economy", "auto"]).optional(), toolsEnabled: z.boolean().optional() }));12  const m = await getMessage(b.messageId);13  if (!m || m.role !== "user") return Response.json({ error: "Message utilisateur introuvable" }, { status: 404 });14  await deactivateFrom(m.conversation_id, m.id, true);15  const keep = (m.parts as Part[]).filter(p => p.type !== "text");16  const user = await insertMessage({ conversationId: m.conversation_id, parentId: m.parent_id, role: "user", parts: [...keep, { type: "text", text: b.text }] });17  return sse(async (emit, signal) => {18    emit("conversation", { id: m.conversation_id, userMessageId: user.id, edited: m.id });19    await runAssistant({ conversationId: m.conversation_id, modelId: b.modelId, routingMode: b.routingMode, toolsEnabled: b.toolsEnabled, parentMessageId: user.id, signal, emit });20  }, req.signal);21});22
Files · main
Menu

Theme