o
    
j6                     @   s8  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZmZ ej rSeejdrSeejjdrSej rSejejjjejdZne jdd ZeeZeejjdsked	 d
d Zdd ZG dd dZej rdej jj!_"dej j#_"e jdd Z$dd Z%dddZ&dS )    N)GPT	GPTConfig)FineGPTFineGPTConfigampautocast)dtypec                   c   s    d V  d S N r
   r
   r
   Q/home/kuhnn/.local/lib/python3.10/site-packages/TTS/tts/layers/bark/load_model.pyr      s   
scaled_dot_product_attentionztorch version does not support flash attention. You will get significantly faster inference speed by upgrade torch to newest version / nightly.c                    sb   t  }t| d t fdddD ]}|| qW d    | S 1 s(w   Y  | S )Nrbc                      s
     dS )Ni   )readr
   fr
   r   <lambda>+   s   
 z_md5.<locals>.<lambda>    )hashlibmd5openiterupdate	hexdigest)fnamehash_md5chunkr
   r   r   _md5(   s   
r   c           	      C   s   t j|dd tj| dd}t|jdd}d}tj|ddd}t|d	}||D ]}|	t
| || q,W d    n1 sEw   Y  |  |d|jfvrYtd
d S )NT)exist_ok)streamzcontent-lengthr   i   iB)totalunit
unit_scalewbzERROR, something went wrong)osmakedirsrequestsgetintheaderstqdmr   iter_contentr   lenwriteclosen
ValueError)	from_s3_pathto_local_path	CACHE_DIRresponsetotal_size_in_bytes
block_sizeprogress_barfiledatar
   r
   r   	_download0   s   r:   c                   @   s&   e Zd Zd	ddZdd Zdd ZdS )
InferenceContextFc                 C   s   || _ d | _d S r	   )_chosen_cudnn_benchmark_cudnn_benchmark)self	benchmarkr
   r
   r   __init__@   s   
zInferenceContext.__init__c                 C   s   t jjj| _| jt jj_d S r	   )torchbackendscudnnr?   r=   r<   )r>   r
   r
   r   	__enter__E   s   zInferenceContext.__enter__c                 C   s   | j tjj_d S r	   )r=   rA   rB   rC   r?   )r>   exc_type	exc_valueexc_tracebackr
   r
   r   __exit__I   s   zInferenceContext.__exit__N)F)__name__
__module____qualname__r@   rD   rH   r
   r
   r
   r   r;   ?   s    
r;   Tc                   c   s    t  O t 2 t  t  d V  W d    n1 s w   Y  W d    n1 s/w   Y  W d    n1 s>w   Y  W d    d S W d    d S 1 sVw   Y  d S r	   )r;   rA   inference_modeno_gradr   r
   r
   r
   r   rL   R   s   $ P rL   c                   C   s&   t j rt j  t j  d S d S r	   )rA   cudais_availableempty_cachesynchronizer
   r
   r
   r   clear_cuda_cacheX   s   

rR   textc                 C   s  t d| d|  d |dkrt d |dkrt}t}n|dkr't}t}n|dkr0t}t}nt |jsUt	j
| rUt| |j| d	 krUt d
| d t	|  t	j
| sot | d t|j| d | |j tj| |d}|d }d|vr|d |d< |d |d< |d= |d$i |d }|dkr||_n|dkr||_n|dkr||_||}	|d }
d}t|
 D ]\}}||r|
||
|t|d  < qt|
 t|	   }tdd |D }t|	  t|
  }tdd |D }t|dkrtd| t|dkrtd| |	j|
dd |	  }|d ! }t dt"|d d  d!t"|d" d# |	#  |	$| ~~
t%  |	|fS )%Nzloading z model from z...cpuz>No GPU being used. Careful, Inference might be extremely slow!rS   coarsefinechecksumzfound outdated z model, removing...z  model not found, downloading...path)map_location
model_argsinput_vocab_size
vocab_sizeoutput_vocab_sizemodelz
_orig_mod.c                 s       | ]
}| d s|V  qdS z
.attn.biasNendswith.0kr
   r
   r   	<genexpr>       zload_model.<locals>.<genexpr>c                 s   r_   r`   ra   rc   r
   r
   r   rf      rg   r   zextra keys found: zmissing keys: F)strictbest_val_losszmodel loaded: g    .A   z
M params,    z lossr
   )&loggerinfowarningr   r   r   r   NotImplementedErrorUSE_SMALLER_MODELSr$   rX   existsr   REMOTE_MODEL_PATHSremover:   r3   rA   loadsemantic_configcoarse_configfine_configlistitems
startswithpopr,   setkeys
state_dictr0   load_state_dictget_num_paramsitemroundevaltorR   )	ckpt_pathdeviceconfig
model_typeConfigClass
ModelClass
checkpointrZ   gptconfr^   r~   unwanted_prefixre   _
extra_keysmissing_keysn_paramsval_lossr
   r
   r   
load_model^   sx   



(
r   )rS   )'
contextlib	functoolsr   loggingr$   r&   rA   r*   TTS.tts.layers.bark.modelr   r   TTS.tts.layers.bark.model_finer   r   rN   rO   hasattrr   is_bf16_supportedpartialr   bfloat16contextmanager	getLoggerrI   rl   nn
functionalrn   r   r:   r;   rB   matmul
allow_tf32rC   rL   rR   r   r
   r
   r
   r   <module>   sH    





