
    ^h*                     N   S SK r S SKr\R                  R                  S \ R                  R	                  S5      5        S SKrS SKrS SKJrJrJ	r	J
r
JrJr  S SKJr  S SKrS SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  S SKJrJrJ r J!r!  S SK"J#r#  Sr$ " S S\\5      r%g)    Nz../..)AnyDictListLiteralOptionalUnion)HTTPException)verbose_proxy_logger)CustomGuardrail)
BaseAWSLLM)get_async_httpx_clienthttpxSpecialProvider)UserAPIKeyAuth)
get_secret)BedrockContentItemBedrockRequestBedrockTextContentGuardrailEventHooks)ModelResponsebedrockc            
       "  ^  \ rS rSr  SS\\   S\\   4U 4S jjjr  SS\\\\\4         S\\	\
\4      S\4S jjrS	 r SS
\S\S\S\\   4S jjr SS\S\\	\
\R                  4      4S jjrS
\S\S\S   4S jrS
\S\4S jrSrU =r$ )BedrockGuardrail)   guardrailIdentifierguardrailVersionc                    > [        [        R                  S9U l        Xl        X l        X0l        [        TU ]   " S0 UD6  g )N)llm_provider )	r   r   GuardrailCallbackasync_handlerr   r   optional_paramssuper__init__)selfr   r   kwargs	__class__s       u/home/james-whalen/.local/lib/python3.13/site-packages/litellm/proxy/guardrails/guardrail_hooks/bedrock_guardrails.pyr#   BedrockGuardrail.__init__*   sA     4-??
 $7  0  &"6"    messagesresponsereturnc                    [        SS9n/ nU(       aV  U HL  nUR                  S5      n[        U[        5      (       d  M+  [	        [        US9S9nUR                  U5        MN     XCS'   U(       a  SUS'   [        U[        R                  5      (       a  UR                   H  n[        U[        R                  5      (       d  M$  UR                  R                  (       d  MA  [        UR                  R                  [        5      (       d  Ml  [	        [        UR                  R                  S9S9nUR                  U5        M     XCS'   U$ )NINPUT)sourcecontent)textOUTPUTr/   )r   get
isinstancestrr   r   appendlitellmr   choicesChoicesmessager0   )	r$   r*   r+   bedrock_requestbedrock_request_contentr:   r0   bedrock_content_itemchoices	            r'   convert_to_bedrock_format*BedrockGuardrail.convert_to_bedrock_format;   s   
 +9*H<>#!++i0gs+++=/W=,( ,223GH $ *AI&(0OH%(G$9$9::&..F!&'//::!>>111j"NN22C7 7 4F%7V^^=S=S%T40 4::;OP / .E	*r)   c                 N    SSK Jn  U R                  R	                  SS 5      nU R                  R	                  SS 5      nU R                  R	                  SS 5      nU R                  R	                  SS 5      nU R                  R	                  SS 5      nU R                  R	                  S	S 5      nU R                  R	                  S
S 5      nU R                  R	                  SS 5        U R                  R	                  SS 5      n	U R                  R	                  SS 5      n
UcQ  [        SS 5      nUb  [        U[        5      (       a  Un[        SS 5      nUb  [        U[        5      (       a  UnUc  SnU R                  UUUUUUUU	U
S9	nX4$ ! [         a    [        S5      ef = f)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_nameaws_bedrock_runtime_endpointaws_web_identity_tokenaws_sts_endpointAWS_REGION_NAME
AWS_REGIONz	us-west-2)	rE   rD   rF   rG   rI   rJ   rH   rL   rM   )	botocore.credentialsrB   ImportErrorr!   popr   r4   r5   get_credentials)r$   rB   rD   rE   rF   rG   rH   rI   rJ   rL   rM   litellm_aws_region_namestandard_aws_region_namecredentialss                 r'   _load_credentials"BedrockGuardrail._load_credentials]   s   	Y8
 !% 4 4 8 89PRV W 00445H$O 00445H$O..223DdK,,00$G//334FM//334FM  *D	
 "&!5!5!9!9$d"
  //334FM "&01BD&I#&2z'8 8 #:'1,'E$'3
(#9 9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 ++c  	YWXX	Ys   F F$datar!   rG   extra_headersc                     SSK Jn  SSKJn  U" USU5      nSU SU R
                   SU R                   S	3n	[        R                  " U5      R                  S
5      n
SS0nUb  SS0UEnU" SXUS9nUR                  U5        Ub  SU;   a  US   UR                  S'   UR                  5       nU$ ! [         a    [	        S5      ef = f)Nr   )	SigV4Auth)
AWSRequestrC   r   zhttps://bedrock-runtime.z.amazonaws.com/guardrail/z	/version/z/applyzutf-8zContent-Typezapplication/jsonPOST)methodurlrY   headersAuthorization)botocore.authr\   botocore.awsrequestr]   rQ   r   r   jsondumpsencodeadd_authra   prepare)r$   rV   rY   r!   rG   rZ   r\   r]   sigv4api_baseencoded_datara   requestprepped_requests                 r'   _prepare_request!BedrockGuardrail._prepare_request   s	   	Y/6 +y/B-o->>WX\XpXpWqqz{  |Q  |Q  {R  RX  Yzz$'..w7!#56$%'9K]KGxG
 	w%/]*J/<_/MGOOO,!//+-  	YWXX	Ys   B0 0Cr%   c                   #    U R                  5       u  p4U R                  UR                  S5      US9nU R                  UUU R                  US9n[
        R                  " SUUR                  UR                  5        U R                  R                  UR                  UR                  UR                  S9I S h  vN n[
        R                  " SUR                  5        UR                  S:X  a3  UR                  5       nUR                  S5      S	:X  a  [        S
SUS.S9eg [
        R                   " SUR                  UR                  5        g  N7f)Nr*   )r*   r+   )rV   rY   r!   rG   z0Bedrock AI request body: %s, url %s, headers: %s)r`   rY   ra   zBedrock AI response: %s   actionGUARDRAIL_INTERVENEDi  zViolated guardrail policy)errorbedrock_guardrail_response)status_codedetailz<Bedrock AI: error in response. Status code: %s, response: %s)rW   r?   r3   ro   r!   r
   debugr`   ra   r    postbodyr1   rw   re   r	   ru   )r$   r%   r+   rV   rG   request_dataprepared_request_json_responses           r'   make_bedrock_api_request)BedrockGuardrail.make_bedrock_api_request   sX     (,'='='?$'+'E'EZZ
+h (F (
  00# 00+	 1 
 	"">  $$		
 ++00 $$!&&$,, 1 
 

 	""#<hmmL3&%]]_N!!(+/EE# #!<6D  F !&&N$$%
s   B7E9E:BEuser_api_key_dict	call_type)
completion
embeddingsimage_generation
moderationaudio_transcriptionc                   #    SSK Jn  [        R                  nU R	                  XS9SLa  g UR                  S5      nUb(  U R                  US9I S h  vN   U" XR                  S9  g [        R                  " S5        g  N,7f)	Nr   *add_guardrail_to_applied_guardrails_headerrY   
event_typeTr*   )r%   r|   guardrail_name6Bedrock AI: not running guardrail. No messages in data)
)litellm.proxy.common_utils.callback_utilsr   r   during_callshould_run_guardrailr3   r   r   r
   warning)r$   rY   r   r   r   r   new_messagess          r'   async_moderation_hook&BedrockGuardrail.async_moderation_hook   s     	
 +>*I*I
$$$$FdR-1XXj-A#//t/<<<6!2E2E !((H  =   ABA?-Bc                   #    SSK Jn  SSKJn  U R	                  XR
                  S9SLa  g UR                  S5      nUb(  U R                  XS9I S h  vN   U" XR                  S9  g [        R                  " S	5        g  N,7f)
Nr   r   )r   r   Tr*   )r%   r+   r   r   )r   r   litellm.types.guardrailsr   r   	post_callr3   r   r   r
   r   )r$   rY   r   r+   r   r   r   s          r'   async_post_call_success_hook-BedrockGuardrail.async_post_call_success_hook  s     	
 	A %%&C&C &  
 -1XXj-A#//t/OOO6!2E2E !((H Pr   )r    r   r   r!   )NN)N)__name__
__module____qualname____firstlineno__r   r5   r#   r   r   r   r   r   r   r?   rW   dictro   r7   r   r   r   r   r   __static_attributes____classcell__)r&   s   @r'   r   r   )   s1    .2*.#%c]# #3-# #& 488<4S#X/0 5m!345 
	D6,| )-! ! 	!
 !  ~!H UY++&.uS':O:O5O/P&Q+Z * #
	@ * r)   r   )&ossyspathinsertabspathre   typingr   r   r   r   r   r   fastapir	   r7   litellm._loggingr
   %litellm.integrations.custom_guardrailr   !litellm.llms.bedrock.base_aws_llmr   &litellm.llms.custom_httpx.http_handlerr   r   litellm.proxy._typesr   litellm.secret_managers.mainr   r   r   r   r   r   litellm.types.utilsr   GUARDRAIL_NAMEr   r   r)   r'   <module>r      s}    
 
 rwww  
 < < !  1 A 8 0 3  .x
 xr)   