
     `i5                        d dl Z d dlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd	l m!Z! dd
l"m#Z# ddl$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZG i de%de)de+d e7d!e!d"e?d#eAd$e5d%e/d&e9d'e;d(e-d)e1d*eEd+e'd,eGd-eCe3e#e=d.ZHi dededed%ed ed!e	d"ed#ed$ed'ed(ed)ed&ed*ed+ed,ed-eee
ed.ZI ejJ        eK          ZL G d/ d0          ZM G d1 d2          ZNd3eOfd4ZPd5eOfd6ZQd7 ZRdS )8    N)OptionalUnion   )
AutoConfig)logging)
AqlmConfigAutoRoundConfig	AwqConfigBitNetQuantConfigBitsAndBytesConfigCompressedTensorsConfig
EetqConfigFbgemmFp8ConfigFineGrainedFP8ConfigFPQuantConfig
GPTQConfigHiggsConfig	HqqConfigMxfp4ConfigQuantizationConfigMixinQuantizationMethodQuantoConfigQuarkConfig
SpQRConfigTorchAoConfig
VptqConfig   )HfQuantizer)AqlmHfQuantizer)AutoRoundQuantizer)AwqQuantizer)BitNetHfQuantizer)Bnb4BitHfQuantizer)Bnb8BitHfQuantizer)CompressedTensorsHfQuantizer)EetqHfQuantizer)FbgemmFp8HfQuantizer)FineGrainedFP8HfQuantizer)FPQuantHfQuantizer)GptqHfQuantizer)HiggsHfQuantizer)HqqHfQuantizer)Mxfp4HfQuantizer)QuantoHfQuantizer)QuarkHfQuantizer)SpQRHfQuantizer)TorchAoHfQuantizer)VptqHfQuantizerawqbitsandbytes_4bitbitsandbytes_8bitgptqaqlmquantoquarkfp_quanteetqhiggshqqzcompressed-tensors
fbgemm_fp8torchaobitnetvptqspqr)fp8z
auto-roundmxfp4c                   D    e Zd ZdZedefd            Zed             ZdS )AutoQuantizationConfigz
    The Auto-HF quantization config class that takes care of automatically dispatching to the correct
    quantization config given a quantization config stored in a dictionary.
    quantization_config_dictc           	         |                     d          }|                     dd          s|                     dd          r*|                     dd          rdnd}t          j        |z   }n|t          d          |t          vr9t          d| d	t          t                                                               t          |         }|                    |          S )
Nquant_methodload_in_8bitFload_in_4bit_4bit_8bitThe model's quantization config from the arguments has no `quant_method` attribute. Make sure that the model has been correctly quantizedUnknown quantization type, got  - supported types are: )	getr   BITS_AND_BYTES
ValueError AUTO_QUANTIZATION_CONFIG_MAPPINGlistAUTO_QUANTIZER_MAPPINGkeys	from_dict)clsrG   rI   suffix
target_clss        p/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/quantizers/auto.pyrX   z AutoQuantizationConfig.from_dicty   s   /33NCC#''>> 	BZB^B^_motBuBu 	 8 < <^U S S`WWY`F-<vELL! \   ???:, : :/446677: :  
 6lC
##$<===    c                     t          j        |fi |}t          |dd           t          d| d          |j        }|                     |          } |j        di | |S )Nquantization_configz)Did not found a `quantization_config` in z2. Make sure that the model is correctly quantized. )r   from_pretrainedgetattrrS   r_   rX   update)rY   pretrained_model_name_or_pathkwargsmodel_configrG   r_   s         r\   ra   z&AutoQuantizationConfig.from_pretrained   s    !12OZZSYZZ<!6==E N<Y  N  N  N   $0#C !mm,DEE"",,V,,,""r]   N)__name__
__module____qualname____doc__classmethoddictrX   ra   r`   r]   r\   rF   rF   s   s`         
 > > > > [>( 
# 
# [
# 
# 
#r]   rF   c                       e Zd ZdZedeeef         fd            Zed             Z	edeeef         de
e         fd            Zed             ZdS )	AutoHfQuantizerz
     The Auto-HF quantizer class that takes care of automatically instantiating to the correct
    `HfQuantizer` given the `QuantizationConfig`.
    r_   c           	      b   t          |t                    rt                              |          }|j        }|t
          j        k    r|j        r|dz  }n|dz  }|t          vr9t          d| dt          t                                                               t          |         } ||fi |S )NrM   rL   rO   rP   )
isinstancerl   rF   rX   rI   r   rR   rJ   rV   rS   rU   rW   )rY   r_   re   rI   r[   s        r\   from_configzAutoHfQuantizer.from_config   s     )400 	X"8"B"BCV"W"W*7 -<<<"/ (''555:, : :/446677: :  
 ,L9
z-88888r]   c                 P    t          j        |fi |}|                     |          S )N)rF   ra   rq   )rY   rd   re   r_   s       r\   ra   zAutoHfQuantizer.from_pretrained   s0    4DEbmmflmm2333r]   quantization_config_from_argsc           	          |d}nd}t          |t                    rDt          |t                    rt          j        |          }nt                              |          }|D|j        j        |j        j        k    r*t          d|j        j         d|j        j         d          t          |t          t          t          t          t          t          f          ri|g|                                }|                                D ]\  }}t          |||           |dt!          |                                           dz  }|dk    r*t          |t                    st%          j        |           nt(                              |           |S )	z
        handles situations where both quantization_config from args and quantization_config from model config are present.
        NzYou passed `quantization_config` or equivalent parameters to `from_pretrained` but the model you're loading already has a `quantization_config` attribute. The `quantization_config` from the model will be used. zThe model is quantized with z but you are passing a z| config. Please make sure to pass the same quantization config class to `from_pretrained` with different loading attributes.z"However, loading attributes (e.g. z]) will be overwritten with the one you passed to `from_pretrained`. The rest will be ignored.)rp   rl   r	   rX   rF   	__class__rg   rS   r   r
   r   r   r   get_loading_attributesitemssetattrrU   rW   warningswarnloggerinfo)rY   r_   rs   warning_msgloading_attr_dictattrvals          r\   merge_quantization_configsz*AutoHfQuantizer.merge_quantization_configs   s    )4y K
 K)400 	\7II \&5&?@S&T&T##&<&F&FGZ&[&[# *5#-6:W:a:jjjF/B/L/U F F  oL  oV  o_ F F F   #YJacno 	~
 .9 = T T V V.4466 8 8	c+T37777  ~EVE[E[E]E]@^@^  ~  ~  ~  ~K"Z0C[%Q%QM+&&&& KK$$$""r]   c           	         |                      dd           }|                      dd          s|                      dd          r*|                      dd          rdnd}t          j        |z   }n|t          d          |t          vrGt
                              d| d	t          t          	                                           d
           dS dS )NrI   rJ   FrK   rL   rM   rN   rO   rP   z~. Hence, we will skip the quantization. To remove the warning, you can delete the quantization_config attribute in config.jsonT)
rQ   r   rR   rS   rT   r|   warningrU   rV   rW   )rG   rI   rZ   s      r\   supports_quant_methodz%AutoHfQuantizer.supports_quant_method   s   /33NDII#''>> 	BZB^B^_motBuBu 	 8 < <^U S S`WWY`F-<vELL! \   ???NNi, i i/446677i i i  
 5tr]   N)rg   rh   ri   rj   rk   r   r   rl   rq   ra   r   r   staticmethodr   r`   r]   r\   rn   rn      s         
 9e4KT4Q.R 9 9 9 [90 4 4 [4 2#"4)@#@A2# (00G'H2# 2# 2# [2#h   \  r]   rn   methodc                       fd}|S )z-Register a custom quantization configuration.c                     t           v rt          d d          t          | t                    st	          d          | t           <   | S )NzConfig '' already registeredz*Config must extend QuantizationConfigMixin)rT   rS   
issubclassr   	TypeError)rY   r   s    r\   register_config_fnz8register_quantization_config.<locals>.register_config_fn  s\    555DDDDEEE#677 	JHIII36(0
r]   r`   )r   r   s   ` r\   register_quantization_configr   
  s$         r]   namec                       fd}|S )zRegister a custom quantizer.c                     t           v rt          d d          t          | t                    st          d          | t           <   | S )NzQuantizer 'r   z!Quantizer must extend HfQuantizer)rV   rS   r   r   )rY   r   s    r\   register_quantizer_fnz1register_quantizer.<locals>.register_quantizer_fn  s[    )))E4EEEFFF#{++ 	B@AAA'*t$
r]   r`   )r   r   s   ` r\   register_quantizerr     s$         ! r]   c                 n   t          | d          }|r!t                              | j                  sd}|s|Q|r&t                              | j        |          | _        n|| _        t                              | j        |          }	nd }	|	|	                    |||||           |	                    |          }|	                    |          }|		                    |           } |	
                    |           } t          |	j        dd          s |	j        j        }
t          |
d|
          |d<   |	| ||fS )Nr_   F)pre_quantized)dtypefrom_tf	from_flax
device_mapweights_only
dequantizevaluequant)hasattrrn   r   r_   r   rq   validate_environmentupdate_dtypeupdate_device_mapupdate_tp_planupdate_ep_planrb   rI   )configr_   r   r   r   r   r   
user_agentr   hf_quantizerrI   s              r\   get_hf_quantizerr   *  sq   F$9::M _BB6C]^^  +7 	=)8)S)S*,?* *F&& *=F&&22&' 3 
 

 ))!% 	* 	
 	
 	
 ))%00!33J??
,,V44,,V44 |7uMM 	O';HL"),"N"NJw
22r]   )Srz   typingr   r   models.auto.configuration_autor   utilsr   utils.quantization_configr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   baser   quantizer_aqlmr   quantizer_auto_roundr    quantizer_awqr!   quantizer_bitnetr"   quantizer_bnb_4bitr#   quantizer_bnb_8bitr$   quantizer_compressed_tensorsr%   quantizer_eetqr&   quantizer_fbgemm_fp8r'   quantizer_finegrained_fp8r(   quantizer_fp_quantr)   quantizer_gptqr*   quantizer_higgsr+   quantizer_hqqr,   quantizer_mxfp4r-   quantizer_quantor.   quantizer_quarkr/   quantizer_spqrr0   quantizer_torchaor1   quantizer_vptqr2   rV   rT   
get_loggerrg   r|   rF   rn   strr   r   r   r`   r]   r\   <module>r      sM    " " " " " " " " 7 7 7 7 7 7                                                   .       + + + + + + 4 4 4 4 4 4 ' ' ' ' ' ' / / / / / / 2 2 2 2 2 2 2 2 2 2 2 2 F F F F F F + + + + + + 6 6 6 6 6 6 @ @ @ @ @ @ 2 2 2 2 2 2 + + + + + + - - - - - - ) ) ) ) ) ) - - - - - - / / / / / / - - - - - - + + + + + + 1 1 1 1 1 1 + + + + + +	<+ + O	
 O   " O  
> 6 & !   O!" O#$ %$)   .$	9$+$ +$ J	$
 J$ J$ l$ [$ $ 
9$ 1$ /$ [$ }$ $  J!$" J#$$  !)$ $ $  . 
	H	%	%&# &# &# &# &# &# &# &#Rk k k k k k k k\     !S ! ! ! ! %3 %3 %3 %3 %3r]   