
    h                         d Z ddlmZmZ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dlmZ dd	lmZmZmZmZ dd
lmZ ddlmZ ddlmZ ddlm Z m!Z! er	ddl"m#Z$ e$Z%neZ% G d dee      Z&y)a=  
Translate from OpenAI's `/v1/chat/completions` to Sagemaker's `/invocations` API

Called if Sagemaker endpoint supports HF Messages API.

LiteLLM Docs: https://docs.litellm.ai/docs/providers/aws_sagemaker#sagemaker-messages-api
Huggingface Docs: https://huggingface.co/docs/text-generation-inference/en/messages_api
    )TYPE_CHECKINGAnyListOptionalTupleUnioncastN)Headers)track_llm_api_timing)CustomStreamWrapper)BaseLLMException)
BaseAWSLLM)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)AllMessageValues)LlmProviders   )OpenAIGPTConfig   )AWSEventStreamDecoderSagemakerError)Loggingc                      e Zd Zd Zdededeeef   de	fdZ
	 	 ddeded	ee   d
ededee   dee   defdZ	 ddee   dee   ded
ededee   defdZ	 	 	 	 d ded
edededee   dee   dee   dee   deeee   f   fdZedefd       Zedefd       Z e       	 	 	 d!dedededededed	edeeeef      dee   dee   defd       Z e       	 	 	 d!dedededededed	edeeeef      dee   dee   defd       Zy)"SagemakerChatConfigc                 \    t        j                  | fi | t        j                  | fi | y N)r   __init__r   )selfkwargss     f/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/sagemaker/chat/transformation.pyr   zSagemakerChatConfig.__init__(   s(      00D+F+    error_messagestatus_codeheadersreturnc                     t        |||      S )N)r%   messager&   )r   )r    r$   r%   r&   s       r"   get_error_classz#SagemakerChatConfig.get_error_class,   s     #]G
 	
r#   Nmodelmessagesoptional_paramslitellm_paramsapi_keyapi_basec                     |S r    )r    r&   r+   r,   r-   r.   r/   r0   s           r"   validate_environmentz(SagemakerChatConfig.validate_environment3   s	     r#   streamc                     | j                  ||d       }|du r
d| d| d}n	d| d| d}t        t        t           |j	                  d            }||}|S )N)r-   r+   model_idTzhttps://runtime.sagemaker.z.amazonaws.com/endpoints/z/invocations-response-streamz/invocationssagemaker_base_url)_get_aws_region_namer	   r   strget)	r    r0   r/   r+   r-   r.   r4   aws_region_namer7   s	            r"   get_complete_urlz$SagemakerChatConfig.get_complete_url?   s     33+ 4 

 T>3O3DD]^c]d  eA  BH3O3DD]^c]ddpqH!SM?../CD
 ))Hr#   request_datafake_streamc	           
      4    | j                  d|||||||      S )N	sagemaker)service_namer&   r-   r=   r0   r+   r4   r>   )_sign_request)	r    r&   r-   r=   r0   r/   r+   r4   r>   s	            r"   sign_requestz SagemakerChatConfig.sign_requestZ   s4     !!$+%# " 	
 		
r#   c                      y)NTr2   r    s    r"   has_custom_stream_wrapperz-SagemakerChatConfig.has_custom_stream_wrapperp   s    r#   c                      y)NFr2   rE   s    r"   %supports_stream_param_in_request_bodyz9SagemakerChatConfig.supports_stream_param_in_request_bodyt   s    r#   custom_llm_providerlogging_objdataclient	json_modesigned_json_bodyc                    |t        |t              rt        i       }	 |j                  |||
|
n|d|      }|j                  dk7  r!t        |j                  |j                        t        dd      }|j                  |j                  d	            }t        ||d
|      }|S # t        j
                  $ r:}t        |j                  j                  |j                  j                        d }~ww xY w)N)paramsTr&   rK   r4   rJ   r%   r)       r+   is_messages_api   
chunk_sizesagemaker_chatcompletion_streamr+   rI   rJ   )
isinstancer   r   posthttpxHTTPStatusErrorr   responser%   textr   
iter_bytesr   r    r+   rI   rJ   r0   r&   rK   r,   rL   rM   rN   ra   ecustom_stream_decoderr\   streaming_responses                   r"   get_sync_custom_stream_wrapperz2SagemakerChatConfig.get_sync_custom_stream_wrapperx   s    >Z0@A&b1F	{{)9)E%4' # H 3& $00(--  !6BPT U1<<40
 1/ 0#	
 "!+ $$ 	 JJ22AJJOO 	s   B) )C6<5C11C6c                 ,  K   |t        |t              rt        t        j                  i       }	 |j                  |||
|
n|d|       d {   }|j                  dk7  r!t        |j                  |j                        t        dd      }|j                  |j                  d	            }t        ||d
|      }|S 7 s# t        j                  $ r:}t        |j                  j                  |j                  j                        d }~ww xY ww)N)llm_providerrP   TrQ   rR   rS   rT   rU   rW   rX   rZ   r[   )r]   r   r   r   SAGEMAKER_CHATr^   r_   r`   r   ra   r%   rb   r   aiter_bytesr   rd   s                   r"   get_async_custom_stream_wrapperz3SagemakerChatConfig.get_async_custom_stream_wrapper   s     >Z<+)88F	#[[)9)E%4' )  H 3& $00(--  !6BPT U1==  D 1
 1/ 0#	
 "!9 $$ 	 JJ22AJJOO 	s;   .DC CC A/DC D5DDD)NNr   )NNNN)NNN)__name__
__module____qualname__r   r9   intr   dictr
   r   r*   r   r   r   r3   boolr<   r   bytesrC   propertyrF   rH   r   LiteLLMLoggingObjlistr   r   r   rh   rm   r2   r#   r"   r   r   '   s	   ,
 
/2
=B4==Q
	
 "&"&

 
 '(	

 
 
 #
 3-
 

& "&3- # 	
    
B "&#!%&*

 
 	

 
 #
 }
 
 d^
 
tXe_$	%
, 4   t    BF$(,0-"-" !-" '	-"
 -" -" -" -" {,<<=>-" D>-" #5/-" 
-" -"^  BF$(,0/"/" !/" '	/"
 /" /" /" /" {,<<=>/" D>/" #5//" 
/" /"r#   r   )'__doc__typingr   r   r   r   r   r   r	   r_   httpx._modelsr
   (litellm.litellm_core_utils.logging_utilsr   ,litellm.litellm_core_utils.streaming_handlerr   )litellm.llms.base_llm.chat.transformationr   !litellm.llms.bedrock.base_aws_llmr   &litellm.llms.custom_httpx.http_handlerr   r   r   r   litellm.types.llms.openair   litellm.types.utilsr   openai.chat.gpt_transformationr   common_utilsr   r   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjrv   r   r2   r#   r"   <module>r      sb    J I I  ! I L F 8  7 , = @X*q"/: q"r#   