diff --git a/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx b/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx
index 168b6ae77c..20c0a4373f 100644
--- a/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx
+++ b/packages/twenty-front/src/modules/ai/components/LazyMarkdownRenderer.tsx
@@ -11,12 +11,15 @@ import {
StyledTableScrollContainer,
} from '@/ai/components/LazyMarkdownRendererStyledComponents';
import { MarkdownCodeBlock } from '@/ai/components/MarkdownCodeBlock';
+import { marked } from 'marked';
import {
cloneElement,
isValidElement,
lazy,
+ memo,
Suspense,
useContext,
+ useMemo,
} from 'react';
import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
import { getSafeUrl, isDefined } from 'twenty-shared/utils';
@@ -203,19 +206,33 @@ const LoadingSkeleton = () => {
);
};
+const MemoizedMarkdownBlock = memo(
+ ({ blockText }: { blockText: string }) => (
+
+ {blockText}
+
+ ),
+ (previousProps, nextProps) => previousProps.blockText === nextProps.blockText,
+);
+
export const LazyMarkdownRenderer = ({ text }: { text: string }) => {
+ const markdownBlocks = useMemo(
+ () => marked.lexer(text).map((token) => token.raw),
+ [text],
+ );
+
return (
}>
-
- {text}
-
+ {markdownBlocks.map((blockText, blockIndex) => (
+
+ ))}
);