o
    ưi                     @   s   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rgddl"m#Z$ e$Z%neZ%G dd deeZ&dS )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                   @   s  e Zd Zdd Zdededeeef de	fddZ
				d'ded
edee dededee dee defddZ		d(dee dee d
edededee defd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dZedefddZedefd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#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%d&Zd	S )+SagemakerChatConfigc                 K   s(   t j| fi | tj| fi | d S N)r   __init__r   )selfkwargs r   a/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/sagemaker/chat/transformation.pyr   (   s   zSagemakerChatConfig.__init__error_messagestatus_codeheadersreturnc                 C   s   t |||dS )N)r"   messager#   )r   )r   r!   r"   r#   r   r   r    get_error_class,   s   z#SagemakerChatConfig.get_error_classNmodelmessagesoptional_paramslitellm_paramsapi_keyapi_basec                 C   s   |S r   r   )r   r#   r'   r(   r)   r*   r+   r,   r   r   r    validate_environment3   s   
z(SagemakerChatConfig.validate_environmentstreamc           	      C   sb   | j ||d d}|du rd| d| d}n	d| d| d}ttt |d}|d ur/|}|S )N)r)   r'   Zmodel_idTzhttps://runtime.sagemaker.z.amazonaws.com/endpoints/z/invocations-response-streamz/invocationssagemaker_base_url)Z_get_aws_region_namer   r   strget)	r   r,   r+   r'   r)   r*   r.   Zaws_region_namer/   r   r   r    get_complete_url?   s   	z$SagemakerChatConfig.get_complete_urlrequest_datafake_streamc	           	   
   C   s   | j d|||||||dS )NZ	sagemaker)Zservice_namer#   r)   r3   r,   r'   r.   r4   )Z_sign_request)	r   r#   r)   r3   r,   r+   r'   r.   r4   r   r   r    sign_requestZ   s   z SagemakerChatConfig.sign_requestc                 C      dS )NTr   r   r   r   r    has_custom_stream_wrapperp      z-SagemakerChatConfig.has_custom_stream_wrapperc                 C   r6   )NFr   r7   r   r   r    %supports_stream_param_in_request_bodyt   r9   z9SagemakerChatConfig.supports_stream_param_in_request_bodycustom_llm_providerlogging_objdataclient	json_modesigned_json_bodyc              
   C   s   |d u s	t |trti d}z|j|||
d ur|
n|d|d}W n tjy7 } z
t|jj|jj	dd }~ww |jdkrEt|j|j	dt
ddd}||jdd	}t||d
|d}|S )N)paramsTr#   r=   r.   r<   r"   r%       r'   Zis_messages_api   
chunk_sizesagemaker_chatcompletion_streamr'   r;   r<   )
isinstancer   r   posthttpxHTTPStatusErrorr   responser"   textr   Z
iter_bytesr   r   r'   r;   r<   r,   r#   r=   r(   r>   r?   r@   rQ   eZcustom_stream_decoderrL   Zstreaming_responser   r   r    get_sync_custom_stream_wrapperx   s>   



z2SagemakerChatConfig.get_sync_custom_stream_wrapperc              
      s   |d u s
t |trttji d}z|j|||
d ur|
n|d|dI d H }W n tjy= } z
t|j	j
|j	jdd }~ww |j
dkrKt|j
|jdtddd}||jdd	}t||d
|d}|S )N)Zllm_providerrA   TrB   rC   rD   rE   rF   rG   rH   rJ   rK   )rM   r   r   r   ZSAGEMAKER_CHATrN   rO   rP   r   rQ   r"   rR   r   Zaiter_bytesr   rS   r   r   r    get_async_custom_stream_wrapper   sD   

z3SagemakerChatConfig.get_async_custom_stream_wrapper)NNr   )NNNN)NNN)__name__
__module____qualname__r   r0   intr   dictr	   r   r&   r   r   r   r-   boolr2   r   bytesr5   propertyr8   r:   r
   LiteLLMLoggingObjlistr   r   r   rU   rV   r   r   r   r    r   '   s    

	

!	


	
/
	
r   )'__doc__typingr   r   r   r   r   r   r   rO   Zhttpx._modelsr	   Z(litellm.litellm_core_utils.logging_utilsr
   Z,litellm.litellm_core_utils.streaming_handlerr   Z)litellm.llms.base_llm.chat.transformationr   Z!litellm.llms.bedrock.base_aws_llmr   Z&litellm.llms.custom_httpx.http_handlerr   r   r   r   Zlitellm.types.llms.openair   Zlitellm.types.utilsr   Zopenai.chat.gpt_transformationr   Zcommon_utilsr   r   Z*litellm.litellm_core_utils.litellm_loggingr   Z_LiteLLMLoggingObjr_   r   r   r   r   r    <module>   s$    $	