o
    ưi"                     @   s   d dl Z d dlmZmZmZmZmZ d dl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aG dd deZG d	d
 d
Zdd ZdS )    N)AsyncIteratorIteratorListOptionalUnion)verbose_logger)BaseLLMException)GenericStreamingChunk)StreamingChatCompletionChunkc                
       s<   e Zd Z	ddededeeeej	f  f fddZ
  ZS )SagemakerErrorNstatus_codemessageheadersc                    s   t  j|||d d S )N)r   r   r   )super__init__)selfr   r   r   	__class__ Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/sagemaker/common_utils.pyr      s   zSagemakerError.__init__N)__name__
__module____qualname__intstrr   r   dicthttpxZHeadersr   __classcell__r   r   r   r   r      s    r   c                   @   s   e Zd Zddedee ddfddZdedefdd	Z	dede
fd
dZdee deeee
ef   fddZdee deeee
ef   fddZdee fddZdS )AWSEventStreamDecoderNmodelis_messages_apireturnc                 C   s*   ddl m} || _| | _g | _|| _d S )Nr   )EventStreamJSONParser)Zbotocore.parsersr#   r    parserZcontent_blocksr!   )r   r    r!   r#   r   r   r   r      s
   
zAWSEventStreamDecoder.__init__
chunk_datac                 C   s   t di d| ji|}|S )Nr    r   )r
   r    )r   r%   Zopenai_chunkr   r   r   _chunk_parser_messages_api"   s   z0AWSEventStreamDecoder._chunk_parser_messages_apic                 C   sl   t d| |di pi }|dd pd}d}d}|dd}|dkr-td|d	d
d dS t||||d dS )Nz(in sagemaker chunk parser, chunk_data %stokenindexr   F textz<|endoftext|>Tstop)r*   r(   is_finishedfinish_reasonusage)r   debuggetGChunk)r   r%   _token_indexr,   r-   _textr   r   r   _chunk_parser+   s*   z#AWSEventStreamDecoder._chunk_parseriteratorc           	   
   c   s"   ddl m} | }d}|D ]K}|| |D ]A}| |}|rXtj|p'd}|dd}||7 }zt	|}| j
rC| j|dV  n| j|dV  d}W q tjyW   Y qw qq|rzt	|}| j
ro| j|dV  W dS | j|dV  W dS  tjy   td|  dV  Y dS w dS )zTGiven an iterator that yields lines, iterate over it & yield every event encounteredr   EventStreamBufferr)   

r%   )Warning: Unparseable JSON data remained: N)botocore.eventstreamr8   add_data_parse_message_from_eventlitellmCustomStreamWrapper_strip_sse_data_from_chunkreplacejsonloadsr!   r&   r5   JSONDecodeErrorr   error)	r   r6   r8   event_stream_bufferaccumulated_jsonchunkeventr   _datar   r   r   
iter_bytesD   sL   



z AWSEventStreamDecoder.iter_bytesc           
      C  s  ddl m} | }d}|2 z3 dH W }|| |D ]z}z:| |}|rVtd| tj|p2d}|	dd}||7 }t
|}| jrM| j|dV  n| j|dV  d}W q t
jya   Y q ty{ }	 ztd|	 d	 W Y d}	~	qd}	~	w ty }	 ztd
|	 d	 W Y d}	~	qd}	~	ww q6 |rzt
|}| jr| j|dV  W dS | j|dV  W dS  t
jy   td|  dV  Y dS  ty }	 ztd|	  W Y d}	~	dS d}	~	ww dS )zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   r7   r)   Nz sagemaker  parsed chunk bytes %sr9   r:   zUnicodeDecodeError: z(. Attempting to combine with next event.zError parsing message: r;   z&Final error parsing accumulated JSON: )r<   r8   r=   r>   r   r/   r?   r@   rA   rB   rC   rD   r!   r&   r5   rE   UnicodeDecodeErrorwarning	ExceptionrF   )
r   r6   r8   rG   rH   rI   rJ   r   rK   er   r   r   aiter_bytesx   sv   




,
z!AWSEventStreamDecoder.aiter_bytesc                 C   st   |  }| j|t }|d dkrtd| d|v r-|d}|s&d S |d S |d}|s6d S | S )Nr      z!Bad response code, expected 200: rI   bytesbody)Zto_response_dictr$   parseget_response_stream_shape
ValueErrorr0   decode)r   rJ   Zresponse_dictZparsed_responserI   r   r   r   r>      s   

z/AWSEventStreamDecoder._parse_message_from_eventr   )r   r   r   r   r   boolr   r   r
   r&   r1   r5   r   rS   r   rL   r   rQ   r>   r   r   r   r   r      s&    
	
4
Er   c                  C   sH   t d u r"ddlm}  ddlm} |  }|dd}||}|da t S )Nr   )Loader)ServiceModelzsagemaker-runtimez	service-2Z&InvokeEndpointWithResponseStreamOutput)_response_stream_shape_cacheZbotocore.loadersrZ   Zbotocore.modelr[   Zload_service_modelZ	shape_for)rZ   r[   loaderZsagemaker_service_dictZsagemaker_service_modelr   r   r   rV      s   rV   )rC   typingr   r   r   r   r   r   r?   r   Z)litellm.llms.base_llm.chat.transformationr   Zlitellm.types.utilsr	   r1   r
   r\   r   r   rV   r   r   r   r   <module>   s    
 9