o
    ưib#                     @   s   d Z ddlZddl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 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 dZG dd deZG dd deZ dS )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DictOptional)verbose_logger)STREAM_SSE_DONE_STRING)run_async_function)process_response_headers)Logging)get_api_base)executor)BaseInteractionsAPIConfig) InteractionsAPIStreamingResponse)CustomStreamWrapperc                   @   sl   e Zd ZdZ		ddejdee dede	dee
eef  dee fd	d
Zdedee fddZdd ZdS )$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           	      C   s   || _ || _|| _d| _|| _d | _t | _|| _	|| _
t|p!d| jjdi d}|r3|di ni }|dd |d| _t| j jpEi | jd< d S )	NF Zlitellm_params)r   Zoptional_paramsZ
model_infoid)Zmodel_idZapi_baseZadditional_headers)r   r   r   finishedr   completed_responser   now
start_timer   r   r   Zmodel_call_detailsgetZ_hidden_paramsr	   headers)	selfr   r   r   r   r   r   Z	_api_baseZ_model_info r    ^/home/app/Keep/.python/lib/python3.10/site-packages/litellm/interactions/streaming_iterator.py__init__$   s,   	


z-BaseInteractionsAPIStreamingIterator.__init__chunkreturnc              	   C   s   |sdS t |}|du rdS |tkrd| _dS z,t|}t|trB| jj	| j
|| jd}|r?t|dddkr?|| _|   |W S W dS  tjy\   td|dd  d Y dS w )	z/Process a single chunk of data from the stream.NT)r   parsed_chunkr   status	completedz!Failed to parse streaming chunk:    z...)r   Z_strip_sse_data_from_chunkr   r   jsonloads
isinstancedictr   Ztransform_streaming_responser   r   getattrr   "_handle_logging_completed_responseJSONDecodeErrorr   debug)r   r#   Zstripped_chunkr%   Zstreaming_responser    r    r!   _process_chunkI   s6   


z3BaseInteractionsAPIStreamingIterator._process_chunkc                 C   s   dS )z9Base implementation - should be overridden by subclasses.Nr    r   r    r    r!   r.   t   s   zGBaseInteractionsAPIStreamingIterator._handle_logging_completed_responseNN)__name__
__module____qualname____doc__httpxResponser   strr   LiteLLMLoggingObjr   r   r"   r   r1   r.   r    r    r    r!   r      s&    
%+r   c                       t   e Zd ZdZ		ddejdee dede	dee
eef  dee f fd	d
Zdd ZdefddZdd Z  ZS ) InteractionsAPIStreamingIteratorzV
    Async iterator for processing streaming responses from the Interactions API.
    Nr   r   r   r   r   r   c                    &   t  j||||||d | | _d S N)r   r   r   r   r   r   )superr"   Zaiter_linesstream_iteratorr   r   r   r   r   r   r   	__class__r    r!   r"   ~      	z)InteractionsAPIStreamingIterator.__init__c                 C      | S Nr    r2   r    r    r!   	__aiter__      z*InteractionsAPIStreamingIterator.__aiter__r$   c              
      s|   z*	 z
| j  I d H }W n ty   d| _tw | |}| jr$t|d ur+|W S q tjy= } zd| _|d }~ww NT)rA   	__anext__StopAsyncIterationr   r1   r8   	HTTPErrorr   r#   resulter    r    r!   rK      s(   
z*InteractionsAPIStreamingIterator.__anext__c                 C   sV   ddl }|| j}t| jj|| jt	 dd t
j| jj|d| jt	 d dS )z8Handle logging for completed responses in async context.r   N)rO   r   end_time	cache_hitrO   rR   r   rQ   )copydeepcopyr   asynciocreate_taskr   async_success_handlerr   r   r   r   submitsuccess_handlerr   rT   Zlogging_responser    r    r!   r.      s"   	
zCInteractionsAPIStreamingIterator._handle_logging_completed_responser3   )r4   r5   r6   r7   r8   r9   r   r:   r   r;   r   r   r"   rH   r   rK   r.   __classcell__r    r    rC   r!   r=   y   (    
r=   c                       r<   )$SyncInteractionsAPIStreamingIteratorz\
    Synchronous iterator for processing streaming responses from the Interactions API.
    Nr   r   r   r   r   r   c                    r>   r?   )r@   r"   
iter_linesrA   rB   rC   r    r!   r"      rE   z-SyncInteractionsAPIStreamingIterator.__init__c                 C   rF   rG   r    r2   r    r    r!   __iter__   rI   z-SyncInteractionsAPIStreamingIterator.__iter__r$   c              
   C   st   z'	 zt | j}W n ty   d| _tw | |}| jr t|d ur'|W S q tjy9 } zd| _|d }~ww rJ   )nextrA   StopIterationr   r1   r8   rM   rN   r    r    r!   __next__   s&   
z-SyncInteractionsAPIStreamingIterator.__next__c                 C   sR   ddl }|| j}t| jj|| jt dd t	j
| jj|d| jt d dS )z7Handle logging for completed responses in sync context.r   N)Zasync_functionrO   r   rQ   rR   rS   )rT   rU   r   r   r   rX   r   r   r   r   rY   rZ   r[   r    r    r!   r.      s    
zGSyncInteractionsAPIStreamingIterator._handle_logging_completed_responser3   )r4   r5   r6   r7   r8   r9   r   r:   r   r;   r   r   r"   r`   r   rc   r.   r\   r    r    rC   r!   r^      r]   r^   )!r7   rV   r)   r   typingr   r   r   r8   Zlitellm._loggingr   Zlitellm.constantsr   Z#litellm.litellm_core_utils.asyncifyr   Z'litellm.litellm_core_utils.core_helpersr	   Z*litellm.litellm_core_utils.litellm_loggingr
   r;   Z:litellm.litellm_core_utils.llm_response_utils.get_api_baser   Z/litellm.litellm_core_utils.thread_pool_executorr   Z1litellm.llms.base_llm.interactions.transformationr   Zlitellm.types.interactionsr   Zlitellm.utilsr   r   r=   r^   r    r    r    r!   <module>   s&    \I