
    +#hT@                         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j8                  e      Zd	Z G d
 de      Z y)    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=y);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           
         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<   |j                  d
      }|j                  d      }|j                  d      }t        t        |      t        |      t        |      g      dkD  rt        d      |xs' |xs# |xs t        j                  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	            l/var/www/html/sandstorm/venv/lib/python3.12/site-packages/langchain_huggingface/llms/huggingface_endpoint.pybuild_extrazHuggingFaceEndpoint.build_extra   s    $<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 
 "'~" 

7#zz.1**Y'UT,/g?@1D% 
 W\WWW

?V0W 	w g      afterc           
         	 ddl m} | j                  xs t	        j
                  d      }|
	  ||       ddl m}m	} t        t        j                  |      j                        } |d| j                  | j                  |d	| j                   j#                         D ci c]  \  }}||v r|| c}}| _        t        t        j                  |      j                        }	 |d| j                  | j                  |d	| j                   j#                         D ci c]  \  }}||	v r|| c}}| _        t        | j                   j)                               |z
  |	z
  }
t+        |
      dkD  rt,        j/                  d
|
 d       | S # t        $ r t        d      w xY w# t        $ r}t        d      |d}~ww xY wc c}}w c c}}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`.HF_TOKENN)tokenzICould not authenticate with huggingface_hub. Please check your API token.)AsyncInferenceClientInferenceClient)r1   r+   rU   zhIgnoring following parameters as they are not supported by the InferenceClient or AsyncInferenceClient: . )huggingface_hubrS   ImportErrorr   rH   getenv	Exceptionr@   rV   rW   setinspect	signature
parametersr1   r+   r/   itemsr2   r3   rE   lenrA   rB   )selfrS   r   erV   rW   sync_supported_kwargskeyvalueasync_supported_kwargsignored_kwargss              rN   validate_environmentz(HuggingFaceEndpoint.validate_environment   s   	- $(#@#@ $
BIIE
  $/45 	J !$G$5$5o$F$Q$Q R% 	
**LL*	
 #'"4"4":":"<C// U
		
 "%W%6%67K%L%W%W!X0 	
**LL*	
 #'"4"4":":"<C00 U
		
 ""'')*#$$% 	
 ~"NN<<J;K1N
 s  	H 	   3 s.   F 	F#  G GF #	F=,F88F=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   rd   s    rN   _default_paramsz#HuggingFaceEndpoint._default_params   s|     #11ZZZZ++"&"9"9 $ 5 5"11II
 
 	
rP   c                 `    | j                   xs i }i | j                  | j                  dd|iS )zGet the identifying parameters.)r   r4   r0   )r0   r   r4   )rd   _model_kwargss     rN   _identifying_paramsz'HuggingFaceEndpoint._identifying_params  sB     ))/R
#00$))D
}-
 	
rP   c                      y)zReturn type of llm.huggingface_endpointrY   rm   s    rN   	_llm_typezHuggingFaceEndpoint._llm_type  s     &rP   runtime_stopkwargsc                 D    i | j                   |}|d   |xs g z   |d<   |S )Nr&   )rn   )rd   ru   rv   paramss       rN   _invocation_paramsz&HuggingFaceEndpoint._invocation_params  s9     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                  j                  ||dd| j                        }t        j                  |j                               d   d   }	|d   D ]$  }
|	t        |
       d	 |
k(  s|	d	t        |
        }	& |	S )
z1Call out to HuggingFace Hub's inference endpoint.r(   r&   r{   inputsra   Fjsonstreamr4   r   generated_textN)ry   r,   _streamtextr2   postr4   r   loadsdecoderc   rd   rz   r{   r|   rv   invocation_params
completionchunkresponseresponse_textstop_seqs              rN   _callzHuggingFaceEndpoint._call&  s    4D33DCFC>>J%fdKUCTU )ejj(
)(9 )f% {{'' &6GHYY ( H
 !JJx'89!<=MNM ..>? D #h-!12h>$12BS]N$CMD ! rP   c                   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 `w)	Nr(   r&   r{   r~   Fr   r   r   )ry   r,   _astreamr   r3   r   r4   r   r   r   rc   r   s              rN   _acallzHuggingFaceEndpoint._acallF  s/     4D33DCFC>>J,t}}k ->  ) )e ejj(
 )::J(Kf%!..33 &6GHYY 4  H
 !JJx'89!<=MNM ..>? D #h-!12h>$12BS]N$CMD ! ')   s:   7C+C&C$C&AC+C)	AC+C+$C&&C+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Nr   Tr&   )r   )ry   r2   text_generationindexr   on_llm_new_tokenr   rd   rz   r{   r|   rv   r   r   stop_seq_foundr   r   r   s              rN   r   zHuggingFaceEndpoint._streame  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   )ry   r3   r   r   r   r   r   r   s              rN   r   zHuggingFaceEndpoint._astream  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   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   rk   propertyrn   r   rq   rt   ry   r   r   r
   r   r   r   r   r   r   rY   rP   rN   r   r      s   )V #'L(3-&A!GXc]!P.3 !;TJ/hsm  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 (#8c3h 8C 8  $8t '">d > #>@ 
c3h 
 
$ 
WS#X%6 
 
 &3 & &$T#Y/;>	c3h %):>	!! tCy!! 67	!
 ! 
!F %)?C	!! tCy!! ;<	!
 ! 
!D %):>	## tCy!# 67	#
 # 
/	"#P %)?C	"" tCy!" ;<	"
 " 
	'"rP   r   )!r_   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      sZ       	 N N N 4 2 C 7 7 "			8	$Q# QrP   