o
    h                     @   s   d dl Z d dlZ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 eeZdededed	ed
ed f
ddZd	ededefddZdedefddZdefddZdS )    N)Optional)
DiscussionHfApiget_repo_discussions   )cached_fileloggingapimodel_idpr_titletokenreturnr   c                 C   sl   | j ||dd j}t||dD ]#}|j|kr3|jdkr3|jr3| j ||j|d}||d jkr3|  S qd S )Nr   r   )repo_idr   openrevisionr   r   )list_repo_commits	commit_idr   titlestatusis_pull_requestgit_reference)r	   r
   r   r   main_commit
discussioncommits r   Y/var/www/html/ai/venv/lib/python3.10/site-packages/transformers/safetensors_conversion.pyprevious_pr   s   r   privatec           	         s   t d d}| d}| ddtt d  fdd}tj|d	 d
A}d||| gi}zt d ||| W n tyY } zt 	dt
|  W Y d }~nd }~ww W d    d S W d    d S 1 smw   Y  d S )Nz;Attempting to convert .bin model on the fly to safetensors.z$https://safetensors-convert.hf.spacez/queue/joinz/queue/datar   )fn_indexsession_hashc                    s   |   D ]O}| }|drSt|dd  }td|d   |d dkr,td|d dkrJ|d }tj	d	 d|i| d
}|
  q|d dkrS d S qd S )Nzdata:   zSafetensors conversion status: msg
queue_fullz Queue is full! Please try again.	send_dataevent_idT)streamparamsjsonprocess_completed)
iter_linesdecode
startswithr)   loadsloggerdebug
ValueErrorrequestspostraise_for_status)_sse_connectionpayloadlinerespr&   response	hash_datasse_data_urlr   r   start#   s(   

zspawn_conversion.<locals>.startT)r'   r(   dataz*Spawning safetensors automatic conversion.zError during conversion: )r/   infostruuiduuid4r2   getr0   	Exceptionwarningrepr)	r   r   r
   safetensors_convert_space_urlsse_urlr=   sse_connectionr>   er   r:   r   spawn_conversion   s&   



 "rK   c                 K   s   |  |j}td d}|d}t| |||d}|d u s%|s4|jdkr4t||| t| |||d}ntd d|j }|S )Nz(Attempting to create safetensors variantz*Adding `safetensors` variant of this modelr   r   SFConvertBotzSafetensors PR existszrefs/pr/)	
model_infor   r/   r?   rC   r   authorrK   num)r	   r
   kwargsr   r   r   prshar   r   r   get_conversion_pr_reference@   s   


rS   pretrained_model_name_or_pathc                 K   s|   t |dd}t|| fi |}|d u rdS ||d< |d= |j| d||dd}|r.dnd}t| |fi |}|||fS )	Nr   r   )NNr   _commit_hashzmodel.safetensors.index.jsonr   zmodel.safetensors)r   rC   rS   file_existsr   )rT   cached_file_kwargsr	   rR   shardedfilenameresolved_archive_filer   r   r   auto_conversionW   s   
r[   )r)   rA   typingr   r2   huggingface_hubr   r   r   utilsr   r   
get_logger__name__r/   r@   r   boolrK   rS   r[   r   r   r   r   <module>   s    
"'