
    Ng99                        d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	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 dlmZmZ d dlmZmZmZ  ej        e          Zd	Z ed
dd           G d de                      ZdS )    N)AnyAsyncIteratorDictIteratorListMappingOptional)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)get_pydantic_field_namespre_init)
ConfigDictFieldmodel_validator)ztext2text-generationztext-generationsummarizationconversationalz0.0.37z1.0z)langchain_huggingface.HuggingFaceEndpoint)sinceremovalalternative_importc                      e Zd ZU dZdZee         ed<   	 dZee         ed<   	 dZ	ee         ed<   dZ
eed<   	 dZee         ed<   	 d	Zee         ed
<   	 d	Zee         ed<   	 dZee         ed<   	 dZee         ed<   	 dZeed<   	 dZee         ed<   	  ee          Zee         ed<   	 dZee         ed<   	 dZeed<   	 dZeed<   	 dZeed<   	 dZeed<   	 dZeed<   	  ee          Z e!ee"f         ed<   	  ee          Z#e!ee"f         ed<   	 eed<   dZ$e"ed<   dZ%e"ed <   dZ&ee         ed!<   	  e'd"#          Z( e)d$%          e*d&e!ee"f         d'e"fd(                        Z+e,d&e!d'e!fd)            Z-e.d'e!ee"f         fd*            Z/e.d'e0ee"f         fd+            Z1e.d'efd,            Z2d-eee                  d.e"d'e!ee"f         fd/Z3	 	 d7d0ed1eee                  d2ee4         d.e"d'ef
d3Z5	 	 d7d0ed1eee                  d2ee6         d.e"d'ef
d4Z7	 	 d7d0ed1eee                  d2ee4         d.e"d'e8e9         f
d5Z:	 	 d7d0ed1eee                  d2ee6         d.e"d'e;e9         f
d6Z<dS )8HuggingFaceEndpointa  
    HuggingFace Endpoint.

    To use this class, you should have installed the ``huggingface_hub`` package, and
    the environment variable ``HUGGINGFACEHUB_API_TOKEN`` set with your API token,
    or given as a named parameter to the constructor.

    Example:
        .. code-block:: python

            # Basic Example (no streaming)
            llm = HuggingFaceEndpoint(
                endpoint_url="http://localhost:8010/",
                max_new_tokens=512,
                top_k=10,
                top_p=0.95,
                typical_p=0.95,
                temperature=0.01,
                repetition_penalty=1.03,
                huggingfacehub_api_token="my-api-key"
            )
            print(llm.invoke("What is Deep Learning?"))

            # Streaming response example
            from langchain_core.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

            callbacks = [StreamingStdOutCallbackHandler()]
            llm = HuggingFaceEndpoint(
                endpoint_url="http://localhost:8010/",
                max_new_tokens=512,
                top_k=10,
                top_p=0.95,
                typical_p=0.95,
                temperature=0.01,
                repetition_penalty=1.03,
                callbacks=callbacks,
                streaming=True,
                huggingfacehub_api_token="my-api-key"
            )
            print(llm.invoke("What is Deep Learning?"))

    Nendpoint_urlrepo_idhuggingfacehub_api_tokeni   max_new_tokenstop_kgffffff?top_p	typical_pg?temperaturerepetition_penaltyFreturn_full_texttruncate)default_factorystop_sequencesseed inference_server_urlx   timeout	streaming	do_sample	watermarkserver_kwargsmodel_kwargsmodelclientasync_clienttaskforbid)extrabefore)modevaluesreturnc           
      Z   t          |           }|                    di           }t          |          D ]Y}||v rt          d| d          ||vr<t                              d| d| d| d           |                    |          ||<   Z|                    |                                          }|rt          d| d	          ||d<   d
|vrd|vrt          d          d
|v rd|v rt          d          |                    d
          p|                    d          |d<   |S )z>Build extra kwargs from additional params that were passed in.r1   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zL was transferred to model_kwargs.
                    Please make sure that z is what you intended.zParameters za should be specified explicitly. Instead they were passed in as part of `model_kwargs` parameter.r   r   z<Please specify an `endpoint_url` or `repo_id` for the model.zAPlease specify either an `endpoint_url` OR a `repo_id`, not both.r2   )	r   getlist
ValueErrorloggerwarningpopintersectionkeys)clsr:   all_required_field_namesr7   
field_nameinvalid_model_kwargss         i/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/huggingface_endpoint.pybuild_extrazHuggingFaceEndpoint.build_extra   s    $<C#@#@ 

>2..v,, 		; 		;JU"" !F*!F!F!FGGG!999P* P PP P+5P P P  
 %+JJz$:$:j!7DDUZZ\\RR 	T2 T T T  
 "'~''IV,C,CN   V##	V(;(;S   !**^44M

98M8Mw    c                    	 ddl m} n# t          $ r t          d          w xY w|d         pt          j        d          }|0	  ||           n"# t
          $ r}t          d          |d}~ww xY wdd	l m}m}  |d|d
         |d         |d|d         |d<    |d|d
         |d         |d|d         |d<   |S )zCValidate that package is installed and that the API token is valid.r   )loginzfCould not import huggingface_hub python package. Please install it with `pip install huggingface_hub`.r   HUGGINGFACEHUB_API_TOKENN)tokenzICould not authenticate with huggingface_hub. Please check your API token.)AsyncInferenceClientInferenceClientr2   r,   )r2   r,   rO   r0   r3   r4    )	huggingface_hubrM   ImportErrorosgetenv	Exceptionr?   rP   rQ   )rE   r:   rM   r   erP   rQ   s          rI   validate_environmentz(HuggingFaceEndpoint.validate_environment   s{   	------- 	 	 	H  	
 $**D#E $
&J
 J
  $/455555    3   	JIIIIIII*? 
/9%*
 
 _%	
 
x "6!5 "
/9%*"
 "
 _%	"
 "
~ s    	 #A 
A1A,,A1c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        d| j        S )zEGet the default parameters for calling text generation inference API.)r   r   r    r!   r"   r#   r$   r%   r'   r(   r.   r/   )r   r   r    r!   r"   r#   r$   r%   r'   r(   r.   r/   r1   selfs    rI   _default_paramsz#HuggingFaceEndpoint._default_params   sa     #1ZZ+"&"9 $ 5"1I
 
 
 	
rK   c                 >    | j         pi }i | j        | j        dd|iS )zGet the identifying parameters.)r   r5   r1   )r1   r   r5   )r\   _model_kwargss     rI   _identifying_paramsz'HuggingFaceEndpoint._identifying_params   s=     )/R
#0$)DD
}-
 	
rK   c                     dS )zReturn type of llm.huggingface_endpointrR   r[   s    rI   	_llm_typezHuggingFaceEndpoint._llm_type   s
     &%rK   runtime_stopkwargsc                 <    i | j         |}|d         |pg z   |d<   |S )Nr'   )r]   )r\   rd   re   paramss       rI   _invocation_paramsz&HuggingFaceEndpoint._invocation_params   s6     4D(3F3#)*:#;|?Qr#R rK   promptstoprun_managerc                 0    | j         |fi |}| j        r!d} | j        |||fi |D ]}||j        z  }|S |d         |d<   | j                            ||dd| j                  }	 t          j        |	                                          d         d         }	n<# t          $ r/ t          j        |	                                          d         }	Y nw xY w|d         D ]6}
|	t          |
           d	         |
k    r|	d	t          |
                    }	7|	S )
z1Call out to HuggingFace Hub's inference endpoint.r)   r'   rj   inputs
parametersFjsonstreamr5   r   generated_textN)rh   r-   _streamtextr3   postr5   rq   loadsdecodeKeyErrorlenr\   ri   rj   rk   re   invocation_params
completionchunkresponseresponse_textstop_seqs              rI   _callzHuggingFaceEndpoint._call   ss    4D3DCCFCC> 	!J%fdKUUCTUU ) )ej(

(9 )f% {'' &6GHHY (  H
P $
8??+<+< = =a @AQ R P P P $
8??+<+< = =>N OP
 ..>? D D #h--!1!12h>>$12BS]]N2B$CM  s   (2B 6CCc                 L  K    | j         |fi |}| j        r'd} | j        |||fi |2 3 d {V }||j        z  }6 |S |d         |d<   | j                            ||dd| j                   d {V }	 t          j        |	                                          d         d         }	n<# t          $ r/ t          j        |	                                          d         }	Y nw xY w|d         D ]6}
|	t          |
           d          |
k    r|	d t          |
                    }	7|	S )	Nr)   r'   rj   rm   Frp   r   rs   )rh   r-   _astreamru   r4   rv   r5   rq   rw   rx   ry   rz   r{   s              rI   _acallzHuggingFaceEndpoint._acall  s      4D3DCCFCC> 	!J,t}k   ->    ) ) ) ) ) ) )e ej(

  (9:J(Kf%!.33 &6GHHY 4        H
P $
8??+<+< = =a @AQ R P P P $
8??+<+< = =>N OP
 ..>? D D #h--!1!12h>>$12BS]]N2B$CM  s   <62B) )6C"!C"c              +   6  K    | j         |fi |} | j        j        |fi |ddiD ]p}d }|d         D ]}||v r|}	d }	|r|d |                    |                   }	n|}	|	r0t	          |	          }
|r|                    |
j                   |
V  |r d S qd S Nrr   Tr'   )ru   )rh   r3   text_generationindexr   on_llm_new_tokenru   r\   ri   rj   rk   re   r|   r   stop_seq_foundr   ru   r~   s              rI   rt   zHuggingFaceEndpoint._stream>  s%      4D3DCCFCC33
 
'
 
04
 
 
 	 	H -1N-.>? . .x''%-N #'D   @(.."@"@ @A  'T222 =00<<<  3	 	rK   c                \  K    | j         |fi |} | j        j        |fi |ddi d {V 2 3 d {V }d }|d         D ]}||v r|}	d }	|r|d |                    |                   }	n|}	|	r7t	          |	          }
|r |                    |
j                   d {V  |
W V  |r d S }6 d S r   )rh   r4   r   r   r   r   ru   r   s              rI   r   zHuggingFaceEndpoint._astreamc  sw      4D3DCCFCC$ED$5$E%
 %
'%
 %
04%
 %
 %
 
 
 
 
 
 
 	 	 	 	 	 	 	( -1N-.>? . .x''%-N #'D   @(.."@"@ @A  'T222 C%66uzBBBBBBBBB  3
 
 
s   B+)NN)=__name__
__module____qualname____doc__r   r	   str__annotations__r   r   r   intr   r    floatr!   r"   r#   r$   boolr%   r   r>   r'   r   r(   r*   r,   r-   r.   r/   dictr0   r   r   r1   r3   r4   r5   r   model_configr   classmethodrJ   r   rY   propertyr]   r   r`   rc   rh   r   r   r   r   r   r   rt   r   r   rR   rK   rI   r   r      s<        ) )V #'L(3-&&&!GXc]!!!.2hsm222NC,E8C=!E8E?!!!A!%Ix%%%K#&K%&&&;*....P"d"""="Hhsm"""2 %d ; ; ;NDI;;;MD(3- "#"""5GSIt?It"It*$)E$$?$?$?M4S>???X#(5#>#>#>L$sCx.>>>NJJJFCL#D(3-I :  L _(### c3h  C       [ $# D %$ %4 % % % X%N 
c3h 
 
 
 X
$ 
WS#X%6 
 
 
 X
 &3 & & & X&$T#Y/;>	c3h    %):>	!! !!!! tCy!!! 67	!!
 !! 
!! !! !! !!L %)?C	 !  ! ! tCy! ! ;<	 !
  ! 
 !  !  !  !J %):>	# ## tCy!# 67	#
 # 
/	"# # # #P %)?C	" "" tCy!" ;<	"
 " 
	'" " " " " "rK   r   ) rq   loggingrU   typingr   r   r   r   r   r   r	   langchain_core._api.deprecationr
   langchain_core.callbacksr   r   #langchain_core.language_models.llmsr   langchain_core.outputsr   langchain_core.utilsr   r   pydanticr   r   r   	getLoggerr   r@   VALID_TASKSr   rR   rK   rI   <module>r      s~     				 N N N N N N N N N N N N N N N N N N 6 6 6 6 6 6        4 3 3 3 3 3 2 2 2 2 2 2        8 7 7 7 7 7 7 7 7 7		8	$	$ 
B  
c c c c c# c c 
c c crK   