
    i                     n   S SK r S SKrS SKJrJrJrJrJr  S SKJ	r	  S SK
Jr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rS	rS
r\ R8                  " \5      r\\\4   r    SS\ S\!S\\"   S\"S\"S\\/\4   4S jjr#   SS\\$   S\\$   S\\$   S\\\$   \$\$4   4S jjr%SS\\$   SS4S jjr&g)    N)AnyCallableOptionalTupleUnion)get_from_param_or_env)before_sleep_logretryretry_if_exception_typestop_after_attemptstop_after_delaywait_exponentialwait_random_exponential)	stop_base)ChatCompletionMessageToolCall)ChoiceDeltaToolCallzhttps://api.openai.com/v1 zNo API key found for OpenAI.
Please set either the OPENAI_API_KEY environment variable or openai.api_key prior to initialization.
API keys can be found or created at https://platform.openai.com/account/api-keys
max_retriesrandom_exponentialstop_after_delay_secondsmin_secondsmax_secondsreturnc                 J   U(       a	  [        X4S9O	[        SX4S9n[        U 5      nUb  U[        U5      -  n[	        SUU[        [        R                  [        R                  [        R                  [        R                  45      [        [        [        R                  5      S9$ )N)minmax   )
multiplierr   r   T)reraisestopwaitr
   before_sleep)r   r   r   r   r
   r   openaiAPIConnectionErrorAPITimeoutErrorRateLimitErrorInternalServerErrorr	   loggerloggingWARNING)r   r   r   r   r   wait_strategystop_strategys          ]/home/james-whalen/.local/lib/python3.13/site-packages/llama_index/embeddings/openai/utils.pycreate_retry_decoratorr.   $   s      	 KAM   2+>M+%(89Q(RR#--**))..	 &fgoo>     api_keyapi_baseapi_versionc                 N   [        SU SS5      n [        SUSS5      n[        SUSS5      nU =(       d    [        R                  =(       d    SnU=(       d    [        R                  =(       d    [        nU=(       d    [        R
                  =(       d    [        nU[        U5      U4$ )zg
"Resolve OpenAI credentials.

The order of precedence is:
1. param
2. env
3. openai module
4. default
r0   OPENAI_API_KEYr   r1   OPENAI_API_BASEr2   OPENAI_API_VERSION)r   r#   r0   base_urlDEFAULT_OPENAI_API_BASEr2   DEFAULT_OPENAI_API_VERSIONstr)r0   r1   r2   final_api_keyfinal_api_basefinal_api_versions         r-   resolve_openai_credentialsr>   G   s     $Iw8H"MG$Z;LbQH'{$8"K
 3v~~3MKK4KN#Wv'9'9W=W#n-/@@@r/   c                     U =(       d     [         R                  R                  SS5      nU(       d  [        [        5      eg )Nr4   r   )osenvironget
ValueErrorMISSING_API_KEY_ERROR_MESSAGE)r0   openai_api_keys     r-   validate_openai_api_keyrF   d   s0    D

/? DN677 r/   )FN   
   )NNN)N)'r)   r@   typingr   r   r   r   r   (llama_index.core.base.llms.generic_utilsr   tenacityr	   r
   r   r   r   r   r   tenacity.stopr   r#   openai.types.chatr   'openai.types.chat.chat_completion_chunkr   r8   r9   rD   	getLogger__name__r(   OpenAIToolCallintboolfloatr.   r:   r>   rF    r/   r-   <module>rV      s/    	 8 8 J   $  ; G5  !  
		8	$46IIJ
  %04    'uo  	 
   seSj H ""!%Ac]AsmA #A 8C=#s"#	A:8Xc] 8d 8r/   