@@ -122,7 +122,7 @@ def __init__(
122
122
self .on_error = on_error
123
123
124
124
# Chunked messages get accumulated (using this property) before changing state
125
- self ._final_message = ""
125
+ self ._current_stream_message = ""
126
126
self ._current_stream_id : str | None = None
127
127
self ._pending_messages : list [PendingMessage ] = []
128
128
@@ -370,15 +370,20 @@ async def _append_message(
370
370
self ._pending_messages .append ((message , chunk , stream_id ))
371
371
return
372
372
373
+ # Update current stream state
373
374
self ._current_stream_id = stream_id
374
-
375
375
if chunk == "end" :
376
376
self ._current_stream_id = None
377
377
378
- if chunk :
379
- msg = normalize_message_chunk (message )
380
- else :
378
+ if not chunk :
381
379
msg = normalize_message (message )
380
+ else :
381
+ msg = normalize_message_chunk (message )
382
+ # Update the current stream message
383
+ self ._current_stream_message += msg ["content" ]
384
+ msg ["content" ] = self ._current_stream_message
385
+ if chunk == "end" :
386
+ self ._current_stream_message = ""
382
387
383
388
msg = await self ._transform_message (msg )
384
389
if msg is None :
@@ -471,11 +476,17 @@ async def _send_append_message(
471
476
else :
472
477
msg_type = "shiny-chat-append-message"
473
478
479
+ chunk_type = None
480
+ if chunk == "start" :
481
+ chunk_type = "message_start"
482
+ elif chunk == "end" :
483
+ chunk_type = "message_end"
484
+
474
485
msg = ClientMessage (
475
486
content = message ["content" ],
476
487
role = message ["role" ],
477
488
content_type = message .get ("content_type" , "markdown" ),
478
- chunk_type = message . get ( " chunk_type" , None ) ,
489
+ chunk_type = chunk_type ,
479
490
)
480
491
481
492
# print(msg)
@@ -614,21 +625,11 @@ def _store_message(
614
625
msg : StoredMessage = {
615
626
** message ,
616
627
"token_count" : None ,
617
- "chunk_type" : None ,
618
628
}
619
629
620
- if chunk :
621
- self ._final_message += msg ["content" ]
622
- if isinstance (chunk , str ):
623
- msg ["chunk_type" ] = (
624
- "message_start" if chunk == "start" else "message_end"
625
- )
626
- # Don't count tokens or invalidate until the end of the chunk
627
- if chunk == "end" :
628
- msg ["content" ] = self ._final_message
629
- self ._final_message = ""
630
- else :
631
- return msg
630
+ # Don't actually store chunks until the end
631
+ if chunk is True or chunk == "start" :
632
+ return msg
632
633
633
634
if self ._tokenizer is not None :
634
635
encoded = self ._tokenizer .encode (msg ["content" ])
0 commit comments