a
    f	g                      @   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 rT|  }d| j	||f }n"|tj
krh|  }ntd| dd |ffg}|d ur|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%   \/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/openai/api_resources/file.pyZ__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
                    sL   |  |||||||||		\}
}}|
jd||dI d H \}}}t||||S r'   )r)   Z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 r`|  }	d| j	 |	 d| d| }
n.|tj
kr|   d| d}
ntd| ||
fS )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&   Z__prepare_file_downloadw   s"    

zFile.__prepare_file_downloadc           
      C   sj   |  ||||||\}}|d|}	d|	j  kr:dk sdn |j|	j|	jttt|	j|	j	dd|	jS Nget   i,  F)Zstream_error)
_File__prepare_file_downloadZrequest_rawstatus_codehandle_error_responsecontentjsonloadsr   bytesheaders)
r   r2   r   r   r   r   r   r!   r$   resultr%   r%   r&   download   s    
zFile.downloadc              	      s   |  ||||||\}}t 4 I d H p}	|d||	I d H }
d|
j  krTdk s~n |j|
j|
jtt	t
|
j|
jdd|
jW  d   I d H  S 1 I d H s0    Y  d S r3   )r6   r   Zaiohttp_sessionZarequest_rawstatusr8   r9   r:   r;   r   r<   r=   )r   r2   r   r   r   r   r   r!   r$   sessionr>   r%   r%   r&   	adownload   s    
zFile.adownloadc           	      C   s   g }t j|}|D ]f}|d |kr&qt j|d }||kr@qd|v rV|d |krVqd|v rpt|d |krpq|| q|S )Nr   filenamer<   size)ospathbasenameintr   )	r   namer<   	all_filesr   Zmatching_filesrG   fZfile_basenamer%   r%   r&   Z__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   r4   _File__find_matching_files
r   rI   r<   r   r   r   r   r   r   rJ   r%   r%   r&   find_matching_files   s    zFile.find_matching_filesc	           
         s8   | j ||ptj|||dI dH dg }	| |||	|S )rL   rM   NrN   )alistr   r   r4   rP   rQ   r%   r%   r&   afind_matching_files   s    
	zFile.afind_matching_files  c                 C   sl   g d}t   }| j|d}|j|vrf| j|d}t d t   | |krtjjdj||ddq|jS )N)	processedr   Zdeleted)r2   g      @zYGiving up on waiting for file {id} to finish processing after {max_wait_seconds} seconds.)r2   max_wait_seconds)message)timeretriever@   sleepr   r   ZOpenAIErrorformat)r   r2   rW   ZTERMINAL_STATESstartr   r%   r%   r&   wait_for_processing  s    

zFile.wait_for_processing)NNNNNNN)NNNNNNN)NNNNNNN)NNNNN)NNNNN)NNNNN)NNNNN)NNNNN)rU   )__name__
__module____qualname__ZOBJECT_NAMEclassmethodr)   r/   r0   r6   r?   rB   rP   rR   rT   r^   r%   r%   r%   r&   r	      s          -                             
          r	   )r:   rE   typingr   rY   r   r   r   r   Zopenai.api_resources.abstractr   r   Zopenai.utilr   r	   r%   r%   r%   r&   <module>   s   