o
    HEDi'                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d	ZG d
d deZdS )    N)apropos)Optional)
quote_plus)api_requestorerrorutil)APIResource)OpenAIResponse)ApiType   c                	       s   e Zd ZdZddee f fddZe			ddee dee dee fdd	Ze					dd
dZ	e						dddZ
e						dddZdd ZdddZdddZ  ZS )EngineAPIResourceFNenginec                    s   t  jdd|i| d S )Nr    )super__init__)selfr   kwargs	__class__r   /var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/site-packages/openai/api_resources/abstract/engine_api_resource.pyr      s   zEngineAPIResource.__init__api_typeapi_versionc                 C   s   | j dd}| ||\}}|tjtjfv r6|std|d u r'tdt|}d| j	| j
|||f S |tjkrM|d u rCd| S t|}d||f S td| )	N./2An API version is required for the Azure API type.zaYou must provide the deployment name in the 'engine' parameter to access the Azure OpenAI servicez/%s/%s/%s/%s?api-version=%sz/%sz/engines/%s/%sUnsupported API type %s)OBJECT_NAMEreplace_get_api_type_and_versionr
   AZUREAZURE_ADr   InvalidRequestErrorr   azure_api_prefixazure_deployments_prefixOPEN_AIInvalidAPIType)clsr   r   r   basetyped_api_typeextnr   r   r   	class_url   s6   	
zEngineAPIResource.class_urlc              
   K   s6  | dd }| d|}|dd }	| dd }
|dd}| dd }| dd }| j|d	d
 }|tjjtjjfv rM|d u rL|d u rLtd|  dn|	d u r]|d u r]td|  d|
d u rbn|
d
krvt	|
t
|d< |
|d  ptd }
n|
d
kr~t
|d< tj|||||d}| |||}|||
|||||||f
S )Ndeployment_idr   modeltimeoutstreamFheadersrequest_timeout)r   r   zDMust provide an 'engine' or 'deployment_id' parameter to create a %sz<Must provide an 'engine' or 'model' parameter to create a %s)api_baser   r   organization)popgetr   r   r
   r   r    r   r!   minMAX_TIMEOUTr   APIRequestorr*   )r&   api_keyr1   r   r   r2   paramsr+   r   r,   r-   r.   r/   r0   r(   	requestorurlr   r   r   __prepare_create_request?   sd   
z*EngineAPIResource.__prepare_create_requestc              
      s   j  ||fi |\
}}	}
}}}}}}|jd||||
||d\}} |
r<t|tr/J  fdd|D S tj| jd}|	d urT|j|	pQd d |S )Npostr9   r/   r.   
request_idr0   c              	   3   s(    | ]}t j| jd V  qdS )r   plain_old_dataNr   convert_to_openai_objectrA   .0liner8   r   r&   r   r2   r   r   	<genexpr>   s    	
z+EngineAPIResource.create.<locals>.<genexpr>r@   r-   )*_EngineAPIResource__prepare_create_requestrequest
isinstancer	   r   rC   rA   waitr&   r8   r1   r   r?   r   r2   r9   r+   r-   r.   r/   r0   r(   r:   r;   response_objr   rG   r   create   sR   

		zEngineAPIResource.createc              
      s   j  ||fi |\
}}	}
}}}}}}|jd||||
||dI d H \}} |
r@t|tr3J  fdd|2 S tj| jd}|	d ur[|j|	pUd dI d H  |S )Nr=   r>   c              	     s2   | z3 d H W }t j| jdV  q6 d S )Nr@   rB   rD   rG   r   r   rH      s    	z,EngineAPIResource.acreate.<locals>.<genexpr>r@   rI   )rJ   arequestrL   r	   r   rC   rA   await_rN   r   rG   r   acreate   sT   

		zEngineAPIResource.acreatec              	   C   s  |  d}t|tstdt| j d| dt| ddt|}d}| jt	j
t	jfv rR| jp3tj}|s;td| jdd	}d
| j| j| j|||f }d}n| jt	jkri| | j| j| j}d||f }ntd| j |  d}|d urtt|}||d| 7 }|S )Nidz*Could not determine which URL to request: z instance has invalid ID: z, z. ID should be of type str.?r   r   r   z/%s/%s/%s/%s/%s?api-version=%s&z%s/%sr   r-   z
timeout={})r4   rL   strr   r!   type__name__r   r(   r
   r   r    r   openair   r   r"   r#   r   r$   r*   r   r%   format)r   rV   r)   params_connectorr   r'   r;   r-   r   r   r   instance_url   sB   

 
zEngineAPIResource.instance_urlc                 C   s`   t   }| jdkr.|d urt|| t    tnt| _| jdk r%| `	 | S |   | jdks	| S )Ncompleter   )timestatusr5   r6   r-   refreshr   r-   startr   r   r   rM   *  s   



zEngineAPIResource.waitc                    sh   t   }| jdkr2|durt|| t    tnt| _| jdk r&| `	 | S |  I dH  | jdks
| S )z)Async version of `EngineApiResource.wait`r`   Nr   )ra   rb   r5   r6   r-   arefreshrd   r   r   r   rT   8  s   



zEngineAPIResource.await_)N)NNN)NNNNN)NNNNNN)r[   
__module____qualname__rA   r   rY   r   classmethodr*   rJ   rR   rU   r_   rM   rT   __classcell__r   r   r   r   r      sP    )?@?
*r   )ra   pydocr   typingr   urllib.parser   r\   r   r   r   *openai.api_resources.abstract.api_resourcer   openai.openai_responser	   openai.utilr
   r6   r   r   r   r   r   <module>   s    