
     `i                         d dl mZ ddlmZ erddlmZ ddlmZmZm	Z	 ddl
mZ  e            rd dlZ e	j        e          Z G d	 d
e          ZdS )    )TYPE_CHECKING   )HfQuantizer   )PreTrainedModel)is_auto_round_availableis_torch_availablelogging)QuantizationConfigMixinNc                   t     e Zd ZdZdZdgZdef fdZd Zdd
Z	ddZ
ddZed	efd            ZddZ xZS )AutoRoundQuantizerzW
    Quantizer of the AutoRound method. (https://huggingface.co/papers/2309.05516)
    T
auto_roundquantization_configc                 <     t                      j        |fi | d S N)super__init__)selfr   kwargs	__class__s      /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/transformers/quantizers/quantizer_auto_round.pyr   zAutoRoundQuantizer.__init__)   s)    ,7777777    c                 t    |                     d          | _        t                      st          d          d S )N
device_mapzbLoading an AutoRound quantized model requires auto-round library (`pip install 'auto-round>=0.5'`))getr   r   ImportError)r   argsr   s      r   validate_environmentz'AutoRoundQuantizer.validate_environment,   sB     **\22&(( 	t  	 	r   dtypetorch.dtypereturnc                 V    |&t           j        }t                              d           |S )NzMLoading the model in `torch.bfloat16`. To overwrite it, set `dtype` manually.)torchbfloat16loggerinfo)r   r   s     r   update_dtypezAutoRoundQuantizer.update_dtype3   s&    =NEKKghhhr   modelr   c                     |j         j        dk    rt                              d           ddlm}m} | j        r( || j                  } |||          \  }}|| _	        d S d S )N	input_idszRAutoRound offers only limited support for models that are not strictly text-based.r   )convert_hf_modelinfer_target_device)
r   main_input_namer%   warning"auto_round.inference.convert_modelr+   r,   pre_quantizedr   used_backends)r   r(   r   r+   r,   target_devicer1   s          r   $_process_model_before_weight_loadingz7AutoRoundQuantizer._process_model_before_weight_loading9   s    ?*k99NNoppp\\\\\\\\ 	///@@M#3#3E=#I#I E=!.D	/ 	/r   c                 `    | j         rddlm}  ||| j                   d S t	          d          )Nr   )	post_initz+AutoRound only sports pre-quantized models.)r0   r/   r5   r1   
ValueError)r   r(   r   r5   s       r   #_process_model_after_weight_loadingz6AutoRoundQuantizer._process_model_after_weight_loadingC   sJ     	LDDDDDDIeT/00000JKKKr   c                     dS )NF )r   s    r   is_trainablezAutoRoundQuantizer.is_trainableK   s    ur   Nc                     dS )NTr9   )r   safe_serializations     r   is_serializablez"AutoRoundQuantizer.is_serializableO   s    tr   )r   r    r!   r    )r(   r   r   )__name__
__module____qualname____doc__requires_calibrationrequired_packagesr   r   r   r'   r3   r7   propertyboolr:   r=   __classcell__)r   s   @r   r   r       s         
  %8,C 8 8 8 8 8 8     / / / /L L L L d    X       r   r   )typingr   baser   modeling_utilsr   utilsr   r	   r
   utils.quantization_configr   r#   
get_loggerr>   r%   r   r9   r   r   <module>rM      s    !                  1000000 H H H H H H H H H H ? ? ? ? ? ?  LLL		H	%	%1 1 1 1 1 1 1 1 1 1r   