diff --git a/src/lib/components/chat/Messages/Markdown/KatexRenderer.svelte b/src/lib/components/chat/Messages/Markdown/KatexRenderer.svelte index 0c9fd6e2c7..cfe7d8b1f7 100644 --- a/src/lib/components/chat/Messages/Markdown/KatexRenderer.svelte +++ b/src/lib/components/chat/Messages/Markdown/KatexRenderer.svelte @@ -30,9 +30,20 @@ onMount(async () => { renderToString = await getKatexRenderer(); }); + + // Cache rendered HTML — only re-compute when content, displayMode, or renderToString changes, + // not on every parent re-render during streaming + let renderedHTML: string = ''; + $: if (renderToString) { + try { + renderedHTML = renderToString(content, { displayMode, throwOnError: false }); + } catch { + renderedHTML = content; + } + } -{#if renderToString} +{#if renderToString && renderedHTML} - {@html renderToString(content, { displayMode, throwOnError: false })} + {@html renderedHTML} {/if}