
    g                         d dl Z d dlmZmZ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a G d de      Z G d	 d
      Zd Zy)    N)AsyncIteratorIteratorListOptionalUnion)verbose_logger)BaseLLMException)GenericStreamingChunkStreamingChatCompletionChunkc            
       T     e Zd Z	 ddededeeeej                  f      f fdZ
 xZS )SagemakerErrorstatus_codemessageheadersc                 *    t         |   |||       y )N)r   r   r   )super__init__)selfr   r   r   	__class__s       X/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/sagemaker/common_utils.pyr   zSagemakerError.__init__   s     	['7S    N)__name__
__module____qualname__intstrr   r   dicthttpxHeadersr   __classcell__)r   s   @r   r   r      sF    
 9=	TT T %emm 345	T Tr   r   c                       e Zd Zddedee   ddfdZdedefdZ	dede
fdZd	ee   deeee
ef         fd
Zd	ee   deeee
ef         fdZdee   fdZy)AWSEventStreamDecoderNmodelis_messages_apireturnc                 R    ddl m} || _         |       | _        g | _        || _        y )Nr   )EventStreamJSONParser)botocore.parsersr)   r%   parsercontent_blocksr&   )r   r%   r&   r)   s       r   r   zAWSEventStreamDecoder.__init__   s&    :
+-$&.r   
chunk_datac                     t        di |}|S )N r   )r   r-   openai_chunks      r   _chunk_parser_messages_apiz0AWSEventStreamDecoder._chunk_parser_messages_api!   s     4AjAr   c                     t        j                  d|       |j                  di       xs i }|j                  dd       xs d}d}d}|j                  dd      }|dk(  rt        d|d	d
d       S t        ||||d       S )Nz(in sagemaker chunk parser, chunk_data %stokenindexr   F textz<|endoftext|>Tstop)r6   r4   is_finishedfinish_reasonusage)r   debuggetGChunk)r   r-   _token_indexr8   r9   _texts          r   _chunk_parserz#AWSEventStreamDecoder._chunk_parser)   s    GT,2.3!

62&O# $  #'
 	
r   iteratorc              #     K   ddl m}  |       }d}|D ]  }|j                  |       |D ]  }| j                  |      }|s|j	                  dd      j	                  dd      }||z  }	 t        j                  |      }| j                  r| j                  |       n| j                  |       d}  |rL	 t        j                  |      }| j                  r| j                  |       y| j                  |       yy# t
        j                  $ r Y w xY w# t
        j                  $ r t        j                  d|        d Y yw xY ww)	zTGiven an iterator that yields lines, iterate over it & yield every event encounteredr   EventStreamBufferr5   data:

r-   )Warning: Unparseable JSON data remained: N)botocore.eventstreamrE   add_data_parse_message_from_eventreplacejsonloadsr&   r1   rA   JSONDecodeErrorr   error	r   rB   rE   event_stream_bufferaccumulated_jsonchunkeventr   _datas	            r   
iter_bytesz AWSEventStreamDecoder.iter_bytesB   sc     	;/1E((/,88?%oogr:BB62NG %/$
! $

+; <//"&"A"AU"A"SS"&"4"4"4"FF+-(# - 2 

#34''99U9KK,,,>>   // ! ! '' $$?@P?QR 
s`   >E'E)AD5E<5D! 1E2D! EDEDE!/EEEEc                  K   ddl m}  |       }d}|2 3 d{   }|j                  |       |D ]  }| j                  |      }|st	        j
                  d|       |j                  dd      j                  dd      }||z  }	 t        j                  |      }| j                  r| j                  |       n| j                  |       d} 7 # t        j                  $ r Y w xY w6 |r	 t        j                  |      }| j                  r| j                  |       y| j                  |       y# t        j                  $ r  t	        j                  d	|        d Y yw xY wyw)
zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   rD   r5   Nz sagemaker  parsed chunk bytes %srF   rG   rH   rI   )rJ   rE   rK   rL   r   r;   rM   rN   rO   r&   r1   rA   rP   rQ   rR   s	            r   aiter_bytesz!AWSEventStreamDecoder.aiter_bytesr   s~     	;/1# 	!%((/,88?"(()KWU%oogr:BB62NG %/$
! $

+; <//"&"A"AU"A"SS"&"4"4"4"FF+-(% -	!*  // ! !+ $4 

#34''99U9KK,,,>>'' $$?@P?QR 
 sz   E9C1CC1*E9=E9ACE9C1C.+E9-C..E956E +E9,E E90E52E94E55E9c                 L   |j                         }| j                  j                  |t                     }|d   dk7  rt	        d|       d|v r3|j                  d      }|sy |j                  d      j                         S |j                  d      }|sy |j                         S )Nr      z!Bad response code, expected 200: rU   bytesbody)to_response_dictr+   parseget_response_stream_shape
ValueErrorr<   decode)r   rV   response_dictparsed_responserU   s        r   rL   z/AWSEventStreamDecoder._parse_message_from_event   s    ..0++++M;T;VW'3.@PQQo%#''0E99W%,,..!%%f-E<<>!r   r   )r   r   r   r   r   boolr   r   r   r1   r=   rA   r   r]   r   rX   r   rZ   rL   r/   r   r   r$   r$      s    /c /HTN /d /	%
 
 
2. .	(5)E!EFG	H.`/%e,/	xf.J&J KL	M/b"(3- "r   r$   c                      t         >ddlm}  ddlm}  |        }|j                  dd      } ||      }|j                  d      a t         S )Nr   )Loader)ServiceModelzsagemaker-runtimez	service-2&InvokeEndpointWithResponseStreamOutput)_response_stream_shape_cachebotocore.loadersrh   botocore.modelri   load_service_model	shape_for)rh   ri   loadersagemaker_service_dictsagemaker_service_models        r   ra   ra      sU    #++/!'!:!:"
 #//E"F'>'H'H4(
$ ('r   )rN   typingr   r   r   r   r   r    litellmr   )litellm.llms.base_llm.chat.transformationr	   litellm.types.utilsr
   r=   r   rk   r   r$   ra   r/   r   r   <module>rw      sD     A A  " F ? <# T% T\" \"~(r   