§
    šŠtjc5  ã                  óö   — d dl mZ d dlZd dlZd dl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mZmZ d dlmZ d	Zd
ZdZdZ ej        e¦  «        Z eddd¬¦  «         G d„ de¦  «        ¦   «         ZdS )é    )ÚannotationsN)ÚAnyÚIteratorÚListÚMappingÚOptional)Ú
deprecated)ÚCallbackManagerForLLMRun)ÚBaseLLM)Ú
GenerationÚGenerationChunkÚ	LLMResult)Ú
ConfigDictÚgpt2útext-generation)útext2text-generationr   ÚsummarizationÚtranslationé   z0.0.37z1.0z)langchain_huggingface.HuggingFacePipeline)ÚsinceÚremovalÚalternative_importc                  óì   — e Zd ZU dZdZded<   eZded<   	 dZded<   	 dZ	ded	<   	 e
Zd
ed<   	  ed¬¦  «        Zeddddde
fd'd„¦   «         Zed(d„¦   «         Zed)d„¦   «         Z	 	 d*d+d#„Z	 	 d*d,d&„ZdS )-ÚHuggingFacePipelinea\  HuggingFace Pipeline API.

    To use, you should have the ``transformers`` python package installed.

    Only supports `text-generation`, `text2text-generation`, `summarization` and
    `translation`  for now.

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

            from langchain_community.llms import HuggingFacePipeline
            hf = HuggingFacePipeline.from_model_id(
                model_id="gpt2",
                task="text-generation",
                pipeline_kwargs={"max_new_tokens": 10},
            )
    Example passing pipeline in directly:
        .. code-block:: python

            from langchain_community.llms import HuggingFacePipeline
            from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline

            model_id = "gpt2"
            tokenizer = AutoTokenizer.from_pretrained(model_id)
            model = AutoModelForCausalLM.from_pretrained(model_id)
            pipe = pipeline(
                "text-generation", model=model, tokenizer=tokenizer, max_new_tokens=10
            )
            hf = HuggingFacePipeline(pipeline=pipe)
    Nr   ÚpipelineÚstrÚmodel_idúOptional[dict]Úmodel_kwargsÚpipeline_kwargsÚintÚ
batch_sizeÚforbid)ÚextraÚdefaultéÿÿÿÿÚtaskÚbackendÚdeviceúOptional[int]Ú
device_mapúOptional[str]ÚkwargsÚreturnc	                óÒ  — 	 ddl m}
m}m} ddl m} n# t
          $ r t          d¦  «        ‚w xY w|pi } |j        |fi |¤Ž}	 |dk    rj|dk    rU	 ddlm} n# t
          $ r t          d¦  «        ‚w xY w	  |j        |fi |¤Ž}n¸# t          $ r  |j        |fd	d
i|¤Ž}Y nœw xY w |
j        |fi |¤Ž}n‰|dv rj|dk    rU	 ddlm
} n# t
          $ r t          d¦  «        ‚w xY w	  |j        |fi |¤Ž}nJ# t          $ r  |j        |fd	d
i|¤Ž}Y n.w xY w |j        |fi |¤Ž}nt          d|› dt          › d�¦  «        ‚n&# t
          $ r}t          d|› d�¦  «        |‚d}~ww xY w|j        €†|j        j        �|j        j        |_        nh|j        j        �1t#          |j        j        t$          ¦  «        r|j        j        |_        n+|j        �|j        |_        n|                     ddi¦  «         t)          |dd¦  «        st)          |dd¦  «        r(|�&|dk    r t*                               d|› d�¦  «         d}|�—t.          j                             d¦  «        �x|dk    rrddl}|j                             ¦   «         }|dk     s||k    rt          d|› d|› d�¦  «        ‚|�|dk     rd}|�'|dk     r!|dk    rt*                               d |¦  «         |�"|� |dk    rt*                               d!¦  «         d"|v rd#„ |                     ¦   «         D ¦   «         }|pi } |d&|||||||d$œ|¤Ž}|j        t          vr t          d|j        › dt          › d�¦  «        ‚ | d&|||||d%œ|	¤ŽS )'z5Construct the pipeline object from model_id and task.r   )ÚAutoModelForCausalLMÚAutoModelForSeq2SeqLMÚAutoTokenizer)r   z`Could not import transformers python package. Please install it with `pip install transformers`.r   Úopenvino)ÚOVModelForCausalLMzlCould not import optimum-intel python package. Please install it with: pip install 'optimum[openvino,nncf]' ÚexportT)r   r   r   )ÚOVModelForSeq2SeqLMúGot invalid task ú, currently only ú are supportedzCould not load the z# model due to missing dependencies.NÚ	pad_tokenz[PAD]Úis_loaded_in_4bitFÚis_loaded_in_8bitr%   z+Setting the `device` argument to None from z˜ to avoid the error caused by attempting to move the model that was already loaded on the GPU using the Accelerate module to the same or another device.Útorchr&   zGot device==z', device is required to be within [-1, ú)zÍDevice has %d GPUs available. Provide device={deviceId} to `from_model_id` to use availableGPUs for execution. deviceId is -1 (default) for CPU and can be a positive integer associated with CUDA device id.z6Please set device for OpenVINO through: `model_kwargs`Útrust_remote_codec                ó&   — i | ]\  }}|d k    ¯||“ŒS )r?   © )Ú.0ÚkÚvs      úk/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/llms/huggingface_pipeline.pyú
<dictcomp>z5HuggingFacePipeline.from_model_id.<locals>.<dictcomp>á   s0   € ð ð ð Ù˜˜A¸!Ð?RÒ:RÐ:R��1Ð:RÐ:RÐ:Ró    )r'   ÚmodelÚ	tokenizerr)   r+   r"   r   )r   r   r   r    r"   rA   )Útransformersr0   r1   r2   r   ÚImportErrorÚfrom_pretrainedÚoptimum.intel.openvinor4   Ú	Exceptionr6   Ú
ValueErrorÚVALID_TASKSr:   ÚconfigÚpad_token_idÚeos_token_idÚ
isinstancer!   Úadd_special_tokensÚgetattrÚloggerÚwarningÚ	importlibÚutilÚ	find_specr=   ÚcudaÚdevice_countÚitemsr'   )Úclsr   r'   r(   r)   r+   r   r    r"   r-   r0   r1   r2   Úhf_pipelineÚ_model_kwargsrI   r4   rH   r6   Úer=   Úcuda_device_countÚ_pipeline_kwargsr   s                           rE   Úfrom_model_idz!HuggingFacePipeline.from_model_idM   sK  € ð	ðð ð ð ð ð ð ð ð ð ð
 =Ð<Ð<Ð<Ð<Ð<Ð<øåð 	ð 	ð 	ÝðEñô ð ð	øøøð %Ð*¨ˆØ1�MÔ1°(ÐLÐL¸mÐLÐLˆ	ð=	ØÐ(Ò(Ð(Ø˜jÒ(Ð(ðØMÐMÐMÐMÐMÐMÐMøå&ð ð ð Ý)ðDñô ð ðøøøð
à BÐ 2Ô BØ$ð!ð !Ø(5ð!ð !˜˜øõ %ð ð ð à BÐ 2Ô BØ$ð!ð !Ø-1ð!Ø5Bð!ð !˜˜˜ðøøøð AÐ0Ô@Ø ðð Ø$1ðð �E�Eð ÐQÐQÐQØ˜jÒ(Ð(ðØNÐNÐNÐNÐNÐNÐNøå&ð ð ð Ý)ðDñô ð ðøøøð
à CÐ 3Ô CØ$ð!ð !Ø(5ð!ð !˜˜øõ %ð ð ð à CÐ 3Ô CØ$ð!ð !Ø-1ð!Ø5Bð!ð !˜˜˜ðøøøð BÐ1ÔAØ ðð Ø$1ðð �E�Eõ !ðB¨ð Bð BÝ&1ðBð Bð Bñô ð øøõ ð 	ð 	ð 	ÝØO dÐOÐOÐOñô àðøøøøð	øøøð
 ÔÐ&ØŒ|Ô(Ð4Ø).¬Ô)B�	Ô&Ð&Ø”Ô*Ð6½:Ø”Ô)­3ñ<ô <Ð6ð */¬Ô)B�	Ô&Ð&ØÔ'Ð3Ø)2Ô)?�	Ô&Ð&à×,Ò,¨k¸7Ð-CÑDÔDÐDõ ˜Ð2°EÑ:Ô:ð	õ ˜5Ð"5°uÑ=Ô=ð	ð
 Ð"Ø˜9Ò$Ð$å�NŠNð"¸fð "ð "ð "ñô ð ð ˆFð ÐÝ”×(Ò(¨Ñ1Ô1Ð=Ø˜9Ò$Ð$àˆLˆLˆLà %¤
× 7Ò 7Ñ 9Ô 9ÐØ˜Š{ˆ{˜vÐ):Ò:Ð:Ý ðQ 6ð Qð QØ<MðQð Qð Qñô ð ð Ð%¨&°1ª*¨*Ø�ØÐ! f¨q¢j jÐ5FÈÒ5JÐ5JÝ—’ðPð &ñô ð ð Ð *Ð"8¸WÈ
Ò=RÐ=RÝ�NŠNÐSÑTÔTÐTØ -Ð/Ð/ðð Ø!.×!4Ò!4Ñ!6Ô!6ðñ ô ˆMð +Ð0¨bÐØ�;ð 	
ØØØØØ!Ø!Ø&ð	
ð 	
ð ð	
ð 	
ˆð Œ=¥Ð+Ð+Ýð> H¤Mð >ð >Ý"-ð>ð >ð >ñô ð ð ˆsð 
ØØØ&Ø,Ø!ð
ð 
ð ð
ð 
ð 	
s˜   ‚ “-ÁD= ÁA ÁD= ÁA1Á1D= Á5B ÂD= ÂB!ÂD= Â B!Â!D= Â>C ÃD= ÃCÃD= Ã#C2 Ã1D= Ã2DÄD= ÄDÄ-D= Ä=
E ÅEÅE úMapping[str, Any]c                ó,   — | j         | j        | j        dœS )zGet the identifying parameters.©r   r   r    rh   ©Úselfs    rE   Ú_identifying_paramsz'HuggingFacePipeline._identifying_paramsý   s$   € ð œØ Ô-Ø#Ô3ð
ð 
ð 	
rG   c                ó   — dS )NÚhuggingface_pipelinerA   ri   s    rE   Ú	_llm_typezHuggingFacePipeline._llm_type  s   € à%Ð%rG   Úpromptsú	List[str]ÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]r   c           	     ó  — g }| j         r| j         ni }|                     d|¦  «        }|                     dd¦  «        }t          dt          |¦  «        | j        ¦  «        D �]}	||	|	| j        z   …         }
 | j        |
fi |¤Ž}t          |¦  «        D ]Ý\  }}t          |t          ¦  «        r|d         }| j        j	        dk    r	|d         }nn| j        j	        dk    r	|d         }nU| j        j	        dk    r	|d	         }n<| j        j	        d
v r	|d         }n%t          d| j        j	        › dt          › d�¦  «        ‚|r|t          |
|         ¦  «        d …         }|                     |¦  «         ŒÞ�Œt          d„ |D ¦   «         ¬¦  «        S )Nr    Úskip_promptFr   r   Úgenerated_textr   r   Úsummary_textr   Útranslation_textr7   r8   r9   c                ó0   — g | ]}t          |¬ ¦  «        g‘ŒS )©Útext)r   )rB   r|   s     rE   ú
<listcomp>z1HuggingFacePipeline._generate.<locals>.<listcomp>;  s&   € ÐNÐNÐN°T�*¨$Ð/Ñ/Ô/Ð0ÐNÐNÐNrG   )Úgenerations)r    ÚgetÚrangeÚlenr"   r   Ú	enumeraterT   Úlistr'   rO   rP   Úappendr   )rj   ro   rq   rs   r-   Útext_generationsÚdefault_pipeline_kwargsr    rv   ÚiÚbatch_promptsÚ	responsesÚjÚresponser|   s                  rE   Ú	_generatezHuggingFacePipeline._generate
  s  € ð ')Ðà:>Ô:NÐ"V $Ô"6Ð"6ÐTVÐØ Ÿ*š*Ð%6Ð8OÑPÔPˆà—j’j °Ñ6Ô6ˆå�q�#˜g™,œ,¨¬Ñ8Ô8ð 	.ñ 	.ˆAØ# A¨¨D¬OÑ(;Ð$;Ô<ˆMð &˜œØðð à!ðð ˆIõ  )¨Ñ3Ô3ð .ð .‘��8Ý˜h­Ñ-Ô-ð +à'¨œ{�Hà”=Ô%Ð):Ò:Ð:Ø#Ð$4Ô5�D�DØ”]Ô'Ð+AÒAÐAØ#Ð$4Ô5�D�DØ”]Ô'¨?Ò:Ð:Ø# NÔ3�D�DØ”]Ô'¨=Ð8Ð8Ø#Ð$6Ô7�D�Då$ðF¨D¬MÔ,>ð Fð FÝ*5ðFð Fð Fñô ð ð ð 9Ø¥ M°!Ô$4Ñ 5Ô 5Ð 7Ð 7Ô8�Dà ×'Ò'¨Ñ-Ô-Ð-Ð-ñ+.õ. ØNÐNÐ=MÐNÑNÔNð
ñ 
ô 
ð 	
rG   ÚpromptúIterator[GenerationChunk]c              +  óv  ‡K  — ddl m} dd l}ddlm}m}m}	 |                     di ¦  «        }
|                     dd¦  «        }|�| j        j	         
                    |¦  «        }|pg Š G ˆfd„d|¦  «        } | |¦   «         g¦  «        }| j         	                    |d	¬
¦  «        } |	| j        j	        d|d¬¦  «        }t          |f||dœ|
¤Ž} || j        j        j        |¬¦  «        }|                     ¦   «          |D ]4}t          |¬¦  «        }|r|                     |j        |¬¦  «         |V — Œ5d S )Nr   )ÚThread)ÚStoppingCriteriaÚStoppingCriteriaListÚTextIteratorStreamerr    rv   Tc                  ó   •— e Zd Zdˆ fd	„Zd
S )ú1HuggingFacePipeline._stream.<locals>.StopOnTokensÚ	input_idsútorch.LongTensorÚscoresútorch.FloatTensorr-   r   r.   Úboolc                ó<   •— ‰D ]}|d         d         |k    r dS ŒdS )Nr   r&   TFrA   )rj   r–   r˜   r-   Ústop_idÚstopping_ids_lists        €rE   Ú__call__z:HuggingFacePipeline._stream.<locals>.StopOnTokens.__call__V  s9   ø€ ð  1ð $ð $�GØ  ”| BÔ'¨7Ò2Ð2Ø#˜t˜tð 3à�urG   N)r–   r—   r˜   r™   r-   r   r.   rš   )Ú__name__Ú
__module__Ú__qualname__rž   )r�   s   €rE   ÚStopOnTokensr•   U  s3   ø€ € € € € ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	rG   r¢   Úpt)Úreturn_tensorsg      N@)Útimeoutrv   Úskip_special_tokens)ÚstreamerÚstopping_criteria)Útargetr-   r{   )Úchunk)Ú	threadingr�   r=   rJ   r‘   r’   r“   r   r   rI   Úconvert_tokens_to_idsÚdictrH   ÚgenerateÚstartr   Úon_llm_new_tokenr|   )rj   r�   rq   rs   r-   r�   r=   r‘   r’   r“   r    rv   r¢   r¨   Úinputsr§   Úgeneration_kwargsÚt1Úcharrª   r�   s                       @rE   Ú_streamzHuggingFacePipeline._stream>  sí  øè è € ð 	%Ð$Ð$Ð$Ð$Ð$àˆˆˆð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð !Ÿ*š*Ð%6¸Ñ;Ô;ˆØ—j’j °Ñ5Ô5ˆàÐØ”=Ô*×@Ò@ÀÑFÔFˆDØ ˜J BÐð
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	Ð+ñ 
	ô 
	ð 
	ð 1Ð0°,°,±.´.Ð1AÑBÔBÐà”×(Ò(¨ÀÐ(ÑEÔEˆØ'Ð'ØŒMÔ#ØØ#Ø $ð	
ñ 
ô 
ˆõ !Øð
àØ/ð
ð 
ð ð	
ð 
Ðð ˆV˜4œ=Ô.Ô7Ð@QÐRÑRÔRˆØ
�Š‰
Œ
ˆ
àð 	ð 	ˆDÝ#¨Ð.Ñ.Ô.ˆEØð FØ×,Ò,¨U¬Z¸uÐ,ÑEÔEÐEàˆKˆKˆKˆKð	ð 	rG   )r   r   r'   r   r(   r   r)   r*   r+   r,   r   r   r    r   r"   r!   r-   r   r.   r   )r.   rf   )r.   r   )NN)
ro   rp   rq   rr   rs   rt   r-   r   r.   r   )
r�   r   rq   rr   rs   rt   r-   r   r.   rŽ   )rŸ   r    r¡   Ú__doc__r   Ú__annotations__ÚDEFAULT_MODEL_IDr   r   r    ÚDEFAULT_BATCH_SIZEr"   r   Úmodel_configÚclassmethodre   Úpropertyrk   rn   rŒ   rµ   rA   rG   rE   r   r      s^  € € € € € € ðð ð> €HÐÐÐÑØ$€HÐ$Ð$Ð$Ñ$ØØ#'€LÐ'Ð'Ð'Ñ'Ø0Ø&*€OÐ*Ð*Ð*Ñ*Ø3Ø(€JÐ(Ð(Ð(Ñ(ØHà�:Øðñ ô €Lð ð
 !Ø "Ø$(Ø'+Ø*.Ø,ðm
ð m
ð m
ð m
ñ „[ðm
ð^ ð
ð 
ð 
ñ „Xð
ð ð&ð &ð &ñ „Xð&ð %)Ø:>ð	2
ð 2
ð 2
ð 2
ð 2
ðn %)Ø:>ð	:ð :ð :ð :ð :ð :ð :rG   r   )Ú
__future__r   Úimportlib.utilrY   ÚloggingÚtypingr   r   r   r   r   Úlangchain_core._api.deprecationr	   Úlangchain_core.callbacksr
   Ú#langchain_core.language_models.llmsr   Úlangchain_core.outputsr   r   r   Úpydanticr   r¸   ÚDEFAULT_TASKrP   r¹   Ú	getLoggerrŸ   rW   r   rA   rG   rE   ú<module>rÈ      sO  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø =Ð =Ð =Ð =Ð =Ð =Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ Ð Ð Ð Ð Ð àÐ Ø €ð€ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð €Ø
ØØBðñ ô ð
Yð Yð Yð Yð Y˜'ñ Yô Yñô ð
Yð Yð YrG   