From 27f0136479e9b4ce9a411b10843eeef52e0c6606 Mon Sep 17 00:00:00 2001 From: urjitc <135136842+urjitc@users.noreply.github.com> Date: Sat, 11 Apr 2026 07:35:51 +0000 Subject: [PATCH 1/5] Fix assistant chat performance by eliminating unnecessary re-renders, optimizing selectors, and memo --- .../assistant-ui/assistant-loader.tsx | 26 ++- src/components/assistant-ui/markdown-text.tsx | 167 ++++++++++-------- src/components/assistant-ui/reasoning.tsx | 6 +- src/components/assistant-ui/thread.tsx | 8 +- src/components/assistant-ui/tool-group.tsx | 6 +- src/components/chat/MessageContextBadges.tsx | 16 +- src/components/ui/streamdown-markdown.tsx | 2 +- .../utils/__tests__/preprocess-latex.test.ts | 45 +++-- src/lib/utils/preprocess-latex.ts | 53 ++---- 9 files changed, 178 insertions(+), 151 deletions(-) diff --git a/src/components/assistant-ui/assistant-loader.tsx b/src/components/assistant-ui/assistant-loader.tsx index 0ae83746..19a00353 100644 --- a/src/components/assistant-ui/assistant-loader.tsx +++ b/src/components/assistant-ui/assistant-loader.tsx @@ -1,10 +1,14 @@ "use client"; +import { memo, lazy, Suspense } from "react"; import { useAuiState } from "@assistant-ui/react"; -import { DotLottieReact } from "@lottiefiles/dotlottie-react"; import { useTheme } from "next-themes"; -export const AssistantLoader = () => { +const DotLottieReact = lazy(() => + import("@lottiefiles/dotlottie-react").then((m) => ({ default: m.DotLottieReact })) +); + +const AssistantLoaderImpl = () => { const { resolvedTheme } = useTheme(); const isRunning = useAuiState( ({ message }) => (message as { status?: { type: string } })?.status?.type === "running" @@ -21,14 +25,18 @@ export const AssistantLoader = () => { return (