
    ge                        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	m
Z
mZmZ d dlZd dlZd dlmZ d dlmZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lm Z! d d
lm"Z" ddl#m$Z$ ddl%m&Z&  e       Z'ed   Z(de)dee)   de)dee)   fdZ*de)dee)   de)dee)   fdZ+dee   de)de,de)de)de-dee
e.ej^                  f      de0de	eejb                  f   fdZ2 G d de$      Z3y)    N)
AnyCallableDictListLiteralOptionalTupleUnioncastget_args)Logging)CustomStreamWrapper)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)HuggingfaceChatConfig)AllMessageValues)EmbeddingResponse)Logprobs)ModelResponse   )BaseLLM   )HuggingfaceError)sentence-similarityzfeature-extractionrerankembed
similaritymodel	task_typeapi_basereturnc                     |2|t        t              v r|S t        dj                  |t                    t	        d      }|j                  |      }|j                         }|j                  dd       }|S )N(Invalid task_type={}. Expected one of={}   concurrent_limiturlpipeline_tag)r   hf_tasks_embeddings	Exceptionformatr   getjsonr    r!   r"   http_client
model_infomodel_info_dictr+   s          Z/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/huggingface/chat/handler.pyget_hf_task_embedding_for_modelr6   /   s     !455:AA2 
 q1KX.J oo'O"1"5"5nd"KL    c                 :  K   |2|t        t              v r|S t        dj                  |t                    t	        t
        j                  j                        }|j                  |       d {   }|j                         }|j                  dd       }|S 7 (w)Nr%   llm_providerr)   r+   )
r   r,   r-   r.   r   litellmLlmProvidersHUGGINGFACEr/   r0   r1   s          r5   %async_get_hf_task_embedding_for_modelr>   F   s      !455:AA2 
 )))55K #844J oo'O"1"5"5nd"KL 5s   A.B0B1)Bclientheadersdatamessagestimeout	json_modec	           	        K   | t         j                  } 	 | j                  |||d|       d {   }	|j!                  |d|	d	|i
       |	j#                         |	j$                  fS 7 7# t        j                  $ r}
t        |
dd       }t        |
dd       }||rt        |dd       }t        |
j                  j                  t        |
j                  j                          d {  7        |rt        t        |            d       d }
~
wt        $ r>}
t         j                  D ]  }t        |
|      s|
 t        dt        |
            d }
~
ww xY ww)NT)r@   rA   streamrC   r@   responsestatus_codemessager@     rI   rJ    complete_input_dict)inputapi_keyoriginal_responseadditional_args)r;   module_level_aclientposthttpxHTTPStatusErrorgetattrr   rG   rI   strareadr   dictr-   LITELLM_EXCEPTION_TYPES
isinstance	post_callaiter_linesr@   )r?   r"   r@   rA   r    rB   logging_objrC   rD   rG   eerror_headerserror_response	exceptions                 r5   	make_callrd   _   sb     ~--@gDw % 
 
( ".5	   !8#3#3337
    	
9d3 J5 ^#NItDM

..ajj..00011>D}-
 	
 EI
 	

  @ 88I!Y' 9 3A??	@sV   EA) A'A) 3E'A) )E<A'D
#C&$&D

EE6EEEc                   :    e Zd ZU dZeej                     ed<   dZeej                     ed<   d* fdZ
i dddi fdeded	ee   d
ededededededeeeef      def fdZ	 d+d	ededed
ededededededededee   dee   fdZ	 d+d	ededed
edee   dededee   fdZdedee   defdZdedee   dedededefdZdededefdZdeded ed!   dededefd"Z d#ed
e!dededede!fd$Z"	 d+deded
e#jH                  jB                  deeejJ                  f   deded	edee   dededee   fd%Z&dd ejJ                  d      ddi fdeded
e!dedededee   d	ee   deeejJ                  f   d&ee   deeeef      de!f fd'Z'd(ee   dee(   fd)Z) xZ*S ),HuggingfaceN_client_session_aclient_sessionr#   c                 "    t         |           y N)super__init__)self	__class__s    r5   rl   zHuggingface.__init__   s    r7   Fr    rB   r"   model_responseprint_verboserC   optional_paramslitellm_paramsacompletionr?   r@   c                    t         |           d}	 t        j                  |      \  }}||d<   t        j	                  |||||
      }t        j                  ||      }t        j                  |||
||      }|	j                  ||||||d       |du rb|
j                  d	d      r| j                  |	|||||||
      S | j                  |||||||
|||	|||t        |t              r|      S d       S |t        |t              s
t               }d	|
v rB|
d	   du r;|j                  ||t!        j"                  |      |
d	         }|j%                         S |j                  ||t!        j"                  |            }t        j'                  ||||	||||
|d |      S # t(        j*                  $ rO}t-        |j.                  j0                  |j.                  j2                  |j.                  j4                        d }~wt,        $ r	}d}|d }~wt6        $ r(}|r|dd l}t-        d|j;                               d }~ww xY w)NFtask)rP   r@   r    rB   rq   )r"   r    )r    rB   rq   rr   r@   )rN   r@   r"   rs   rO   rP   rR   TrF   )r_   r"   rA   r@   ro   r    rC   rB   )r"   rA   r@   ro   encodingr    rq   rC   rr   r_   rP   rB   r?   )r*   r@   rA   rF   )r*   r@   rA   r    raw_responsero   r_   rP   request_datarB   rq   rw   rD   rr   rH   r   rK   rL   )rk   
completionhf_chat_configget_hf_task_for_modelvalidate_environmentget_api_basetransform_requestpre_callr/   async_streamingrs   r\   r   r   r   rT   r0   dumps
iter_linestransform_responserU   rV   r   rG   rI   textr@   r-   	traceback
format_exc)rm   r    rB   r"   ro   rp   rC   rw   rP   r_   rq   rr   custom_prompt_dictrs   	logger_fnr?   r@   exception_mapping_workedru   completion_urlrA   rG   r`   r   rn   s                           r5   r{   zHuggingface.completion   s   & 	#( i	X(>>uEKD%%)N6"$99! / : G ,88(RW8XN!33! /- 4 D   +/& .#.	! ! 	 d""&&x7//KR`gku|  N\  di  sz  EM/  N  N  ++!/! ''5!)#(7 ''5$/ '!)  &1 *63C D # ,  " "&# ,  ( ~Z%D*,?*x/HD/P!;;&#D)*84	 '   **,, ";;&#D) '  &88!)#1 +#!%%$3%"#1 9   $$ 	"JJ22



** 
   	'+$G 	X' &3	@T@T@VWW	XsK   B/F# /F# 3F# :A!F# AF# #I6A
H  IHI#H??IrA   rw   r_   rP   c                 B  K   d }	 |$t        t        j                  j                        }|j	                  ||t        j                  |      |	       d {   }|}t        j                  ||||
|||||d |      S 7 &# t        $ r}t        |t        j                        rt        dd      t        |t              r||<t        |d      r0t        dt        |       d|j                    |j"                  	      t        dt        |             d }~ww xY ww)
Nr9   )r*   r@   rA   rC   rx   rK   zRequest Timeout ErrorrL   r   z

Original Response: rH   )r   r;   r<   r=   rT   r0   r   r|   r   r-   r\   rU   TimeoutExceptionr   hasattrrX   r   r@   )rm   r"   rA   r@   ro   rw   r    rq   rr   rC   r_   rP   rB   r?   rG   http_responser`   s                    r5   rs   zHuggingface.acompletion  s7      .2%	M~/!(!5!5!A!A #)++gDJJt4Dg #. # M %H!44*-'!! /!- 5  &  	M!U334&3@WXXA/0%'(F*C& #"1vh&=hmm_M$,,  '33q6(LL	Ms<   DAB  A>%B  =D>B   	D	BDDDc
                    K   t        |	||t        j                  |      ||||d	       d {   \  }
}t        |
|d|      }|S 7 w)NF)	r?   r"   r@   rA   r    rB   r_   rC   rD   huggingface)completion_streamr    custom_llm_providerr_   )rd   r0   r   r   )rm   r_   r"   rA   r@   ro   rB   r    rC   r?   r   _streamwrappers                r5   r   zHuggingface.async_streamingK  sf      &/D!#
&
 
 
1 ,/ -#	
 #
 
s   +AAArO   r+   c                     |d|iS |dk(  s|dk(  r(t        |      dk  rt        dd      d|d   |d	d  d
iS |dk(  r(t        |      dk  rt        dd      d|d   |d	d  diS d|iS )Ninputsr   r   r     z)sentence-similarity requires 2+ sentencesrL   r   r&   source_sentence	sentencesr   zreranker requires 2+ sentences)querytexts)lenr   )rm   rO   r+   s      r5    _transform_input_on_pipeline_tagz,Huggingface._transform_input_on_pipeline_tagj  s     e$$00LL4P5zA~& #G  %(qrSTTX%5zA~& #<  a59EFF%  r7   r!   	embed_urlc                    K   t        |||       d {   }| j                  ||      }t        |j                               dkD  r||d<   |S 7 :w)Nr    r!   r"   rO   r+   r   options)r>   r   r   keys)rm   r    r!   r   rO   rq   hf_taskrA   s           r5   _async_transform_inputz"Huggingface._async_transform_input  s^      >9y
 
 445w4W##%&*-DO
s   AA;Ac                     t               j                         }g d}|j                         D ]H  \  }}||v r|j                  di        ||d   |<   %||v r|j                  di        ||d   |<   D|||<   J |S )N)
min_length
max_lengthtop_ktop_ptemperaturerepetition_penaltymax_timer   
parameters)HuggingfaceConfigget_special_options_paramsitems
setdefault)rm   rA   rq   special_options_keysspecial_parameters_keyskvs          r5   _process_optional_paramsz$Huggingface._process_optional_params  s    02MMO#
 $))+DAq((	2.%&Y"--b1()\"1%Q , r7   	call_type)syncasyncc                 p   i }d|v r)t        |      dk(  rt        dd      d|d   |dd  di}nWd|i}|j                  d	d       }|d
k(  rt        |||      }n|dk(  r| j	                  ||||      S | j                  |      }t        |j                               dkD  r| j                  ||      }|S )Nzsentence-transformersr   r   z+sentence transformers requires 2+ sentencesrL   r   r&   r   
input_typer   r   r   )r    r!   r   rO   r   )rA   rq   )r   r   popr6   r   r   r   r   )	rm   rO   r    r   rq   r   rA   r!   r   s	            r5   _transform_inputzHuggingface._transform_input  s     "e+5zQ& #I  %(qrSTDe$D'++L$?IF"99y g%229	QV 3   88' 9 D ##%&*00? 1 D r7   
embeddingsc                 2   g }d|v r#|d   D ]  \  }}|j                  d||d        nt        |      D ]  \  }}t        |t              r|j                  d||d       ,t        |t              r)t        |d   t              r|j                  d||d       e|j                  d||d   d   d        d|_        ||_        ||_        d}	|D ]  }
|	t        |j                  |
            z  }	! t        |dt        j                  |	|	|	d d              |S )Nsimilarities	embedding)objectindexr   r   listusage)prompt_tokenscompletion_tokenstotal_tokensprompt_tokens_detailscompletion_tokens_details)append	enumerater\   floatr   r   rA   r    r   encodesetattrr;   Usage)rm   r   ro   r    rO   rw   output_dataidxr   input_tokensr   s              r5   _process_embedding_responsez'Huggingface._process_embedding_response  sN    Z'",^"<Y"""-!$%. #= #,J"7Yi/&&&1%()2  	40Z	!e5T&&&1%()2  &&&1%()21 !*% #86 !')$DC 566L  	MM*".)&**.
	
 r7   c                   K   | j                  ||d||      }|j                  ||||	|d       |$t        t        j                  j
                        }|j                  ||	t        j                  |             d {   }|j                  ||d|i|       |j                         }d	|v rt        d
|d	         | j                  |||||
      S 7 Uw)Nr   rO   r    r   rq   r   rN   r@   r"   rv   r9   r@   rA   rN   rO   rP   rR   rQ   errorrK   rL   r   ro   r    rO   rw   )r   r   r   r;   r<   r=   rT   r0   r   r]   r   r   )rm   r    rO   ro   rC   r_   rq   r"   rP   r@   rw   r?   rA   rG   r   s                  r5   
aembeddingzHuggingface.aembedding  s     $$+ % 
 	'+"$ 	 	
 >+$11==F  XwTZZPTEUVV 	2D9&	 	 	
 ]]_
j "sJw<OPP //!) 0 
 	
! Ws   A?CCACr   c                 
   t         |           t        j                  ||||g       }d}d|v r|}n\|r|}nWdt        j
                  v rt	        j                  dd      }n.dt        j
                  v rt	        j                  dd      }nd| }|
du r.| j                  |||	||||t        |t              r|nd |||      S | j                  ||d	||
      }|j                  |||||d       |t        |t              st        d      }|j                  ||t        j                  |            }|j!                  ||d|i|       |j                         }d|v rt#        d|d         | j%                  |||||      S )N)rP   r@   r    rq   rB   rM   httpsHF_API_BASEHUGGINGFACE_API_BASEz,https://api-inference.huggingface.co/models/T)rO   ro   rC   r_   r@   r"   rP   r?   r    rq   rw   r   r   r   rv   r&   r'   r   rN   r   r   rK   rL   r   )rk   r   r|   r~   osenvirongetenvr   r\   r   r   r   r   rT   r0   r   r]   r   r   )rm   r    rO   ro   rq   r_   rw   rP   r"   rC   r   r?   r@   r   rA   rG   r   rn   s                    r5   r   zHuggingface.embeddingU  s    	 55+ 6 
 	eI Ibjj(		-4I#rzz1		"8"=IFugNI ??-'"!+F4D!Ev4 /! #    $$+ % 
 	'+"% 	 	
 >FK!@ !4F;;y'

4@P;Q 	2D9&	 	 	
 ]]_
j "sJw<OPP //!) 0 
 	
r7   hf_responsec           
      B   |yt        g g g g       }|D ]  }|d   }|j                  di       }t        |d         D ]  \  }}|d   }|d   }	t        t        t
           |j                        j                  |       t        t        t           |j                        j                  |	       dd	d
d}
t        t        t        t
        t        f      |j                        j                  |
        t        |d         D ]  \  }}|d   }|d   }	i }
g }|i k7  r||   }|D ]  }|d   }|d   }||
|<    t        t        t
           |j                        j                  |       t        t        t           |j                        j                  |	       t        t        t        t
        t        f      |j                        j                  |
       t        t        t           |j                        j                  t        d |d   d| D                      	 |S )zO
        Transform Hugging Face logprobs to OpenAI.Completion() format
        N)text_offsettoken_logprobstokenstop_logprobsdetails
top_tokensprefillr   logprobg      g       g      )rM   rM   rM   r   c              3   8   K   | ]  }t        |d            yw)r   N)r   ).0ts     r5   	<genexpr>z2Huggingface._transform_logprobs.<locals>.<genexpr>  s     O0N1AfI0Ns   )TextCompletionLogprobsr/   r   r   r   rX   r   r   r   r   r   r   intr   sum)rm   r   _logprobrG   response_detailsr   itoken
token_texttoken_logprobtop_alt_tokenstemp_top_logprobselemr   r   s                  r5   _transform_logprobszHuggingface._transform_logprobs  s     ,B	,
 $H'	2)--lB?J%&6y&AB5"6]
 !&i 0 T#Y077
CT%[("9"9:AA-P '+$!?T$sEz*+X-B-BCJJ" C$ &&6x&@A5"6]
 !&i 0!#$&!#(21% .D<D"9oG+2N4( . T#Y077
CT%[("9"9:AA-PT$sEz*+X-B-BCJJ" T#Y 4 45<<O0@0J2A0NOO7 B/ $l r7   )r#   Nrj   )+__name__
__module____qualname__rg   r   rU   Client__annotations__rh   AsyncClientrl   rX   r   r   r   r   rZ   boolr
   r   r   r{   r   LiteLLMLoggingObjr   r   rs   r   r   r   r   r   r   r   r   r;   utilsTimeoutr   r   r   r  __classcell__)rn   s   @r5   rf   rf      s   .2OXell+248hu0018  !AE#~X~X ~X 3-	~X
 &~X  ~X ~X ~X ~X ~X  {,<<=>!~X" #~X\ .26M6M 6M 	6M
 &6M 6M 6M 6M 6M 6M '6M 6M '(6M )*6MD .2  	
  & '(   )*>!!)1#!	!* C= 	
   
&T D T 0(( ( ?+	(
 ( ( 
(T@@ *@ 	@
 @ @ 
@\ .2=
=
 =
  77	=

 uemm+,=
 '=
 =
 =
 #=
 =
 =
 )*=
N "&"&/<u}}T/B%)AEa
a
 a
 *	a

 a
 'a
 a
 #a
 3-a
 uemm+,a
 TNa
 {,<<=>a
 
a
FH#D>H	(	)Hr7   rf   )4r0   r   typingr   r   r   r   r   r   r	   r
   r   r   rU   r;   *litellm.litellm_core_utils.litellm_loggingr   r
  ,litellm.litellm_core_utils.streaming_handlerr   &litellm.llms.custom_httpx.http_handlerr   r   r   r   ,litellm.llms.huggingface.chat.transformationr   r   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   baser   common_utilsr   r|   r,   rX   r6   r>   rZ   r   r   r  r	  Headersrd   rf    r7   r5   <module>r     sN    	     S L  7 1 B -  +"$ P 
#C=47c].#C=47c]2*4%&*4*4 *4 	*4
 *4 *4 eE5==012*4 *4 3*4Zt	' t	r7   