Ë
    µŒj­"  ã                   óv   — d dl Z d dl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ZdZd	Z G d
„ de	«      Zy)é    N)ÚAnyÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚLLM)Ú
ConfigDict)Úenforce_stop_tokenszgoogle/flan-t5-largeútext2text-generation)r   útext-generationÚsummarizationc                   óP  — e Zd ZU dZdZeed<   eZe	ed<   	 dZ
ee   ed<   	 dZee   ed<   	  ed¬«      Ze	 	 	 	 	 	 	 dde	d	e	d
ee   dee	   dee   dee   dee   dee   dee   dedefd„«       Zedee	ef   fd„«       Zede	fd„«       Z	 	 dde	deee	      dee   dede	f
d„Zy)ÚWeightOnlyQuantPipelinea  Weight only quantized model.

    To use, you should have the `intel-extension-for-transformers` packabge and
        `transformers` package installed.
    intel-extension-for-transformers:
        https://github.com/intel/intel-extension-for-transformers

    Example using from_model_id:
        .. code-block:: python

            from langchain_community.llms import WeightOnlyQuantPipeline
            from intel_extension_for_transformers.transformers import (
                WeightOnlyQuantConfig
            )
            config = WeightOnlyQuantConfig
            hf = WeightOnlyQuantPipeline.from_model_id(
                model_id="google/flan-t5-large",
                task="text2text-generation"
                pipeline_kwargs={"max_new_tokens": 10},
                quantization_config=config,
            )
    Example passing pipeline in directly:
        .. code-block:: python

            from langchain_community.llms import WeightOnlyQuantPipeline
            from intel_extension_for_transformers.transformers import (
                AutoModelForSeq2SeqLM
            )
            from intel_extension_for_transformers.transformers import (
                WeightOnlyQuantConfig
            )
            from transformers import AutoTokenizer, pipeline

            model_id = "google/flan-t5-large"
            tokenizer = AutoTokenizer.from_pretrained(model_id)
            config = WeightOnlyQuantConfig
            model = AutoModelForSeq2SeqLM.from_pretrained(
                model_id,
                quantization_config=config,
            )
            pipe = pipeline(
                "text-generation",
                model=model,
                tokenizer=tokenizer,
                max_new_tokens=10,
            )
            hf = WeightOnlyQuantPipeline(pipeline=pipe)
    NÚpipelineÚmodel_idÚmodel_kwargsÚpipeline_kwargsÚallow)ÚextraÚtaskÚdeviceÚ
device_mapÚload_in_4bitÚload_in_8bitÚquantization_configÚkwargsÚreturnc
           	      óÎ  — |� t        |t        «      r|dkD  rt        d«      ‚t        j                  j                  d«      €t        d«      ‚	 ddlm}m} ddl	m
} dd	lm} dd
lm} t        |t        «      r&|dk\  r! |«       st        d«      ‚dt        |«      z   }nt        |t        «      r|dk  rd}|€|€d}|xs i } |j                   |fi |¤Ž}	 |dk(  r |j                   |f|||	d|dœ|¤Ž}n4|dv r |j                   |f|||	d|dœ|¤Ž}nt        d|› dt"        › d�«      ‚d|v r)|j%                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ }}}|xs i } |d|||||dœ|¤Ž}|j&                  t"        vr t        d|j&                  › dt"        › d�«      ‚ | d||||dœ|
¤ŽS # t        $ r t        d«      ‚w xY w# t        $ r}t        d|› d�«      |‚d}~ww xY wc c}}w )z5Construct the pipeline object from model_id and task.Néÿÿÿÿz7`Device` and `device_map` cannot be set simultaneously!Útorchz;Weight only quantization pipeline only support PyTorch now!r   )ÚAutoModelForCausalLMÚAutoModelForSeq2SeqLM)Úis_ipex_available)ÚAutoTokenizer)r   z“Could not import transformers python package. Please install it with `pip install transformers` and `pip install intel-extension-for-transformers`.z)Don't find out Intel GPU on this machine!zxpu:Úcpur   F)r   r   r   Úuse_llm_runtimer   )r   r   úGot invalid task ú, currently only ú are supportedzCould not load the z# model due to missing dependencies.Útrust_remote_code)r   ÚmodelÚ	tokenizerr   r   )r   r   r   r   © )Ú
isinstanceÚintÚ
ValueErrorÚ	importlibÚutilÚ	find_specÚ-intel_extension_for_transformers.transformersr!   r"   Ú,intel_extension_for_transformers.utils.utilsr#   Útransformersr$   r   ÚImportErrorÚstrÚfrom_pretrainedÚVALID_TASKSÚitemsr   )Úclsr   r   r   r   r   r   r   r   r   r   r!   r"   r#   r$   Úhf_pipelineÚ_model_kwargsr,   r+   ÚeÚkÚvÚ_pipeline_kwargsr   s                           ú{/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/llms/weight_only_quantization.pyÚfrom_model_idz%WeightOnlyQuantPipeline.from_model_idO   s¯  € ð Ð!¤z°&¼#Ô'>À6ÈBÂ;ÜÐVÓWÐWÜ�>‰>×#Ñ# GÓ,Ð4ÜØMóð ð	÷õ WÝ2Ý<ô �fœcÔ" v°¢{Ù$Ô&Ü Ð!LÓMÐMØ¤# f£+Ñ-‰JÜ˜¤Ô$¨°!ªØˆFàˆ>ØÐ!Ø"�
à$Ò*¨ˆØ1�M×1Ñ1°(ÑL¸mÑLˆ	ð	ØÐ(Ò(Ø<Ð,×<Ñ<Øðà!-Ø!-Ø(;Ø$)Ø)ñð $ñ‘ð ÐBÑBØ=Ð-×=Ñ=Øðà!-Ø!-Ø(;Ø$)Ø)ñð $ñ‘ô !Ø'¨ vð .&Ü&1 ]°.ðBóð ð  -Ñ/à!.×!4Ñ!4Ô!6ôÙ!6™˜˜A¸!Ð?RÓ:R��1‘Ð!6ð ñ ð +Ò0¨bÐÙð 
ØØØØØ&ñ
ð ñ
ˆð �=‰=¤Ñ+ÜØ# H§M¡M ?ð 3"Ü"- ¨nð>óð ñ ð 
ØØØ&Ø,ñ	
ð
 ñ
ð 	
øôK ò 	ÜðFóð ð	ûô\ ò 	ÜØ% d VÐ+NÐOóàðûð	üós1   ÁF( ÃAG  Ä?G!ÅG!Æ(F=Ç 	GÇ	GÇGc                 óJ   — | j                   | j                  | j                  dœS )zGet the identifying parameters.©r   r   r   rF   ©Úselfs    rC   Ú_identifying_paramsz+WeightOnlyQuantPipeline._identifying_paramsº   s'   € ð Ÿ™Ø ×-Ñ-Ø#×3Ñ3ñ
ð 	
ó    c                  ó   — y)zReturn type of llm.Úweight_only_quantizationr-   rG   s    rC   Ú	_llm_typez!WeightOnlyQuantPipeline._llm_typeÃ   s   € ð *rJ   ÚpromptÚstopÚrun_managerc                 ó|  — | j                  |«      }| j                   j                  dk(  r|d   d   t        |«      d }nn| j                   j                  dk(  r	|d   d   }nL| j                   j                  dk(  r	|d   d   }n*t        d| j                   j                  › d	t        › d
�«      ‚|rt        ||«      }|S )ab  Call the HuggingFace model and return the output.

        Args:
            prompt: The prompt to use for generation.
            stop: A list of strings to stop generation when encountered.

        Returns:
            The generated text.

        Example:
            .. code-block:: python

                from langchain_community.llms import WeightOnlyQuantPipeline
                llm = WeightOnlyQuantPipeline.from_model_id(
                    model_id="google/flan-t5-large",
                    task="text2text-generation",
                )
                llm.invoke("This is a prompt.")
        r   r   Úgenerated_textNr   r   Úsummary_textr'   r(   r)   )r   r   Úlenr0   r:   r
   )rH   rN   rO   rP   r   ÚresponseÚtexts          rC   Ú_callzWeightOnlyQuantPipeline._callÈ   sÉ   € ð4 —=‘= Ó(ˆØ�=‰=×ÑÐ!2Ò2à˜A‘;Ð/Ñ0´°V³°Ð?‰DØ�]‰]×ÑÐ#9Ò9Ø˜A‘;Ð/Ñ0‰DØ�]‰]×Ñ ?Ò2Ø˜A‘;˜~Ñ.‰DäØ# D§M¡M×$6Ñ$6Ð#7ð 8"Ü"- ¨nð>óð ñ ô ' t¨TÓ2ˆDØˆrJ   )r   NNNFFN)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__annotations__ÚDEFAULT_MODEL_IDr   r8   r   r   Údictr   r	   Úmodel_configÚclassmethodr/   Úboolr   rD   Úpropertyr   rI   rM   r   r   rW   r-   rJ   rC   r   r      sœ  … ñ/ðb €HˆcÓØ$€HˆcÓ$Ø*à#'€L�(˜4‘.Ó'Ø1à&*€O�X˜d‘^Ó*Ø4áØô€Lð ð
 !#Ø$(Ø'+Ø*.Ø',Ø',Ø-1ñh
àðh
ð ðh
ð ˜‘ð	h
ð
 ˜S‘Mðh
ð ˜t‘nðh
ð " $™ðh
ð ˜t‘nðh
ð ˜t‘nðh
ð & c™]ðh
ð ðh
ð 
òh
ó ðh
ðT ð
 W¨S°#¨XÑ%6ò 
ó ð
ð ð*˜3ò *ó ð*ð %)Ø:>ñ	+àð+ð �t˜C‘yÑ!ð+ð Ð6Ñ7ð	+ð
 ð+ð 
ô+rJ   r   )r1   Útypingr   r   r   r   Ú langchain_core.callbacks.managerr   Ú#langchain_core.language_models.llmsr   Úpydanticr	   Úlangchain_community.llms.utilsr
   r]   ÚDEFAULT_TASKr:   r   r-   rJ   rC   Ú<module>ri      s8   ðÛ ß /Ó /å EÝ 3Ý å >à)Ð Ø%€ØJ€ôd˜cõ drJ   