o
    RTh                     @   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def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/home/air/segue/gemini/backup/venv/lib/python3.10/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   sB   |   dkr	tjS |   dv rtjS |   dv rtjS tjd)Nazure)azure_adazuread)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   error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 )Ndebuginfo)r   logr   r   r   r   r   _console_log_level/   s
   
r(   c                 K   s<   t tdd| i|}t dkrt|tjd t| d S )Nmessager%   filer   )r	   dictr(   printsysstderrloggerr%   r)   paramsmsgr   r   r   r   8      
r   c                 K   s<   t tdd| i|}t dv rt|tjd t| d S )Nr)   r$   r*   r   )r	   r,   r(   r-   r.   r/   r0   r&   r1   r   r   r   r   ?   r4   r   c                 K   s2   t tdd| i|}t|tjd t| d S )Nr)   r*   r   )r	   r,   r-   r.   r/   r0   warnr1   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| r't| } dj| |dS )Ndecodezutf-8z\sz{key}={val}r   val)hasattrr6   
isinstancestrresearchreprformatr7   r   r   r   fmtM   s   


zlogfmt.<locals>.fmt c                    s   g | ]	\}} ||qS r   r   ).0r   r8   r@   r   r   
<listcomp>[       zlogfmt.<locals>.<listcomp>)joinsorteditems)propsr   rC   r   r	   L   s    r	   c                  C   s   ddl m}  | S )Nr   OBJECT_CLASSES)openai.object_classesrK   rJ   r   r   r   get_object_classes^   s   rM   Fc           	         s   d }t | tjjr| j| j}| j} |r| S t | tr' fdd| D S t | trZt | tj	j
sZ|  } | d}t |trKt |tj	j
}ntj	j
}|j|  |dS | S )Nc              	      s   g | ]}t | d qS ))engine)convert_to_openai_objectrB   iapi_keyapi_versionrN   organizationr   r   rD   x   s    
z,convert_to_openai_object.<locals>.<listcomp>object)rS   rT   rU   response_msrN   )r:   r   openai_responseOpenAIResponserU   rW   datalistr,   openai_objectOpenAIObjectcopygetr;   rM   construct_from)	resprS   rT   rU   rN   plain_old_datarW   
klass_nameklassr   rR   r   rO   e   s<   



	rO   c                 C   s8   t | trdd | D S t | trdd |  D S | 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_dictrP   r   r   r   rD      s    z#convert_to_dict.<locals>.<listcomp>c                 S   s   i | ]	\}}|t |qS r   re   )rB   kvr   r   r   
<dictcomp>   rE   z#convert_to_dict.<locals>.<dictcomp>)r:   r[   r,   rH   )objr   r   r   rf      s
   
	
rf   c                 C   s   |   }|| |S )N)r^   update)xyzr   r   r   merge_dicts   s   
ro   returnc                  C   s~   t jr1tt jd} |   }|dstdt j d|W  d    S 1 s*w   Y  d S t jd ur9t jS t j	d)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   api_key_pathopenreadstrip
startswith
ValueErrorrS   r   AuthenticationError)rg   rS   r   r   r   default_api_key   s   
$
rz   )NNNNF)loggingosr<   r.   enumr   typingr   r   environr_   r   	getLoggerr0   __all__api_key_to_headerr   r(   r   r   r   r	   rM   rO   rf   ro   r;   rz   r   r   r   r   <module>   s8    
		
1