
    /;jiv.              	          d dl Z d dlmZmZ d dlZd dlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ  e            rd dlZ ee          Zd	d
ddddddee	de
d         ide
d         idZ eed                                                   Zd Zd$dZd%dej        dedee         dej        fdZdej        dedefdZdej        dedefdZdej        d ee ef         d!e d"e!fd#Z"dS )&    N)DictOptional)tqdm   )GGUF_CONFIG_MAPPINGGGUF_TENSOR_MAPPINGGGUF_TOKENIZER_MAPPING_gguf_parse_value)is_torch_available)is_gguf_available)
get_loggerversiontensor_countkv_count)r   r   r   	file_typequantization_version)r   r   )GGUFgeneral	tokenizertokenizer_config)ignoreconfigtensorsr   r   r   c                 D    | j         |         fdj        D             S )Nc                 P    g | ]"}t          j        |         j                  #S  r
   partstypes).0_data_indexvalues     b/root/voice-cloning/.venv/lib/python3.11/site-packages/transformers/modeling_gguf_pytorch_utils.py
<listcomp>zread_field.<locals>.<listcomp><   s-    cccek+6DDccc    )fieldsdata)readerfieldr"   s     @r#   
read_fieldr*   :   s-    M% EccccX]Xbccccr%   Fc                 4
   t                      rt                      r	ddlm}m} n)t
                              d           t          d           ||           }|j        }t          |
                                          }d t          D             }t          |d          d         }t          |d          }	d|v rd	|	v rd	}
n|}
d
|v rd}
d}d|v r~|                     d          d                                         }t          j        d|          }|t#          d| d          |                                                    d          }||z   t(          vrt#          d||z    d          |j                                        D ]7\  }|                    ||
          }|                    d          }|d         }d                    |dd                   }fdj        D             }t3          |          dk    r|d         }t5          |t6                    r||v r|                    ||
          }t          D ]X}t          |         }||v rE|||         v r;||         |         }|dk    r2||||         |<   ||v r|                    |           Y||v r t
                              d| d|            9d|d         vrE|d         }d|v rt3          |d                   |d         d<   nt
                              d            |rt          d!         ||z            }t?          |j         d"#          D ]}|j!        } ||j        |j"                  }|dk    rOd$|v sd%|v rG|d         d&         }|d         d'         }d%|v rtG          |||          }nd$|v rtG          |||          }|d
k    r1d(|v rtI          ||||           d)|v rtK          j&        |d*          }|d+k    rGd,|v rC|d         d-         }|d         d.         }d/|v rtO          |||          }ntQ          |||          }|d0k    rPd1|v sd2|v sd3|v sd4|v r|j)        }|d5k    r3d6}tU          j+        tK          j,        |                    |d!         |<   O|D ]"}||v r|                    |||                   }#tU          j+        tK          j,        |                    |d!         |<   t3          |          dk    rt
                              d7|            |S )8a  
    Load a GGUF file and return a dictionary of parsed parameters containing tensors, the parsed
    tokenizer and config attributes.

    Args:
        gguf_checkpoint_path (`str`):
            The path the to GGUF file to load
        return_tensors (`bool`, defaults to `True`):
            Whether to read the tensors from the file and return them. Not doing so is faster
            and only loads the metadata in memory.
    r   )
GGUFReader
dequantizezLoading a GGUF checkpoint in PyTorch, requires both PyTorch and GGUF>=0.10.0 to be installed. Please see https://pytorch.org/ and https://github.com/ggerganov/llama.cpp/tree/master/gguf-py for installation instructions.zKPlease install torch and gguf>=0.10.0 to load a GGUF checkpoint in PyTorch.c                     i | ]}|i S r   r   )r    ks     r#   
<dictcomp>z(load_gguf_checkpoint.<locals>.<dictcomp>X   s    EEE1BEEEr%   zgeneral.architecturezgeneral.namellamamistralqwen2moe	qwen2_moe falcon/z-\d+b-Nz>From file name, cannot determine the number of parameters for z architecture-zArchitecture z not supported.r   c                 P    g | ]"}t          j        |         j                  #S r   r   )r    r!   r)   s     r#   r$   z(load_gguf_checkpoint.<locals>.<listcomp>}   s-    hhhk"5;{#;U[IIhhhr%   z1Some keys were not parsed and added into account z | 
vocab_sizer   r   tokenszCan't find a way to retrieve missing config vocab_size from tokenizer parameters. This will use default value from model config class and cause unexpected behavior.r   z,Converting and de-quantizing GGUF tensors...)descz.attn_k.z.attn_q.num_attention_headsnum_key_value_heads_expffn_gate_inp_shexpaxisbloomattn_qkvn_headhidden_sizeweightgpt2zattn_qkv.weightzffn_down.weightzffn_up.weightzattn_output.weightzoutput.weightzlm_head.weightz0Some keys of the GGUF file were not considered: )-r   r   ggufr,   r-   loggererrorImportErrorr&   listkeysGGUF_TO_TRANSFORMERS_MAPPINGr*   splitlowerresearch
ValueErrorgroupstripGGUF_SUPPORTED_ARCHITECTURESitemsreplacejoinr'   len
isinstancestrremoveinfowarningr   r   nametensor_typereverse_permute_weightssplit_moe_expert_tensornpexpand_dimsreverse_reshape_weightsreverse_reshape_biasTtorch
from_numpycopy) gguf_checkpoint_pathreturn_tensorsr,   r-   r(   r&   reader_keysparsed_parametersarchitecture
model_nameupdated_architecture
model_sizegguf_file_namemgguf_keyrR   prefix
config_keyr"   	parameterparameter_renamesrenamed_config_keytokenizer_parameterstensor_key_mappingtensorrc   weights	num_headsnum_kv_headsn_embedtensor_namer)   s                                   @r#   load_gguf_checkpointr   ?   sN     i133 i/////////A	
 	
 	
 ghhhZ,--F]Fv{{}}%%KEE(DEEEf&<==a@LFN33J ,9
#:#:(+\!!*J <-33C88<BBDDIi009lQ]lll   WWYY__S))
j (DDDR
)BRRRSSS "=..00 b b%##L2FGGs##qXXeABBi((
hhhh]b]ghhhu::??!HEeS!! 	Fle&;&;MM,0DEEE5 	1 	1I <Y G***z=Nv=V/V/V%6v%>z%J"%++%1GL%i01CD{**&&x000{""KK`H``Y^``aaa ,X6660=+++8;<PQY<Z8[8[h'55NNe  
  7T9)D\T^E^_6>0^___ 4	T 4	TF;D jf.@AAGw&&J$,>,>*PTBTBT-h78MN	0:;PQ%%5gy)TTGG4''5gy,WWGz))T>>+G5FN`aaa'4// !nW1===Gw&&:+=+=-h7A	+H5mDt##5gy'RRGG27IwOOGv%%%--(D00&$..+t33 &iG?** ,D9>9I"'RYJZJZ9[9[%i061 V V$&&<<5G5TUUD 271A"''BRBR1S1Si(..
;!T{TTUUUr%   r   rG   r   returnc                     |||k    r|}| j         d         |z  dz  } | j        ||dg| j         dd          R  }|                    dd                              | j                   S )Nr      r   )shapereshapeswapaxes)r   rG   r   dimws        r#   re   re      s{     Fl$:$:
-
f
$
)CQ;qrr):;;;A::a##GM222r%   r   c                 D   t          j        | dd          \  }}}|                    |||z  |          }|                    |||z  |          }|                    |||z  |          }t          j        |||gd          }|                    |dz  ||z  z  |          S )N   r   rC   r   )rg   array_splitr   stack)r   rG   r   qr/   vqkv_weightss          r#   ri   ri      s     nWaa000GAq!			&'V+W55A			&'V+W55A			&'V+W55A(Aq!91---KvzW->?IIIr%   c                 $   t          j        | d          \  }}}|                    |||z            }|                    |||z            }|                    |||z            }t          j        |||gd                                          }|S )Nr   r   rC   )rg   r   r   r   flatten)r   rG   r   q_biask_biasv_biasqkv_biass          r#   rj   rj      s      ^GQ77FFF^^FGv$566F^^FGv$566F^^FGv$566Fx0q999AACCHOr%   rr   rc   r   c           	         d}d|v rd}n!d|v rd}nd|v rd}nt          d| d	          |D ]"}||v r|                    |||                   }#|d
                             dd          }t          d|          D ]V}|                    dd| d| d          }| |         }	t	          j        t          j        |	                    |d         |<   Wd S )Nr5   ffn_gate_exps	gate_projffn_down_exps	down_projffn_up_expsup_projzCannot map expert tensor z in Qwen2Moe architecture.r   num_experts<   r   z.weightr:   r   )rV   r[   getrangerl   rm   rg   rn   )
r   rr   rc   r   exp_namer   	w_counteri	temp_name
exp_weights
             r#   rf   rf     s(   
 H$	D	 	 	$		UTUUUVVV) N N$<<-?-LMMD!(+//rBBI1i   X XLL,E,E,EH,E,E,EFF	QZ
272B27:CVCV2W2W)$Y//X Xr%   )F)N)#rT   typingr   r   numpyrg   r   integrationsr   r   r	   r
   utilsr   utils.import_utilsr   utils.loggingr   rl   __name__rL   rQ   rO   rP   rY   r*   r   ndarrayintre   ri   rj   r_   dictrf   r   r%   r#   <module>r      s  " 
			 ! ! ! ! ! ! ! !                      & % % % % % 1 1 1 1 1 1 % % % % % %  LLL	H		 !*"
 

 "-F\]]  ""5kBC$&<=O&PQ      $t$@$K$P$P$R$RSS d d d
^ ^ ^ ^B3 3RZ 3 3HUXM 3egeo 3 3 3 3
JRZ 
J 
Js 
J 
J 
J 
J
"* 
c 
C 
 
 
 
XZX,0dOXCFX\`X X X X X Xr%   