U
    di                     @   s   d dl mZ d dlZd dlmZmZmZ ddlmZm	Z	m
Z
 e
eZeeeeed ddd	Zeeed
ddZeedddZdedddZdS )    )OptionalN)
DiscussionHfApiget_repo_discussions   )cached_filehttp_user_agentloggingr   )apimodel_idpr_titletokenreturnc                 C   sl   | j ||dd j}t||dD ]F}|j|kr |jdkr |jr | j ||j|d}||d jkr |  S q d S )Nr   r   )Zrepo_idr   openrevisionr   r   )Zlist_repo_commitsZ	commit_idr   titlestatusZis_pull_requestZgit_reference)r
   r   r   r   Zmain_commitZ
discussionZcommits r   G/tmp/pip-unpacked-wheel-bm_b0l5e/transformers/safetensors_conversion.pyprevious_pr   s    
r   )r   privater   c                 C   s   t d d}| d}dd }d||| gi}tj|d|d }|d	 }tj| d
| ddT}	zt d ||	 W n6 tk
r }
 zt dt	|
  W 5 d }
~
X Y nX W 5 Q R X d S )Nz;Attempting to convert .bin model on the fly to safetensors.z$https://safetensors-convert.hf.spacez	/call/runc                 S   s~   |   D ]p}| }|drn|dd  }td|  |dkrH d S |dkr\td qxtd|  qt| qd S )Nzevent:   zSafetensors conversion status: ZcompleteZ	heartbeatZ	HeartbeatzUnknown status )
iter_linesdecode
startswithloggerdebug)Z_sse_connectionliner   r   r   r   start   s    
zspawn_conversion.<locals>.startdataT)streamjsonevent_id/)r"   z*Spawning safetensors automatic conversion.zError during conversion: )
r   inforequestspostr#   getr   	Exceptionwarningrepr)r   r   r   Zsafetensors_convert_space_urlZsse_urlr    r!   resultr$   Zsse_connectioner   r   r   spawn_conversion   s    


r/   )r
   r   c                 K   s   |  |j}td d}|d}t| |||d}|d ksJ|sh|jdkrht||| t| |||d}n
td d|j }|S )Nz(Attempting to create safetensors variantz*Adding `safetensors` variant of this modelr   r   ZSFConvertBotzSafetensors PR existszrefs/pr/)	Z
model_infor   r   r&   r)   r   authorr/   num)r
   r   kwargsr   r   r   prshar   r   r   get_conversion_pr_reference:   s    


r5   F)pretrained_model_name_or_pathc           	   
   K   s   zt |ddt id}t|| f|}|d kr6W dS ||d< |d= |j| d||dd}|rddnd	}t| |f|}|||fW S  tk
r } z|s|W 5 d }~X Y nX d S )
Nr   z
user-agent)r   headers)NNr   Z_commit_hashzmodel.safetensors.index.jsonr   zmodel.safetensors)r   r)   r   r5   Zfile_existsr   r*   )	r6   Zignore_errors_during_conversionZcached_file_kwargsr
   r4   ZshardedfilenameZresolved_archive_filer.   r   r   r   auto_conversionQ   s&    r9   )F)typingr   r'   Zhuggingface_hubr   r   r   utilsr   r   r	   Z
get_logger__name__r   strr   boolr/   r5   r9   r   r   r   r   <module>   s   
#