
    dhv5                        S SK Jr  S SKrS SKrS SKJrJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJrJr  S SKJr  S	rS
rSrSr\R6                  " \5      r\" SSSS9 " S S\5      5       rg)    )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                  .   \ rS rSr% SrSrS\S'   \rS\S'    Sr	S\S	'    Sr
S\S
'    \rS\S'    \" SS9r\SSSSS\4                   SS jj5       r\SS j5       r\SS j5       r  S         SS jjr  S         SS jjrSrg)HuggingFacePipeline   a   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defaultc	                    SSK Jn
JnJn  SSK Jn  U=(       d    0 nUR                  " U40 UD6n US:X  a6  US:X  a   SSKJn   UR                  " U40 UD6nOfU
R                  " U40 UD6nORUS;   a6  US:X  a   SSKJ
n   UR                  " U40 UD6nO*UR                  " U40 UD6nO[        SU S[         S35      eUR                  c  UR                  R                  b  UR                  R                  Ul        OUR                  R                   bE  [#        UR                  R                   [$        5      (       a  UR                  R                   Ul        O2UR                   b  UR                   Ul        OUR'                  SS05        [)        USS5      (       d  [)        USS5      (       a$  Ub!  US:X  a  [*        R-                  SU S35        SnUb  [.        R0                  R3                  S5      br  US:X  al  SSKnUR6                  R9                  5       nUS:  d  UU:  a  [        SU SU S35      eUb  US:  a  SnUb"  US:  a  US:  a  [*        R-                  S U5        Ub  Ub  US:X  a  [*        R-                  S!5        S"U;   a-  UR;                  5        VVs0 sH  u  nnUS":w  d  M  UU_M     nnnU=(       d    0 nU" S%UUUUUUUS#.UD6nUR<                  [        ;  a   [        SUR<                   S[         S35      eU " S%UUUUUS$.U	D6$ ! [
         a    [        S5      ef = f! [
         a    [        S5      ef = f! [         a    UR                  " U4S	S
0UD6n GNf = f! [
         a    [        S5      ef = f! [         a    UR                  " U4S	S
0UD6n GNf = f! [
         a  n[        SU S35      UeSnAff = fs  snnf )&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, )zDevice 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_code)taskmodel	tokenizerdevice
device_mapr#   r    )r   r   r    r!   r#    )transformersr)   r*   r+   r   ImportErrorfrom_pretrainedoptimum.intel.openvinor-   	Exceptionr/   
ValueErrorVALID_TASKSr3   configpad_token_ideos_token_id
isinstancer"   add_special_tokensgetattrloggerwarning	importlibutil	find_specr6   cudadevice_countitemsr9   )clsr   r9   backendr<   r=   r    r!   r#   kwargsr)   r*   r+   hf_pipeline_model_kwargsr;   r-   r:   r/   er6   cuda_device_countkv_pipeline_kwargsr   s                             e/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/llms/huggingface_pipeline.pyfrom_model_id!HuggingFacePipeline.from_model_idM   s   	 
 = %*!11(LmL	=	((j(M
 2 B B$!(5! 1@@ $1E QQj(N
 3 C C$!(5! 2AA $1E !'v .&&1].B  &||((4).)B)B	&**6:))3< < */)B)B	&''3)2)?)?	&,,k7-CD 2E::5"5u=="9$NN=fX F" " F ((1=9$ %

 7 7 9{v):: "6( +<<M;NaQ  %&1*!fqj5F5JP & *"8W
=RNNST-/!.!4!4!6!6A!?R:R1!6   +0b 	
!!&	
 	
 ==+#HMM? 3""-n>   
&,!
 
 	
c  	E 	 ' )D  %  2 B B$!-1!5B! ' )D  %  3 C C$!-1!5B!  	%dV+NO	vs   L N2 L4 M N2 -N2 :M3 N N2 )N2 $O4OL14M

N2 M0,N2 /M00N2 3N		N2 N/+N2 .N//N2 2
O<OOc                J    U R                   U R                  U R                  S.$ )zGet the identifying parameters.r   r    r!   rb   selfs    r^   _identifying_params'HuggingFacePipeline._identifying_params   s'      --#33
 	
    c                    g)Nhuggingface_pipeliner>   rc   s    r^   	_llm_typeHuggingFacePipeline._llm_type  s    %rg   c           	     p   / nU R                   (       a  U R                   O0 nUR                  SU5      nUR                  SS5      n[        S[        U5      U R                  5       GH'  n	XXR                  -    n
U R
                  " U
40 UD6n[        U5       H  u  p[        U[        5      (       a  US   nU R
                  R                  S:X  a  US   nOU R
                  R                  S:X  a  US   nOjU R
                  R                  S:X  a  US	   nOJU R
                  R                  S
;   a  US   nO*[        SU R
                  R                   S[         S35      eU(       a  U[        X   5      S  nUR                  U5        M     GM*     [        U Vs/ sH  n[        US9/PM     snS9$ s  snf )Nr!   skip_promptFr   r   generated_textr   r   summary_textr   translation_textr0   r1   r2   text)generations)r!   getrangelenr#   r   	enumeraterI   listr9   rD   rE   appendr   r   )rd   promptsstoprun_managerrV   text_generationsdefault_pipeline_kwargsr!   rm   ibatch_prompts	responsesjresponserr   s                  r^   	_generateHuggingFacePipeline._generate
  s    '):>:N:N$"6"6TV **%68OPjj6q#g,8A#OO(;<M !I  )3h--'{H==%%)::#$45D]]''+AA#$45D]]''?:#N3D]]''=8#$67D$+DMM,>,>+? @**5nF  M$4 5 78D ''-+  4 9B =MN=MT*$/0=MN
 	
Ns   F3c              +    ^#    SSK Jn  SS KnSSKJnJnJn	  UR                  S0 5      n
UR                  SS5      nUb%  U R                  R                  R                  U5      nU=(       d    / m " U4S jSU5      nU" U" 5       /5      nU R                  R                  US	S
9nU	" U R                  R                  SUSS9n[        U4UUS.U
D6nU" U R                  R                  R                  US9nUR                  5         U H1  n[        US9nU(       a  UR!                  UR"                  US9  Uv   M3     g 7f)Nr   )Thread)StoppingCriteriaStoppingCriteriaListTextIteratorStreamerr!   rm   Tc                  6   > \ rS rSr        SU 4S jjrSrg)1HuggingFacePipeline._stream.<locals>.StopOnTokensiU  c                4   > T H  nUS   S   U:X  d  M    g   g)Nr   r'   TFr>   )rd   	input_idsscoresrV   stop_idstopping_ids_lists        r^   __call__:HuggingFacePipeline._stream.<locals>.StopOnTokens.__call__V  s(      1G |B'72#  1 rg   r>   N)r   ztorch.LongTensorr   ztorch.FloatTensorrV   r   returnbool)__name__
__module____qualname____firstlineno__r   __static_attributes__)r   s   r^   StopOnTokensr   U  s3    	+	 *	 		
 	 	rg   r   pt)return_tensorsg      N@)timeoutrm   skip_special_tokens)streamerstopping_criteria)targetrV   rq   )chunk)	threadingr   r6   r?   r   r   r   rt   r   r;   convert_tokens_to_idsdictr:   generatestartr   on_llm_new_tokenrr   )rd   promptr{   r|   rV   r   r6   r   r   r   r!   rm   r   r   inputsr   generation_kwargst1charr   r   s                       @r^   _streamHuggingFacePipeline._stream>  s=     	%	
 	
 !**%6;jj5==**@@FD JB
	+ 
	 1,.1AB(((E'MM### $	
 !
/
 	
 4==..77@QR

D#.E,,UZZu,EK s   D;D>r>   )r   r   r9   r   rU   r   r<   zOptional[int]r=   zOptional[str]r    r   r!   r   r#   r"   rV   r   r   r   )r   zMapping[str, Any])r   r   )NN)
rz   z	List[str]r{   Optional[List[str]]r|   "Optional[CallbackManagerForLLMRun]rV   r   r   r   )
r   r   r{   r   r|   r   rV   r   r   zIterator[GenerationChunk])r   r   r   r   __doc__r   __annotations__DEFAULT_MODEL_IDr   r    r!   DEFAULT_BATCH_SIZEr#   r   model_configclassmethodr_   propertyre   rj   r   r   r   r>   rg   r^   r   r      s   > Hc$Hc$#'L.'0&*O^*3(J(HL 
 ! "$('+*.,m
m
 m
 	m

 m
 "m
 %m
 (m
 m
 m
 
m
 m
^ 
 
 & & %):>	2
2
 "2
 8	2

 2
 
2
n %):>	:: ": 8	:
 : 
#: :rg   r   )
__future__r   importlib.utilrN   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_TASKrE   r   	getLoggerr   rL   r   r>   rg   r^   <module>r      s|    "   9 9 6 = 7 I I     			8	$ 
B
Y' Y
Yrg   