Ë
    uPêj�#  ã                   óô   — d Z ddlZddlZddlmZ ddl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 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ  G d„ d«      Z G d„ de«      Z G d„ de«      Zy)zÏ
Streaming iterators for the Interactions API.

This module provides streaming iterators that properly stream SSE responses
from the Google Interactions API, similar to the responses API streaming iterator.
é    N)Údatetime)ÚAnyÚFinal)Úverbose_logger)ÚSTREAM_SSE_DONE_STRING)Úrun_async_function)Úprocess_response_headers)ÚLogging)Úget_api_base)Úexecutor)ÚBaseInteractionsAPIConfig)Ú InteractionsAPIStreamingResponse)ÚCustomStreamWrapperc                   ó‚   — e Zd ZdZ	 	 ddej
                  dedz  dedede	ee
f   dz  dedz  fd	„Zd
ededz  fd„Zd„ Zy)Ú$BaseInteractionsAPIStreamingIteratorzµ
    Base class for streaming iterators that process responses from the Interactions API.

    This class contains shared logic for both synchronous and asynchronous iterators.
    NÚresponseÚmodelÚinteractions_api_configÚlogging_objÚlitellm_metadataÚcustom_llm_providerc                 óÐ  — || _         || _        || _        d| _        || _        d | _        t        j                  «       | _        || _	        || _
        t        |xs d| j                  j                  j                  di «      ¬«      }|r|j                  di «      ni }|j                  dd «      |dœ| _        t        | j                   j                   xs i «      | j                  d<   y )	NFÚ Úlitellm_params)r   Úoptional_paramsÚ
model_infoÚid)Úmodel_idÚapi_baseÚadditional_headers)r   r   r   Úfinishedr   Úcompleted_responser   ÚnowÚ
start_timer   r   r   Úmodel_call_detailsÚgetÚ_hidden_paramsr	   Úheaders)	Úselfr   r   r   r   r   r   Ú	_api_baseÚ_model_infos	            úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/interactions/streaming_iterator.pyÚ__init__z-BaseInteractionsAPIStreamingIterator.__init__$   sá   € ð !ˆŒØˆŒ
Ø&ˆÔØˆŒØ'>ˆÔ$ØKOˆÔÜ"Ÿ,™,›.ˆŒð !1ˆÔØ#6ˆÔ ô (Ø’+˜2Ø ×,Ñ,×?Ñ?×CÑCÐDTÐVXÓYô
ˆ	ñ N^Ð#3×#7Ñ#7¸ÀbÔ#IÐceˆà#Ÿ™¨¨dÓ3Ø!ñ
ˆÔô 5MÈTÏ]É]×MbÑMbÒMhÐfhÓ4iˆ×ÑÐ0Ò1ó    ÚchunkÚreturnc                 óæ  — |syt        j                  |«      }|€y|t        k(  rd| _        y	 t	        j
                  |«      }t        |t        «      rm| j                  j                  | j                  || j                  ¬«      }|r7t        |dd«      dk(  st        |dd«      dk(  r|| _        | j                  «        |S y# t        j                  $ r t!        j"                  d|dd	 «       Y yw xY w)
z/Process a single chunk of data from the stream.NT)r   Úparsed_chunkr   ÚstatusÚ	completedÚ
event_typezinteraction.completedz&Failed to parse streaming chunk: %s...éÈ   )r   Ú_strip_sse_data_from_chunkr   r!   ÚjsonÚloadsÚ
isinstanceÚdictr   Útransform_streaming_responser   r   Úgetattrr"   Ú"_handle_logging_completed_responseÚJSONDecodeErrorr   Údebug)r)   r/   Ústripped_chunkr2   Ústreaming_responses        r,   Ú_process_chunkz3BaseInteractionsAPIStreamingIterator._process_chunkE   s   € áØô !4× NÑ NÈuÓ UˆØÐ!Øð Ô3Ò3Ø ˆDŒMØð	ä"&§*¡*¨^Ó"<ˆLô ˜,¬Ô-Ø,0×,HÑ,H×,eÑ,eØŸ*™*Ø!-Ø $× 0Ñ 0ð -fó -Ð"ñ &ÜÐ.°¸$Ó?À;ÒNÜÐ1°<ÀÓFÐJaÒaà.@�DÔ+Ø×;Ñ;Ô=à)Ð)àøÜ×#Ñ#ò 	ä× Ñ Ð!IÈ>ÐZ^Ð[^ÐK_Ô`Ùð	ús   ®BC Ã,C0Ã/C0c                  ó   — y)z9Base implementation - should be overridden by subclasses.N© ©r)   s    r,   r>   zGBaseInteractionsAPIStreamingIterator._handle_logging_completed_responses   s   � r.   ©NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚhttpxÚResponseÚstrr   ÚLiteLLMLoggingObjr;   r   r-   r   rC   r>   rE   r.   r,   r   r      s�   „ ñð 37Ø*.ñjà—.‘.ðjð �T‰zðjð ";ð	jð
 'ðjð ˜s C˜x™.¨4Ñ/ðjð ! 4™ZójðB, Cð ,Ð,LÈtÑ,Só ,ó\Hr.   r   c                   óŠ   ‡ — e Zd ZdZ	 	 ddej
                  dedz  dedede	ee
f   dz  dedz  fˆ fd	„Zd
„ Zdefd„Zd„ Zˆ xZS )Ú InteractionsAPIStreamingIteratorzV
    Async iterator for processing streaming responses from the Interactions API.
    Nr   r   r   r   r   r   c                 óZ   •— t         ‰| �  ||||||¬«       |j                  «       | _        y ©N)r   r   r   r   r   r   )Úsuperr-   Úaiter_linesÚstream_iterator©r)   r   r   r   r   r   r   Ú	__class__s          €r,   r-   z)InteractionsAPIStreamingIterator.__init__|   s<   ø€ ô 	‰ÑØØØ$;Ø#Ø-Ø 3ð 	ô 	
ð  (×3Ñ3Ó5ˆÕr.   c                 ó   — | S ©NrE   rF   s    r,   Ú	__aiter__z*InteractionsAPIStreamingIterator.__aiter__�   ó   € Øˆr.   r0   c              ƒ   ó$  K  — 	 	 	 | j                   j                  «       ƒ d {  –—† }| j	                  |«      }| j                  rt        ‚|�|S ŒK7 Œ,# t        $ r d| _        t        ‚w xY w# t
        j                  $ r}d| _        |‚d }~ww xY w­w©NT)rV   Ú	__anext__ÚStopAsyncIterationr!   rC   rL   Ú	HTTPError©r)   r/   ÚresultÚes       r,   r_   z*InteractionsAPIStreamingIterator.__anext__’   s›   è ø€ ð	Øð-Ø"&×"6Ñ"6×"@Ñ"@Ó"B×B�Eð
 ×,Ñ,¨UÓ3�à—=’=Ü,Ð,ØÐ'Ø!�Mð ð CùÜ)ò -Ø$(�D”MÜ,Ð,ð-ûô �‰ò 	à ˆDŒMØˆGûð	üsT   ‚B„A, †A £A¤A ¨&A, ÁBÁA, ÁA ÁA)Á)A, Á,BÁ?	BÂBÂBc           	      óà   — ddl }|j                  | j                  «      }t        j                  | j
                  j                  || j                  t        j                  «       dd¬«      «       y)z8Handle logging for completed responses in async context.r   NT)r$   Úend_timeÚ	cache_hitÚprefer_async_handlers)
ÚcopyÚdeepcopyr"   ÚasyncioÚcreate_taskr   Údispatch_success_handlersr$   r   r#   ©r)   ri   Úlogging_responses      r,   r>   zCInteractionsAPIStreamingIterator._handle_logging_completed_response©   sZ   € ãà"&§-¡-°×0GÑ0GÓ"HÐä×ÑØ×Ñ×6Ñ6Ø ØŸ?™?Ü!Ÿ™›ØØ&*ð 7ó õ	
r.   rG   )rH   rI   rJ   rK   rL   rM   rN   r   rO   r;   r   r-   r[   r   r_   r>   Ú__classcell__©rX   s   @r,   rQ   rQ   w   s   ø„ ñð 37Ø*.ñ6à—.‘.ð6ð �T‰zð6ð ";ð	6ð
 'ð6ð ˜s C˜x™.¨4Ñ/ð6ð ! 4™Zõ6ò&ðÐ!Aó ö.
r.   rQ   c                   óŠ   ‡ — e Zd ZdZ	 	 ddej
                  dedz  dedede	ee
f   dz  dedz  fˆ fd	„Zd
„ Zdefd„Zd„ Zˆ xZS )Ú$SyncInteractionsAPIStreamingIteratorz\
    Synchronous iterator for processing streaming responses from the Interactions API.
    Nr   r   r   r   r   r   c                 óZ   •— t         ‰| �  ||||||¬«       |j                  «       | _        y rS   )rT   r-   Ú
iter_linesrV   rW   s          €r,   r-   z-SyncInteractionsAPIStreamingIterator.__init__¿   s<   ø€ ô 	‰ÑØØØ$;Ø#Ø-Ø 3ð 	ô 	
ð  (×2Ñ2Ó4ˆÕr.   c                 ó   — | S rZ   rE   rF   s    r,   Ú__iter__z-SyncInteractionsAPIStreamingIterator.__iter__Ò   r\   r.   r0   c                 óþ   — 	 	 	 t        | j                  «      }| j	                  |«      }| j                  rt        ‚|�|S Œ># t        $ r d| _        t        ‚w xY w# t
        j                  $ r}d| _        |‚d }~ww xY wr^   )ÚnextrV   ÚStopIterationr!   rC   rL   ra   rb   s       r,   Ú__next__z-SyncInteractionsAPIStreamingIterator.__next__Õ   s�   € ð	Øð(Ü  ×!5Ñ!5Ó6�Eð
 ×,Ñ,¨UÓ3�à—=’=Ü'Ð'ØÐ'Ø!�Mð øô %ò (Ø$(�D”MÜ'Ð'ð(ûô �‰ò 	à ˆDŒMØˆGûð	ús3   ‚A „A ™&A Á A ÁAÁA ÁA<Á.	A7Á7A<c                 óV  — ddl }|j                  | j                  «      }t        | j                  j
                  || j                  t        j                  «       d¬«       t        j                  | j                  j                  |d| j                  t        j                  «       ¬«       y)z7Handle logging for completed responses in sync context.r   N)Úasync_functionrc   r$   rf   rg   )rc   rg   r$   rf   )ri   rj   r"   r   r   Úasync_success_handlerr$   r   r#   r   ÚsubmitÚsuccess_handlerrn   s      r,   r>   zGSyncInteractionsAPIStreamingIterator._handle_logging_completed_responseì   sz   € ãà"&§-¡-°×0GÑ0GÓ"HÐäØ×+Ñ+×AÑAØ#Ø—‘Ü—\‘\“^Øõ	
ô 	�‰Ø×Ñ×,Ñ,Ø#ØØ—‘Ü—\‘\“^ö	
r.   rG   )rH   rI   rJ   rK   rL   rM   rN   r   rO   r;   r   r-   rw   r   r{   r>   rp   rq   s   @r,   rs   rs   º   s   ø„ ñð 37Ø*.ñ5à—.‘.ð5ð �T‰zð5ð ";ð	5ð
 'ð5ð ˜s C˜x™.¨4Ñ/ð5ð ! 4™Zõ5ò&ðÐ:ó ö.
r.   rs   ) rK   rk   r8   r   Útypingr   r   rL   Úlitellm._loggingr   Úlitellm.constantsr   Ú#litellm.litellm_core_utils.asyncifyr   Ú'litellm.litellm_core_utils.core_helpersr	   Ú*litellm.litellm_core_utils.litellm_loggingr
   rO   Ú:litellm.litellm_core_utils.llm_response_utils.get_api_baser   Ú/litellm.litellm_core_utils.thread_pool_executorr   Ú1litellm.llms.base_llm.interactions.transformationr   Úlitellm.types.interactionsr   Úlitellm.utilsr   r   rQ   rs   rE   r.   r,   ú<module>rŒ      sk   ðñó Û Ý ß ã å +Ý 4Ý BÝ LÝ SÝ SÝ DÝ Wõõ .÷WHñ WHôt@
Ð'Kô @
ôFF
Ð+Oõ F
r.   