§
    æ˜ºhÿ#  ã                  óÆ   — d dl mZ d dlZ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mZ d dlmZ d dlmZ d	Zd
ZdZdZ ej        e¦  «        Z G d„ de¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚListÚMappingÚOptional)ÚCallbackManagerForLLMRun)ÚBaseLLM)Ú
GenerationÚ	LLMResult)ÚExtra)Úenforce_stop_tokensÚgpt2útext-generation)útext2text-generationr   Úsummarizationé   c                  óÚ   — e Zd ZU 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<   	  G d„ d¦  «        Zedddde	fd"d„¦   «         Zed#d„¦   «         Zed$d„¦   «         Z	 	 d%d&d!„ZdS )'ÚHuggingFacePipelineaH  HuggingFace Pipeline API.

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

    Only supports `text-generation`, `text2text-generation` and `summarization` 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)
    r   ÚpipelineÚstrÚmodel_idNúOptional[dict]Úmodel_kwargsÚpipeline_kwargsÚintÚ
batch_sizec                  ó    — e Zd ZdZej        ZdS )úHuggingFacePipeline.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextra© ó    úu/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/llms/huggingface_pipeline.pyÚConfigr   ?   s   € € € € € Ø5Ð5à”ˆˆˆr&   r(   éÿÿÿÿÚtaskÚ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    r |	j        |fi |¤Ž}n.|dv r |
j        |fi |¤Ž}nt          d|› dt          › d	�¦  «        ‚n&# t
          $ r}t          d
|› d�¦  «        |‚d}~ww xY w|j	        €|j
        j        |_        t          |dd¦  «        st          |dd¦  «        r"|� t                               d|› d�¦  «         d}|�‘t           j                             d¦  «        �rd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|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   )r   r   úGot invalid task ú, currently only ú are supportedzCould not load the z# model due to missing dependencies.NÚis_loaded_in_4bitFÚis_loaded_in_8bitz+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.Útrust_remote_codec                ó&   — i | ]\  }}|d k    ¯||“ŒS )r<   r%   )Ú.0ÚkÚvs      r'   ú
<dictcomp>z5HuggingFacePipeline.from_model_id.<locals>.<dictcomp>”   s0   € ð ð ð Ù˜˜A¸!Ð?RÒ:RÐ:R��1Ð:RÐ:RÐ:Rr&   )r*   ÚmodelÚ	tokenizerr+   r-   r   r   )r   r   r   r   r   r%   )Útransformersr2   r3   r4   r   ÚImportErrorÚ
ValueErrorÚfrom_pretrainedÚVALID_TASKSÚ	pad_tokenÚconfigÚeos_token_idÚpad_token_idÚgetattrÚloggerÚwarningÚ	importlibÚutilÚ	find_specr:   ÚcudaÚdevice_countÚitemsr*   )Úclsr   r*   r+   r-   r   r   r   r/   r2   r3   r4   Úhf_pipelineÚ_model_kwargsrC   rB   Úer:   Úcuda_device_countÚ_pipeline_kwargsr   s                        r'   Úfrom_model_idz!HuggingFacePipeline.from_model_idD   sÒ  € ð	ðð ð ð ð ð ð ð ð ð ð
 =Ð<Ð<Ð<Ð<Ð<Ð<øåð 	ð 	ð 	ÝðEñô ð ð	øøøð %Ð*¨ˆØ1�MÔ1°(ÐLÐL¸mÐLÐLˆ	ð	ØÐ(Ò(Ð(Ø<Ð,Ô<¸XÐWÐWÈÐWÐW��ØÐBÐBÐBØ=Ð-Ô=¸hÐXÐXÈ-ÐXÐX��å ðB¨ð Bð BÝ&1ðBð Bð Bñô ð øøõ ð 	ð 	ð 	ÝØO dÐOÐOÐOñô àðøøøøð	øøøð
 ÔÐ&Ø%*¤\Ô%>ˆIÔ"õ �EÐ.°Ñ6Ô6ð
	å�uÐ1°5Ñ9Ô9ð
	ð Ð Ý�NŠNð"¸fð "ð "ð "ñô ð ð ˆFàÐ¥)¤.×":Ò":¸7Ñ"CÔ"CÐ"OØˆ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ð &ñô ð ð  -Ð/Ð/ðð Ø!.×!4Ò!4Ñ!6Ô!6ðñ ô ˆMð +Ð0¨bÐØ�;ð 	
ØØØØØ!Ø!Ø&ð	
ð 	
ð ð	
ð 	
ˆð Œ=¥Ð+Ð+Ýð> H¤Mð >ð >Ý"-ð>ð >ð >ñô ð ð ˆsð 
ØØØ&Ø,Ø!ð
ð 
ð ð
ð 
ð 	
s!   ‚ “-ÁAB Â
B*ÂB%Â%B*úMapping[str, Any]c                ó,   — | j         | j        | j        dœS )zGet the identifying parameters.©r   r   r   r_   ©Úselfs    r'   Ú_identifying_paramsz'HuggingFacePipeline._identifying_params°   s$   € ð œØ Ô-Ø#Ô3ð
ð 
ð 	
r&   c                ó   — dS )NÚhuggingface_pipeliner%   r`   s    r'   Ú	_llm_typezHuggingFacePipeline._llm_type¹   s   € à%Ð%r&   Úpromptsú	List[str]ÚstopúOptional[List[str]]Úrun_managerú"Optional[CallbackManagerForLLMRun]r   c           	     ó†  — g }t          dt          |¦  «        | j        ¦  «        D �]�}|||| j        z   …         }|                      |¦  «        }t	          |¦  «        D �]F\  }	}
t          |
t          ¦  «        r|
d         }
| j        j        dk    r•	 ddlm	} | j        j
                             d¦  «        |j        k    }n6# t          $ r)}t                               d|› �¦  «         d}Y d }~nd }~ww xY w|r$|
d         t          ||	         ¦  «        d …         }n`|
d         }nW| j        j        dk    r	|
d         }n>| j        j        d	k    r	|
d
         }n%t!          d| j        j        › dt"          › d�¦  «        ‚|rt%          ||¦  «        }|                     |¦  «         �ŒH�Œƒt)          d„ |D ¦   «         ¬¦  «        S )Nr   r   )Ú
ReturnTypeÚreturn_typez9Unable to extract pipeline return_type. Received error:

TÚgenerated_textr   r   Úsummary_textr5   r6   r7   c                ó0   — g | ]}t          |¬ ¦  «        g‘ŒS ))Útext)r
   )r>   rr   s     r'   ú
<listcomp>z1HuggingFacePipeline._generate.<locals>.<listcomp>ö   s&   € ÐNÐNÐN°T�*¨$Ð/Ñ/Ô/Ð0ÐNÐNÐNr&   )Úgenerations)ÚrangeÚlenr   r   Ú	enumerateÚ
isinstanceÚlistr*   Ú&transformers.pipelines.text_generationrm   Ú_postprocess_paramsÚgetÚNEW_TEXTÚ	ExceptionrN   rO   rF   rH   r   Úappendr   )ra   rf   rh   rj   r/   Útext_generationsÚiÚbatch_promptsÚ	responsesÚjÚresponserm   Úremove_promptrY   rr   s                  r'   Ú	_generatezHuggingFacePipeline._generate½   sT  € ð ')Ðå�q�#˜g™,œ,¨¬Ñ8Ô8ð ,	.ñ ,	.ˆAØ# A¨¨D¬OÑ(;Ð$;Ô<ˆMð Ÿš mÑ4Ô4ˆIõ  )¨Ñ3Ô3ð %.ñ %.‘��8Ý˜h­Ñ-Ô-ð +à'¨œ{�Hà”=Ô%Ð):Ò:Ð:ð-ØUÐUÐUÐUÐUÐUð !œMÔ=×AÒAÀ-ÑPÔPØ)Ô2ò3ð &˜øõ %ð -ð -ð -ÝŸšð6Ø23ð6ð 6ñô ð ð )-˜˜˜˜˜˜øøøøð-øøøð %ð :Ø'Ð(8Ô9½#¸mÈAÔ>NÑ:OÔ:OÐ:QÐ:QÔR˜˜à'Ð(8Ô9˜˜Ø”]Ô'Ð+AÒAÐAØ#Ð$4Ô5�D�DØ”]Ô'¨?Ò:Ð:Ø# NÔ3�D�Då$ðF¨D¬MÔ,>ð Fð FÝ*5ðFð Fð Fñô ð ð ð ;å.¨t°TÑ:Ô:�Dð !×'Ò'¨Ñ-Ô-Ð-Ñ-ñK%.õN ØNÐNÐ=MÐNÑNÔNð
ñ 
ô 
ð 	
s   Â.CÃ
C5ÃC0Ã0C5)r   r   r*   r   r+   r,   r-   r.   r   r   r   r   r   r   r/   r   r0   r   )r0   r]   )r0   r   )NN)
rf   rg   rh   ri   rj   rk   r/   r   r0   r   )r   r    r!   r"   Ú__annotations__ÚDEFAULT_MODEL_IDr   r   r   ÚDEFAULT_BATCH_SIZEr   r(   Úclassmethodr\   Úpropertyrb   re   r‡   r%   r&   r'   r   r      s@  € € € € € € ðð ð< €M€M�MØ$€HÐ$Ð$Ð$Ñ$ØØ#'€LÐ'Ð'Ð'Ñ'Ø0Ø&*€OÐ*Ð*Ð*Ñ*Ø3Ø(€JÐ(Ð(Ð(Ñ(ØHðð ð ð ð ñ ô ð ð
 ð
 !#Ø$(Ø'+Ø*.Ø,ði
ð i
ð i
ð i
ñ „[ði
ðV ð
ð 
ð 
ñ „Xð
ð ð&ð &ð &ñ „Xð&ð %)Ø:>ð	:
ð :
ð :
ð :
ð :
ð :
ð :
r&   r   )Ú
__future__r   Úimportlib.utilrP   ÚloggingÚtypingr   r   r   r   Úlangchain_core.callbacksr   Ú#langchain_core.language_models.llmsr	   Úlangchain_core.outputsr
   r   Úlangchain_core.pydantic_v1r   Úlangchain_community.llms.utilsr   r‰   ÚDEFAULT_TASKrH   rŠ   Ú	getLoggerr   rN   r   r%   r&   r'   ú<module>r˜      s  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à =Ð =Ð =Ð =Ð =Ð =Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,à >Ð >Ð >Ð >Ð >Ð >àÐ Ø €ØJ€ØÐ à	ˆÔ	˜8Ñ	$Ô	$€ða
ð a
ð a
ð a
ð a
˜'ñ a
ô a
ð a
ð a
ð a
r&   