a
    f	g*                     @   sl   d dl Z d dlmZ d dlmZmZmZ d dlZd dlmZm	Z	 d dl
mZ d dlmZ G dd deZdS )	    N)deepcopy)OptionalTupleUnion)api_requestorutil)OpenAIResponse)ApiTypec                       sl  e Zd ZdZd3ee d fddZeee dddZ fdd	Z	d
d Z
 fddZ fddZdd Zdd Zdd Zed4ee ee dddZd5ee d fddZedd Zd6ee eeeeeef f  ddd Zd7ee eeeeeef f  dd!d"Zd#d$ Zd%d& Zd'd( Zd)d* Zed+d, Zed-d. Z fd/d0Z  fd1d2Z!  Z"S )8OpenAIObjectN)response_msc	           
         s   t t|   |d ur6t|ts6tdt|j d|| _|	| _	t
| d| t
| d| t
| d| t
| d| t
| d| t
| d| |r|| d	< d S )
Nzresponse_ms is a .api_keyapi_versionapi_typeorganizationapi_base_overrideengineid)superr
   __init__
isinstanceint	TypeErrortype__name___response_ms_retrieve_paramsobject__setattr__)
selfr   r   r   r   r   r   api_baser   params	__class__ W/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/openai/openai_object.pyr      s    zOpenAIObject.__init__)returnc                 C   s   | j S N)r   r   r$   r$   r%   r   ,   s    zOpenAIObject.response_msc                    s4   |d dks|| j v r(tt| ||S || |< d S Nr   _)__dict__r   r
   r   r   kvr"   r$   r%   r   0   s    zOpenAIObject.__setattr__c              
   C   sR   |d dkrt |z
| | W S  tyL } zt |j W Y d }~n
d }~0 0 d S r)   )AttributeErrorKeyErrorargs)r   r-   errr$   r$   r%   __getattr__7   s    
zOpenAIObject.__getattr__c                    s0   |d dks|| j v r&tt| |S | |= d S r)   )r+   r   r
   __delattr__r   r-   r"   r$   r%   r4   ?   s    zOpenAIObject.__delattr__c                    s4   |dkrt d|t| |f tt| || d S )N zYou cannot set %s to an empty string. We interpret empty strings as None in requests.You may set %s.%s = None to delete the property)
ValueErrorstrr   r
   __setitem__r,   r"   r$   r%   r9   E   s    zOpenAIObject.__setitem__c                 C   s   t dd S )Nzdel is not supported)NotImplementedErrorr5   r$   r$   r%   __delitem__N   s    zOpenAIObject.__delitem__c                 C   s   |  | d S r'   )update)r   stater$   r$   r%   __setstate__T   s    zOpenAIObject.__setstate__c                 C   s0   t | | dd | j| j| j| jft| f}|S )Nr   )r   getr   r   r   r   dict)r   Zreduce_valuer$   r$   r%   
__reduce__Z   s    
zOpenAIObject.__reduce__)r   r   c                 C   s2   | | d|||||d}|j|||||d |S )Nr   )r   r   r   r   r   )r   r   r   r   )r?   refresh_from)clsvaluesr   r   r   r   r   instancer$   r$   r%   construct_fromh   s     
zOpenAIObject.construct_fromc           	   
      s   |pt |dd | _|p t |dd | _|p2t |dd | _|pDt |dd | _|pVt |dd | _|   | D ]&\}}tt	| 
|t|||| qj|| _d S )Nr   r   r   r   r   )getattrr   r   r   r   r   clearitemsr   r
   r9   r   convert_to_openai_objectZ	_previous)	r   rD   r   r   r   r   r   r-   r.   r"   r$   r%   rB      s    	
zOpenAIObject.refresh_fromc                 C   s   d S r'   r$   )rC   r$   r$   r%   r       s    zOpenAIObject.api_baseF)
request_idrequest_timeoutc	              	      s   |d u rj }tjjjp" jjjd}	|	j	|||||||d\}
} |rzt
|
trdJ  fdd|
D S tj|
 jjdS d S )Nkeyr    r   r   r   r!   streamheadersrK   rL   c                 3   s&   | ]}t j| jjd V  qdS plain_old_dataNr   rJ   r   r   .0liner   rT   r   r$   r%   	<genexpr>   s   z'OpenAIObject.request.<locals>.<genexpr>rS   )r   r   APIRequestorr   r   r    r   r   r   requestr   r   r   rJ   r   methodurlr!   rQ   rP   rT   rK   rL   Z	requestorresponser$   rY   r%   r\      s<    
zOpenAIObject.requestc	              	      s   |d u rj }tjjjp" jjjd}	|	j	|||||||dI d H \}
} |rt
|
trjJ  fdd|
D S tj|
 jjdS d S )NrM   rO   c                 3   s&   | ]}t j| jjd V  qdS rR   rU   rV   rY   r$   r%   rZ      s   z(OpenAIObject.arequest.<locals>.<genexpr>rS   )r   r   r[   r   r   r    r   r   r   arequestr   r   r   rJ   r]   r$   rY   r%   ra      s<    
zOpenAIObject.arequestc                 C   st   t | jg}| d}t|tr*|| t| dtrP|d| df  dd|tt| t| f }|S )Nr   r   zid=%sz<%s at %s> JSON: %s )	r   r   r?   r   r8   appendjoinhexr   )r   Zident_partsobjZunicode_reprr$   r$   r%   __repr__  s    



zOpenAIObject.__repr__c                 C   s   |   }tj|ddS )N   )indent)to_dict_recursivejsondumps)r   rf   r$   r$   r%   __str__  s    zOpenAIObject.__str__c                 C   s   t | S r'   )r@   r(   r$   r$   r%   to_dict  s    zOpenAIObject.to_dictc                 C   sR   t | }| D ]<\}}t|tr0| ||< qt|trdd |D ||< q|S )Nc                 S   s"   g | ]}t |tr| n|qS r$   )r   r
   rj   )rW   er$   r$   r%   
<listcomp>$  s   z2OpenAIObject.to_dict_recursive.<locals>.<listcomp>)r@   rI   r   r
   rj   list)r   dr-   r.   r$   r$   r%   rj     s    

zOpenAIObject.to_dict_recursivec                 C   s   | j S r'   )r   r(   r$   r$   r%   	openai_id*  s    zOpenAIObject.openai_idc                 C   s   | j rt| j S ttj S r'   )r   r	   Zfrom_stropenair(   r$   r$   r%   typed_api_type.  s    
zOpenAIObject.typed_api_typec                    sP   t | d| j| j| j| jd}| j|_|  D ]\}}tt |	|| q0|S )Nr   )r   r   r   )
r
   r?   r   r   r   r   r   rI   r   r9   )r   copiedr-   r.   r"   r$   r%   __copy__;  s    zOpenAIObject.__copy__c                    sB   |   }||t| < |  D ] \}}tt||t|| q|S r'   )rw   r   rI   r   r
   r9   r   )r   memorv   r-   r.   r"   r$   r%   __deepcopy__R  s
    zOpenAIObject.__deepcopy__)NNNNNNNN)NNNNN)NNNNN)NNFFNN)NNFFNN)#r   
__module____qualname__r   r   r   r   propertyr   r   r3   r4   r9   r;   r>   rA   classmethodr8   rF   rB   r    r   floatr   r\   ra   rg   rm   rn   rj   rs   ru   rw   ry   __classcell__r$   r$   r"   r%   r
      s           	          
      7      3

r
   )rk   copyr   typingr   r   r   rt   r   r   Zopenai.openai_responser   Zopenai.utilr	   r@   r
   r$   r$   r$   r%   <module>   s   