o
    ưiZ                     @   s   d dl Z d dlmZ d dlmZmZmZ d dlZd dlm	Z	 d dl
mZmZ d dlmZmZ ddlmZ d	d
lmZ G dd de	ZdS )    N)deepcopy)CallableOptionalUnion)
BaseAWSLLM)AsyncHTTPHandlerHTTPHandler)ModelResponse
get_secret   )AWSEventStreamDecoder   )SagemakerChatConfigc                   @   s   e Zd ZdefddZ	ddededededee f
d	d
Zdi ddi dfdedede	de
dededeeeejf  dededeeeef  fddZdS )SagemakerChatHandleroptional_paramsc                 C   s  zddl m} W n ty   tdw |dd }|dd }|dd }|dd }|dd }|d	d }|d
d }	|dd  |dd }
|dd }|d u rztdd }|d urdt|trd|}tdd }|d urtt|trt|}|d u rzd}| j||||||	||
|d	}||fS )Nr   )Credentials7Missing boto3 to call bedrock. Run 'pip install boto3'.aws_secret_access_keyaws_access_key_idaws_session_tokenaws_region_nameaws_role_nameaws_session_nameaws_profile_nameZaws_bedrock_runtime_endpointaws_web_identity_tokenaws_sts_endpointZAWS_REGION_NAMEZ
AWS_REGIONz	us-west-2)	r   r   r   r   r   r   r   r   r   )Zbotocore.credentialsr   ImportErrorpopr
   
isinstancestrZget_credentials)selfr   r   r   r   r   r   r   r   r   r   r   Zlitellm_aws_region_nameZstandard_aws_region_namecredentials r"   Z/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/sagemaker/chat/handler.py_load_credentials   sT   



z&SagemakerChatHandler._load_credentialsNmodeldatar   extra_headersc                 C   s   zddl m} ddlm} W n ty   tdw ||d|}	|ddu r1d| d	| d
}
n	d| d	| d}
|dd }|d urF|}
t|d}ddi}|d ur\ddi|}|d|
||d}|		| |d urxd|v rx|d |j
d< | }|S )Nr   )	SigV4Auth)
AWSRequestr   Z	sagemakerstreamTzhttps://runtime.sagemaker.z.amazonaws.com/endpoints/z/invocations-response-streamz/invocationssagemaker_base_urlzutf-8zContent-Typezapplication/jsonPOST)methodurlr&   headersAuthorization)Zbotocore.authr(   Zbotocore.awsrequestr)   r   getjsondumpsencodeZadd_authr/   prepare)r    r!   r%   r&   r   r   r'   r(   r)   Zsigv4api_baser+   Zencoded_datar/   requestZprepped_requestr"   r"   r#   _prepare_requestG   s2   	
z%SagemakerChatHandler._prepare_requestFmessagesmodel_responseprint_verboselitellm_paramstimeoutacompletionr/   clientc                 C   s   |  |\}}t|}|dd }ddlm} | }|du r dnd|d< t j|||||d}| j|||||d}tddd	}|j	di d
|d|d|j
dd d|
d|d|d|d|d|d|d|d|	d|d|jddddd|d|S )Nr*   r   )OpenAILikeChatHandlerTF)r%   r9   r   r<   r/   )r%   r&   r   r!   r    )r%   Zis_messages_apir%   r9   r6   Zapi_keycustom_prompt_dictr:   r;   logging_objr   r>   r<   	logger_fnr=   encodingr/   Zcustom_endpointZcustom_llm_providerZsagemaker_chatZstreaming_decoderr?   r"   )r$   r   r   Z%litellm.llms.openai_like.chat.handlerr@   r   Ztransform_requestr8   r   
completionr.   r/   )r    r%   r9   r:   r;   rE   rC   r   r<   r=   rB   rD   r>   r/   r?   r!   r   Zinference_paramsr*   r@   Zopenai_like_chat_completions_dataprepared_requestZcustom_stream_decoderr"   r"   r#   rF   q   sx   
	
zSagemakerChatHandler.completion)N)__name__
__module____qualname__dictr$   r   r   r8   listr	   r   r   floathttpxTimeoutboolr   r   rF   r"   r"   r"   r#   r      sV    
>
4	
r   )r2   copyr   typingr   r   r   rO   Z!litellm.llms.bedrock.base_aws_llmr   Z&litellm.llms.custom_httpx.http_handlerr   r   Zlitellm.utilsr	   r
   Zcommon_utilsr   Ztransformationr   r   r"   r"   r"   r#   <module>   s    