
    ^h:                         S SK r 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
r
S SKJr  S SKJr  S SKJr  S SKJrJr  \(       a  S SKJr  O\r " S S	\5      r " S
 S\5      r " S S5      rg)    N)TYPE_CHECKINGAnyDictListOptionalTuple)	BaseModel)verbose_logger)	DualCache)
get_secretget_secret_strCredentialsc                   :    \ rS rSr% \\S'   \\S'   \\   \S'   Srg)Boto3CredentialsInfo   credentialsaws_region_nameaws_bedrock_runtime_endpoint N)	__name__
__module____qualname____firstlineno__r   __annotations__strr   __static_attributes__r       [/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/bedrock/base_aws_llm.pyr   r      s    "*3-/r   r   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )AwsAuthError   c                    > Xl         X l        [        R                  " SSS9U l        [        R
                  " XR                  S9U l        [        TU ]!  U R                  5        g )NPOSTz0https://us-west-2.console.aws.amazon.com/bedrock)methodurl)status_coderequest)	r'   messagehttpxRequestr(   Responseresponsesuper__init__)selfr'   r)   	__class__s      r   r/   AwsAuthError.__init__   sN    &}}Q
 ;ULL	
r   )r)   r(   r-   r'   )r   r   r   r   r/   r   __classcell__r1   s   @r   r!   r!      s    	
 	
r   r!   c                   
  ^  \ rS rSrSU 4S jjrS\\\\   4   S\4S jr         SS\\   S\\   S\\   S	\\   S
\\   S\\   S\\   S\\   S\\   4S jjr	S\\   S\\   S	\S\
\\4   4S jrS\S\4S jrSrU =r$ )
BaseAWSLLM&   returnc                 @   > [        5       U l        [        TU ]  5         g )N)r   	iam_cacher.   r/   )r0   r1   s    r   r/   BaseAWSLLM.__init__'   s    "r   credential_argsc                     [         R                  " USS9n[        R                  " UR	                  5       5      R                  5       $ )z@
Generate a unique cache key based on the credential arguments.
T)	sort_keys)jsondumpshashlibsha256encode	hexdigest)r0   r<   credential_strs      r   get_cache_keyBaseAWSLLM.get_cache_key+   s5    
 OtD~~n3356@@BBr   aws_access_key_idaws_secret_access_keyaws_session_tokenr   aws_session_nameaws_profile_nameaws_role_nameaws_web_identity_tokenaws_sts_endpointc
                 (   SSK n
SSKJn  / SQnUUUUUUUUU	/	n[        U5       H  u  pU(       aC  UR	                  S5      (       a-  [        U5      nUb  [        U[        5      (       a  UX'   MK  MM  MO  Ub  MT  X   nUR                  5       [        R                  ;   d  M|  [        R                  " U5      X'   M     Uu	  nnnnnnnnn	[        5       R                  5        VVs0 s H!  u  nnUR	                  S5      (       d  M  UU_M#     nnnU R                  U5      n[        R                   " SUUUUUUUUU	5
        UGb8  UGb4  UGb0  [        R                   " SU S	U S
U 35        U	c  SU S3nOU	n["        R$                  " UUUS.5      nU R&                  R)                  U5      nUc  [        U5      nUc
  [+        SSS9eU
R-                  SUUS9nUR/                  UUUSSS9nUS   S   US   S   US   S   US.nU R&                  R1                  U["        R$                  " U5      SS9  US   S:  a  [        R2                  " SUS    35        U
R4                  " S&0 UD6nUR7                  5       nU$ Ub;  Ub8  U
R-                  SUUS 9nUR9                  XuS!9nUS   nU" US   US   US   S"9nU$ Ub  U
R5                  US#9n U R7                  5       $ Ub  Ub  Ub  SSKJn  U" UUUS"9nU$ Ubu  Ubr  Ubo  U R&                  R)                  U5      n!U!(       a  U!$ U
R5                  UUUS$9nUR7                  5       nUR:                  c  U R&                  R1                  UUSS%9  U$ U
R5                  5       nUR7                  5       nU$ s  snnf )'z#
Return a boto3.Credentials object
r   Nr   	rH   rI   rJ   r   rK   rL   rM   rN   rO   zos.environ/aws_zin get credentials
aws_access_key_id=%s
aws_secret_access_key=%s
aws_session_token=%s
aws_region_name=%s
aws_session_name=%s
aws_profile_name=%s
aws_role_name=%s
aws_web_identity_token=%s
aws_sts_endpoint=%szIN Web Identity Token: z | Role Name: z | Session Name: zhttps://sts..amazonaws.com)rN   rM   rK   z6OIDC token could not be retrieved from secret manager.i  )r)   r'   sts)region_nameendpoint_urli  a  {"Version":"2012-10-17","Statement":[{"Sid":"BedrockLiteLLM","Effect":"Allow","Action":["bedrock:InvokeModel","bedrock:InvokeModelWithResponseStream"],"Resource":"*","Condition":{"Bool":{"aws:SecureTransport":"true"},"StringLike":{"aws:UserAgent":"litellm/*"}}}]})RoleArnRoleSessionNameWebIdentityTokenDurationSecondsPolicyr   AccessKeyIdSecretAccessKeySessionToken)rH   rI   rJ   rU   i  )keyvaluettlPackedPolicySizeK   zKThe policy size is greater than 75% of the allowed size, PackedPolicySize: )rH   rI   )rW   rX   )
access_key
secret_keytoken)profile_name)rH   rI   rU   )ra   r   )boto3botocore.credentialsr   	enumerate
startswithr   
isinstancer   upperosenvirongetenvlocalsitemsrF   r
   debugr?   r@   r:   	get_cacher!   clientassume_role_with_web_identity	set_cachewarningSessionget_credentialsassume_rolerf   )"r0   rH   rI   rJ   r   rK   rL   rM   rN   rO   rh   r   param_namesparams_to_checkiparam_vr_   kvargs	cache_keysts_endpointiam_creds_cache_keyiam_creds_dict
oidc_token
sts_clientsts_responsesession	iam_credssts_credentialsr   ru   cached_credentialss"                                     r   rz   BaseAWSLLM.get_credentials3   s     	4

 !"
0
 "/2HA))-88&>jS&9&9)+O& ':>!n99;"**,)+3O& 3* 
	
!" "(!1J!1AQ\\&5I1!1J&&t,		" !"'	
0 #.) ,  )*@)AP]^o  qA  pB  C  '!-o->nM/"&**.D%2(8# "^^556IJN%'(>?
%& X$' 
 #\\ /!- * 
  *GG)$4%/$( e  H   *6m)D])S-9--H). *6m)D^)T#2" ((+**^4! )    23b8"**efr  tF  gG  fH  I mm5n5G//1I&+;+G"3&; & J &11% 2 L
 +=9O%*=9*+<=%n5K
 )]]0@]AF))++)%1!-8%,0'K )%1+ 9=8P8P9 "))mm"3&;+ $ G "113K !!)((KY(O mmoG!113KU Ks   $NNapi_baser   c                 *   [        S5      nUb  UnO@Ub  [        U[        5      (       a  UnO%U(       a  [        U[        5      (       a  UnOSU S3nU(       a  [        U[        5      (       a  UnXV4$ Ub  [        U[        5      (       a  UnXV4$ UnXV4$ )NAWS_BEDROCK_RUNTIME_ENDPOINTzhttps://bedrock-runtime.rS   )r   rl   r   )r0   r   r   r    env_aws_bedrock_runtime_endpointrV   proxy_endpoint_urls          r   get_runtime_endpointBaseAWSLLM.get_runtime_endpoint#  s     ,66T+U(#L)5*(#;
 ;
 8L-*,c3
 3
 <L5o5FnUL ,
,c1
 1
 "B // *5*(#;
 ;
 "> // ".//r   optional_paramsc                     SSK Jn  UR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR                  S	S5      nUR                  S
S5      nUR                  SS5      n	UR                  SS5      n
UR                  SS5      nU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[        UUUS9$ ! [         a    [        S5      ef = f)z
Get boto3 credentials from optional params

Args:
    optional_params (dict): Optional parameters for the model call

Returns:
    Credentials: Boto3 credentials object
r   r   z7Missing boto3 to call bedrock. Run 'pip install boto3'.rI   NrH   rJ   r   rM   rK   rL   rN   rO   r   AWS_REGION_NAME
AWS_REGIONz	us-west-2rQ   )r   r   r   )	ri   r   ImportErrorpopr   rl   r   rz   r   )r0   r   r   rI   rH   rJ   r   rM   rK   rL   rN   rO   r   litellm_aws_region_namestandard_aws_region_namer   s                   r   *_get_boto_credentials_from_optional_params5BaseAWSLLM._get_boto_credentials_from_optional_paramsE  s   	Y8
 !0 3 34KT R+//0CTJ+//0CTJ)--.?F'++OTB*../A4H*../A4H!0!4!45Mt!T*../A4H'6':':*D(
$
 "&45F&M#&2z'8 8 #:'5lD'I$'3
(#9 9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 $#+)E
 	
a  	YWXX	Ys   D2 2E)r:   )r8   N)	NNNNNNNNN)r   r   r   r   r/   r   r   r   rF   rz   r   r   dictr   r   r   r3   r4   s   @r   r6   r6   &   s/   CT#x}2D-E C# C ,0/3+/)-*.*.'+04*.n#C=n  (}n $C=	n
 "#n #3-n #3-n  }n !)n #3-n` 03- 0 '/sm 0 	 0
 
sCx 0DB
#B
	B
 B
r   r6   )rA   r?   rn   typingr   r   r   r   r   r   r*   pydanticr	   litellm._loggingr
   litellm.caching.cachingr   litellm.secret_managers.mainr   r   ri   r   r   	Exceptionr!   r6   r   r   r   <module>r      sR      	 B B   + - C0K09 0

9 

a
 a
r   