
    Ph#A                        d dl mZ d dlZd dlZd dlZd dlmZmZmZ d dl	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)    )annotationsN)AsyncIteratorIteratorMapping)Any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ded<   	 dZded<   	 dZded<   	  e e	dd      	      Z
ded
<   dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	  ee	      Zded<   	 dZded<   	 dZded <   	 d!Zded"<   	 dZded#<   	 dZded$<   	 dZded%<   	  ee	      Zd&ed'<   	  ee	      Zd&ed(<   	 ded)<   dZd*ed+<   dZd*ed,<   dZ ded-<   	  e!d./      Z" e#d01      e$d=d2              Z% e#d31      d>d4       Z&e'd?d5       Z(e'd@d6       Z)e'dAd7       Z*	 	 	 	 	 	 dBd8Z+	 	 dC	 	 	 	 	 	 	 	 	 dDd9Z,	 	 dC	 	 	 	 	 	 	 	 	 dEd:Z-	 	 dC	 	 	 	 	 	 	 	 	 dFd;Z.	 	 dC	 	 	 	 	 	 	 	 	 dGd<Z/y)HHuggingFaceEndpointa  Hugging Face Endpoint. This works with any model that supports text generation (i.e. text completion) task.

    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?"))

            # Basic Example (no streaming) with Mistral-Nemo-Base-2407 model using a third-party provider (Novita).
            llm = HuggingFaceEndpoint(
                repo_id="mistralai/Mistral-Nemo-Base-2407",
                provider="novita",
                max_new_tokens=100,
                do_sample=False,
                huggingfacehub_api_token="my-api-key"
            )
            print(llm.invoke("What is Deep Learning?"))

    NzOptional[str]endpoint_urlrepo_idproviderHUGGINGFACEHUB_API_TOKEN)default)default_factoryhuggingfacehub_api_tokeni   intmax_new_tokenszOptional[int]top_kgffffff?zOptional[float]top_p	typical_pg?temperaturerepetition_penaltyFboolreturn_full_texttruncatez	list[str]stop_sequencesseed strinference_server_urlx   timeout	streaming	do_sample	watermarkdict[str, Any]server_kwargsmodel_kwargsmodelr   clientasync_clienttaskforbid)extrabefore)modec           
        t        |       }|j                  di       }t        |      D ]O  }||v rd| d}t        |      ||vst        j                  d| d| d| d       |j                  |      ||<   Q |j                  |j                               }|rd| d	}t        |      ||d<   |j                  d
      }|j                  d      }|j                  d      }	t        t        |      t        |      t        |	      g      dkD  rd}t        |      |xs' |xs# |	xs t        j                  j                  d      |d
<   |d
   sd}t        |      |S )z>Build extra kwargs from additional params that were passed in.r4   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.r5   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sumr%   osenviron)
clsvaluesall_required_field_namesr:   
field_namemsginvalid_model_kwargsr5   r   r   s
             i/var/www/html/saasai/venv/lib/python3.12/site-packages/langchain_huggingface/llms/huggingface_endpoint.pybuild_extrazHuggingFaceEndpoint.build_extra   s    $<C#@ 

>2.v,JU"zl*:; o%!99!* .L !++5,6LP
 %+JJz$:j! '  8DDUZZ\R23 4S T  S/!!&~" 

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

?V0W 	w g  S/!    afterc           
     4   | j                   xs t        j                  d      }ddlm}m} t        t        j                  |      j                        } |d| j                  | j                  || j                  d| j                  j                         D ci c]  \  }}||v r|| c}}| _        t        t        j                  |      j                        } |d| j                  | 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 c c}}w c c}}w )zCValidate that package is installed and that the API token is valid.HF_TOKENr   )AsyncInferenceClientInferenceClient)r5   r.   api_keyr   zhIgnoring following parameters as they are not supported by the InferenceClient or AsyncInferenceClient: . )r   rI   getenvhuggingface_hubrW   rX   setinspect	signature
parametersr5   r.   r   r3   itemsr6   r7   rG   lenrC   rD   )	selfr   rW   rX   sync_supported_kwargskeyvalueasync_supported_kwargsignored_kwargss	            rQ   validate_environmentz(HuggingFaceEndpoint.validate_environment   s    $(#@#@ $
BIIE
 	
 !$G$5$5o$F$Q$Q R% 

**LL,]]	

 #'"4"4":":"<"<JC// U
"<

 "%W%6%67K%L%W%W!X0 

**LL,]]	

 #'"4"4":":"<"<JC00 U
"<

 ""'')*#$$% 	
 ~"NN<<J;K1N
 =s   F 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'   stopr)   r0   r1   )r   r    r!   r"   r#   r$   r&   r'   r(   r)   r0   r1   r4   rd   s    rQ   _default_paramsz#HuggingFaceEndpoint._default_params  s|     #11ZZZZ++"&"9"9 $ 5 5''II
 
 	
rS   c                l    | j                   xs i }| j                  | j                  | j                  |dS )zGet the identifying parameters.)r   r8   r   r4   )r4   r   r8   r   )rd   _model_kwargss     rQ   _identifying_paramsz'HuggingFaceEndpoint._identifying_params  s8     ))/R --II)	
 	
rS   c                     y)zReturn type of llm.huggingface_endpointr[   rm   s    rQ   	_llm_typezHuggingFaceEndpoint._llm_type!  s     &rS   c                D    i | j                   |}|d   |xs g z   |d<   |S )Nrl   )rn   )rd   runtime_stopkwargsparamss       rQ   _invocation_paramsz&HuggingFaceEndpoint._invocation_params&  s5     4D((3F3<+=2>vrS   c                H    | j                   |fi |}| j                  r-d} | j                  |fd|i|D ]  }||j                  z  } |S  | j                  j
                  d|| j                  d|}|d   D ]$  }	|t        |	       d |	k(  s|dt        |	        }& |S )z1Call out to HuggingFace Hub's inference endpoint.r*   run_manager)promptr5   rl   Nr[   )ry   r/   _streamtextr6   text_generationr5   rc   
rd   r|   rl   r{   rw   invocation_params
completionchunkresponse_textstop_seqs
             rQ   _callzHuggingFaceEndpoint._call-  s     4D33DCFC>>J%$/3D ejj(
 333 
**
  
 *&1Hc(m^-.(: -.>X ? 2 rS   c                |  K    | j                   |fi |}| j                  r0d} | j                  |fd|i|2 3 d {   }||j                  z  } | j                  j
                  dd|i|| j                  dd d {   }|d   D ]$  }	|t        |	       d  |	k(  s|d t        |	        }& |S 7 w6 |S 7 7w)Nr*   r{   r|   F)r5   streamrl   r[   )ry   r/   _astreamr~   r7   r   r5   rc   r   s
             rQ   _acallzHuggingFaceEndpoint._acallK  s      4D33DCFC>>J,t}} $/ 3D  )e ejj(
 @d//?? 


 **	
 
 *&1Hc(m^-.(: -.>X ? 2 %)   
s9   7B<B7B5B7AB<B:B<"B<5B77B<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   Trl   )r~   )ry   r6   r   indexr   on_llm_new_tokenr~   rd   r|   rl   r{   rw   r   responsestop_seq_foundr   r~   r   s              rQ   r}   zHuggingFaceEndpoint._streami  s      4D33DCFC333
'
04
H -1N-f5x'%-N 6
 #'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   r7   r   r   r   r   r~   r   s              rQ   r   zHuggingFaceEndpoint._astream  s      4D33DCFC$ED$5$5$E$E%
'%
04%
 
 
 	( -1N-f5x'%-N 6
 #'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;)rL   r2   returnr   )r   r   )r   r2   )r   zMapping[str, Any])r   r+   )rv   Optional[list[str]]rw   r   r   r2   )NN)
r|   r+   rl   r   r{   "Optional[CallbackManagerForLLMRun]rw   r   r   r+   )
r|   r+   rl   r   r{   'Optional[AsyncCallbackManagerForLLMRun]rw   r   r   r+   )
r|   r+   rl   r   r{   r   rw   r   r   zIterator[GenerationChunk])
r|   r+   rl   r   r{   r   rw   r   r   zAsyncIterator[GenerationChunk])0__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r    r!   r"   r#   r$   r&   r'   rA   r(   r)   r,   r.   r/   r0   r1   dictr3   r4   r6   r7   r8   r   model_configr   classmethodrR   rj   propertyrn   rq   rt   ry   r   r   r}   r   r[   rS   rQ   r   r      s   2h #'L-&A!G]!P"Hm"p /4 !;TJ/m  NC,E=!E?!A!%I%K#&K&;*..P"d"="Hm"2 %d ;NI;MD- "#"5GSIt?It"It*$)$$?M>?X#(#>L.>NJFCL#D-VL (#<  $<| '"0 #0d 
 
$ 
 
 & &/;>	 %):>	 " 8	
  
B %)?C	 " =	
  
B %):>	## "# 8	#
 # 
##P %)?C	"" "" =	"
 " 
("rS   r   )!
__future__r   r_   loggingrI   collections.abcr   r   r   typingr   r   langchain_core.callbacksr	   r
   #langchain_core.language_models.llmsr   langchain_core.outputsr   langchain_core.utilsr   r   pydanticr   r   r   typing_extensionsr   	getLoggerr   rC   VALID_TASKSr   r[   rS   rQ   <module>r      sZ    "   	 < <   4 2 C 7 7 "			8	$S# SrS   