
    ^h                         S SK r S SKJrJrJrJrJr  S SKrS SKJ	r	  S SK
Jr  S SKJr  S SKJr  Sq " S S\5      r " S	 S
5      rS rg)    N)AsyncIteratorIteratorListOptionalUnion)verbose_logger)BaseLLMException)GenericStreamingChunkStreamingChatCompletionChunkc            
       b   ^  \ rS rSr SS\S\S\\\\	R                  4      4U 4S jjjrSrU =r$ )SagemakerError   status_codemessageheadersc                 "   > [         TU ]  XUS9  g )N)r   r   r   )super__init__)selfr   r   r   	__class__s       ]/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/sagemaker/common_utils.pyr   SagemakerError.__init__   s     	[7S     N)__name__
__module____qualname____firstlineno__intstrr   r   dicthttpxHeadersr   __static_attributes____classcell__)r   s   @r   r   r      sF    
 9=	TT T %emm 345	T Tr   r   c                       \ rS rSrSS\S\\   SS4S jjrS\S\	4S jr
S\S\4S	 jrS
\\   S\\\\\	4         4S jrS
\\   S\\\\\	4         4S jrS\\   4S jrSrg)AWSEventStreamDecoder   Nmodelis_messages_apireturnc                 N    SSK Jn  Xl        U" 5       U l        / U l        X l        g )Nr   )EventStreamJSONParser)botocore.parsersr/   r+   parsercontent_blocksr,   )r   r+   r,   r/   s       r   r   AWSEventStreamDecoder.__init__   s"    :
+-$&.r   
chunk_datac                     [        S0 UD6nU$ )Nr   r   )r   r4   openai_chunks      r   _chunk_parser_messages_api0AWSEventStreamDecoder._chunk_parser_messages_api!   s     4AjAr   c                    [         R                  " SU5        UR                  S0 5      =(       d    0 nUR                  SS 5      =(       d    SnSnSnUR                  SS5      nUS:X  a  [        SUS	S
S S9$ [        UUUUS S9$ )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   r4   _token_indexr?   r@   _texts          r   _chunk_parser#AWSEventStreamDecoder._chunk_parser)   s    GT,2.3!

62&O# $  #'
 	
r   iteratorc              #     #    SSK Jn  U" 5       nSnU H  nUR                  U5        U H  nU R                  U5      nU(       d  M  UR	                  SS5      R	                  SS5      nXG-  n [
        R                  " U5      nU R                  (       a  U R                  US9v   OU R                  US9v   SnM     M     U(       aL   [
        R                  " U5      nU R                  (       a  U R                  US9v   gU R                  US9v   gg! [
        R                   a     GM  f = f! [
        R                   a     [        R                  " SU 35        Sv    gf = f7f)	zTGiven an iterator that yields lines, iterate over it & yield every event encounteredr   EventStreamBufferr<   data:

r4   )Warning: Unparseable JSON data remained: N)botocore.eventstreamrM   add_data_parse_message_from_eventreplacejsonloadsr,   r7   rH   JSONDecodeErrorr   error	r   rJ   rM   event_stream_bufferaccumulated_jsonchunkeventr   _datas	            r   
iter_bytes AWSEventStreamDecoder.iter_bytesB   sb     	;/1E((/,88?7%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 
sa   AE)&E).AD:E)
8D2 E)D2 E)D/*E).D//E)21E&#E)%E&&E)c                  #    SSK Jn  U" 5       nSnU  Sh  vN nUR                  U5        U H  nU R                  U5      nU(       d  M  [        R
                  " SU5        UR                  SS5      R                  SS5      nXG-  n [        R                  " U5      nU R                  (       a  U R                  US97v   OU R                  US97v   SnM     M   N! [        R                   a     M  f = f
 U(       a   [        R                  " U5      nU R                  (       a  U R                  US97v   gU R                  US97v   g! [        R                   a!    [        R                  " S	U 35        S7v    gf = fg7f)
zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   rL   r<   Nz sagemaker  parsed chunk bytes %srN   rO   rP   rQ   )rR   rM   rS   rT   r   rB   rU   rV   rW   r,   r7   rH   rX   rY   rZ   s	            r   aiter_bytes!AWSEventStreamDecoder.aiter_bytesr   s}     	;/1# 	!%((/,88?7"(()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   FC<CC<-F=FAC!FC<!C95F8C99F9E >F?E F2FFFFc                 f   UR                  5       nU R                  R                  U[        5       5      nUS   S:w  a  [	        SU 35      eSU;   a8  UR                  S5      nU(       d  g UR                  S5      R                  5       $ UR                  S5      nU(       d  g UR                  5       $ )Nr      z!Bad response code, expected 200: r]   bytesbody)to_response_dictr1   parseget_response_stream_shape
ValueErrorrC   decode)r   r^   response_dictparsed_responser]   s        r   rT   /AWSEventStreamDecoder._parse_message_from_event   s    ..0++++M;T;VW'3.@PQQo%#''0E99W%,,..!%%f-E<<>!r   )r2   r,   r+   r1   r   )r   r   r   r    r"   r   boolr   r#   r   r7   rD   rH   r   rg   r   r`   r   rc   rT   r&   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                      [         c>  SSKJn   SSKJn  U " 5       nUR                  SS5      nU" U5      nUR                  S5      q [         $ )Nr   )Loader)ServiceModelzsagemaker-runtimez	service-2&InvokeEndpointWithResponseStreamOutput)_response_stream_shape_cachebotocore.loadersrs   botocore.modelrt   load_service_model	shape_for)rs   rt   loadersagemaker_service_dictsagemaker_service_models        r   rk   rk      sU    #++/!'!:!:"
 #//E"F'>'H'H4(
$ ('r   )rV   typingr   r   r   r   r   r$   litellmr   )litellm.llms.base_llm.chat.transformationr	   litellm.types.utilsr
   rD   r   rv   r   r)   rk   r   r   r   <module>r      sD     A A  " F ? <# T% T\" \"~(r   