
    g:                         d dl Z d dlZd dlZd dl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mZ erd dlmZ neZ G d d	e      Z G d
 de      Z G d d      Zy)    N)TYPE_CHECKINGAnyDictListOptionalTuple)	BaseModel)verbose_logger)	DualCache)
get_secretget_secret_strCredentialsc                   2    e Zd ZU eed<   eed<   ee   ed<   y)Boto3CredentialsInfocredentialsaws_region_nameaws_bedrock_runtime_endpointN)__name__
__module____qualname__r   __annotations__strr        V/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/bedrock/base_aws_llm.pyr   r      s    "*3-/r   r   c                        e Zd Z fdZ xZS )AwsAuthErrorc                     || _         || _        t        j                  dd      | _        t        j
                  || j                        | _        t        | !  | j                         y )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+   zAwsAuthError.__init__   sT    &}}Q
 ;ULL	
r   )r   r   r   r+   __classcell__r-   s   @r   r   r      s    	
 	
r   r   c                        e Zd Zd fdZdeeee   f   defdZ	 	 	 	 	 	 	 	 	 ddee   dee   dee   dee   d	ee   d
ee   dee   dee   dee   fdZdee   dee   dede	eef   fdZ
dedefdZ xZS )
BaseAWSLLMreturnc                 @    t               | _        t        |           y )N)r   	iam_cacher*   r+   )r,   r-   s    r   r+   zBaseAWSLLM.__init__'   s    "r   credential_argsc                     t        j                  |d      }t        j                  |j	                               j                         S )zP
        Generate a unique cache key based on the credential arguments.
        T)	sort_keys)jsondumpshashlibsha256encode	hexdigest)r,   r5   credential_strs      r   get_cache_keyz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
                    ddl }
ddlm} g d}|||||||||	g	}t        |      D ]~  \  }}|r6|j	                  d      r%t        |      }|'t        |t              s8|||<   >|A||   }|j                         t        j                  v sgt        j                  |      ||<    |\	  }}}}}}}}}	t               j                         D ci c]  \  }}|j	                  d      s|| }}}| j                  |      }t        j                   d|||||||||	
       |:|7|4t        j                   d| d	| d
|        |	d| d}n|	}t#        j$                  |||d      }| j&                  j)                  |      }|t        |      }|t+        dd      |
j-                  d||      }|j/                  |||dd      }|d   d   |d   d   |d   d   |d}| j&                  j1                  |t#        j$                  |      d       |d   dkD  rt        j2                  d|d            |
j4                  d&i |}|j7                         }|S |D|B|
j-                  d||       }|j9                  ||!      }|d   } ||d   |d   |d   "      }|S |"|
j5                  |#      } | j7                         S |||ddlm}  ||||"      }|S |s|q|o| j&                  j)                  |      }!|!r|!S |
j5                  |||$      }|j7                         }|j:                  | j&                  j1                  ||d%       |S |
j5                         }|j7                         }|S c c}}w )'z3
        Return a boto3.Credentials object
        r   Nr   	r@   rA   rB   r   rC   rD   rE   rF   rG   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)rF   rE   rC   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)r@   rA   rB   rM   i  )keyvaluettlPackedPolicySizeK   zKThe policy size is greater than 75% of the allowed size, PackedPolicySize: )r@   rA   )rO   rP   )
access_key
secret_keytoken)profile_name)r@   rA   rM   )rY   r   )boto3botocore.credentialsr   	enumerate
startswithr   
isinstancer   upperosenvirongetenvlocalsitemsr?   r
   debugr8   r9   r4   	get_cacher   clientassume_role_with_web_identity	set_cachewarningSessionget_credentialsassume_roler^   )"r,   r@   rA   rB   r   rC   rD   rE   rF   rG   r`   r   param_namesparams_to_checkiparam_vrW   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   rm   cached_credentialss"                                     r   rr   zBaseAWSLLM.get_credentials3   s     	4

 !"
0
 "/2HAu))-8&>jS&9)+OA&!!n99;"**,)+3OA& 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 $emm5n5G//1I&+;+G"3&; & J &11%7G 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   M5'M5api_baser   c                     t        d      }||}n0|t        |t              r|}n|rt        |t              r|}nd| d}|rt        |t              r|}||fS |t        |t              r|}||fS |}||fS )NAWS_BEDROCK_RUNTIME_ENDPOINTzhttps://bedrock-runtime.rK   )r   rd   r   )r,   r   r   r    env_aws_bedrock_runtime_endpointrN   proxy_endpoint_urls          r   get_runtime_endpointzBaseAWSLLM.get_runtime_endpoint#  s     ,66T+U(#L)5*(#;
 8L-*,c3
 <L5o5FnUL ,
,c1
 "B /// *5*(#;
 "> /// ".///r   optional_paramsc                    	 ddl m} |j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  d	d      }|j                  d
d      }|j                  dd      }	|j                  dd      }
|j                  dd      }|j                  dd      }|Dt	        dd      }|t        |t              r|}t	        dd      }|t        |t              r|}|d}| j                  ||||||	||
|	      }t        |||      S # t        $ r t        d      w xY w)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'.rA   Nr@   rB   r   rE   rC   rD   rF   rG   r   AWS_REGION_NAME
AWS_REGIONz	us-west-2rI   )r   r   r   )	ra   r   ImportErrorpopr   rd   r   rr   r   )r,   r   r   rA   r@   rB   r   rE   rC   rD   rF   rG   r   litellm_aws_region_namestandard_aws_region_namer   s                   r   *_get_boto_credentials_from_optional_paramsz5BaseAWSLLM._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 #:'5lD'I$'3
(#9 #;&"-#'#7#7/"7/+--'#9- $8 
$
 $#+)E
 	
a  	YWXX	Ys   D* *D?)r2   N)	NNNNNNNNN)r   r   r   r+   r   r   r   r?   rr   r   r   dictr   r   r.   r/   s   @r   r1   r1   &   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
r   r1   )r:   r8   rf   typingr   r   r   r   r   r   r&   pydanticr	   litellm._loggingr
   litellm.caching.cachingr   litellm.secret_managers.mainr   r   ra   r   r   	Exceptionr   r1   r   r   r   <module>r      sR      	 B B   + - C0K09 0

9 

a
 a
r   