§
    Þ˜ºh  ã                   óÊ   — d dl Z d dlmZ d dlmZ ddlmZ erddlmZ ddl	m
Z
 dd	lmZ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 )é    N)ÚTYPE_CHECKING)Úversioné   )ÚHfQuantizeré   )ÚPreTrainedModel)Úreplace_with_aqlm_linear)Úis_accelerate_availableÚis_aqlm_availableÚis_torch_availableÚlogging)ÚQuantizationConfigMixinc                   ó|   ‡ — e Zd ZdZdZdgZd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 )ÚAqlmHfQuantizerzS
    Quantizer of the AQLM method. Enables the loading of prequantized models.
    TÚaqlmNÚquantization_configc                 óJ   •—  t          ¦   «         j        |fi |¤Ž || _        d S ©N)ÚsuperÚ__init__r   )Úselfr   ÚkwargsÚ	__class__s      €ún/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/transformers/quantizers/quantizer_aqlm.pyr   zAqlmHfQuantizer.__init__-   s1   ø€ Ø�‰ŒÔÐ,Ð7Ð7°Ð7Ð7Ð7Ø#6ˆÔ Ð Ð ó    c                 óz   — t          ¦   «         st          d¦  «        ‚t          ¦   «         st          d¦  «        ‚d S )NzGUsing `aqlm` quantization requires Accelerate: `pip install accelerate`zDUsing `aqlm` quantization requires AQLM: `pip install aqlm[gpu,cpu]`)r
   ÚImportErrorr   )r   Úargsr   s      r   Úvalidate_environmentz$AqlmHfQuantizer.validate_environment1   sJ   € Ý&Ñ(Ô(ð 	iÝÐgÑhÔhÐhå Ñ"Ô"ð 	fÝÐdÑeÔeÐeð	fð 	fr   Údtypeútorch.dtypeÚreturnc                 óà   — |€kt           j                             ¦   «         r't           j        }t                               d¦  «         n&t           j        }t                               d¦  «         |S )NzCUDA available. Assuming AQLM inference on GPU and loading the model in `torch.float16`. To overwrite it, set `dtype` manually.z„CUDA is unavailable. Assuming AQLM inference on CPU and loading the model in `torch.float32`. To overwrite it, set `dtype` manually.)ÚtorchÚcudaÚis_availableÚfloat16ÚloggerÚinfoÚfloat32)r   r    s     r   Úupdate_dtypezAqlmHfQuantizer.update_dtype8   sq   € Øˆ=ÝŒz×&Ò&Ñ(Ô(ð 	Ýœ�Ý—’ð Vñô ð ð õ œ�Ý—’ð [ñô ð ð ˆr   Úmodelr   c                 ój   — t          || j        | j        j        ¬¦  «         | j        |j        _        d S )N)r   Úlinear_weights_not_to_quantize)r	   r   r.   Úconfig©r   r,   r   s      r   Ú$_process_model_before_weight_loadingz4AqlmHfQuantizer._process_model_before_weight_loadingF   sB   € õ
 	!ØØ $Ô 8Ø+/Ô+CÔ+bð	
ñ 	
ô 	
ð 	
ð
 ,0Ô+CˆŒÔ(Ð(Ð(r   c                 ó   — |S r   © r0   s      r   Ú#_process_model_after_weight_loadingz3AqlmHfQuantizer._process_model_after_weight_loadingR   s   € Øˆr   c                 ó  — t          j        t          j                              d¦  «        ¦  «        t          j        d¦  «        k    }|rdS t                               dt          j                              d¦  «        › d�¦  «         dS )Nr   z1.0.2Tz$Currently installed `aqlm` version (zw) doesn't support training. If you wish to train a quantized model, please update `aqlm` with `pip install aqlm>=1.0.2`F)r   ÚparseÚ	importlibÚmetadatar(   Úwarning)r   Úaqlm_supports_trainings     r   Úis_trainablezAqlmHfQuantizer.is_trainableU   s‹   € å!(¤­yÔ/A×/IÒ/IÈ&Ñ/QÔ/QÑ!RÔ!RÕV]ÔVcÐdkÑVlÔVlÒ!lÐØ!ð 	Ø�4å�NŠNð SµyÔ7I×7QÒ7QÐRXÑ7YÔ7Yð  Sð  Sð  Sñô ð ð �5r   c                 ó   — dS )NTr3   )r   Úsafe_serializations     r   Úis_serializablezAqlmHfQuantizer.is_serializable`   s   € Øˆtr   )r    r!   r"   r!   )r,   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrequires_calibrationÚrequired_packagesÚoptimum_quantizerr   r   r   r+   r1   r4   ÚpropertyÚboolr;   r>   Ú__classcell__)r   s   @r   r   r   $   sû   ø€ € € € € ðð ð  ÐØ˜ÐØÐð7Ð,Cð 7ð 7ð 7ð 7ð 7ð 7ðfð fð fðð ð ð ð
Dà ð
Dð 
Dð 
Dð 
Dðð ð ð ð ð˜dð ð ð ñ „Xððð ð ð ð ð ð ð r   r   )r7   Útypingr   Ú	packagingr   Úbaser   Úmodeling_utilsr   Úintegrationsr	   Úutilsr
   r   r   r   Úutils.quantization_configr   r$   Ú
get_loggerr?   r(   r   r3   r   r   ú<module>rQ      s  ðð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ð ð 1Ø0Ð0Ð0Ð0Ð0Ð0à 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ð ÐÑÔð Ø€L€L€Là	ˆÔ	˜HÑ	%Ô	%€ð=ð =ð =ð =ð =�kñ =ô =ð =ð =ð =r   