o
    ưiH                     @   s   d dl Z d dl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mZmZmZ d dlm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mZmZ 			ddee dede dedede!dedee" de"de#fddZ$G dd deZ%dS )    N)AnyOptionalUnion)!update_headers_with_filtered_beta)Logging)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)ModelResponse)CustomStreamWrapper   )
BaseAWSLLMCredentials)BedrockError_get_all_bedrock_regions   )AWSEventStreamDecoderMockResponseIterator	make_callF   clientapi_baseheadersdatamodelmessageslogging_obj	json_modefake_streamstream_chunk_sizec
                 C   s   | d u rt  } | j|||| |d}
|
jdkr"t|
jt|
 d|r?t j||
t	 d|i d||tj
d
}t||d}nt||d}||
j|	d	}|j|dd
d|id |S )N)r   r   streamr      status_codemessageT )
r   responsemodel_responser!   r   optional_paramsapi_keyr   r   encoding)r(   r   )r   r   )
chunk_sizezfirst stream response receivedcomplete_input_dict)inputr*   original_responseadditional_args)r	   postr$   r   strreadlitellmAmazonConverseConfig_transform_responser   r+   r   r   Z
iter_bytesZ	post_call)r   r   r   r   r   r   r   r   r   r    r'   r(   completion_streamdecoder r9   a/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/bedrock/chat/converse_handler.pymake_sync_call   sN   
r;   c                       s^  e Zd Zd fddZdi dddddfdeded	ed
edeee	e
jf  dedededee dedee dee dedefddZdi ddfdeded	ed
edeee	e
jf  dedededededee dee deeef fddZ				d deded	ee ded
ededededeee	e
jf  dedee deeeef  dee fddZ  ZS )!BedrockConverseLLMreturnNc                    s   t    d S )N)super__init__)self	__class__r9   r:   r?   W   s   zBedrockConverseLLM.__init__Fr   r   r   r   r(   timeoutr)   litellm_paramscredentialsr   r   r   r*   r    c                    s   t  j|||	|
|dI d H }t|}| j||
dpd|||||d}|j|d||t|j	dd t
||t|j	|||||||d
I d H }t||d	|d
}|S )Nr   r   r)   rD   r   aws_region_name	us-west-2rE   rG   extra_headersendpoint_urlr   r   r*   r&   r-   r   r   r.   r*   r0   )
r   r   r   r   r   r   r   r   r   r    bedrockr7   r   custom_llm_providerr   )r4   r5   _async_transform_requestjsondumpsget_request_headersgetpre_calldictr   r   r   )r@   r   r   r   r(   rC   r+   r   r!   r)   rD   rE   	logger_fnr   r   r   r   r*   r    request_datar   preppedr7   streaming_responser9   r9   r:   async_streamingZ   sZ   

z"BedrockConverseLLM.async_streamingr   r   c                    sl  t  j|||	|
|dI d H }t|}| j||
dpd|||||d}|j|d|||jdd t	|j}|d u sAt
|tsci }|d urZt
|tsQt
|trVt|}||d< t|t jjd	}n|}z|j||||d
I d H }|  W n& tjy } z|jj}t||jjdd }~w tjy   tdddw t  j|||t
|tr|nd|d|||	|d
S )NrF   rG   rH   rI   r&   rL   rM   rC   )paramsZllm_providerurlr   r   r   r#     Timeout error occurred.F
r   r'   r(   r!   r   r*   r   r   r)   r+   )r4   r5   rQ   rR   rS   rT   rU   rV   r   rW   
isinstancer   floatinthttpxTimeoutr
   ZLlmProvidersZBEDROCKr1   raise_for_statusHTTPStatusErrorr'   r$   r   textTimeoutExceptionr6   bool)r@   r   r   r   r(   rC   r+   r   r!   r)   rD   rE   rX   r   r   r*   rY   r   rZ   _paramsr'   err
error_coder9   r9   r:   async_completion   s   



z#BedrockConverseLLM.async_completioncustom_prompt_dictacompletionrJ   c           4      C   s  | dd }| dd}| dd }| dd}|dd}|d ur)| j|d}n\|}|}d	D ]}||r@|t|d  } nq/d }|d
dd }|t v r`d
|v r`|}|d
dd }|}dD ]}||rr||dd} nqb| j|d}|d urd|vr||d< t	 j
|||dd}| j|||d}| dd }| dd }| dd }| dd } | dd }!| dd }"| dd }#| dd }$| dd }%| dd }&| dd  ||d< | j|||||!|"| |$|%|&d
}'| j||#|d\}(})|d ur|du r|s|( d | d!}(|) d | d!})n|( d | d"}(|) d | d"})d#d$i}*|d ur4d#d$i|}*t|*d%d&}*|	rt|trEd }|du r| jdAi d'|d(|d)|)d*|d+|d,|d-|ddd.|d/|d0|*d1|
d2|d|d|d3|'d4|d|S | j|||)||||||||*|
||'|d5S t	 j|||||d6}+t|+},| j|'|||)|,|*|d7}-|j|d|,|)|-jd8d9 |d u st|tri }.|
d urt|
tst|
trt|
}
|
|.d1< t|.}n|}|d ur"|du r"t|d ur
t|tr
|nd |)|-j|,||||||d:
}/t |/|d|d;}0|0S z|j!|)|-j|,|d<}1|1"  W n( tj#yL }2 z|2j$j%}3t&|3|2j$j'd=d }2~2w tj(yZ   t&d>d?d=w t	 j)||1|t|t*rj|nd|d|,|||d@
S )BNr!   r    r   model_idr   Fr   )rs   )zbedrock/converse/zbedrock/z	converse//r   r   )znova-2/znova/r&   rG   rN   )r   r   r!   rP   )r)   r   rs   aws_secret_access_keyaws_access_key_idaws_session_tokenaws_role_nameaws_session_nameaws_profile_nameaws_bedrock_runtime_endpointaws_web_identity_tokenaws_sts_endpointaws_external_id)
rv   ru   rw   rG   ry   rz   rx   r|   r}   r~   )r   r{   rG   Tz/model/z/converse-streamz	/conversezContent-Typezapplication/jsonZbedrock_converse)r   providerr   r   r   r(   r+   r   r)   rD   rX   r   rC   r   rE   r*   )r   r   r   r(   r+   r   r)   r!   rD   rX   r   rC   r   rE   r*   rF   rI   rL   rM   )
r   r   r   r   r   r   r   r   r   r    rO   r^   r#   r`   ra   rb   r9   )+poprU   Zencode_model_id
startswithlensplitr   replacer4   r5   Zshould_fake_streamZ_get_aws_region_nameZget_credentialsZget_runtime_endpointr   rc   r   r\   rp   Z_transform_requestrR   rS   rT   rV   r   r   rd   re   rf   rg   r	   r;   r   r1   rh   ri   r'   r$   r   rj   rk   r6   rl   )4r@   r   r   r   rq   r(   r+   r   r)   rr   rC   rD   rX   rJ   r   r*   r!   r    Zunencoded_model_idr   r   ZmodelIdZ_model_for_idZ	_strippedrpZ_region_from_modelZ_potential_regionZ_nova_prefixrG   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   rE   rK   Zproxy_endpoint_urlr   _datar   rZ   rm   r7   r[   r'   rn   ro   r9   r9   r:   
completion   s  

	



	

	


zBedrockConverseLLM.completion)r=   N)NNNN)__name__
__module____qualname__r?   r2   listr   r   r   rd   rf   rg   rW   r   r   rl   re   r   r\   LiteLLMLoggingObjectrp   r   r   __classcell__r9   r9   rA   r:   r<   V   s    

T


e	
r<   )FFr   )&rR   typingr   r   r   rf   r4   Z&litellm.anthropic_beta_headers_managerr   Z*litellm.litellm_core_utils.litellm_loggingr   r   Z&litellm.llms.custom_httpx.http_handlerr   r   r	   r
   Zlitellm.types.utilsr   Zlitellm.utilsr   Zbase_aws_llmr   r   Zcommon_utilsr   r   Zinvoke_handlerr   r   r   r2   rW   r   rl   re   r;   r<   r9   r9   r9   r:   <module>   sJ    	

=