
    AHjy-                     P   d dl Z d dlZd dlZd dl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 d dlmZ d dlmZ  e       Zddeej&                     d	efd
Zdee   d	ee   fdZ	 ddedeeeef      d	ee   fdZ	 ddedee   d	ee   fdZ	 ddedeeeef      fdZd	efdZy)    N)OptionalUnion)verbose_logger)	DualCache)HTTPHandler)get_azure_ad_token_provider)get_secret_from_managertimeoutreturnc                 L    | t        j                  dd      } t        |       S )a*  
    Factory function to create HTTPHandler for OIDC requests.
    This function can be mocked in tests.

    Args:
        timeout: Optional timeout for HTTP requests. Defaults to 600.0 seconds with 5.0 connect timeout.

    Returns:
        HTTPHandler instance configured for OIDC requests.
    g     @g      @)r
   connectr
   )httpxTimeoutr   r   s    T/root/tools/cai/cai_env/lib/python3.12/site-packages/litellm/secret_managers/main.py_get_oidc_http_handlerr      s$     --s;w''    valuec                 f    | ydh}dh}| j                         j                         }||v ry||v ryy)a  
    Converts a string to a boolean if it's a recognized boolean string.
    Returns None if the string is not a recognized boolean value.

    :param value: The string to be checked.
    :return: True or False if the string is a recognized boolean, otherwise None.
    NtruefalseTF)striplower)r   true_valuesfalse_valuesvalue_lowers       r   str_to_boolr   '   sG     }(K9L++-%%'Kk!		$r   secret_namedefault_valuec                 F    t        | |      }|t        |t              sy|S )zi
    Guarantees response from 'get_secret' is either string or none. Used for fixing linting errors.
    )r   r   N)
get_secret
isinstancestr)r   r   r   s      r   get_secret_strr$   ?   s'     ;mLEE3!7Lr   c                 Z    t        | |      }|yt        |t              r|S t        |      S )aP  
    Guarantees response from 'get_secret' is either boolean or none. Used for fixing linting errors.

    Args:
        secret_name: The name of the secret to get.
        default_value: The default value to return if the secret is not found.

    Returns:
        The secret value as a boolean or None if the secret is not found.
    N)r!   r"   boolr   )r   r   _secret_values      r   get_secret_boolr(   M   s4     {M:M	M4	(=))r   c           
      
   t         j                  }t         j                  }d }| j                  d      r| j	                  dd      } | j                  d      r#| j	                  dd      }|j                  dd      \  }}dj                  |j                  d      dd        }|dk(  r|t        j                  |       }||S t               }	|	j                  dd	|id
di      }
|
j                  dk(  r&|
j                  }t        j                  | |d       |S t        d      |dk(  r$t        j                   d      }|t        d      |S |dk(  r$t        j                   d      }|t        d      |S |dk(  rt        j                   d      }t        j                   d      }||t        d      t        j                  |       }||S t               }	|	j                  |d	|id| dd      }
|
j                  dk(  r:|
j#                         j                  dd       }t        j                  | |d       |S t        d       |d!k(  rwt        j                   d"      }|8t%        j&                  d#       t)        |$      }	  |       }|t        d%      |S t1        |d'      5 }|j3                         }|cd d d        S |d(k(  r(t1        |d'      5 }|j3                         }|cd d d        S |d)k(  r(t        j                   |      }|t        d*| d+      |S |d,k(  rNt        j                   |      }|t        d*| d+      t1        |d'      5 }|j3                         }|cd d d        S t        d-      	 t5               rt         j6                  	 t         j6                  }d.}||j8                  }||j:                  | |j:                  vrd.}t=        ||| |/      }	 tC        |t,              r)tE        jF                  |      }tC        |tH              r|S |S y t        jJ                  j                  |       }|tM        |      nd }|tC        |tH              r|S |S # t*        $ r3}d&t-        |       }t%        j.                  |       t        |      d }~ww xY w# 1 sw Y   1xY w# 1 sw Y   >xY w# 1 sw Y   KxY w# t*        $ rY}t%        j.                  d0|  d1t-        |       d2t?        j@                                 t        j                   |       }Y d }~Bd }~ww xY w# t*        $ r |cY S w xY w# t*        $ r}||cY d }~S |d }~ww xY w)3Nzos.environ/ zoidc//   google)keyz]http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identityaudiencezMetadata-FlavorGoogle)paramsheaders   i  )r.   r   ttlzGoogle OIDC provider failedcircleciCIRCLE_OIDC_TOKENz*CIRCLE_OIDC_TOKEN not found in environmentcircleci_v2CIRCLE_OIDC_TOKEN_V2z-CIRCLE_OIDC_TOKEN_V2 not found in environmentgithubACTIONS_ID_TOKEN_REQUEST_URLACTIONS_ID_TOKEN_REQUEST_TOKENzWACTIONS_ID_TOKEN_REQUEST_URL or ACTIONS_ID_TOKEN_REQUEST_TOKEN not found in environmentzBearer z!application/json; api-version=2.0)AuthorizationAcceptr   i'  zGithub OIDC provider failedazureAZURE_FEDERATED_TOKEN_FILEzTAZURE_FEDERATED_TOKEN_FILE not found in environment will use Azure AD token provider)azure_scopez'Azure OIDC provider returned None tokenzAzure OIDC provider failed: rfileenvzEnvironment variable z
 not foundenv_pathzUnsupported OIDC providerlocal)clientkey_managerr   key_management_settingsz'Defaulting to os.environ value for key=z. An exception occurred - z.

)'litellm_key_management_system_key_management_settings
startswithreplacesplitjoin
oidc_cache	get_cacher   getstatus_codetext	set_cache
ValueErrorosgetenvjsonr   warningr   	Exceptionr#   erroropenread'_should_read_secret_from_secret_managersecret_manager_clientr   hosted_keysr	   	traceback
format_excr"   astliteral_evalr&   environr   )r   r   key_management_systemrH   secretsecret_name_splitoidc_provideroidc_aud
oidc_tokenoidc_clientresponse
env_secretactions_id_token_request_urlactions_id_token_request_tokenazure_federated_token_fileazure_token_providere	error_msgftoken_file_pathrF   rG   secret_value_as_bools                          r   r!   r!   d   s    $::%>>Fm,!))-< g&'//<"3"9"9#q"Ax88-33C8<=H$#--+->J%!!02K"o"H-*H5 ' H
 ##s*%]]
$$JI$V!! !>??j(#67J! !MNNm+#9:J! !PQQh&+-995S+T(-/YY7W-X*,419 m  $--+->J%!!02K","H-'./M.N%OA ' H ##s*%]]_00$?
$$JG$T!! !>??g%)+3O)P&)1&&j (Cx'X$0!5!7J!)()RSS%%
 0#6 "!VVX
!" " f$h$ "VVX
!" " e#8,J! #8
*!MNNj( ii1O& #8
*!MNNos+ "qVVX
!" " 899435--90 66%(4"7"="=K*6/;;G'/F/R/RR&- 1! + +,C	fc*+.+;+;F+C(!"6=33% + ZZ^^K0F:@:L;v#6RV #/J$d5 ,+Y ! 0">s1vh GI"((3$Y//0" "
" "" ">  0$$=k]Jdehijekdllqr{  sG  sG  sI  rJ  K ;/	0    $  G	s   Q# 'R"R/R<<T? AS	 %6T. T. AT? !T? #	R,.RR"R,/R9<S		T+AT& T? &T++T? .T<9T? ;T<<T? ?	UUUUUc                      t         j                  Kt         j                  ;t         j                  j                  dk(  st         j                  j                  dk(  ryy)a  
    Returns True if the secret manager should be used to read the secret, False otherwise

    - If the secret manager client is not set, return False
    - If the `_key_management_settings` access mode is "read_only" or "read_and_write", return True
    - Otherwise, return False
    	read_onlyread_and_writeTF)rI   r`   rK   access_mode r   r   r_   r_     sK     $$0++700<<K33??CSSr   )N)rd   rW   rb   typingr   r   r   rI   litellm._loggingr   litellm.caching.cachingr   &litellm.llms.custom_httpx.http_handlerr   3litellm.secret_managers.get_azure_ad_token_providerr   .litellm.secret_managers.secret_manager_handlerr	   rP   r   r   r#   r&   r   r$   r(   r!   r_   r}   r   r   <module>r      s   
 	  "   + - > S[
(HU]]$; ({ (&x} $ 4 15E#t),- c]  %)**D>* d^*2 15llE#t),-l^ r   