
    ^h~              	           S SK JrJrJrJrJr  S SK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  S SKJr   " S S	\5      r\
" 5       rS
 rSS\4S jjr  SS\S\\   S\\   S\4S jjrg)    )CallableDictOptionalUnioncastN)verbose_logger)InMemoryCache)BaseLLMExceptionget_secret_str)WatsonXAPIParamsc            
       b   ^  \ rS rSr SS\S\S\\\\	R                  4      4U 4S jjjrSrU =r$ )WatsonXAIError   status_codemessageheadersc                 "   > [         TU ]  XUS9  g )N)r   r   r   )super__init__)selfr   r   r   	__class__s       [/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/watsonx/common_utils.pyr   WatsonXAIError.__init__   s     	[7S     N)__name__
__module____qualname____firstlineno__intstrr   r   r   httpxHeadersr   __static_attributes____classcell__)r   s   @r   r   r      sF    
 9=	TT T %emm 345	T Tr   r   c                  *    [        S5      =(       d    S$ )NWATSONX_IAM_URLz(https://iam.cloud.ibm.com/identity/tokenr   r   r   r   get_watsonx_iam_urlr*      s    ()W-Wr   returnc                    [         R                  U 5      nUc  0 nSUS'   U c  [        S5      =(       d    [        S5      n U c  [        S5      eSUS'   SU S	.n[	        5       n[
        R                  " S
UUU5        [        R                  " XTUS9nUR                  5         UR                  5       nUS   n[         R                  U UUS   S-
  S9  [        [        U5      $ )Nz!application/x-www-form-urlencodedzContent-Type
WX_API_KEYWATSONX_API_KEYzAPI key is requiredzapplication/jsonAcceptz&urn:ibm:params:oauth:grant-type:apikey)
grant_typeapikeyzNcalling ibm `/identity/token` to retrieve IAM token.
URL=%s
headers=%s
data=%s)datar   access_token
expires_in
   )keyvaluettl)iam_token_cache	get_cacher   
ValueErrorr*   r   debugr$   postraise_for_statusjson	set_cacher   r#   )api_keyparamsresultr   r2   iam_token_urlresponse	json_datas           r   generate_iam_tokenrG       s    +55g>F~"E?$\2WnEV6WG?233.B
 ,-_		
 ::mH!!#MMO	>*!!,'", 	" 	
 Vr   rB   print_verbosegenerate_tokenc           
      ,   U R                  SU R                  SU R                  SS5      5      5      nU R                  SS5      nU R                  SS5      nU R                  SU R                  SS5      5      nU R                  S	S5      nU R                  S
U R                  SS5      5      nUc"  U R                  SU R                  SS5      5      nU R                  SU R                  SS5      5      n	U R                  S[        R                  5      n
UcA  [        S5      =(       d/    [        S5      =(       d    [        S5      =(       d    [        S5      nUc/  [        S5      =(       d    [        S5      =(       d    [        S5      nUc  [        S5      =(       d    [        S5      nUc/  [        S5      =(       d    [        S5      =(       d    [        S5      nUc/  [        S5      =(       d    [        S5      =(       d    [        S5      nUcA  [        S 5      =(       d/    [        S!5      =(       d    [        S"5      =(       d    [        S#5      nU	bV  U	R	                  SU5      nU	R	                  SU	R	                  S$U5      5      nU	R	                  SU	R	                  S%U5      5      nUc
  [        S&S'S(9eUc!  Ub  U(       a  Ub  U" S)5        [        U5      nOUc  Uc
  [        S&S*S(9eUc
  [        S&S+S(9e[        UU[        [        U5      UUUU
S,9$ )-zo
Find watsonx.ai credentials in the params or environment variables and return the headers for authentication.
urlapi_basebase_urlNr1   token
project_idwatsonx_projectspace_idregion_nameregionwatsonx_region_namewatsonx_regionwx_credentialswatsonx_credentialsapi_versionWATSONX_API_BASEWATSONX_URLWX_URLWML_URLWATSONX_APIKEYr.   r-   WATSONX_TOKENWX_TOKENWATSONX_PROJECT_IDWX_PROJECT_ID
PROJECT_IDWATSONX_REGION	WX_REGIONREGIONWATSONX_DEPLOYMENT_SPACE_IDWATSONX_SPACE_IDWX_SPACE_IDSPACE_IDrA   watsonx_tokeni  zZError: Watsonx URL not set. Set WX_URL in environment variables or pass in as a parameter.)r   r   z#Generating IAM token for Watsonx.aizqError: API key or token not found. Set WX_API_KEY or WX_TOKEN in environment variables or pass in as a parameter.zhError: Watsonx project_id not set. Set WX_PROJECT_ID in environment variables or pass in as a parameter.)rK   rA   rN   rO   rQ   rR   rX   )
poplitellmWATSONX_DEFAULT_API_VERSIONr   getr   rG   r   r   r#   )rB   rH   rI   rK   rA   rN   rO   rQ   rR   rV   rX   s              r   _get_api_paramsro   D   s!    **UFJJz6::j$3OP
QCjj4(GJJw%Efjj!2D9J zz*d+H**]FJJx,FGKjj!6::.>#E
 ZZ

!4	
N **]G,O,OPK
{-. )m,)h') i(	 	 +, ,/0,l+ 	
 }/M>*3M/0 ,o.,l+ 	
 +, (k*(h' 	
 89 *01*m,* j)	 	 !  , $$X~/A/A)W/UV""
 {p
 	

 },$?@"7+	7? H
 	
 ~
 	

 3 r   r   )NT)typingr   r   r   r   r   r$   rl   r   litellm.cachingr	   )litellm.llms.base_llm.chat.transformationr
   litellm.secret_managers.mainr   litellm.types.llms.watsonxr   r   r9   r*   r#   rG   dictboolro   r   r   r   <module>rw      s    8 8   " ) F 7 7T% T  /!# !L )-%)jjH%j TNj 	jr   