
    7|h99                         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j6                  e      Zd	Z ed
dd       G d de             Zy)    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<y)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           
         t        |       }|j                  di       }t        |      D ]M  }||v rt        d| d      ||vst        j                  d| d| d| d       |j                  |      ||<   O |j                  |j                               }|rt        d| d	      ||d<   d
|vrd|vrt        d      d
|v rd|v rt        d      |j                  d
      xs |j                  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         l/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/huggingface_endpoint.pybuild_extrazHuggingFaceEndpoint.build_extra   sN    $<C#@ 

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

98Mw    c                 >   	 ddl m} |d   xs t        j                  d      }|
	  ||       dd	l m}m}  |d|d
   |d   |d|d   |d<    |d|d
   |d   |d|d   |d<   |S # t        $ r t        d      w xY w# t
        $ r}t        d      |d}~ww xY w)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   	- $**D#E $
&J
  $/45 	J* 
/9%*
 _%	
x "6 "
/9%*"
 _%	"
~ A  	H 	   3 s"   A* 	B *A?	BBB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   s|     #11ZZZZ++"&"9"9 $ 5 5"11II
 
 	
rK   c                 `    | j                   xs 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   sB     ))/R
#00$))D
}-
 	
rK   c                      y)zReturn type of llm.huggingface_endpointrR   r[   s    rI   	_llm_typezHuggingFaceEndpoint._llm_type   s     &rK   runtime_stopkwargsc                 D    i | j                   |}|d   |xs g z   |d<   |S )Nr'   )r]   )r\   rd   re   paramss       rI   _invocation_paramsz&HuggingFaceEndpoint._invocation_params   s9     4D((3F3#)*:#;|?Qr#R rK   promptstoprun_managerc                     | j                   |fi |}| j                  r-d} | j                  |||fi |D ]  }||j                  z  } |S |d   |d<   | j                  j                  ||dd| j                        }	 t        j                  |j                               d   d   }	|d   D ]$  }
|	t        |
       d	 |
k(  s|	d	t        |
        }	& |	S # t        $ r) t        j                  |j                               d   }	Y _w xY w)
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   s?    4D33DCFC>>J%fdKUCTU )ejj(
)(9 )f% {{'' &6GHYY ( H
P $

8??+< =a @AQ R ..>? D #h-!12h>$12BS]N$CMD !   P $

8??+< =>N OPs   )C /D
	D
c                 F  K    | j                   |fi |}| j                  r0d} | j                  |||fi |2 3 d {   }||j                  z  }|d   |d<   | j                  j                  ||dd| j                         d {   }	 t        j                  |j                               d   d   }	|d   D ]$  }
|	t        |
       d  |
k(  s|	d t        |
        }	& |	S 7 6 |S 7 a# t        $ r) t        j                  |j                               d   }	Y fw xY ww)	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33DCFC>>J,t}}k ->  ) )e ejj(
 )::J(Kf%!..33 &6GHYY 4  H
P $

8??+< =a @AQ R ..>? D #h-!12h>$12BS]N$CMD ! -)     P $

8??+< =>N OPs]   7D!C'C%C'AD!C*	D!)C, 7D!D!%C''D!,/DD!DD!c              +   @  K    | j                   |fi |} | j                  j                  |fi |ddiD ]c  }d }|d   D ]	  }||v s|} d }	|r|d |j                  |       }	n|}	|	r-t	        |	      }
|r|j                  |
j                         |
 |sc y  y w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33DCFC333
'
04
 	H -1N-.>? .x'%-N.
 #'D @(.."@A 'T200< 5	s   AB	ABBc                z  K    | j                   |fi |} | j                  j                  |fi |ddi d {   2 3 d {   }d }|d   D ]	  }||v s|} d }	|r|d |j                  |       }	n|}	|	r6t	        |	      }
|r#|j                  |
j                         d {    |
 |sr y 7 x7 q7 6 y wr   )rh   r4   r   r   r   r   ru   r   s              rI   r   zHuggingFaceEndpoint._astreamc  s      4D33DCFC$ED$5$5$E$E%
'%
04%
 
 	 	( -1N-.>? .x'%-N.
 #'D @(.."@A 'T2%66uzzBBB 5
 	* C+
sQ   8B;B3B;B9B5B9B;AB;$B7%B;1B;5B97B;9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NC,E8C=!E8E?!A!%Ix%K#&K%&;*..P"d"="Hhsm"2 %d ;NDI;MD(3- "#"5GSIt?It"It*$)$$?M4S>?X#(#>L$sCx.>NJFCL#D(3-I L (# c3h  C    $ D %$ %4 % %N 
c3h 
 
$ 
WS#X%6 
 
 &3 & &$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      sy      	 N N N 6 4 2 8 7			8	$ 
B
c# c
crK   