
     3jQ5                        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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Jr  SSKJrJr  SSKJrJr  / 4S jr\" SSS	/5        \" S
SS/5         " S S\R.                  R0                  5      r " S S5      r " S S\5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r\\\\\\S.r g)    N   )GGMLOpsmove_patch_to_device)gguf_sd_loadergguf_clip_loader)is_quantizedis_torch_compatiblec                    [         R                  R                  U / 0 45      n[        US   [        [
        [        45      (       a  US   O/ n[        S U 5       US   5      n[         R                  R                  U/ 0 45      u  pEU=(       d    US14[         R                  U '   U(       a#  X$:w  a  [        R                  " SU  SU 35        g g g )Nr   c              3   P   #    U  H  o[         R                  ;   d  M  Uv   M     g 7f)N)folder_pathsfolder_names_and_paths).0xs     ?/home/wildlama/comfy/ComfyUI/custom_nodes/ComfyUI-GGUF/nodes.py	<genexpr>0update_folder_names_and_paths.<locals>.<genexpr>   s     Rgl.Q.Q)Q11gs   &	&.ggufz)Unknown file list already present on key z: )
r   r   get
isinstancelistsettuplenextloggingwarning)keytargetsbasetargetorig_s         r   update_folder_names_and_pathsr"      s    ..223RAD a4e*<==472DRgRT[\]T^_F1155fr2hGGD04wi/HL'',CC54&QR t    	unet_ggufdiffusion_modelsunet	clip_gguftext_encodersclipc                   n   ^  \ rS rSrSrS
S jrSU 4S jjrU 4S jrSr0 r	SS.U 4S jjr
U 4S jrS	rU =r$ )GGUFModelPatcher#   Fc                    XR                   ;  a  g [        R                  R                  U R                  U5      nU R                   U   n[        U5      (       aN  UR                  U5      n[        XPR                  (       a  U R                  OU R                  5      nXQ4/Ul         GOU R                  =(       d    UnXR                  ;  aE  [        R                  " SSS/5      " UR                  U R                  US9U5      U R                  U'   Ub.  [        R                  R!                  XB["        R$                  SS9nOUR                  ["        R$                  SS9n[        R&                  R)                  XWU5      n[        R*                  R-                  XdR.                  5      nU(       a+  [        R                  R1                  U R                  X5        g [        R                  R3                  U R                  X5        g )N	Dimensionweightinplace_update)devicecopyT)r2   )patchescomfyutilsget_attrmodelr   tor   patch_on_deviceload_deviceoffload_deviceweight_inplace_updatebackupcollections
namedtuplemodel_managementcast_to_devicetorchfloat32loracalculate_weightfloatstochastic_roundingdtypecopy_to_paramset_attr_param)selfr   	device_tor0   r/   r3   
out_weighttemp_weights           r   patch_weight_to_device'GGUFModelPatcher.patch_weight_to_device&   s{   ll"%%djj#6,,s#9-J*7H\H\D4D4DbfbubuvG#*.!1J!77I>N++%#.#9#9+RbGc#dIIT%8%8~INP^$C  $#44CCFW\WdWdkoCp$iiDiA44W3OJ88\\RJKK%%djj#BKK&&tzz3Cr#   c                    > U(       aX  U R                   R                  5        H:  n[        U5      (       a  M  [        US/ 5      n[	        U5      S:  d  M3  / Ul        M<     [        TU ]  XS9$ )Nr3   r   )rL   unpatch_weights)r7   
parametersr	   getattrlenr3   superunpatch_model)rK   rL   rR   pr3   	__class__s        r   rW   GGUFModelPatcher.unpatch_modelE   sa    ZZ**,&q))!!Y3w<!# "AI - w$y$ZZr#   c                 *  > UR                  SS5      S   nU R                  (       d]  X R                  ;   aN  U R                  U   R                  U R                  5      R                  U R
                  5        U R                  U	 [        TU ]  U5        g )N.r   r   )rsplitmmap_releasednamed_modules_to_munmapr8   r:   r;   rV   pin_weight_to_device)rK   r   op_keyrY   s      r   r`   %GGUFModelPatcher.pin_weight_to_deviceQ   sw    C#A&!!f0L0L&L((033D4D4DEHHI\I\],,V4$S)r#   )force_patch_weightsc                  > U R                   (       d(  [        U R                  R                  5       5      U l        [
        TU ]  " USS0UD6  U R                   (       Gde  / nUR                  SS5      S:  a  U R                  R                  5        H  u  pV[        US5      (       a:  [        UR                  SS 5      nXpR                  :X  a  UR                  XV45        MP  [        US5      (       d  Mc  [        UR                  SS 5      nXpR                  :X  d  M  UR                  XV45        M     U(       a|  U R                  U R                  :w  ab  [         R"                  " S[%        U5       S	35        U H9  u  pVUR'                  U R                  5      R'                  U R                  5        M;     SU l         0 U l        g g )
Nrc   Tlowvram_model_memoryr   r/   r1   biaszAttempting to release mmap ())r^   dictr7   named_modulesr_   rV   loadr   itemshasattrrT   r/   r;   appendrf   r:   r   inforU   r8   )	rK   rc   argskwargslinkednmr1   rY   s	           r   rj   GGUFModelPatcher.load\   sq   !!+/

0H0H0J+KD( 	d??? !!!Fzz0!4q8 88>>@DAq(++!(8T!B!%8%88"MM1&1$q&))!(4!@!%8%88"MM1&1$ A $**d.A.AA;CK=JK"DADD))*--d.A.AB # "&D+-D() "r#   c                    > U R                   n[        U l         [        TU ]  " U0 UD6n[        Ul         X0l         [	        U SS5      Ul        [	        U SS5      Ul        U[        :w  a  SUl        U$ )Nr9   Fr^   r   )rY   r+   rV   clonerT   r9   r^   size)rK   ro   rp   src_clsrr   rY   s        r   rv   GGUFModelPatcher.clonez   si    ..)GM4*6*& #D*;UC!$?&&AFr#   )rY   r^   r_   )NF)NT)__name__
__module____qualname____firstlineno__r9   rO   rW   r`   r^   r_   rj   rv   __static_attributes____classcell__)rY   s   @r   r+   r+   #   s=    OD>	[* M .3 . .< r#   r+   c                   >    \ rS rSr\S 5       rSrSrSrSr	S
S jr
S	rg)UnetLoaderGGUF   c                 d    [         R                  " S5       Vs/ s H  oPM     nnSSU400$ s  snf )Nr$   required	unet_namer   get_filename_listsr   
unet_namess      r   INPUT_TYPESUnetLoaderGGUF.INPUT_TYPES   sB    !-!?!?!LM!LAa!L
Mj]
 	
 Ns   -)MODEL	load_unetbootlegzUnet Loader (GGUF)Nc                 J   [        5       nUS;   a  S UR                  l        O6US;   a  X%R                  l        O[        [        U5      UR                  l        US;   a  S UR                  l        O6US;   a  X5R                  l        O[        [        U5      UR                  l        [        R                  " SU5      n[        U5      u  px0 n	[        R                  " [        R                  R                  5      R                  n
SU
;   a  UR                  S0 5      U	S'   [        R                  R                  " U4SSU00U	D6nUc?  [         R"                  " SR%                  U5      5        ['        SR%                  U5      5      e[(        R+                  U5      nXKl        U4$ )	N)defaultN)r   r&   metadatamodel_optionscustom_operationszERROR UNSUPPORTED UNET {}z)ERROR: Could not detect model type of: {})r   Lineardequant_dtyperT   rB   patch_dtyper   get_full_pathr   inspect	signaturer4   sdload_diffusion_model_state_dictrS   r   r   errorformatRuntimeErrorr+   rv   r9   )rK   r   r   r   r9   ops	unet_pathr   extrarp   valid_paramsr7   s               r   r   UnetLoaderGGUF.load_unet   s_   i--'+CJJ$j('4JJ$'.um'DCJJ$++%)CJJ"J&%0JJ"%,UK%@CJJ" !..vyA	"9-	(()Q)QR]]%!&:r!:F:88
2C8
<B
 =MM5<<YGHJQQR[\]] &&u- /xr#    )NNN)rz   r{   r|   r}   classmethodr   RETURN_TYPESFUNCTIONCATEGORYTITLEr   r~   r   r#   r   r   r      s/    
 
 LHH E"r#   r   c                   (    \ rS rSr\S 5       rSrSrg)UnetLoaderGGUFAdvanced   c                     [         R                  " S5       Vs/ s H  oPM     nnSU4/ SQSS04/ SQSS04SSS04S.0$ s  snf )Nr$   r   )r   r   rC   float16bfloat16r   BOOLEANF)r   r   r   r9   r   r   s      r   r   "UnetLoaderGGUFAdvanced.INPUT_TYPES   sk    !-!?!?!LM!LAa!L
M(]"Y\egp[q!r WZcenYop$-	5/A#B	
 	
 Ns   A zUnet Loader (GGUF/Advanced)r   N)rz   r{   r|   r}   r   r   r   r~   r   r#   r   r   r      s    	
 	
 *Er#   r   c                   Z    \ rS rSr\S 5       rSrSrSrSr	\S 5       r
S rS	 rSS
 jrSrg)CLIPLoaderGGUF   c                 v    [         R                  R                  5       nSU R                  5       4US   S   S.0$ )Nr   type)	clip_namer   )nodes
CLIPLoaderr   r   )r   r   s     r   r   CLIPLoaderGGUF.INPUT_TYPES   sD    ++-1135Z(0
 	
r#   )CLIP	load_clipr   zCLIPLoader (GGUF)c                     / nU[         R                  " S5      -  nU[         R                  " S5      -  n[        U5      $ )Nr)   r'   )r   r   sorted)r   filess     r   r    CLIPLoaderGGUF.get_filename_list   s;    //77//<<e}r#   c                     / nU Hi  nUR                  S5      (       a  [        U5      nO3[        R                  R	                  USS9nSU;   a  [        SU S35      eUR                  U5        Mk     U$ )Nr   T)	safe_load
scaled_fp8zZMixing scaled FP8 with GGUF is not supported! Use regular CLIP loader or switch model(s)
(rg   )endswithr   r4   r5   load_torch_fileNotImplementedErrorrm   )rK   
ckpt_paths	clip_datarX   r   s        r   	load_dataCLIPLoaderGGUF.load_data   s    	Azz'""%a([[00d0C2%-  1L  MN  LO  OP  /Q  R  RR   r#   c                     [         R                  R                  UU[        [         R                  R                  5       S.[        R                  " S5      S9n[        R                  UR                  5      Ul
        U$ )N)r   initial_device
embeddings)	clip_typestate_dictsr   embedding_directory)r4   r   load_text_encoder_state_dictsr   r@   text_encoder_offload_devicer   get_folder_pathsr+   rv   patcher)rK   
clip_pathsr   r   r)   s        r   load_patcherCLIPLoaderGGUF.load_patcher   sh    xx55!#%,"'"8"8"T"T"V #/"?"?"M 6 
 (--dll;r#   c                 "   [         R                  " SU5      n[        [        R                  R
                  UR                  5       [        R                  R
                  R                  5      nU R                  U/X@R                  U/5      5      4$ Nr)   
r   r   rT   r4   r   CLIPTypeupperSTABLE_DIFFUSIONr   r   )rK   r   r   	clip_pathr   s        r   r   CLIPLoaderGGUF.load_clip   se     ..vyA	EHH--tzz|UXX=N=N=_=_`	!!9+y..):UVXXr#   r   Nstable_diffusion)rz   r{   r|   r}   r   r   r   r   r   r   r   r   r   r   r~   r   r#   r   r   r      sL    
 
 LHHE 
Yr#   r   c                   .    \ rS rSr\S 5       rSrS rSrg)DualCLIPLoaderGGUF   c                 |    [         R                  R                  5       nU R                  5       4nSUUUS   S   S.0$ )Nr   r   )
clip_name1
clip_name2r   )r   DualCLIPLoaderr   r   )r   r   file_optionss      r   r   DualCLIPLoaderGGUF.INPUT_TYPES   sL    ##//1++-0**Z(0
 	
r#   zDualCLIPLoader (GGUF)c                 R   [         R                  " SU5      n[         R                  " SU5      nXE4n[        [        R                  R
                  UR                  5       [        R                  R
                  R                  5      nU R                  XgU R                  U5      5      4$ r   r   )rK   r   r   r   
clip_path1
clip_path2r   r   s           r   r   DualCLIPLoaderGGUF.load_clip  s{    !//
C
!//
C
 -
EHH--tzz|UXX=N=N=_=_`	!!*
9STVVr#   r   N	rz   r{   r|   r}   r   r   r   r   r~   r   r#   r   r   r      s!    	
 	
 $EWr#   r   c                   2    \ rS rSr\S 5       rSrSS jrSrg)TripleCLIPLoaderGGUFi  c                 4    U R                  5       4nSUUUS.0$ )Nr   )r   r   
clip_name3r   r   r   s     r   r    TripleCLIPLoaderGGUF.INPUT_TYPES  s.    ++-0***
 	
r#   zTripleCLIPLoader (GGUF)c                    [         R                  " SU5      n[         R                  " SU5      n[         R                  " SU5      nXVU4n[        [        R                  R
                  UR                  5       [        R                  R
                  R                  5      n	U R                  XU R                  U5      5      4$ r   r   )
rK   r   r   r   r   r   r   
clip_path3r   r   s
             r   r   TripleCLIPLoaderGGUF.load_clip!  s    !//
C
!//
C
!//
C
 j9
EHH--tzz|UXX=N=N=_=_`	!!*
9STVVr#   r   N)sd3r   r   r#   r   r   r     s!    
 
 &EWr#   r   c                   2    \ rS rSr\S 5       rSrSS jrSrg)QuadrupleCLIPLoaderGGUFi)  c                 6    U R                  5       4nSUUUUS.0$ )Nr   )r   r   r   
clip_name4r   r   s     r   r   #QuadrupleCLIPLoaderGGUF.INPUT_TYPES*  s1    ++-0&&&&	
 	r#   zQuadrupleCLIPLoader (GGUF)c                    [         R                  " SU5      n[         R                  " SU5      n[         R                  " SU5      n[         R                  " SU5      n	XgX4n
[        [        R                  R
                  UR                  5       [        R                  R
                  R                  5      nU R                  XU R                  U
5      5      4$ r   r   )rK   r   r   r   r   r   r   r   r   
clip_path4r   r   s               r   r   !QuadrupleCLIPLoaderGGUF.load_clip8  s    !//
C
!//
C
!//
C
!//
C
 jE
EHH--tzz|UXX=N=N=_=_`	!!*
9STVVr#   r   Nr   r   r   r#   r   r   r   )  s!    	 	 )EWr#   r   )r   r   r   r   r   r   )!rB   r   r   r>   r   comfy.sdr4   
comfy.loracomfy.floatcomfy.utilscomfy.model_patchercomfy.model_managementr   r   r   r   loaderr   r   dequantr   r	   r"   model_patcherModelPatcherr+   r   r   r   r   r   r   NODE_CLASS_MAPPINGSr   r#   r   <module>r     s                . 4 6/1 	S k,>+G H kOV+D Ebu**77 bH1 1f*^ *3Y 3YjW W,W> W,Wn W2 %$,064 r#   