
     3jR                        S SK r S SKrS SKrS SKrS SKrS SKrSSKJr  SSKJ	r	J
r
  1 Skr1 SkrSS1rS	 rS
 rS rS rSQS jrSSSSSSSSSSSSSSS.r0 SS_SS _S!S"_S#S$_S%S&_S'S(_S)S*_S+S,_S-S._S/S0_S1S2_S3S4_S5S6_S7S8_S9S:_S;S<_r\R+                  5       r\R/                  S=S>S6S?.5        S@SASBSCS0S2S4SDSESFSG.
rSH rSI rSJ rSK rSL rSM rSN rSO r SP r!g)R    N   )
GGMLTensor)is_quantizeddequantize_tensor>   sd1sd3wanaurafluxltxvsdxlhyvidcosmoshidreamlumina2
qwen_image>   t5llamaqwen3gemma3qwen2vlqwen3vl	t5encoderzclip-visionmmprojc                   ^ SU 3nU R                  U5      mTc  g [        TR                  5      S:w  dV  TR                  S   [        R                  R
                  :w  d+  TR                  S   [        R                  R                  :w  a  [        SU STR                   35      e[        R                  " [        U4S jTR                   5       5      5      $ )Nzcomfy.gguf.orig_shape.   r   r   z Bad original shape metadata for z: Expected ARRAY of INT32, got c              3   Z   >#    U  H   n[        TR                  U   S    5      v   M"     g7fr   N)intparts.0part_idxfields     @/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-GGUF/loader.py	<genexpr>!get_orig_shape.<locals>.<genexpr>   s'     U*hCH 5a 899*s   (+)	get_fieldlentypesggufGGUFValueTypeARRAYINT32	TypeErrortorchSizetupledata)readertensor_name	field_keyr$   s      @r%   get_orig_shaper7      s    (6IY'E}
5;;1A$2D2D2J2J JekkZ[n`d`r`r`x`xNx:9+Edejepepdqrss::eU%**UUVV    c                    U R                  U5      nUc  g U[        :X  a  [        UR                  5      S:w  d+  UR                  S   [        R
                  R                  :w  a  [        SU SUR                  < 35      e[        UR                  UR                  S      SS9$ U[        [        [        4;   a0  U" UR                  UR                  S      R                  5       5      $ [        SU 35      e)	Nr   r   zBad type for GGUF z key: expected string, got utf-8encodingUnknown field type )r(   strr)   r*   r+   r,   STRINGr/   r    r3   r   floatboolitemr4   
field_name
field_typer$   s       r%   r(   r(      s    Z(E}	s	u{{q EKKNd6H6H6O6O$O0<WX]XcXcWfghh5;;uzz"~.AA	UD)	)%++ejjn5::<==-j\:;;r8   c                   ^^ U R                  U5      mTc  g T[        :X  a  [        U4S jTR                   5       5      $ T[        [
        [        4;   a   [        UU4S jTR                   5       5      $ [        ST 35      e)Nc              3   R   >#    U  H  n[        TR                  U   S S9v   M     g7f)r;   r<   N)r?   r    r!   s     r%   r&   !get_list_field.<locals>.<genexpr>-   s#     ]R\hSX.AR\s   $'c              3   T   >#    U  H  nT" TR                   U   S    5      v   M     g7fr   )r    )r"   r#   r$   rF   s     r%   r&   rI   /   s'     U*hZH 5a 899*s   %(r>   )r(   r?   r2   r3   r   rA   rB   r/   rD   s     `@r%   get_list_fieldrK   (   sr    Z(E}	s	]RWR\R\]]]	UD)	)U%**UUU-j\:;;r8   c                 J   0 nU R                    GH  n U R                  U5      n[        UR                  5      S:X  GaV  UR                  S   [        R
                  R                  :X  a*  [        UR                  UR                  S      S5      X'   M  UR                  S   [        R
                  R                  :X  a)  [        UR                  UR                  S      5      X'   M  UR                  S   [        R
                  R                  :X  a*  [        UR                  UR                  S      5      X'   GM.  UR                  S   [        R
                  R                  :X  a*  [        UR                  UR                  S      5      X'   GM  GM  GM     U$ !    GM  = f)z3Extract all simple metadata fields like safetensorsr   r   r:   r;   )fieldsr(   r)   r*   r+   r,   r@   r?   r    r3   r.   r   F32rA   BOOLrB   )r4   metadatarE   r$   s       r%   get_gguf_metadatarQ   3   s@   Hmm
	$$Z0E5;;1$;;q>T%7%7%>%>>+.u{{5::b>/JG+TH([[^t'9'9'?'??+.u{{5::b>/J+KH([[^t'9'9'='==+0UZZ^1L+MH([[^t'9'9'>'>>+/EJJrN0K+LH( ? % $ O	s!   A>FAF(AF=AFF"c           	      n	  ^^ [         R                  " U 5      nSnTb<  [        T5      n[        S UR                   5       5      n[        U4S jU 5       5      n/ nUR                   HF  nUR                  =pU(       a  U
R                  T5      (       d  M/  U
WS n	UR                  X45        MH     Sn[        US[        5      n[        US[        5      nUS;   aG  U(       a  [        SU  S	35      eUc  S
OUnSSKJn   U" [        S U 5       5      5      R                  nOKU[         ;  a!  U(       a  U["        ;  a  [        SU< 35      eO U[$        ;  a  U(       d  [        SU< 35      eU(       a  [&        R(                  " SU SU S35        0 n0 nU GH  u  pUR                  n
[*        R,                  " 5          [*        R.                  " SSS9  [0        R2                  " UR4                  5      nSSS5        [7        X:5      nUc  [0        R8                  " [;        S [=        UR>                  5       5       5      5      nUS
:X  am  US:X  ag  [        S Vs/ s H  nU
RA                  U5      PM     sn5      (       a7  [        U5      S:  a(  US   S:X  a  USS n[        U5      S:  a  US   S:X  a  M  URB                  [         RD                  RF                  [         RD                  RH                  1;   a  WRJ                  " U6 n[M        WURB                  US9UU	'   [        U5      S::  aF  URB                  [         RD                  RN                  :X  a  [Q        UU	   [0        RR                  S9UU	'   [U        URB                  S[W        URB                  5      5      nURY                  US5      S-   UU'   GM"     [&        RZ                  " S S!R]                  S" UR_                  5        5       5      -   5        UR_                  5        VVs0 s H  u  nn[a        U5      (       d  M  UU_M     snnm[        T5      S:  a&  [c        TRe                  5       U4S# jS$9nS%UU   l3        U[i        U5      S&.nUU4$ ! [         a  n[        SU S	35      eSnAff = f! , (       d  f       GN= fs  snf s  snnf )'z!
Read state dict as fake tensors
FNc              3   8   #    U  H  oR                   v   M     g 7fN)name)r"   tensors     r%   r&   !gguf_sd_loader.<locals>.<genexpr>P   s     D^6;;^   c              3   D   >#    U  H  oR                  T5      v   M     g 7frT   )
startswith)r"   shandle_prefixs     r%   r&   rW   Q   s     Klm44ls    zgeneral.architecturezgeneral.type)NpigcowzeThis gguf file is incompatible with llama.cpp!
Consider using safetensors or a compatible gguf file
()zsd.cppr   )detect_archc              3   *   #    U  H	  oS    v   M     g7fr    )r"   vals     r%   r&   rW   g   s     &A#1vs   z)This model is not currently supported - (z6Unexpected text model architecture type in GGUF file: z+Unexpected architecture type in GGUF file: z?Warning: This gguf model file is loaded in compatibility mode 'z' [arch:]ignorez%The given NumPy array is not writable)messagec              3   8   #    U  H  n[        U5      v   M     g 7frT   )r   )r"   vs     r%   r&   rW      s     $L5KSVV5KrX   r   )z.proj_in.weightz.proj_out.weightr   r:   )tensor_typetensor_shapedtyperU   r   zgguf qtypes: z, c              3   6   #    U  H  u  pU S U S3v   M     g7f)z (r_   Nrb   )r"   krh   s      r%   r&   rW      s      ,YFXdas"QCq\FXs   c                 *   > TU    R                  5       $ rT   )numel)rn   qsds    r%   <lambda> gguf_sd_loader.<locals>.<lambda>   s    Ar8   )keyT)arch_strrP   )5r+   
GGUFReaderr)   settensorsanyrU   rZ   appendr(   r?   
ValueErrortools.convertr`   arch	ExceptionTXT_ARCH_LISTVIS_TYPE_LISTIMG_ARCH_LISTloggingwarningwarningscatch_warningsfilterwarningsr0   
from_numpyr3   r7   r1   r2   reversedshapeendswithri   GGMLQuantizationTyperN   F16viewr   BF16r   float32getattrreprgetinfojoinitemsr   maxkeysis_largest_weightrQ   )pathr\   is_text_modelr4   
has_prefix
prefix_lentensor_namesrx   rV   sd_keyr5   compatru   type_strr`   e
state_dict
qtype_dicttorch_tensorr   xtensor_type_strrn   rh   max_keyextrarq   s    `                        @r%   gguf_sd_loaderr   F   sR    __T"F J '
DV^^DDKlKK
G..%{{*))-88 -F'( ! F!7=H5H''   G  HL  GM  MN  O  P  P%-8.	O"3&A&A#ABGGH 
	&==(UV^Uabcc )		&}FxlSTTYZ`Yaaijrisstuv JJ!kk $$&##H6]^ ++FKK8L ' v3=JJu$LXfll5K$LLME!h&&89`a9`A,,Q/9`abbe*q.U2Y!^ %cr
 e*q.U2Y!^ $";";"?"?AZAZA^A^!__',,e4L'&BTBTchi
6 u:?v11T5N5N5S5SS!2:f3EU]]![Jv "&"4"4fd6CUCU>VW&0nn_a&H1&L
?#; "@ LL499,YjFVFVFX,Y#YYZ %**,
@,31QQ31Q3,
@C
3x!|chhj&>?04
7- %f-E w  	OH1MNN	O& '& b* As6    "Q9 ?6RR,
R1'R19
RRR
R)	zencoder.z.block.sharedfinal_layer_normzlayer.0.SelfAttention.qzlayer.0.SelfAttention.kzlayer.0.SelfAttention.vzlayer.0.SelfAttention.ozlayer.0.layer_normz-layer.0.SelfAttention.relative_attention_biaszlayer.1.DenseReluDense.wi_1zlayer.1.DenseReluDense.wozlayer.1.DenseReluDense.wi_0zlayer.1.layer_norm)zenc.z.blk.
token_embdoutput_normattn_qattn_kattn_vattn_o	attn_norm
attn_rel_bffn_upffn_downffn_gateffn_normzblk.zmodel.layers.r   input_layernormzattn_q_norm.zself_attn.q_norm.zattn_k_norm.zself_attn.k_norm.zattn_v_norm.zself_attn.v_norm.r   zself_attn.q_projr   zself_attn.k_projr   zself_attn.v_projattn_outputzself_attn.o_projr   zmlp.up_projr   zmlp.down_projr   zmlp.gate_projr   post_attention_layernormr   zmodel.embed_tokensr   z
model.normzoutput.weightzlm_head.weightpre_feedforward_layernormpost_feedforward_layernorm)r   post_ffw_normpost_attention_normzvisual.merger.mlp.zvisual.merger.ln_q.zvisual.patch_embed.projzvisual.blocks.z
attn.proj.znorm1.znorm2.)
zmm.z
v.post_ln.zv.patch_embdzv.blk.r   r   r   z	attn_out.zln1.zln2.c                     0 nU R                  5        H3  u  p4UR                  5        H  u  pVUR                  XV5      nM     XBU'   M5     U$ rT   )r   replace)raw_sdkey_mapsdrn   rh   r[   ds          r%   sd_map_replacer      sF    	B||~==?CA		!A #1  Ir8   c                    0 nS nU R                  5        He  u  pVUR                  S5      (       a  U" UR                  U5      Ul        UR                  S5      (       a  U" UR                  U5      Ul        XcU'   Mg     U$ )Nc                     U R                   " XR                  S   U-  S-  S/U R                  SS  Q76 R                  SS5      R                  U R                  5      $ )Nr   r   r   )reshaper   swapaxes)r   hs     r%   rr   llama_permute.<locals>.<lambda>   sP    !))AwwqzQ!';QMMVVWXZ[\ddefelelmr8   )zq_proj.weightzq_proj.bias)zk_proj.weightzk_proj.bias)r   r   r3   )r   n_head	n_head_kvr   permutern   rh   s          r%   llama_permuter      sp    	BmG||~::677QVVV,AF::677QVVY/AF1  Ir8   c                 2  ^ / SQnSn[        U R                  5       5       Hr  m[        U4S jU 5       5      (       d  M  [        U T   5      (       a"  [	        U T   [
        R                  S9S-
  U T'   OU T   R                  5       S-
  U T'   US-  nMt     U $ )N)zinput_layernorm.weightzpost_attention_layernorm.weightz pre_feedforward_layernorm.weightz!post_feedforward_layernorm.weightzself_attn.q_norm.weightzself_attn.k_norm.weightzmodel.norm.weightr   c              3   ,   >#    U  H	  oT;   v   M     g 7frT   rb   )r"   prt   s     r%   r&   *gemma3_norm_corrections.<locals>.<genexpr>   s     /ACx   rk   g      ?r   )listr   ry   r   r   r0   r   rA   )r   norm_patterns	correctedrt   s      @r%   gemma3_norm_correctionsr      s    M IBGGI////BsG$$+BsG5==ICO3S'--/C/3NI  Ir8   c                     Sn[         R                  " X[         R                  5      nU(       a  U S UR                  5        n U $ )Nz'[-_]?(?:ud-)?i?q[0-9]_[a-z0-9_\-]{1,8}$)research
IGNORECASEstart)rU   patternmatchs      r%   strip_quant_suffixr     s5    8GIIgR]]3ENU[[]#Kr8   c                   ^ [         R                  " S5        [        R                  R	                  U 5      n[        R                  R                  U5      S   R                  5       n[        U5      n/ n[        R                  R                  U 5      n[        R                  " U5       Hv  n[        R                  R                  U5      u  pgUR                  5       S:w  a  M:  SUR                  5       ;  a  MP  X&R                  5       ;   d  Me  UR                  U5        Mx     [        U5      S:X  a  [         R                  " SU SU S35        0 $ [        U5      S:  a  [         R                  " S	U S
35        [         R                  " SUS    SU S35        [        R                  R                  XCS   5      n[        USS9u  pSU;   ag  [        UR!                  S5      ["        R$                  S9n
[        UR!                  S5      ["        R$                  S9n["        R&                  " X/SS9US'   [)        U[*        5      nSU;   Ga  0 nUR-                  5        H  u  mn[/        U4S jS 5       5      (       d  M"  TR1                  SS5      u  pUSUR3                  S5      S   -   -  nX;  a  0 X'   [        U[5        U5      (       a  ["        R6                  O["        R8                  S9X   U'   M     UR-                  5        HG  u  mnTR3                  S5      S   n["        R:                  " USU 3   USU 3   USU 3   /SS9UT'   MI     AU$ )Nz2Attenpting to find mmproj file for text encoder...r   z.ggufr   z#Error: Can't find mmproj file for 'z' (matching:'z#')! Qwen-Image-Edit will be broken!r   z#Ambiguous mmproj for text encoder 'z', will use first match.zUsing mmproj 'z' for text encoder 'z'.Tr   zv.patch_embd.weight.1zv.patch_embd.weightrk   r   )dimzvisual.blocks.0.attn_q.weightc              3   ,   >#    U  H	  oT;   v   M     g 7frT   rb   )r"   r   rn   s     r%   r&   %gguf_mmproj_loader.<locals>.<genexpr><  s     B#Aa6#Ar   )r   r   r   z.attn_z
.attn.qkv..r:   zq.zk.zv.)r   r   osr   basenamesplitextlowerr   dirnamelistdirrz   r)   errorr   r   r   popr0   r   stackr   CLIP_VISION_SD_MAPr   ry   rsplitsplitr   bfloat16float16cat)r   
tenc_fnametenctargetrootfnamerU   extvsd_w1w2attnsrh   k_attnk_namesuffixrn   s                    @r%   gguf_mmproj_loaderr    s   LLEF !!$'J77J'*002Dd#D F77??4 DD!GG$$U+	99;'!4::<'::<MM%  " 6{a;J<}UYTZZ}~	
6{Q;J<G_`aLL>&),@BOPWW\\$q	*FF$7FC #%sww'<=U]]Ssww'>?u}}U%*[["q%A!" 0
1C '#-99;CAaB#ABBB!"(A!6,c):2)>>>&$&EM(9QennU]])f%  ;;=CAaWWS\"%FYYBvh- Bvh- Bvh-   	CF ! Jr8   c                    [         R                  " S5         SSKJn  UR                  5       n[        R                  " U 5      n[        US[        5      S:X  a+  US:X  a  UR                  R                  S:H    O[        S	5      e[        S	5      e[        US
[        5      UR                  l        [        US[        5      UR                  l        [#        US[        5      n[#        US[$        5      n[#        US[&        5      n[)        [+        XVU5      5       HF  u  nu  pnUR-                  5       nXl        Xl        Xl        UR4                  R7                  U5        MH     SUR                  l        [;        U5      UR                  l        SUR                  l        [        US[&        5      UR                  l         [        US[&        5      UR                  l!        [         R                  " S[;        UR4                  5       35        A[D        RF                  " [I        URK                  5       5      5      $ ! [         a    [	        S5      ef = f)NIAttempting to recreate sentencepiece tokenizer from GGUF file metadata...r   sentencepiece_model_pb2z]Please make sure sentencepiece and protobuf are installed.
pip install sentencepiece protobuftokenizer.ggml.modelr   i    r   #Unknown model, can't set tokenizer!ztokenizer.ggml.add_space_prefixz'tokenizer.ggml.remove_extra_whitespacestokenizer.ggml.tokenstokenizer.ggml.scorestokenizer.ggml.token_typeTr  ztokenizer.ggml.eos_token_idztokenizer.ggml.padding_token_id%Created tokenizer with vocab size of )&r   r   sentencepiecer  ImportError
ModelProtor+   rv   r(   r?   trainer_spec
model_typeNotImplementedErrorrB   normalizer_specadd_dummy_prefixremove_extra_whitespacesrK   rA   r   	enumeratezipSentencePiecepiecescoretypepiecesrz   byte_fallbackr)   
vocab_sizemax_sentence_lengtheos_idpad_idr0   
ByteTensorr   SerializeToString)r   
temb_shapemodelspmr4   tokensscorestoktypesidxtokenr  toktyper  s                r%   gguf_tokenizer_loaderr1  Q  s   LL\]|B 


C__T"F/5='''1,%&KLL!"GHH+4V=^`d+eC(3<VEnpt3uC0F$;SAFF$;UCFf&A3GH(1#fh2O(P$$eG
 !!#


%  )Q &*C""%f+C+/C('0MsSC'0QSVWCLL8SZZ8IJKD!6!6!89::S  |z{{|s   H7 7Ic           
         [         R                  " S5        SS KnSS KnSSKJn  [        R                  " U 5      n[        US[        5      nUS:X  a  US:X  a
  SSS	./ / S
.nO[        S5      e[        S5      e[        US[        5      n[        US[        5      n	U" 5       R                  5        V
Vs0 s H  u  pX_M	     nn
n[        [        X5      5       H  u  nu  pUS:X  a  US   R!                  XSS.5        M'  [#        U Vs/ s H  nUU   PM
     sn5      nUS   R!                  [%        US   5      UR'                  U5      R)                  S5      UR)                  SSS9S.5        M     [         R                  " S[%        US   5       S[%        US   5       S35        A[*        R,                  " [/        UR1                  U5      R3                  S5      5      5      $ s  snn
f s  snf )NzBAttempting to recreate tekken tokenizer from GGUF file metadata...r   )bytes_to_unicoder	  gpt2   i   iI r6  )num_vocab_tokensdefault_vocab_size)configvocabspecial_tokensr  r  r     r;  T)rank	token_str
is_controlr:  asciir;   r   )errors)r=  token_bytesr>  z,Created tekken tokenizer with vocab size of z (+r_   )r   r   jsonbase64#transformers.convert_slow_tokenizerr3  r+   rv   r(   r?   r  rK   r   r   r  r  rz   bytesr)   	b64encodedecoder0   r&  r   dumpsencode)r   r(  rC  rD  r3  r4   	model_strr3   r+  r-  rn   rh   decoderr.  r/  r0  chartoks                     r%   gguf_tekken_tokenizer_loaderrO    s   LLUVD__T"F&"8#>IF'/5VT"$D &&KLL!"GHHF$;SAFf&A3GH 0 2 8 8 :; :qt :G;!*3v+@!Aea<!"))E 595459:CM  DM*%//4;;GD ZZ	ZB"  "B LL?DM@R?SSVWZ[_`p[qWrVsstuvDD!1!8!8!ABCC! < :s   2G$G*
c                 6   [         R                  " S5         SSKJn  UR                  5       n[        R                  " U 5      nSUR                  l	        SUR                  l
        SUR                  l        SUR                  l        S	UR                  l        S
UR                  l        SUR                  l        [#        US[$        5      n[#        US[&        5      n[#        US[(        5      nU(       a  U(       a  U(       d  [+        S5      e[-        [/        U5      5       H^  nUR1                  5       nXG   Ul        US:X  a  SUl        SUl        OXg   Ul        XW   Ul        UR8                  R;                  U5        M`     [/        UR8                  5      UR                  l        [         R                  " S[/        UR8                  5       35        A[>        R@                  " [C        URE                  5       5      5      $ ! [         a    [	        S5      ef = f)Nr  r   r  zMPlease install sentencepiece and protobuf.
pip install sentencepiece protobufidentityFr   tsvTi`  z<bos>r  r  r  zMissing tokenizer metadatar<  g        r  )#r   r   r  r  r  r  r+   rv   r  rU   r  r  r  input_formatr!  r#  	bos_piecerK   r?   rA   r   r{   ranger)   r  r  r  r  r   rz   r"  r0   r&  r   r'  )	r   r)  r*  r4   r+  r,  r0  r.  r  s	            r%   gguf_gemma3_tokenizer_loaderrV    s   LL\]lB 


C__T"F)C+0C("#C$)C!%)C"+/C(!(CF$;SAFF$;UCFV%@#FGw566S[!!!#k!8EJEK EJ +EK

%  " #&cjj/CLL8SZZ8IJKD!6!6!89::G  ljkkls   H Hc                 \   [        U SS9u  pUR                  SS 5      nUS;   a|  SnXA;   ac  X   R                  S:X  aQ  [        XU   R                  5      US'   [        R
                  " SU S	35        [        X   [        R                  S
9X'   [        U[        5      nU$ US;   Ga  SnXA;   a  X   R                  S   S:  a~  US:X  a.  X   R                  S:X  a  [        XU   R                  5      US'   OUS:X  a  [        U 5      US'   [        R
                  " SU S	35        [        X   [        R                  S
9X'   US:X  a  [        U[        5      n[        U5      nO[        U[        5      nUS:X  a  [!        USS5      nUS:X  a  [#        U 5      nUR%                  U5        U$  U$ )NTr   ru   >   r   r   ztoken_embd.weightr
  spiece_modelzDequantizing z to prevent runtime OOM.rk   >   r   r   r   r   r   r   i   r   r5  tekken_modelr          r   )r   r   r   r1  r   r   r   r0   r   r   	T5_SD_MAPrO  rV  GEMMA3_SD_MAPr   LLAMA_SD_MAPr   r  update)r   r   r   r}   temb_keyr   s         r%   gguf_clip_loaderra    s   t48IB99Z&D""&>bl00NB!6t\=O=O!PB~OOmH:5MNO,R\OBLB	*2 I1 
C	C&>bl003	Bw2<#5#5#G%A$8HZHZ%[>"!%A$%G>"OOmH:5MNO,R\OBL8M2B(,BL1B7?r2q)B9$T*CIIcN I 	Ir8   )zmodel.diffusion_model.F)"r   r   r0   r+   r   r   opsr   dequantr   r   r   r   r   r7   r(   rK   rQ   r   r\  r^  copyr]  r_  r   r   r   r   r   r  r1  rO  rV  ra  rb   r8   r%   <module>re     s       	 	  4|U)W<	<&]B %''''%A++-$	"
O" ' '	
 '       % m   * & <  %!& !!#   +15   '- 
,@D.;`)DV(;T$r8   