o
    RTh                      @   sr   d dl Z d dlZd dlmZ d dlZd dlZd dlmZmZmZ d dl	m
Z
mZ d dlmZ G dd dee
ZdS )    N)cast)api_requestorutilerror)DeletableAPIResourceListableAPIResource)ApiTypec                   @   s   e Zd ZdZe							dddZe							dddZe							dddZe					dd	d
Ze					dddZ	e					dddZ
edd Ze					dddZe					dddZedddZdS )FilefilesNc
                 C   s   t j||ptj|||d}
| ||\}}|tjtjfv r*|  }d| j	||f }n|tj
kr4|  }ntd| dd |ffg}|d urO|dd |ff |	d ur^|d|	|dff n
|dd|dff |
||fS )Napi_baseapi_typeapi_versionorganizationz/%s%s?api-version=%sUnsupported API type %spurposemodelfilezapplication/octet-stream)r   APIRequestoropenair   _get_api_type_and_versionr   AZUREAZURE_AD	class_urlazure_api_prefixOPEN_AIr   InvalidAPITypeappend)clsr   r   r   api_keyr   r   r   r   user_provided_filename	requestortyped_api_typebaseurlr
    r%   \/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/openai/api_resources/file.py__prepare_file_create   s2   


zFile.__prepare_file_createc
                 C   sF   |  |||||||||		\}
}}|
jd||d\}}}t||||S Npost)r
   )_File__prepare_file_createrequestr   convert_to_openai_objectr   r   r   r   r   r   r   r   r   r    r!   r$   r
   response_r%   r%   r&   create=   s   
zFile.createc
                    sN   |  |||||||||		\}
}}|
jd||dI d H \}}}t||||S r(   )r*   arequestr   r,   r-   r%   r%   r&   acreateZ   s    
zFile.acreatec                 C   s   t j||ptj|||d}| ||\}}|tjtjfv r3|  }	d| j	 |	 d| d| }
||
fS |tj
krF|   d| d}
||
fS td| )Nr   /z/content?api-version=z/contentr   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r   idr   r   r   r   r   r!   r"   r#   r$   r%   r%   r&   __prepare_file_downloadw   s$   

zFile.__prepare_file_downloadc           
      C   sj   |  ||||||\}}|d|}	d|	j  krdk s2n |j|	j|	jttt|	j|	j	dd|	jS Nget   i,  F)stream_error)
_File__prepare_file_downloadrequest_rawstatus_codehandle_error_responsecontentjsonloadsr   bytesheaders)
r   r4   r   r   r   r   r   r!   r$   resultr%   r%   r&   download   s   
zFile.downloadc              	      s   |  ||||||\}}t 4 I d H 8}	|d||	I d H }
d|
j  kr+dk s@n |j|
j|
jtt	t
|
j|
jdd|
jW  d   I d H  S 1 I d H sSw   Y  d S r6   )r:   r   aiohttp_sessionarequest_rawstatusr=   r>   r?   r@   r   rA   rB   )r   r4   r   r   r   r   r   r!   r$   sessionrC   r%   r%   r&   	adownload   s    
0zFile.adownloadc           	      C   s   g }t j|}|D ]3}|d |krq
t j|d }||kr q
d|v r+|d |kr+q
d|v r8t|d |kr8q
|| q
|S )Nr   filenamerA   size)ospathbasenameintr   )	r   namerA   	all_filesr   matching_filesrN   ffile_basenamer%   r%   r&   __find_matching_files   s   zFile.__find_matching_filesc	           
      C   s2   | j ||ptj|||ddg }	| |||	|S )BFind already uploaded files with the same name, size, and purpose.r   r   r   r   r   data)listr   r   r7   _File__find_matching_files
r   rP   rA   r   r   r   r   r   r   rQ   r%   r%   r&   find_matching_files   s   zFile.find_matching_filesc	           
         s:   | j ||ptj|||dI dH dg }	| |||	|S )rV   rW   NrX   )alistr   r   r7   rZ   r[   r%   r%   r&   afind_matching_files   s   
	zFile.afind_matching_files  c                 C   st   g d}t   }| j|d}|j|vr7| j|d}t d t   | |kr2tjjdj||dd|j|vs|jS )N)	processedr   deleted)r4   g      @zYGiving up on waiting for file {id} to finish processing after {max_wait_seconds} seconds.)r4   max_wait_seconds)message)timeretrieverG   sleepr   r   OpenAIErrorformat)r   r4   rb   TERMINAL_STATESstartr   r%   r%   r&   wait_for_processing  s   


	zFile.wait_for_processing)NNNNNNN)NNNNN)r_   )__name__
__module____qualname__OBJECT_NAMEclassmethodr*   r0   r2   r:   rD   rI   rZ   r\   r^   rk   r%   r%   r%   r&   r	      s    -
r	   )r?   rL   typingr   rd   r   r   r   r   openai.api_resources.abstractr   r   openai.utilr   r	   r%   r%   r%   r&   <module>   s    