
    NgT@                         d dl Z 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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 d dlmZ  ej        e          Zd	Z G d
 de          Z dS )    N)AnyAsyncIteratorDictIteratorListMappingOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)from_envget_pydantic_field_names)
ConfigDictFieldmodel_validator)Self)ztext2text-generationztext-generationsummarizationconversationalc                      e Zd ZU dZdZee         ed<   	 dZee         ed<   	  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+'          d)e-fd,            Z.e/d)e"ee#f         fd-            Z0e/d)e1ee#f         fd.            Z2e/d)efd/            Z3d0eee                  d1e#d)e"ee#f         fd2Z4	 	 d:d3ed4eee                  d5ee5         d1e#d)ef
d6Z6	 	 d:d3ed4eee                  d5ee7         d1e#d)ef
d7Z8	 	 d:d3ed4eee                  d5ee5         d1e#d)e9e:         f
d8Z;	 	 d:d3ed4eee                  d5ee7         d1e#d)e<e:         f
d9Z=dS );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_TOKEN)default)default_factoryhuggingfacehub_api_tokeni   max_new_tokenstop_kgffffff?top_p	typical_pg?temperaturerepetition_penaltyFreturn_full_texttruncate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           
      8   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
          }|                    d          }|                    d          }t          t          |          t          |          t          |          g          dk    rt          d          |p"|p |pt          j                            d          |d
<   |d
         st          d          |S )z>Build extra kwargs from additional params that were passed in.r0   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.r1   r   r      zVPlease specify either a `model` OR an `endpoint_url` OR a `repo_id`,not more than one.HF_INFERENCE_ENDPOINTzKPlease specify a `model` or an `endpoint_url` or a `repo_id` for the model.)r   getlist
ValueErrorloggerwarningpopintersectionkeyssumboolosenviron)	clsr9   all_required_field_namesr6   
field_nameinvalid_model_kwargsr1   r   r   s	            k/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_huggingface/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  
 "'~" 

7##zz.11**Y''UT,//g?@@1DD%  
 W\WWW
?V0W0W 	w g 	       afterc                 H   	 ddl m} n# t          $ r t          d          w xY w| j        pt	          j        d          }|0	  ||           n"# t          $ r}t          d          |d}~ww xY wddl m}m	} t          t          j        |          j                   |d| j        | j        |d	fd
| j                                        D             | _        t          t          j        |          j                   |d| j        | j        |d	fd| j                                        D             | _        t          | j                                                  z
  z
  }t+          |          dk    rt,                              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`.HF_TOKENN)tokenzICould not authenticate with huggingface_hub. Please check your API token.)AsyncInferenceClientInferenceClient)r1   r+   rU   c                 $    i | ]\  }}|v 	||S  rY   ).0keyvaluesync_supported_kwargss      rN   
<dictcomp>z<HuggingFaceEndpoint.validate_environment.<locals>.<dictcomp>   s5       C/// U///rP   c                 $    i | ]\  }}|v 	||S rY   rY   )rZ   r[   r\   async_supported_kwargss      rN   r^   z<HuggingFaceEndpoint.validate_environment.<locals>.<dictcomp>   s5       C000 U000rP   zhIgnoring following parameters as they are not supported by the InferenceClient or AsyncInferenceClient: .rY   )huggingface_hubrS   ImportErrorr   rH   getenv	Exceptionr@   rV   rW   setinspect	signature
parametersr1   r+   r/   itemsr2   r3   rE   lenrA   rB   )	selfrS   r   erV   rW   ignored_kwargsr`   r]   s	          @@rN   validate_environmentz(HuggingFaceEndpoint.validate_environment   ss   	------- 	 	 	H  	 $(#@ $
BIE
 E
  $/455555    3   	JIIIIIII !$G$5o$F$F$Q R R%o 	
*L*	
 	
   "&"4":":"<"<  		
 	
 "%W%67K%L%L%W!X!X00 	
*L*	
 	
   "&"4":":"<"<  		
 	
 "''))**#$$% 	
 ~""NNN<JN N N  
 s     %A 
A2A--A2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.   r0   rl   s    rN   _default_paramsz#HuggingFaceEndpoint._default_params   sa     #1ZZ+"&"9 $ 5"1I
 
 
 	
rP   c                 >    | j         pi }i | j        | j        dd|iS )zGet the identifying parameters.)r   r4   r0   )r0   r   r4   )rl   _model_kwargss     rN   _identifying_paramsz'HuggingFaceEndpoint._identifying_params  s=     )/R
#0$)DD
}-
 	
rP   c                     dS )zReturn type of llm.huggingface_endpointrY   rq   s    rN   	_llm_typezHuggingFaceEndpoint._llm_type  s
     &%rP   runtime_stopkwargsc                 <    i | j         |}|d         |pg z   |d<   |S )Nr&   )rr   )rl   ry   rz   paramss       rN   _invocation_paramsz&HuggingFaceEndpoint._invocation_params  s6     4D(3F3#)*:#;|?Qr#R rP   promptstoprun_managerc                     | j         |fi |}| j        r!d} | j        |||fi |D ]}||j        z  }|S |d         |d<   | j                            ||dd| j                  }t          j        |	                                          d         d         }	|d         D ]6}
|	t          |
           d	         |
k    r|	d	t          |
                    }	7|	S )
z1Call out to HuggingFace Hub's inference endpoint.r(   r&   r   inputsri   Fjsonstreamr4   r   generated_textN)r}   r,   _streamtextr2   postr4   r   loadsdecoderk   rl   r~   r   r   rz   invocation_params
completionchunkresponseresponse_textstop_seqs              rN   _callzHuggingFaceEndpoint._call&  s+    4D3DCCFCC> 	!J%fdKUUCTUU ) )ej(

(9 )f% {'' &6GHHY (  H
 !Jx'8'899!<=MNM ..>? D D #h--!1!12h>>$12BS]]N2B$CM  rP   c                   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         }	|d         D ]6}
|	t          |
           d          |
k    r|	d t          |
                    }	7|	S )	Nr(   r&   r   r   Fr   r   r   )r}   r,   _astreamr   r3   r   r4   r   r   r   rk   r   s              rN   _acallzHuggingFaceEndpoint._acallF  su      4D3DCCFCC> 	!J,t}k   ->    ) ) ) ) ) ) )e ej(

  (9:J(Kf%!.33 &6GHHY 4        H
 !Jx'8'899!<=MNM ..>? D D #h--!1!12h>>$12BS]]N2B$CM  s   <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 Nr   Tr&   )r   )r}   r2   text_generationindexr   on_llm_new_tokenr   rl   r~   r   r   rz   r   r   stop_seq_foundr   r   r   s              rN   r   zHuggingFaceEndpoint._streame  s%      4D3DCCFCC33
 
'
 
04
 
 
 	 	H -1N-.>? . .x''%-N #'D   @(.."@"@ @A  'T222 =00<<<  3	 	rP   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   )r}   r3   r   r   r   r   r   r   s              rN   r   zHuggingFaceEndpoint._astream  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   r   r   intr   r    floatr!   r"   r#   r$   rG   r%   r?   r&   r   r'   r)   r+   r,   r-   r.   dictr/   r   r   r0   r2   r3   r4   r   model_configr   classmethodrO   r   ro   propertyrr   r   ru   rx   r}   r   r   r
   r   r   r   r   r   r   rY   rP   rN   r   r      sr        ) )V #'L(3-&&&A!GXc]!!!P.3e !;TJJJ/ / /hsm    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 _(###8c3h 8C 8 8 8 [ $#8t _'""">d > > > #">@ 
c3h 
 
 
 X
$ 
WS#X%6 
 
 
 X
 &3 & & & X&$T#Y/;>	c3h    %):>	! !! tCy!! 67	!
 ! 
! ! ! !F %)?C	! !! tCy!! ;<	!
 ! 
! ! ! !D %):>	# ## tCy!# 67	#
 # 
/	"# # # #P %)?C	" "" tCy!" ;<	"
 " 
	'" " " " " "rP   r   )!rg   r   loggingrH   typingr   r   r   r   r   r   r	   langchain_core.callbacksr
   r   #langchain_core.language_models.llmsr   langchain_core.outputsr   langchain_core.utilsr   r   pydanticr   r   r   typing_extensionsr   	getLoggerr   rA   VALID_TASKSr   rY   rP   rN   <module>r      sL      				 N N N N N N N N N N N N N N N N N N        4 3 3 3 3 3 2 2 2 2 2 2 C C C C C C C C 7 7 7 7 7 7 7 7 7 7 " " " " " "		8	$	$Q Q Q Q Q# Q Q Q Q QrP   