
    Ig3                        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j6                  e      Z eddd       G d de             Zy)    )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y)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defaultc	                   	 ddl m}
m}m} ddl m} |xs i } |j                  |fi |}	 |dk(  r5|dk(  r	 ddlm} 	  |j                  |fi |}nc |
j                  |fi |}nO|dv r5|dk(  r	 ddlm
} 	  |j                  |fi |}n* |j                  |fi |}nt        d| dt         d      |j                  |j                  j                  |_        t#        |dd      st#        |dd      r"| |dk(  rt$        j'                  d| d       d}|t(        j*                  j-                  d      j|dk(  reddl}|j0                  j3                         }|dk  s||k\  rt        d| d| d      ||dk  rd}| |dk  r|dkD  rt$        j'                  d|       |||dk(  rt$        j'                  d       d |v r)|j5                         D ci c]  \  }}|d k7  s|| }}}|xs i } |d#|||||||d!|}|j6                  t        vr t        d|j6                   dt         d       | d#|||||d"|	S # t
        $ r t        d      w xY w# t
        $ r t        d      w xY w# t        $ r  |j                  |fd	d
i|}Y w xY w# t
        $ r t        d      w xY w# t        $ r  |j                  |fd	d
i|}Y 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.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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_TASKS	pad_tokenconfigeos_token_idpad_token_idgetattrloggerwarning	importlibutil	find_specr4   cudadevice_countitemsr7   )clsr   r7   backendr:   r;   r   r    r"   kwargsr(   r)   r*   hf_pipeline_model_kwargsr9   r,   r8   r.   er4   cuda_device_countkv_pipeline_kwargsr   s                             j/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/llms/huggingface_pipeline.pyfrom_model_idz!HuggingFacePipeline.from_model_idM   sE   	 
 = %*1M11(LmL	=	((j(M
 B 2 B B$!(5! A0@@ $1E QQj(N
 C 3 C C$!(5! B1AA $1E !'v .&&1].B  &%*\\%>%>I" 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A!?R:R1M  +0b 	
!!&	
 	
 ==+#HMM? 3""-n>   
&,!
 
 	
Q  	E 	 ' )D  %  B 2 B B$!-1!5B! ' )D  %  C 3 C C$!-1!5B!  	%dV+NO	ds   I 
K I I4 K 0J 7J1 
+K K7&K7II11K 4JK JK J..K 1KK KK 	K4K//K4c                J    | j                   | j                  | j                  dS )zGet the identifying parameters.r   r   r    r^   selfs    r[   _identifying_paramsz'HuggingFacePipeline._identifying_params   s'      --#33
 	
    c                     y)Nhuggingface_pipeliner<   r_   s    r[   	_llm_typezHuggingFacePipeline._llm_type   s    %rb   c           	     P   g }| j                   r| j                   ni }|j                  d|      }|j                  dd      }t        dt        |      | j                        D ]  }	||	|	| j                  z    }
 | j
                  |
fi |}t        |      D ]  \  }}t        |t              r|d   }| j
                  j                  dk(  r|d   }n| j
                  j                  dk(  r|d   }ng| j
                  j                  dk(  r|d	   }nH| j
                  j                  d
v r|d   }n*t        d| j
                  j                   dt         d      |r|t        |
|         d  }|j                  |         t        |D cg c]  }t        |      g c}      S c c}w )Nr    skip_promptFr   r   generated_textr   r   summary_textr   translation_textr/   r0   r1   text)generations)r    getrangelenr"   r   	enumerate
isinstancelistr7   rB   rC   appendr   r   )r`   promptsstoprun_managerrS   text_generationsdefault_pipeline_kwargsr    rg   ibatch_prompts	responsesjresponserl   s                  r[   	_generatezHuggingFacePipeline._generate  s    '):>:N:N$"6"6TV **%68OPjj6q#g,8 	.A#ADOO(;<M &!I  )3 .8h-'{H==%%)::#$45D]]''+AA#$45D]]''?:#N3D]]''=8#$67D$+DMM,>,>+? @**5nF  M!$4 5 78D ''-+.	.B =MNT*$/0N
 	
Ns   F#c              +    K   ddl m} dd l}ddlm}m}m}	 |j                  di       }
|j                  dd      }|%| j                  j                  j                  |      }|xs g  G fdd|      } | |       g      }| j                  j                  |d	
      } |	| j                  j                  d|d      }t        |f||d|
} || j                  j                  j                  |      }|j                          |D ]1  }t        |      }|r|j!                  |j"                  |       | 3 y w)Nr   )Thread)StoppingCriteriaStoppingCriteriaListTextIteratorStreamerr    rg   Tc                  *    e Zd Z	 	 	 	 	 	 	 	 d fdZy)1HuggingFacePipeline._stream.<locals>.StopOnTokensc                .    D ]  }|d   d   |k(  s y y)Nr   r&   TFr<   )r`   	input_idsscoresrS   stop_idstopping_ids_lists        r[   __call__z:HuggingFacePipeline._stream.<locals>.StopOnTokens.__call__M  s-      1 $G |B'72#$ rb   N)r   ztorch.LongTensorr   ztorch.FloatTensorrS   r   returnbool)__name__
__module____qualname__r   )r   s   r[   StopOnTokensr   L  s.    	+	 *	 		
 	rb   r   pt)return_tensorsg      N@)timeoutrg   skip_special_tokens)streamerstopping_criteria)targetrS   rk   )chunk)	threadingr   r4   r=   r   r   r   rn   r   r9   convert_tokens_to_idsdictr8   generatestartr   on_llm_new_tokenrl   )r`   promptrv   rw   rS   r   r4   r   r   r   r    rg   r   r   inputsr   generation_kwargst1charr   r   s                       @r[   _streamzHuggingFacePipeline._stream5  sC     	%	
 	
 !**%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   r7   r   rR   r   r:   zOptional[int]r;   zOptional[str]r   r   r    r   r"   r!   rS   r   r   r   )r   zMapping[str, Any])r   r   )NN)
ru   z	List[str]rv   Optional[List[str]]rw   "Optional[CallbackManagerForLLMRun]rS   r   r   r   )
r   r   rv   r   rw   r   rS   r   r   zIterator[GenerationChunk])r   r   r   __doc__r   __annotations__DEFAULT_MODEL_IDr   r   r    DEFAULT_BATCH_SIZEr"   r   model_configclassmethodr\   propertyra   re   r   r   r<   rb   r[   r   r      s   > Hc$Hc$#'L.'0&*O^*3(J(HL 
 ! "$('+*.,d
d
 d
 	d

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

 2
 
2
n %):>	:: ": 8	:
 : 
#:rb   r   )
__future__r   importlib.utilrK   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_TASKrC   r   	getLoggerr   rI   r   r<   rb   r[   <module>r      s~    "   9 9 6 = 7 I I     			8	$ 
B
P' P
Prb   