From 373bd668f7e83ae738149610502d67dea2abffe6 Mon Sep 17 00:00:00 2001 From: thierryverse Date: Wed, 19 Nov 2025 09:29:40 +0200 Subject: [PATCH] add update chat mutation atom --- .../researcher/[[...chat_id]]/page.tsx | 30 ++++++++++++------- surfsense_web/contracts/types/chat.types.ts | 15 +++------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/surfsense_web/app/dashboard/[search_space_id]/researcher/[[...chat_id]]/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/researcher/[[...chat_id]]/page.tsx index dfa38b1a4..558b8b962 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/researcher/[[...chat_id]]/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/researcher/[[...chat_id]]/page.tsx @@ -4,7 +4,7 @@ import { type CreateMessage, type Message, useChat } from "@ai-sdk/react"; import { useAtomValue } from "jotai"; import { useParams, useRouter } from "next/navigation"; import { useEffect, useMemo, useRef } from "react"; -import { createChatMutationAtom } from "@/atoms/chats/chat-mutation.atoms"; +import { createChatMutationAtom, updateChatMutationAtom } from "@/atoms/chats/chat-mutation.atoms"; import { activeChatAtom } from "@/atoms/chats/chat-query.atoms"; import { activeChatIdAtom } from "@/atoms/chats/ui.atoms"; import ChatInterface from "@/components/chat/ChatInterface"; @@ -19,11 +19,8 @@ export default function ResearcherPage() { const hasSetInitialConnectors = useRef(false); const activeChatId = useAtomValue(activeChatIdAtom); const { data: activeChatState, isFetching: isChatLoading } = useAtomValue(activeChatAtom); - const { - mutateAsync: createChat, - isPending: isCreatingChat, - error: createChatError, - } = useAtomValue(createChatMutationAtom); + const { mutateAsync: createChat } = useAtomValue(createChatMutationAtom); + const { mutateAsync: updateChat } = useAtomValue(updateChatMutationAtom); const isNewChat = !activeChatId; // Reset the flag when chat ID changes @@ -47,10 +44,10 @@ export default function ResearcherPage() { chat_id: activeChatId ?? undefined, }); - const { updateChat } = useChatAPI({ - token, - search_space_id: search_space_id as string, - }); + // const { updateChat } = useChatAPI({ + // token, + // search_space_id: search_space_id as string, + // }); // Fetch all available sources (document types + live search connectors) const { documentTypes } = useDocumentTypes(Number(search_space_id)); @@ -245,7 +242,18 @@ export default function ResearcherPage() { handler.messages.length > 0 && handler.messages[handler.messages.length - 1]?.role === "assistant" ) { - updateChat(activeChatId, handler.messages, researchMode, selectedConnectors); + const userMessages = handler.messages.filter((msg) => msg.role === "user"); + if (userMessages.length === 0) return; + const title = userMessages[0].content; + + updateChat({ + type: researchMode, + title: title, + initial_connectors: selectedConnectors, + messages: handler.messages, + search_space_id: Number(search_space_id), + id: Number(activeChatId), + }); } }, [handler.messages, handler.status, activeChatId, isNewChat, isChatLoading]); diff --git a/surfsense_web/contracts/types/chat.types.ts b/surfsense_web/contracts/types/chat.types.ts index 9bbe4fc83..0b8b5975c 100644 --- a/surfsense_web/contracts/types/chat.types.ts +++ b/surfsense_web/contracts/types/chat.types.ts @@ -34,17 +34,10 @@ export const deleteChatResponse = z.object({ export const deleteChatRequest = chatSummary.pick({ id: true }); -export const createChatRequest = z.object({ - type: chatTypeEnum, - title: z.string(), - initial_connectors: z.array(z.string()), - messages: z.array( - z.object({ - role: z.enum(["user", "assistant"]), - content: z.string(), - }) - ), - search_space_id: z.number(), +export const createChatRequest = chatDetails.omit({ + created_at: true, + id: true, + state_version: true, }); export const updateChatRequest = chatDetails.omit({