Ë
    uPêjº  ã                   óœ   — d Z ddlZddlmZ ddlmZ ddlmZmZmZ ddl	Z	ddl
mZ ddlmZ ddlmZ dd	lmZ erdd
lmZmZ  G d„ d«      Zy)zA
A2A Streaming Iterator with token tracking and logging support.
é    N)ÚAsyncIterator)Údatetime)ÚTYPE_CHECKINGÚAnyÚFinal)Úverbose_logger)ÚA2ACostCalculator)ÚA2ARequestUtils)ÚLogging)ÚSendStreamingMessageRequestÚSendStreamingMessageResponsec            	       ó–   — e Zd ZdZ	 dded   dddedefd„Zd	„ Zdd„Z	de
d
dfd„Zde
d
efd„Zdd„Zdej                   d
eee
f   fd„Zy)ÚA2AStreamingIteratorzŒ
    Async iterator for A2A streaming responses with token tracking.

    Collects chunks, extracts text, and logs usage on completion.
    Ústreamr   Úrequestr   Úlogging_objÚ
agent_namec                 ó˜   — || _         || _        || _        || _        t	        j
                  «       | _        g | _        g | _        d | _	        y ©N)
r   r   r   r   r   ÚnowÚ
start_timeÚchunksÚcollected_text_partsÚfinal_chunk)Úselfr   r   r   r   s        úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/a2a_protocol/streaming_iterator.pyÚ__init__zA2AStreamingIterator.__init__   sG   € ð ˆŒØˆŒØ&ˆÔØ$ˆŒÜ"Ÿ,™,›.ˆŒð "$ˆŒØ/1ˆÔ!Ø'+ˆÕó    c                 ó   — | S r   © )r   s    r   Ú	__aiter__zA2AStreamingIterator.__aiter__-   s   € Øˆr   Úreturnc              ƒ   ó†  K  — 	 | j                   j                  «       ƒ d {  –—† }| j                  j                  |«       | j	                  |«       | j                  |«      r|| _        |S 7 ŒJ# t        $ rG | j                  € | j                  r| j                  d   | _        | j                  «       ƒ d {  –—†7   ‚ w xY w­w)Néÿÿÿÿ)	r   Ú	__anext__r   ÚappendÚ_collect_text_from_chunkÚ_is_completed_chunkr   ÚStopAsyncIterationÚ_handle_stream_complete)r   Úchunks     r   r%   zA2AStreamingIterator.__anext__0   s­   è ø€ ð	Ø!%§¡×!6Ñ!6Ó!8×8ˆEð �K‰K×Ñ˜uÔ%ð ×)Ñ)¨%Ô0ð ×'Ñ'¨Ô.Ø#(�Ô àˆLð 9ùô "ò 	à×ÑÐ'¨D¯KªKØ#'§;¡;¨r¡?�Ô Ø×.Ñ.Ó0×0Ñ0Øð	üs:   ‚C„A. ¡A,¢A	A. Á+CÁ,A. Á.AB>Â6B9Â7B>Â>Cr+   Nc                 óö   — 	 t        |d«      r|j                  dd¬«      ni }t        j                  |«      }|r| j                  j                  |«       yy# t        $ r t        j                  d«       Y yw xY w)z?Extract text from a streaming chunk and add to collected parts.Ú
model_dumpÚjsonT©ÚmodeÚexclude_nonez/Failed to extract text from A2A streaming chunkN)	Úhasattrr-   r
   Úextract_text_from_responser   r&   Ú	Exceptionr   Údebug)r   r+   Ú
chunk_dictÚtexts       r   r'   z-A2AStreamingIterator._collect_text_from_chunkG   sw   € ð	TÜT[Ð\aÐcoÔTp × 0Ñ 0°fÈ4Ð 0Ô PÐvxˆJÜ)×DÑDÀZÓPˆDÙØ×)Ñ)×0Ñ0°Õ6ð øäò 	TÜ× Ñ Ð!RÖSð	Tús   ‚AA ÁA8Á7A8c                 ó  — 	 t        |d«      r|j                  dd¬«      ni }|j                  di «      }t        |t        «      r6|j                  di «      }t        |t        «      r|j                  d«      dk(  S y	# t
        $ r Y y	w xY w)
z+Check if chunk indicates stream completion.r-   r.   Tr/   ÚresultÚstatusÚstateÚ	completedF)r2   r-   ÚgetÚ
isinstanceÚdictr4   )r   r+   r6   r9   r:   s        r   r(   z(A2AStreamingIterator._is_completed_chunkQ   sŽ   € ð	ÜT[Ð\aÐcoÔTp × 0Ñ 0°fÈ4Ð 0Ô PÐvxˆJØ&ŸN™N¨8°RÓ8ˆFÜ˜&¤$Ô'Ø &§
¡
¨8°RÓ 8�Ü˜f¤dÔ+Ø!Ÿ:™: gÓ.°+Ñ=Ð=ð øô ò 	ØØð	ús   ‚A8A< Á<	BÂBc           	   ƒ   ó`  K  — 	 t        j                  «       }t        j                  | j                  «      }t        j
                  |«      }t        j                  |«      }| j                  r| j                  d   nd}t        j                  |«      }||z   }t        j                  |||¬«      }|| j                  j                  d<   d| j                  j                  d<   t        j                  | j                  «      }	|	| j                  j                  d<   | j                  |«      }
t        j                   | j                  j#                  |
| j$                  |dd	¬
«      «       t'        j(                  d||||	«       y# t*        $ r }t'        j,                  d|«       Y d}~yd}~ww xY w­w)z8Handle logging and token counting when stream completes.r$   Ú )Úprompt_tokensÚcompletion_tokensÚtotal_tokensÚusageFr   Úresponse_costNT)r   Úend_timeÚ	cache_hitÚprefer_async_handlerszbA2A streaming completed: prompt_tokens=%s, completion_tokens=%s, total_tokens=%s, response_cost=%sz-Error in A2A streaming completion handler: %s)r   r   r
   Úget_input_message_from_requestr   Úextract_text_from_messageÚcount_tokensr   ÚlitellmÚUsager   Úmodel_call_detailsr	   Úcalculate_a2a_costÚ_build_logging_resultÚasyncioÚcreate_taskÚdispatch_success_handlersr   r   Úinfor4   r5   )r   rG   Úinput_messageÚ
input_textrB   Úoutput_textrC   rD   rE   rF   r9   Úes               r   r*   z,A2AStreamingIterator._handle_stream_complete^   s–  è ø€ ð5	UÜ&Ÿl™l›nˆHô $3×#QÑ#QÐRV×R^ÑR^Ó#_ˆMÜ /× IÑ IÈ-Ó XˆJÜ#2×#?Ñ#?À
Ó#KˆMð CG×B[ÒB[ ×!:Ñ!:¸2Ò!>ÐacˆKÜ'6×'CÑ'CÀKÓ'PÐà"/Ð2CÑ"CˆLô #Ÿ=™=Ø+Ø"3Ø)ôˆEð <AˆD×Ñ×/Ñ/°Ñ8à<AˆD×Ñ×/Ñ/°Ñ9ô $5×#GÑ#GÈ×HXÑHXÓ#YˆMØCPˆD×Ñ×/Ñ/°Ñ@ð !×6Ñ6°uÓ=ˆFô ×ÑØ× Ñ ×:Ñ:ØØ#Ÿ™Ø%Ø"Ø*.ð ;ó ôô ×ÑØtØØ!ØØõøô ò 	UÜ× Ñ Ð!PÐRS×TÑTûð	Uüs/   ‚F.„E=F ÆF.Æ	F+ÆF&Æ!F.Æ&F+Æ+F.rE   c                 ó(  — t        | j                  dd«      dt        |d«      r|j                  «       n
t	        |«      dœ}| j
                  r5	 | j
                  j                  dd¬«      }|j                  d	i «      |d	<   |S |S # t        $ r Y |S w xY w)
z Build a result dict for logging.ÚidÚunknownz2.0r-   )r[   ÚjsonrpcrE   r.   Tr/   r9   )Úgetattrr   r2   r-   r?   r   r=   r4   )r   rE   r9   r6   s       r   rQ   z*A2AStreamingIterator._build_logging_result—   sŸ   € ô ˜$Ÿ,™,¨¨iÓ8ØÜ,3°E¸<Ô,H�e×&Ñ&Ô(ÌdÐSXËkñ)
ˆð ×ÒðØ$(×$4Ñ$4×$?Ñ$?ÀVÐZ^Ð$?Ó$_�
Ø#-§>¡>°(¸BÓ#?��xÑ ð ˆˆvˆøô ò Øàˆðús   Á2B Â	BÂB)r\   )r"   r   )r"   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚLiteLLMLoggingObjÚstrr   r!   r%   r   r'   Úboolr(   r*   rM   rN   r?   rQ   r    r   r   r   r      s–   „ ñð $ñ,àÐ<Ñ=ð,ð /ð,ð 'ð	,ð
 ó,ò$óð.T¨cð T°dó Tð¨ð °ó ó7Uðr¨7¯=©=ð ¸TÀ#ÀsÀ(¹^ô r   r   )rb   rR   Úcollections.abcr   r   Útypingr   r   r   rM   Úlitellm._loggingr   Ú$litellm.a2a_protocol.cost_calculatorr	   Úlitellm.a2a_protocol.utilsr
   Ú*litellm.litellm_core_utils.litellm_loggingr   rc   Ú	a2a.typesr   r   r   r    r   r   ú<module>rm      s<   ðñó Ý )Ý ß ,Ñ ,ã Ý +Ý BÝ 6Ý SáßS÷Sò Sr   