o
    RTh*                     @   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                
       s  e Zd ZdZ								d4dee f fddZedee f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					d5dee dee fddZ					d5dee f fddZedd Z						d6dee deeeeeef f  fd d!Z						d6dee deeeeeef f  fd"d#Zd$d% Zd&d' Zd(d) Zd*d+ Zed,d- Zed.d/ Z fd0d1Z  fd2d3Z!  Z"S )7OpenAIObjectNresponse_msc	           
         s   t t|   |d urt|tstdt|j d|| _|	| _	t
| d| t
| d| t
| d| t
| d| t
| d| t
| d| |rS|| d	< d S 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/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/openai/openai_object.pyr      s   zOpenAIObject.__init__returnc                 C      | j S N)r   r   r$   r$   r%   r   ,      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   sB   |d dkr
t |z| | W S  ty  } zt |j d }~ww 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%   r6   ?   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%   r;   E   s   zOpenAIObject.__setitem__c                 C   s   t d)Nzdel is not supported)NotImplementedErrorr7   r$   r$   r%   __delitem__N      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   reduce_valuer$   r$   r%   
__reduce__Z   s   
zOpenAIObject.__reduce__r   c                 C   s2   | | d|||||d}|j|||||d |S )Nr   )r   r   r   r   r   )r   r   r   r   )rB   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 | _|pt |dd | _|p"t |dd | _|p+t |dd | _|   | D ]\}}tt	| 
|t|||| q5|| _d S )Nr   r   r   r   r   )getattrr   r   r   r   r   clearitemsr   r
   r;   r   convert_to_openai_object	_previous)	r   rH   r   r   r   r   r   r/   r0   r"   r$   r%   rF      s   	

zOpenAIObject.refresh_fromc                 C   s   d S r(   r$   )rG   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\}
} |r=t
|
tr2J  fdd|
D S tj|
 jjdS )Nkeyr    r   r   r   r!   streamheadersrP   rQ   c                 3   (    | ]}t j| jjd V  qdS plain_old_dataNr   rN   r   r   .0liner   rZ   r   r$   r%   	<genexpr>       
z'OpenAIObject.request.<locals>.<genexpr>rY   )r   r   APIRequestorr   r   r    r   r   r   requestr   r   r   rN   r   methodurlr!   rV   rU   rZ   rP   rQ   	requestorresponser$   r_   r%   rc      s<   
zOpenAIObject.requestc	              	      s   |d u rj }tjjjp jjjd}	|	j	|||||||dI d H \}
} |rAt
|
tr6J  fdd|
D S tj|
 jjdS )NrR   rT   c                 3   rW   rX   r[   r\   r_   r$   r%   r`      ra   z(OpenAIObject.arequest.<locals>.<genexpr>rY   )r   r   rb   r   r   r    r   r   r   arequestr   r   r   rN   rd   r$   r_   r%   ri      s>   
zOpenAIObject.arequestc                 C   st   t | jg}| d}t|tr|| t| dtr(|d| df  dd|tt| t| f }|S )Nr   r   zid=%sz<%s at %s> JSON: %s )	r   r   rB   r   r:   appendjoinhexr   )r   ident_partsobj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   ro   r$   r$   r%   __str__  s   zOpenAIObject.__str__c                 C   s   t | S r(   )rC   r)   r$   r$   r%   to_dict  r>   zOpenAIObject.to_dictc                 C   sR   t | }| D ]\}}t|tr| ||< qt|tr&dd |D ||< q|S )Nc                 S   s"   g | ]}t |tr| n|qS r$   )r   r
   rt   )r]   er$   r$   r%   
<listcomp>$  s    z2OpenAIObject.to_dict_recursive.<locals>.<listcomp>)rC   rM   r   r
   rt   list)r   dr/   r0   r$   r$   r%   rt     s   


zOpenAIObject.to_dict_recursivec                 C   r'   r(   )r   r)   r$   r$   r%   	openai_id*  r*   zOpenAIObject.openai_idc                 C   s   | j r	t| j S ttj S r(   )r   r	   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 |	|| q|S )Nr   )r   r   r   )
r
   rB   r   r   r   r   r   rM   r   r;   )r   copiedr/   r0   r"   r$   r%   __copy__;  s   zOpenAIObject.__copy__c                    sB   |   }||t| < |  D ]\}}tt||t|| q|S r(   )r   r   rM   r   r
   r;   r   )r   memor   r/   r0   r"   r$   r%   __deepcopy__R  s
   zOpenAIObject.__deepcopy__)NNNNNNNN)NNNNN)NNFFNN)#r   
__module____qualname__r   r   r   r   propertyr   r   r5   r6   r;   r=   rA   rE   classmethodr:   rJ   rF   r    r   floatr   rc   ri   rq   rw   rx   rt   r}   r   r   r   __classcell__r$   r$   r"   r%   r
      s    	
	
7	
3

r
   )ru   copyr   typingr   r   r   r   r   r   openai.openai_responser   openai.utilr	   rC   r
   r$   r$   r$   r%   <module>   s    