
    ^j                     n   d dl Z d dl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	de
d   ide
d   idZ eed   j/                               Z G d de      Z G d d      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z G d# d$e      Z  G d% d&e      Z! G d' d(e      Z" G d) d*e      Z# G d+ d,e      Z$ G d- d.e      Z%eeeeeeee e!e"e#e#e$e%d/Z&d0 Z'	 	 	 d7d1ed2e(dz  d3e)dz  d4e(fd5Z*d8d6Z+y)9    N)
NamedTuple)tqdm   )GGUF_CONFIG_DEFAULTS_MAPPINGGGUF_CONFIG_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configr   r   r   c                   @    e Zd ZU ej                  ed<   eed<   eed<   y)
GGUFTensorweightsnamemetadataN)__name__
__module____qualname__npndarray__annotations__strdict     s/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/modeling_gguf_pytorch_utils.pyr   r   8   s    ZZ
INr&   r   c                   L    e Zd ZddZdedefdZdeeef   dededefd	Zd
 Zy)TensorProcessorNc                     |xs i | _         y Nr   )selfr   s     r'   __init__zTensorProcessor.__init__?   s    lr&   hf_namereturnc                     |S )zP
        Preprocesses the tensor name to ease loading the GGUF tensors.
        r%   r-   r/   s     r'   preprocess_namezTensorProcessor.preprocess_nameB   s	     r&   gguf_to_hf_name_mapsuffix	qual_namec                      y)z
        Called when get_gguf_hf_weights_map fails to map a HF parameter
        (tensor) and corresponding GGUF one.

        This is particularly useful to resolve one-to-many
        HF-GGUF mappings sometimes appear in some MoE models.
        Nr%   )r-   r4   r5   r6   r/   s        r'   perform_fallback_tensor_mappingz/TensorProcessor.perform_fallback_tensor_mappingH   s     	r&   c                     t        ||i       S r+   r   r-   r   r   kwargss       r'   processzTensorProcessor.processT   s    '4,,r&   r+   )	r   r   r   r.   r#   r3   r$   r8   r=   r%   r&   r'   r)   r)   >   sL    #s s 
#'S>
;>
KN
Y\
-r&   r)   c            	       p     e Zd Zd	 fd	Zd Z	 d	dej                  dededz  dej                  fdZ xZ	S )
LlamaTensorProcessorNc                 &    t         |   |       y Nr,   superr.   r-   r   	__class__s     r'   r.   zLlamaTensorProcessor.__init__Y       'r&   c                    d|v sd|v rx| j                   j                  d      }| j                   j                  d      }d ||fv rt        ||i       S d|v r| j                  |||      }nd|v r| j                  |||      }t        ||i       S )Nz.attn_k.z.attn_q.num_attention_headsnum_key_value_heads)r   getr   _reverse_permute_weights)r-   r   r   r<   	num_headsnum_kv_headss         r'   r=   zLlamaTensorProcessor.process\   s    t!3(=>I;;??+@AL	<00!'444T!77IVt#77LY'4,,r&   r   n_headrM   r0   c                     |||k7  r|}|j                   d   |z  dz  } |j                  ||dg|j                   dd   }|j                  dd      j                  |j                         S )Nr      r   )shapereshapeswapaxes)r-   r   rN   rM   dimws         r'   rK   z-LlamaTensorProcessor._reverse_permute_weightsi   sr    
 #,(>!FmmA&(A-GOOFC?W]]12->?zz!Q''66r&   r+   )
r   r   r   r.   r=   r    r!   intrK   __classcell__rE   s   @r'   r?   r?   X   sE    (- LP
7zz
7+.
7>ADj
7	
7r&   r?   c                        e Zd Z ej                  d      Z ej                  d      Z ej                  d      Zd fd	Zde	de	fdZ
dee	e	f   d	e	d
e	de	fdZde	fdZdej                  dee	ef   de	de	fdZ xZS )Qwen2MoeTensorProcessorzmlp.experts.\d+.z7model\.layers\.(?P<bid>\d+)\.mlp\.experts\.gate_up_proj3(?P<name>.*\.ffn_(?P<w>gate|down|up)_exps)\.weight$c                 &    t         |   |       y rA   rB   rD   s     r'   r.   z Qwen2MoeTensorProcessor.__init__{   rF   r&   r/   r0   c                 D    t        j                  | j                  d|      S Nzmlp.experts.resubHF_EXPERT_RENAME_PATTERNr2   s     r'   r3   z'Qwen2MoeTensorProcessor.preprocess_name~       vvd33^WMMr&   r4   r5   r6   c                     t        j                  | j                  |      x}r"||z   }||d|d    d| <   ||d|d    d| <   y y )Nblk.bid.ffn_gate_exps.ffn_up_exps)r`   	fullmatchHF_MOE_W13_PATTERNr-   r4   r5   r6   r/   mfull_hf_names          r'   r8   z7Qwen2MoeTensorProcessor.perform_fallback_tensor_mapping   sg     T44g>>1>$w.LKW$qxjvh GHIU$qxjVH EF ?r&   r   c                 2   t        j                  | j                  |      x}rN|j                  d      }|j                  d      }|r*| j	                  ||||d      |d          t        |d i       S d|v rt        j                  |d      }t        ||i       S )Ntensor_key_mappingparsed_parametersr   rU   ffn_gate_inp_shexpr   axis)r`   ri   GGUF_MOE_WEIGHTS_PATTERNrJ   _set_moe_expert_tensorr   r    expand_dimsr-   r   r   r<   rl   ro   rp   s          r'   r=   zQwen2MoeTensorProcessor.process   s    T::DAA1A!',@!A &

+> ?!++G5FHZ[\]c[dHeghilgmn!'4444' nnW15G'4,,r&   r   rp   rU   c                    t        j                  t        j                  |            }|dk(  r	||d   |<   y t	        |j
                        }d}||   }|dz  ||<   ||d   vr't        j                  ||j                        |d   |<   |d   |   }	|dk(  r|	j                  |d|      }	n|	j                  |||      }	|	j                  |       y Ndowntensorsr   rP   )dtypegater   
torch
from_numpyr    copylistrQ   zerosr|   narrowcopy_
r-   r   rp   r/   rU   torch_weightsrQ   	shard_dim
shard_sizeouts
             r'   ru   z.Qwen2MoeTensorProcessor._set_moe_expert_tensor   s    (()9:;4Ai(1 'EIy)J)A~E)/	::8=EQ^QdQd8e!),W5 1) <W ECF{jjAz:jjJ
CIIm$r&   r+   )r   r   r   r`   compilerb   rj   rt   r.   r#   r3   r$   r8   r=   r    r!   ru   rW   rX   s   @r'   rZ   rZ   v   s    )rzz*=>#$^_)rzz*`a(Ns Ns NV#'S>V;>VKNVY\V-S -%bjj %TRUW[R[_ %gj %or %r&   rZ   c            
            e Zd ZdZ ej
                  d      Z ej
                  d      Zd fd	Zde	fdZ
dej                  ded	e	d
e	def
dZdej                  ded	e	defdZ xZS )GptOssTensorProcessoraK  
    Tensor processor for GPT-OSS models (MoE with 128 experts).
    Handles:
    - Splitting stacked expert tensors (down_proj, gate_proj, up_proj) into individual experts.
    - Interleaving gate and up projections if stored in a combined tensor (gate_up_projs).
    - Bias tensors (1D) are passed through without transpose.
    z<blk\.(?P<bid>\d+)\.ffn_(?P<proj>down|gate|up)_projs\.weight$z-blk\.(?P<bid>\d+)\.ffn_gate_up_projs\.weight$c                 &    t         |   |       y rA   rB   rD   s     r'   r.   zGptOssTensorProcessor.__init__   rF   r&   r   c                    | j                   j                  |      x}rN|j                  d      }|j                  d      }|r*|r(| j                  |||d   |d   |       t	        |d i       S | j
                  j                  |      x}rJ|j                  d      }|j                  d      }|r&|r$| j                  |||d   |       t	        |d i       S d|v r%t        |j                        dk(  rt	        ||i       S t	        ||i       S )Nro   rp   rf   proj.biasr   )	rt   matchrJ   _split_moe_expert_tensorr   GGUF_MOE_COMBINED_PATTERN_interleave_gate_up_tensorlenrQ   rw   s          r'   r=   zGptOssTensorProcessor.process   s   --33D9919!',@!A &

+> ?!&7--g7H!E(TUV\T]_qr!'444 ..44T::1:!',@!A &

+> ?!&7//9JAeHVhi!'444 d?s7==1Q6gtR00 '4,,r&   r   rp   rf   r   ro   c                 D   | j                   j                  dd      }t        t        ||j                  d               D ]_  }||   }d| d| d| d}	|j                         D ]  \  }
}|
|	v s|	j                  |
|      }	 t        j                  |d	      |d
   |	<   a y)z:Split a stacked MoE tensor into individual expert tensors.num_local_experts   r   model.layers..block_sparse_moe.experts..z_proj.weightTr   r{   N)	r   rJ   rangeminrQ   itemsreplacer   tensor)r-   r   rp   rf   r   ro   num_expertsiexpert_weightr/   key
mapped_keys               r'   r   z.GptOssTensorProcessor._split_moe_expert_tensor   s     kkoo&93? s;a(89: 		[A#AJM%cU*DQCql[G#5#;#;#= ?Z'>%ooc:>G? 5:LLUY4Zi(1		[r&   c                 H   | j                   j                  dd      }|j                  d   }|dz  }|ddd|ddf   }|dd|dddf   }	t        t	        ||j                  d               D ]  }
||
   j
                  }|	|
   j
                  }d| d|
 d	}d| d|
 d
}|j                         D ]2  \  }}||v r|j                  ||      }||v s!|j                  ||      }4 t        j                  |d      |d   |<   t        j                  |d      |d   |<    y)a  
        Process a combined gate+up tensor.
        Expected shape: [num_experts, intermediate_size, hidden_size].
        Interleaving: gate occupies first half of intermediate dimension,
        up occupies second half. Transpose to [hidden, half_inter] per expert.
        r   r   r   rP   Nr   r   r   z.gate_proj.weightz.up_proj.weightTr   r{   )
r   rJ   rQ   r   r   Tr   r   r   r   )r-   r   rp   rf   ro   r   
inter_size
half_inter	gate_partup_partr   gate_weight	up_weight	gate_nameup_namer   r   s                    r'   r   z0GptOssTensorProcessor._interleave_gate_up_tensor   sL    kkoo&93?]]1%
1_
A{
{A-.	!Z[!+,s;a(89: 	WA#A,..K
I'u,FqcIZ[I%cU*DQCWG $6#;#;#= ?Z)# ) 1 1#z BI'>%ooc:>G	? 7<ll;UY6Zi(349LLQU4Vi(1	Wr&   r+   )r   r   r   __doc__r`   r   rt   r   r.   r#   r=   r    r!   r$   r   r   rW   rX   s   @r'   r   r      s      *rzz*ij *

+[ \(-S -0[[  [ 	[
 [ ![."W"W  "W 	"W
 !"Wr&   r   c                   v     e Zd Zd fd	Zd Zdej                  dedefdZdej                  dedefdZ	 xZ
S )	BloomTensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   zBloomTensorProcessor.__init__  rF   r&   c                     d|v rI| j                   d   }| j                   d   }d|v r| j                  |||      }n| j                  |||      }t        ||i       S )Nattn_qkvrN   hidden_sizeweight)r   _reverse_reshape_weights_reverse_reshape_biasr   )r-   r   r   r<   rL   n_embeds         r'   r=   zBloomTensorProcessor.process  se    H-Ikk-0G477GT44WiQ'4,,r&   r   rN   r   c                 (   t        j                  |dd      \  }}}|j                  |||z  |      }|j                  |||z  |      }|j                  |||z  |      }t        j                  |||gd      }|j                  |dz  ||z  z  |      S )N   r   rr   r   )r    array_splitrR   stack)r-   r   rN   r   qkvqkv_weightss           r'   r   z-BloomTensorProcessor._reverse_reshape_weights!  s     ..!!41aIIfg/9IIfg/9IIfg/9hh1ayq1""6A:F1B#CWMMr&   c                    t        j                  |d      \  }}}|j                  |||z        }|j                  |||z        }|j                  |||z        }t        j                  |||gd      j	                         }|S )Nr   r   rr   )r    r   rR   r   flatten)r-   r   rN   r   q_biask_biasv_biasqkv_biass           r'   r   z*BloomTensorProcessor._reverse_reshape_bias-  s     "$!;6(9:6(9:6(9:88VVV41=EEGr&   r+   )r   r   r   r.   r=   r    r!   rV   r   r   rW   rX   s   @r'   r   r     sN    (-
N

 
NC 
NRU 
N
RZZ 
 
s 
r&   r   c                   &     e Zd Zd fd	Zd Z xZS )T5TensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   zT5TensorProcessor.__init__;  rF   r&   c                     d }|j                  d      D ]  }|j                         st        |      } n t        ||d|i      S )Nr   rf   )splitisdigitrV   r   )r-   r   r   r<   rf   chunks         r'   r=   zT5TensorProcessor.process>  sH    ZZ_ 	E}}%j	 '4%66r&   r+   r   r   r   r.   r=   rW   rX   s   @r'   r   r   :  s    (7r&   r   c                   &     e Zd Zd fd	Zd Z xZS )GPT2TensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   zGPT2TensorProcessor.__init__H  rF   r&   c                     d|v sd|v sd|v sd|v r|j                   }|dk(  rDd}|j                  di       }t        j                  t	        j
                  |            |d   |<   d }t        ||i       S )	Nzattn_qkv.weightzffn_down.weightzffn_up.weightzattn_output.weightoutput.weightzlm_head.weightrp   r{   )r   rJ   r   r   r    r   r   )r-   r   r   r<   rp   s        r'   r=   zGPT2TensorProcessor.processK  s     % D($&#t+iiG ?" $D &

+> C161A1A"'''BR1Si(.D'4,,r&   r+   r   rX   s   @r'   r   r   G  s    (-r&   r   c                   &     e Zd Zd fd	Zd Z xZS )MambaTensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   zMambaTensorProcessor.__init__b  rF   r&   c                     d|v rt        j                  |d      }d|v rt        j                  |       }t        ||i       S )Nzssm_conv1d.weightr   rr   ssm_a)r    rv   logr   r;   s       r'   r=   zMambaTensorProcessor.processe  sD    $& nnW15Gd? ffgX&G'4,,r&   r+   r   rX   s   @r'   r   r   a  s    (	-r&   r   c                   &     e Zd Zd fd	Zd Z xZS )NemotronTensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   z NemotronTensorProcessor.__init__r  rF   r&   c                 .    d|v r|dz
  }t        ||i       S Nznorm.weightr   r:   r;   s       r'   r=   zNemotronTensorProcessor.processv  "    D kG'4,,r&   r+   r   rX   s   @r'   r   r   q  s    (-r&   r   c                   &     e Zd Zd fd	Zd Z xZS )Gemma2TensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   zGemma2TensorProcessor.__init__}  rF   r&   c                 .    d|v r|dz
  }t        ||i       S r   r:   r;   s       r'   r=   zGemma2TensorProcessor.process  r   r&   r+   r   rX   s   @r'   r   r   |  s    (
-r&   r   c                   &     e Zd Zd fd	Zd Z xZS )Lfm2TensorProcessorc                 &    t         |   |       y rA   rB   rD   s     r'   r.   zLfm2TensorProcessor.__init__  rF   r&   c                 R    d|v rt        j                  |d      }t        ||i       S )Nzshortconv.conv.weightr   rr   )r    rv   r   r;   s       r'   r=   zLfm2TensorProcessor.process  s)    "d*nnW15G'4,,r&   r+   r   rX   s   @r'   r   r     s    (-r&   r   c                   $    e Zd Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Zd fd	Z	de
de
fdZd	ee
e
f   d
e
de
de
fdZde
fdZdej                   dee
ef   de
de
fdZ xZS )MiniMaxM2TensorProcessorzmlp\.experts\.\d+\.z<(?:model\.)?layers\.(?P<bid>\d+)\.mlp\.experts\.gate_up_projr[   z>(?:model\.)?layers\.(?P<bid>\d+)\.mlp\.e_score_correction_biasc                 &    t         |   |       y rA   rB   rD   s     r'   r.   z!MiniMaxM2TensorProcessor.__init__  rF   r&   r/   r0   c                 D    t        j                  | j                  d|      S r^   r_   r2   s     r'   r3   z(MiniMaxM2TensorProcessor.preprocess_name  rc   r&   r4   r5   r6   c                     t        j                  | j                  |      x}r"||z   }||d|d    d| <   ||d|d    d| <   y t        j                  | j                  |      x}r||z   |d|d    d<   y y )Nre   rf   rg   rh   z.exp_probs_b.bias)r`   ri   rj   HF_BIAS_PATTERNrk   s          r'   r8   z8MiniMaxM2TensorProcessor.perform_fallback_tensor_mapping  s     T44g>>1>$w.LKW$qxjvh GHIU$qxjVH EF,,t33W==Q=FORYFY$qxj0A BC >r&   r   c                     t        j                  | j                  |      x}rN|j                  d      }|j                  d      }|r| j	                  ||||d      |d          t        |d i       S t        ||i       S )Nro   rp   r   rU   )r`   ri   rt   rJ   ru   r   rw   s          r'   r=   z MiniMaxM2TensorProcessor.process  s    T::DAA1A!',@!A &

+> ?!++G5FHZ[\]c[dHeghilgmngtR00'4,,r&   r   rp   rU   c                    t        j                  t        j                  |            }|dk(  r	||d   |<   y t	        |j
                        }d}||   }|dz  ||<   ||d   vr't        j                  ||j                        |d   |<   |d   |   }	|dk(  r|	j                  |d|      }	n|	j                  |||      }	|	j                  |       y ry   r~   r   s
             r'   ru   z/MiniMaxM2TensorProcessor._set_moe_expert_tensor  s    (()9:;4Ai(1 'EIy)J)A~E)/	::8=EQ^QdQd8e!),W5 1) <W ECF{jjAz:jjJ
CIIm$r&   r+   )r   r   r   r`   r   rb   rj   rt   r   r.   r#   r3   r$   r8   r=   r    r!   ru   rW   rX   s   @r'   r   r     s    )rzz*@A#$cd)rzz*`a bjj!bcO(Ns Ns N
Z#'S>
Z;>
ZKN
ZY\
Z-S -%bjj %TRUW[R[_ %gj %or %r&   r   )llamaqwen2moegpt_ossqwen3moebloomt5	t5encodergpt2mambanemotrongemma2gemma3lfm2
minimax-m2c                     || j                   vrg S | j                   |   }|j                  D cg c]%  }t        |j                  |   |j                        ' c}S c c}w r+   )fieldsdatar	   partstypes)readerfieldvalue_data_indexs       r'   
read_fieldr    sP    FMM!	MM% EX]XbXbcekk+6Dcccs   *A	processor
model_type
num_layersr6   c           
         t               rt               r	ddlm}m} n t
        j                  d       t        d      || j                  j                  n|}|| j                  j                  n|}|dk(  rd}n7|dk(  rd	}n/|d
k(  rd}n'|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}n|dk(  rd}d}|j                         D ]  \  }}	|	|k(  s|} n |t        d| d       |||      }
i }| j                         }|D ]  }|j                  |      }|d}}|j                  d      s|j                  d      r|j!                  dd      \  }}d|z   }|
j#                  |      }||j%                  ||||       |||z   |||z   <    | j'                         x}rX|D ]S  \  }}t)        ||||| | d      }|j                         D ci c]  \  }}||vs|| }}}|j+                  |       U |S c c}}w )aY  
    GGUF uses this naming convention for their tensors from HF checkpoint:
    `blk.N.BB.weight` and `blk.N.BB.bias`
    where N signifies the block number of a layer, and BB signifies the
    attention/mlp layer components.
    See "Standardized tensor names" in
    https://github.com/ggerganov/ggml/blob/master/docs/gguf.md for details.
    r   )MODEL_ARCH_NAMESget_tensor_name_mapLoading 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.KPlease install torch and gguf>=0.10.0 to load a GGUF checkpoint in PyTorch.Ncoherez	command-r	qwen2_moer   	qwen3_moer   gemma3_textr   gemma4_textgemma4umt5r   
minimax_m2r  r   gpt-osszUnknown gguf model_type: z in gguf-py. This might because you're using an outdated version of gguf-py package, you can install `gguf` package from source refer to https://github.com/ggerganov/llama.cpp/tree/master/gguf-py#development z.weightr   r   r   )r6   )r   r
   ggufr  r  loggererrorImportErrorr   r  num_hidden_layersr   NotImplementedError
state_dictr3   endswithrsplitget_namer8   named_childrenget_gguf_hf_weights_mapupdate)hf_modelr  r  r  r6   r  r  archr   r	  name_mapr4   r$  r/   r   r5   	gguf_namer(  childsub_mapr   r   s                         r'   r)  r)    s    13>>A	
 ghh/9/A++zJ6@6H22jJX 
	{	"
	{	"
	}	$
	}	$
	v	
	|	#!
	y	 
D&,,. 
UJD |!'
| 4U U
 	
 #44H $$&J F++G4fI&'*:*:7*C">>#q1LD&6\F%%d+	556I6S\^ef2;g2EI./F" "0022~2) 	0KD%-y*jykRVQWWXDYG )0X11DW;Wq!tXGX&&w/	0  Ys   G7G7c                   /0 t               rt               r	ddlm}m} n t
        j                  d       t        d       ||       }|j                  }t        |j                               }t        D 	ci c]  }	|	i  }
}	t        |d      d   }t        |d      }d}d|v rd	|v rd	}nId
|v sd|v r?d|
d   d<   |r%d|d   j                         v rd}d|v rdg|
d   d<   nd|v r	dg|
d   d<   d
}n|}d|v rd}nd|v sd|v rd}nd|v rd}nd|v rd}d|v rSh d/d0t        /fd|j                  D              }t        0fd|j                  D              }||
d   d <   | |
d   d!<   |t         vr|t         vrt#        d"| d#      d$d%g}t%        d& |j                  D              xs ||v |
d   d'<   t'        j(                  |t'        j(                  |      xs i       }|j+                         D ]  \  }}|
d   j-                  ||        |j                  j+                         D ]-  \  }}|j/                  ||      }|j1                  d(      }|d   }d(j3                  |d)d       }|j4                  D cg c]%  }t7        |j8                  |   |j:                        ' }}t=        |      d)k(  r|d   }t?        |t@              r||v r|j/                  ||      }t        j+                         D ]@  \  }}||v s|||   v s||   |   }|d*k(  r!|||
|   |<   ||v s0|jC                  |       B ||v st
        jE                  d+| d,|        0 |
d   d-   d.k(  rd/|
d   d-<   |
d   d-   d0k(  rd1|
d   d-<   g d2|
d   d3<   |
d   j)                  d-      dk(  rBd4d5d6d7}|
d   j)                  d8      }t?        |tF              r|j)                  |d5      |
d   d8<   |
d   d-   d9k(  rK|
d   d:   }tI        |      |
d   d:<   d;|
d   d<<   tK        |      D  !cg c]  \  } }!|!dkD  s|  c}!} |
d   d=<   |dk(  rdRd>}" |"|d?      }#|#d@|#i}$|j                  D ]  }|jM                  dA      s|t=        dA      d }%|%dBk(  r)|j                  |   j8                  d   }t?        |tN              r|jQ                  dC      }|%dDv rtS        |      }n|%dEv rdF}%tG        |      }n	 ||$|%<    |$|
d   dG<   dH|
d   vr3|
dI   }&dJ|&v rt=        |&dJ         |
d   dH<   nt
        jU                  dK       |ri |
dL<   |
j)                  di       }'tV        j)                  |tX              }( |(|'M      })t[        ||)      }*t]        |j                  dNO      D ]  }+|+j^                  }, ||+j4                  |+j`                        }-|)jc                  |-|,|*|
P      }.|.jd                  }-|.j^                  },|,|*vr^|*|,   },tg        jh                  tk        jl                  |-            }+||+jo                  |      }+|+|
dL   |,<    t=        |      dkD  rt
        jE                  dQ|        |
S c c}	w c c}w c c}!} w )SaF  
    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 `False`):
            Whether to read the tensors from the file and return them. Not doing so is faster
            and only loads the metadata in memory.
        model_to_load (`nn.Module`, *optional*):
            The model to load the weights into. This is used to map GGUF tensor names to
            Transformers parameter names.
        torch_dtype (`torch.dtype`, *optional*):
            The desired `torch.dtype` for the loaded tensors. If provided, tensors will be
            converted to this dtype immediately after dequantization to save memory.
    r   )
GGUFReader
dequantizer  r  zgeneral.architecturezgeneral.nameNr   mistralr   r   Tr   is_gated_actr  UMT5EncoderModelarchitecturesT5EncoderModelr   r  r   r  r   r  r  r  stablelm>   attn_k.biasattn_q.biasattn_v.biasffn_normc              3   H   K   | ]  }D ]  }||j                   v    y wr+   r   ).0r   	bias_nameattn_bias_names      r'   	<genexpr>z'load_gguf_checkpoint.<locals>.<genexpr>  s)     mF^lmQZyFKK/m/ms   "c              3   :   K   | ]  }|j                   v   y wr+   r?  )r@  r   ffn_norm_names     r'   rC  z'load_gguf_checkpoint.<locals>.<genexpr>  s     #^VMV[[$@#^s   use_qkv_biasuse_parallel_residualzGGUF model with architecture z is not supported yet.falconr   c              3   :   K   | ]  }|j                   d k7    yw)r   Nr?  )r@  r   s     r'   rC  z'load_gguf_checkpoint.<locals>.<genexpr>  s     HvFKK?*Hs   tie_word_embeddingsr   r   z1Some keys were not parsed and added into account z | r  r   r  r  r  )r   j   2   eos_token_idnonesoftmaxsigmoid)r   r   rP   scoring_funcr   rI   Fblock_auto_adjust_ff_dimfull_attn_idxsc                     d| }|| j                   v r?| j                   |   j                  d   }t        |t              r|j	                  d      }|S |S )Nzgpt-oss.r   utf-8)r  r  
isinstancebytesdecode)r  r5   defaultr   vals        r'   read_gpt_keyz*load_gguf_checkpoint.<locals>.read_gpt_key  sU    VH%Cfmm#mmC(..q1c5)**W-C
Nr&   zrope.scaling.type	rope_typezgpt-oss.rope.scaling.typerV  )factorattention_factor	beta_fast	beta_slow)original_context_length original_max_position_embeddingsrd  rope_scaling
vocab_sizer   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{   r,   z,Converting and de-quantizing GGUF tensors...)desc)r   r   ro   rp   z0Some keys of the GGUF file were not considered: r+   )8r   r
   r  r2  r3  r  r   r!  r  r   keysGGUF_TO_TRANSFORMERS_MAPPINGr  loweranyr{   GGUF_SUPPORTED_ARCHITECTURES
ValueErrorallr   rJ   r   
setdefaultr   r   joinr  r	   r  r  r   rW  r#   removeinforV   max	enumerate
startswithrX  rY  floatwarningTENSOR_PROCESSORSr)   r)  r   r   tensor_typer=   r   r   r   r    r   to)1gguf_checkpoint_pathreturn_tensorsmodel_to_loadtorch_dtyper2  r3  r  r  reader_keysr   rp   architecture
model_nameupdated_architecturer   rG  
exceptionsconfig_defaultsr   r	  gguf_keyr  r   prefix
config_keyr
  	parameterparameter_renamesrenamed_config_key_gating_func_map_scoringgguf_num_key_value_headsr   rM   r\  r]  re  r5   tokenizer_parametersr   ProcessorClassr  ro   r   r   r   resultrB  rE  s1                                                  @@r'   load_gguf_checkpointr  <  s   $ 13//A	
 ghh,-F]]Fv{{}%K(DE1BEEf&<=a@LFN3J ,9
#:( 
	!<6:(#N3&JqM$7$7$99#) l*@R?S!(+O<l*@P?Q!(+O<#' +\!*	l	"i<&?(	|	#*		%+
 \!F"mfnnmm ##^v~~#^ ^6>(#N3CX?X(#$;<77<PXt<t8F\]^^ G$JHHHfL\fLf h 56
 366:>>|LRPRO &++- ;
U(#..sE:; "==..0 b%##L2FGs#qXXeABi(
]b]g]ghk"5;;{#;U[[Ihhu:?!HEeS!le&;MM,0DEE,H,N,N,P 
	1(I(**z=Nv=V/V%6v%>z%J"%+%1GL%i01CD{*&&x0
	1 {"KKKH:UXY^X_`a7b< "<0H<4A(#L1 "<0H<4A(#L1 7C(#N3 "&&|4D%)	B$X.22>Bh$:J:N:NxYb:ch'7"<0F:#4X#>?T#U =@AY=Z(#$9:BG(#$>?
 &//G%H9
!!\L[\L\A9
(#$45 y(	 !)<=	 '3L }} -~~&=>S!89;<V#c*003eU+!LL1EUU!%LE^^?FJE',V$%-( ;Gh'7 ,X660=++8;<PQY<Z8[h'5NNe
 '))$"&&x4*..|_M"&1	4]IN6>>0^_ 	8F;;D f.@.@AG&&#5"3	 ' F nnG;;D--%d+D%%bggg&67F&;/17i(.-	80 ;!F{mTUk FL if9
s   5
Y8*Y"Y')Y')NNr  )FNN),r`   typingr   numpyr    	tqdm.autor   integrationsr   r   r   r	   utilsr
   utils.import_utilsr   utils.loggingr   r   r   r  rj  r   ri  rm  r   r)   r?   rZ   r   r   r   r   r   r   r   r   r   ry  r  r#   rV   r)  r  r%   r&   r'   <module>r     s    
     & 1 % 	H	 !*"

 "-F\] "5kBC$&<=O&PQ    $$@$J$O$O$QR  - -47? 7<5%o 5%pbWO bWJ$? $N
7 
7-/ -4-? - -o -	-O 	--/ -2% 2%l "'$'!
"!'##* $d "!WW d
W d
	W
 Wttr&   