
    hh-                         d dl Z d dl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 e	d	d
d           G d de                      ZdS )    N)AnyAsyncIteratorDictIteratorListOptional)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)LLM)GenerationChunk)get_pydantic_field_namespre_init)
ConfigDictFieldmodel_validatorz0.0.21z1.0z)langchain_huggingface.HuggingFaceEndpoint)removalalternative_importc                   <   e Zd ZU dZ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<   	 dZ!eed<   dZ"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fd%            Z+e*d"eeef         fd&            Z,d'eee                  d(ed"eeef         fd)Z-	 	 d1d*ed+eee                  d,ee.         d(ed"ef
d-Z/	 	 d1d*ed+eee                  d,ee0         d(ed"ef
d.Z1	 	 d1d*ed+eee                  d,ee.         d(ed"e2e3         f
d/Z4	 	 d1d*ed+eee                  d,ee0         d(ed"e5e3         f
d0Z6dS )2HuggingFaceTextGenInferenceaW  
    HuggingFace text generation API.
    ! This class is deprecated, you should use HuggingFaceEndpoint instead !

    To use, you should have the `text-generation` python package installed and
    a text-generation server running.

    Example:
        .. code-block:: python

            # Basic Example (no streaming)
            llm = HuggingFaceTextGenInference(
                inference_server_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,
            )
            print(llm.invoke("What is Deep Learning?"))  # noqa: T201

            # Streaming response example
            from langchain_community.callbacks import streaming_stdout

            callbacks = [streaming_stdout.StreamingStdOutCallbackHandler()]
            llm = HuggingFaceTextGenInference(
                inference_server_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
            )
            print(llm.invoke("What is Deep Learning?"))  # noqa: T201

    i   max_new_tokensN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clientasync_clientforbid)extrabefore)modevaluesreturnc           
         t          |           }|                    di           }t          |          D ]Y}||v rt          d| d          ||vr<t                              d| d| d| d           |                    |          ||<   Z|                    |                                          }|rt          d| d	          ||d<   |S )
z>Build extra kwargs from additional params that were passed in.r*   zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm 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   getlist
ValueErrorloggerwarningpopintersectionkeys)clsr1   all_required_field_namesr.   
field_nameinvalid_model_kwargss         t/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain_community/llms/huggingface_text_gen_inference.pybuild_extraz'HuggingFaceTextGenInference.build_extran   s4    $<C#@#@ 

>2..v,, 		; 		;JU"" !F*!F!F!FGGG!999N* N NN N)3N N N  
 %+JJz$:$:j!7DDUZZ\\RR 	T2 T T T  
 "'~    c                     	 ddl } |j        |d         fd|d         i|d         |d<    |j        |d         fd|d         i|d         |d<   n# t          $ r t          d          w xY w|S )	z3Validate that python package exists in environment.r   Nr#   r%   r)   r+   r,   zfCould not import text_generation python package. Please install it with `pip install text_generation`.)text_generationClientAsyncClientImportError)r<   r1   rD   s      r@   validate_environmentz0HuggingFaceTextGenInference.validate_environment   s    	""""55-.   y)  )   F8
 &A_%@-.& &y)& )& &F>""
  	 	 	H  	
 s   AA A+c                     dS )zReturn type of llm.huggingface_textgen_inference selfs    r@   	_llm_typez%HuggingFaceTextGenInference._llm_type   s
     /.rB   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(   r*   rL   s    r@   _default_paramsz+HuggingFaceTextGenInference._default_params   sa     #1ZZ+"&"9 $ 5"1I
 
 
 	
rB   runtime_stopkwargsc                 <    i | j         |}|d         |pg z   |d<   |S )Nr    )rP   )rM   rQ   rR   paramss       r@   _invocation_paramsz.HuggingFaceTextGenInference._invocation_params   s6     4D(3F3#)*:#;|?Qr#R rB   promptstoprun_managerc                 "   | j         r!d} | j        |||fi |D ]}||j        z  }|S  | j        |fi |} | j        j        |fi |}|d         D ]7}	|	|j        v r,|j        d |j                            |	                   |_        8|j        S Nr"   r    )r&   _streamtextrU   r+   generategenerated_textindex
rM   rV   rW   rX   rR   
completionchunkinvocation_paramsresstop_seqs
             r@   _callz!HuggingFaceTextGenInference._call   s     > 	J%fdKJJ6JJ ) )ej(

3D3DCCFCC"dk"6??->??)*:; 	 	H3---%(%78c(..x888&" !!rB   c                 >  K   | j         r'd} | j        |||fi |2 3 d {V }||j        z  }6 |S  | j        |fi |} | j        j        |fi | d {V }|d         D ]7}	|	|j        v r,|j        d |j                            |	                   |_        8|j        S rZ   )r&   _astreamr\   rU   r,   r]   r^   r_   r`   s
             r@   _acallz"HuggingFaceTextGenInference._acall   s      > 	J,t}VT;QQ&QQ ) ) ) ) ) ) )eej(

  R3D3DCCFCC.D%.vKK9JKKKKKKKK)*:; 	 	H3---%(%78c(..x888&" !!s   .c              +     K    | j         |fi |} | j        j        |fi |D ]}d }|d         D ]}||j        j        v r|}d }	|j        j        rd }	n@|r2|j        j        d |j        j                            |                   }	n|j        j        }	|	r0t          |	          }
|r|                    |
j                   |
V  |r d S d S Nr    )r\   )	rU   r+   generate_streamtokenr\   specialr_   r   on_llm_new_tokenrM   rV   rW   rX   rR   rc   rd   stop_seq_foundre   r\   rb   s              r@   r[   z#HuggingFaceTextGenInference._stream   s.      4D3DCCFCC.4;.vKK9JKK 	 	C,0N-.>? . .sy~--%-N #'Dy  & &y~&L	(<(<^(L(L&LMy~  'T222 =00<<<  3	 	rB   c                  K    | j         |fi |} | j        j        |fi |2 3 d {V }d }|d         D ]}||j        j        v r|}d }	|j        j        rd }	n@|r2|j        j        d |j        j                            |                   }	n|j        j        }	|	r7t          |	          }
|r |                    |
j                   d {V  |
W V  |r d S 6 d S rk   )	rU   r,   rl   rm   r\   rn   r_   r   ro   rp   s              r@   rh   z$HuggingFaceTextGenInference._astream  s_      4D3DCCFCC:*:6WWEVWW 	 	 	 	 	 	 	#,0N-.>? . .sy~--%-N #'Dy  & &y~&L	(<(<^(L(L&LMy~  'T222 C%66uzBBBBBBBBB  3 XWWs   C)NN)7__name__
__module____qualname____doc__r   int__annotations__r   r   r   floatr   r   r   r   boolr   r   r5   r    r   strr!   r#   r%   r&   r'   r(   dictr)   r   r   r*   r+   r,   r   model_configr   classmethodrA   r   rH   propertyrN   rP   rU   r   rf   r
   ri   r   r   r[   r   rh   rK   rB   r@   r   r      s        ' 'R 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FCL#:  L _(###c3h C    [ $#2 $ 4    X. /3 / / / X/ 
c3h 
 
 
 X
$$T#Y/;>	c3h    %):>	" "" tCy!" 67	"
 " 
" " " "4 %)?C	" "" tCy!" ;<	"
 " 
" " " "4 %):>	# ## tCy!# 67	#
 # 
/	"# # # #P %)?C	# ## tCy!# ;<	#
 # 
	'# # # # # #rB   r   )loggingtypingr   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   	getLoggerrs   r7   r   rK   rB   r@   <module>r      sM    E E E E E E E E E E E E E E E E 6 6 6 6 6 6        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	$	$ B  
` ` ` ` `# ` ` 
` ` `rB   