
    @'h                     b   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZ d dlmZ d dlZd dlmZ d dlmZ dZd	Zd
Z e j8                  e      Zeeef   Z	 	 	 	 dde de!dee"   de"de"deegef   fdZ#	 	 	 ddee$   dee$   dee$   deee$   e$e$f   fdZ%ddee$   ddfdZ&y)    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                 T   |rt        ||      nt        d||      }t        |       }||t        |      z  }t	        d||t        t        j                  t        j                  t        j                  t        j                  f      t        t        t        j                              S )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          j/home/kushmeetdev/Regenta/Chatbot/venv/lib/python3.12/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                    t        d| dd      } t        d|dd      }t        d|dd      }| xs t        j                  xs d}|xs t        j                  xs t        }|xs t        j
                  xs t        }|t        |      |fS )z "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                 n    | xs  t         j                  j                  dd      }|st        t              y )Nr4   r   )osenvironget
ValueErrorMISSING_API_KEY_ERROR_MESSAGE)r0   openai_api_keys     r-   validate_openai_api_keyrF   c   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      s1    	 8 8 J   $  ; G5  !  
		8	$46IIJ
  %04    'uo  	 
   seSj H ""!%Ac]AsmA #A 8C=#s"#	A88Xc] 8d 8r/   