a
    f	g                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlZej	
dZe dZg dZdd ZG d	d
 d
eZdd Zdd Zdd Zdd Zdd Zdd Zd!ddZdd Zdd Zeddd ZdS )"    N)Enum)Optional
OPENAI_LOGopenai)log_info	log_debuglog_warnlogfmtc                 C   s(   | t jt jfv rdd| iS d| iS )NAuthorizationzBearer zapi-key)ApiTypeOPEN_AIAZURE_AD)apikey r   N/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/openai/util.py<lambda>   s    r   c                   @   s$   e Zd ZdZdZdZedd ZdS )r            c                 C   sF   |   dkrtjS |   dv r$tjS |   dv r6tjS tjdd S )NZazure)Zazure_adZazuread)Zopen_air   znThe API type provided in invalid. Please select one of the supported API types: 'azure', 'azure_ad', 'open_ai')lowerr   AZUREr   r   r   errorZInvalidAPIType)labelr   r   r   from_str!   s    zApiType.from_strN)__name__
__module____qualname__r   r   r   staticmethodr   r   r   r   r   r      s
   r   c                   C   s$   t jdv rt jS tdv rtS d S d S )Ndebuginfo)r   logr   r   r   r   r   _console_log_level/   s
    
r#   c                 K   s<   t tf d| i|}t dkr.t|tjd t| d S )Nmessager    file)r	   dictr#   printsysstderrloggerr    r$   paramsmsgr   r   r   r   8   s    
r   c                 K   s<   t tf d| i|}t dv r.t|tjd t| d S )Nr$   r   r%   )r	   r'   r#   r(   r)   r*   r+   r!   r,   r   r   r   r   ?   s    
r   c                 K   s2   t tf d| i|}t|tjd t| d S )Nr$   r%   )r	   r'   r(   r)   r*   r+   warnr,   r   r   r   r   F   s    r   c                    s(   dd  d  fddt|  D S )Nc                 S   s\   t |dr|d}t|ts&t|}td|r:t|}td| rNt| } dj| |dS )Ndecodezutf-8z\sz{key}={val}r   val)hasattrr0   
isinstancestrresearchreprformatr1   r   r   r   fmtM   s    


zlogfmt.<locals>.fmt c                    s   g | ]\}} ||qS r   r   ).0r   r2   r:   r   r   
<listcomp>[       zlogfmt.<locals>.<listcomp>)joinsorteditems)propsr   r=   r   r	   L   s    r	   c                  C   s   ddl m}  | S )Nr   OBJECT_CLASSES)Zopenai.object_classesrE   rD   r   r   r   get_object_classes^   s    rF   Fc           	         s   d }t | tjjr$| j| j}| j} |r,| S t | trN fdd| D S t | trt | tj	j
s|  } | d}t |trt |tj	j
}ntj	j
}|j|  |dS | S d S )Nc              	      s   g | ]}t | d qS ))engine)convert_to_openai_objectr<   iapi_keyapi_versionrG   organizationr   r   r>   x   s   
z,convert_to_openai_object.<locals>.<listcomp>object)rL   rM   rN   response_msrG   )r4   r   Zopenai_responseZOpenAIResponserN   rP   datalistr'   Zopenai_objectZOpenAIObjectcopygetr5   rF   Zconstruct_from)	resprL   rM   rN   rG   Zplain_old_datarP   
klass_nameklassr   rK   r   rH   e   s<    



	rH   c                 C   s<   t | trdd | D S t | tr4dd |  D S | S dS )zConverts a OpenAIObject back to a regular dict.

    Nested OpenAIObjects are also converted back to regular dicts.

    :param obj: The OpenAIObject to convert.

    :returns: The OpenAIObject as a dict.
    c                 S   s   g | ]}t |qS r   convert_to_dictrI   r   r   r   r>      r?   z#convert_to_dict.<locals>.<listcomp>c                 S   s   i | ]\}}|t |qS r   rX   )r<   kvr   r   r   
<dictcomp>   r?   z#convert_to_dict.<locals>.<dictcomp>N)r4   rR   r'   rB   )objr   r   r   rY      s
    	

rY   c                 C   s   |   }|| |S )N)rS   update)xyzr   r   r   merge_dicts   s    
rb   )returnc                  C   s   t jr`tt jd<} |   }|ds<tdt j d|W  d    S 1 sT0    Y  nt jd urpt jS t j	dd S )Nrtzsk-zMalformed API key in .a  No API key provided. You can set your API key in code using 'openai.api_key = <API-KEY>', or you can set the environment variable OPENAI_API_KEY=<API-KEY>). If your API key is stored in a file, you can point the openai module at it with 'openai.api_key_path = <PATH>'. You can generate API keys in the OpenAI web interface. See https://platform.openai.com/account/api-keys for details.)
r   Zapi_key_pathopenreadstrip
startswith
ValueErrorrL   r   AuthenticationError)rZ   rL   r   r   r   default_api_key   s    
$
rl   )NNNNF)loggingosr6   r)   enumr   typingr   r   environrT   r   	getLoggerr+   __all__Zapi_key_to_headerr   r#   r   r   r   r	   rF   rH   rY   rb   r5   rl   r   r   r   r   <module>   s6   
		     
1