File tree Expand file tree Collapse file tree
src/lib/components/chat/Messages Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11<script >
2+ import { onDestroy } from ' svelte' ;
23 import { marked } from ' marked' ;
34 import { replaceTokens , processResponseContent } from ' $lib/utils' ;
45 import { user } from ' $lib/stores' ;
3435 export let onTaskClick = () => {};
3536
3637 let tokens = [];
38+ let rafId = null ;
3739
3840 const options = {
3941 throwOnError: false ,
5355 ]
5456 });
5557
56- $: (async () => {
57- if (content) {
58- tokens = marked .lexer (
59- replaceTokens (processResponseContent (content), model? .name , $user? .name )
60- );
58+ const lexContent = () => {
59+ tokens = marked .lexer (
60+ replaceTokens (processResponseContent (content), model? .name , $user? .name )
61+ );
62+ };
63+
64+ $: if (content) {
65+ if (done) {
66+ // When done, lex immediately to ensure final render is accurate
67+ if (rafId) {
68+ cancelAnimationFrame (rafId);
69+ rafId = null ;
70+ }
71+ lexContent ();
72+ } else {
73+ // While streaming, throttle to once per animation frame
74+ if (! rafId) {
75+ rafId = requestAnimationFrame (() => {
76+ rafId = null ;
77+ lexContent ();
78+ });
79+ }
6180 }
62- })();
81+ }
82+
83+ onDestroy (() => {
84+ if (rafId) {
85+ cancelAnimationFrame (rafId);
86+ }
87+ });
6388< / script>
6489
6590{#key id}
You can’t perform that action at this time.
0 commit comments