
    h"                         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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       _/var/www/Befach/backend/env/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                 8    t        di d| j                  i|}|S )Nr$    )r   r$   )r   r,   openai_chunks      r   _chunk_parser_messages_apiz0AWSEventStreamDecoder._chunk_parser_messages_api"   s,     4 


1j1
 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)r5   r3   is_finishedfinish_reasonusage)r   debuggetGChunk)r   r,   _token_indexr7   r8   _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t        j
                  j                  |      xs 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   EventStreamBufferr4   

r,   )Warning: Unparseable JSON data remained: N)botocore.eventstreamrD   add_data_parse_message_from_eventlitellmCustomStreamWrapper_strip_sse_data_from_chunkreplacejsonloadsr%   r0   r@   JSONDecodeErrorr   error)	r   rA   rD   event_stream_bufferaccumulated_jsonchunkeventr   _datas	            r   
iter_bytesz AWSEventStreamDecoder.iter_bytesD   s{     	;/1E((/,88?  33NNwW   &oofb9G %/$
! $

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

#34''99U9KK,,,>>   // ! ! '' $$?@P?QR 
s`   >E*:E*<ADE*5D5 E*D5 E*D2.E*1D22E*5/E'$E*&E''E*c                  K   ddl m}  |       }d}|2 3 d{   }|j                  |       |D ]  }	 | j                  |      }|rt	        j
                  d|       t        j                  j                  |      xs d}|j                  dd      }||z  }t        j                  |      }| j                  r| j                  |       n| j                  |       d} 7 # t        j                  $ r Y t         $ r#}	t	        j"                  d|	 d	       Y d}	~	d}	~	wt$        $ r$}	t	        j&                  d
|	 d	       Y d}	~	 d}	~	ww xY w6 |r	 t        j                  |      }| j                  r| j                  |       y| j                  |       y# t        j                  $ r  t	        j&                  d|        d Y yt$        $ r"}	t	        j&                  d|	        Y d}	~	yd}	~	ww xY wyw)zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   rC   r4   Nz sagemaker  parsed chunk bytes %srE   rF   zUnicodeDecodeError: z(. Attempting to combine with next event.zError parsing message: rG   z&Final error parsing accumulated JSON: )rH   rD   rI   rJ   r   r:   rK   rL   rM   rN   rO   rP   r%   r0   r@   rQ   UnicodeDecodeErrorwarning	ExceptionrR   )
r   rA   rD   rS   rT   rU   rV   r   rW   es
             r   aiter_bytesz!AWSEventStreamDecoder.aiter_bytesx   s     	;/1# )	 )	%((/,&"<<UCG&,,>
 $77RR ' "  "	   #*//&""= )G3( !%

+; <//"&"A"AU"A"SS"&"4"4"4"FF+-(5 -)	: ++ ) "**.qc1YZ   "((1!4\] 	K $X S

#34''99U9KK,,,>>'' $$?@P?QR 
 S$$'MaS%QRRS s   H	EC(EH	B1C*%H	(E*E=H	?ED% H	%E1E
H	EH	6F) H	F) (H	)0HH	H#H ;H	 HH	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   rJ   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   r0   r<   r@   r   ra   r   rX   r   r^   rJ   r.   r   r   r#   r#      s    /c /HTN /d /	%
 
 
22 2	(5)E!EFG	H2hCS%e,CS	xf.J&J KL	MCSJ"(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.loadersrl   botocore.modelrm   load_service_model	shape_for)rl   rm   loadersagemaker_service_dictsagemaker_service_models        r   re   re      sU    #++/!'!:!:"
 #//E"F'>'H'H4(
$ ('r   )rO   typingr   r   r   r   r   r   rK   r   )litellm.llms.base_llm.chat.transformationr	   litellm.types.utilsr
   r<   r   ro   r   r#   re   r.   r   r   <module>rz      sG     A A   " F ? <# T% Tu" u"p(r   