
    h5              	          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
 d dlZd dlZd dlmZ d dl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  e       Zd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! G d de      Z"y)    N)AnyCallableDictListLiteralOptionalUnionget_args)Logging)AsyncHTTPHandlerHTTPHandlerget_async_httpx_client)EmbeddingResponse   )BaseLLM   )HuggingFaceError   )HuggingFaceEmbeddingConfigzhttps://huggingface.co)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                  | d|        }|j                         }|j                  dd       }|S )N(Invalid task_type={}. Expected one of={}r   concurrent_limit/api/models/urlpipeline_tag)r
   hf_tasks_embeddings	Exceptionformatr   getjsonr   r   r   http_client
model_infomodel_info_dictr%   s          f/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/huggingface/embedding/handler.pyget_hf_task_embedding_for_modelr0      s     !455:AA2 
 q1KzeW%EFJ oo'O"1"5"5nd"KL    c                 D  K   |2|t        t              v r|S t        dj                  |t                    t	        t
        j                  j                        }|j                  | d|         d {   }|j                         }|j                  dd       }|S 7 (w)Nr   llm_providerr"   r#   r%   )
r
   r&   r'   r(   r   litellmLlmProvidersHUGGINGFACEr)   r*   r+   s          r/   %async_get_hf_task_embedding_for_modelr8   4   s      !455:AA2 
 )))55K #hZ|E7+KLLJ oo'O"1"5"5nd"KL Ms   A3B 5B6)B c                   D    e Zd ZU dZeej                     ed<   dZeej                     ed<   d! 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j0                  j&                  deeej6                  f   dedededee   dededee   fdZdd ej6                  d      ddi fd	edededededededee   dee   deeej6                  f   dee    deee!ef      def fd Z" xZ#S )#HuggingFaceEmbeddingN_client_session_aclient_sessionr   c                 "    t         |           y N)super__init__)self	__class__s    r/   r@   zHuggingFaceEmbedding.__init__Q   s    r1   inputr%   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+ sentencesstatus_codemessager   r   source_sentence	sentencesr   zreranker requires 2+ sentences)querytexts)lenr   )rA   rC   r%   s      r/    _transform_input_on_pipeline_tagz5HuggingFaceEmbedding._transform_input_on_pipeline_tagT   s     e$$00LL4P5zA~& #G  %(qrSTTX%5zA~& #<  a59EFF%  r1   r   r   	embed_urloptional_paramsc                    K   t        ||t               d {   }| j                  ||      }t        |j	                               dkD  r||d<   |S 7 :w)Nr   r   r   rC   r%   r   options)r8   
HF_HUB_URLrP   rO   keys)rA   r   r   rQ   rC   rR   hf_taskdatas           r/   _async_transform_inputz+HuggingFaceEmbedding._async_transform_inputi   s^      >9z
 
 445w4W##%&*-DO
s   AA;ArZ   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_timerV   
parameters)configget_special_options_paramsitems
setdefault)rA   rZ   rR   special_options_keysspecial_parameters_keyskvs          r/   _process_optional_paramsz-HuggingFaceEmbedding._process_optional_params|   s    %@@B#
 $))+DAq((	2.%&Y"--b1()\"1%Q , r1   	call_type)syncasyncc                 x   i }d|v r)t        |      dk(  rt        dd      d|d   |dd  di}n[d|i}|j                  d	d       }|d
k(  rt        ||t              }n|dk(  r| j                  ||||      S | j                  |      }t        |j                               dkD  r| j                  ||      }|S )Nzsentence-transformersr   rF   z+sentence transformers requires 2+ sentencesrG   rE   r   rJ   
input_typero   rT   rp   )r   r   rQ   rC   rU   )rZ   rR   )	rO   r   popr0   rW   r[   rP   rX   rm   )	rA   rC   r   rn   rR   rQ   rZ   r   rY   s	            r/   _transform_inputz%HuggingFaceEmbedding._transform_input   s     #e+5zQ& #I  %(qrSTDe$D'++L$?IF"99z g%229	QV 3   88' 9 D ##%&*00? 1 D r1   
embeddingsmodel_responseencodingc                 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indexrz   r   listusage)prompt_tokenscompletion_tokenstotal_tokensprompt_tokens_detailscompletion_tokens_details)append	enumerate
isinstancefloatr}   r{   rZ   r   rO   encodesetattrr5   Usage)rA   ru   rv   r   rC   rw   output_dataidxrz   input_tokenstexts              r/   _process_embedding_responsez0HuggingFaceEmbedding._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*".)&**.
	
 r1   timeoutlogging_objr   api_keyheadersclientc                   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)Nro   rC   r   rn   rR   rQ   complete_input_dictr   r   rC   r   additional_argsr3   r   rZ   r   rC   r   r   original_responseerror  rG   ru   rv   r   rC   rw   )rt   pre_callr   r5   r6   r7   postr*   dumps	post_callr   r   )rA   r   rC   rv   r   r   rR   r   r   r   rw   r   rZ   responseru   s                  r/   
aembeddingzHuggingFaceEmbedding.aembedding  s     $$+ % 
 	'+"$ 	 	
 >+$11==F  XwTZZPTEUVV 	2D9&	 	 	
 ]]_
j "sJw<OPP //!) 0 
 	
! Ws   A?CCAClitellm_paramsr   c                 Z   t         |           t        j                  ||||g |      }|j	                  dd       }t        ||t              }d}d|v r|}n_|	r|	}nZdt        j                  v rt        j                  dd      }n1dt        j                  v rt        j                  dd      }nd| 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)r   r   r   rR   messagesr   rr   rT    httpsHF_API_BASEHUGGINGFACE_API_BASEz4https://router.huggingface.co/hf-inference/pipeline//T)rC   rv   r   r   r   r   r   r   r   rR   rw   ro   r   r   r   r   r    r   r   r   r   r   rG   r   )r?   rz   re   validate_environmentr)   r0   rW   osenvirongetenvr   r   r   rt   r   r   r   r*   r   r   r   r   )rA   r   rC   rv   rR   r   r   rw   r   r   r   r   r   r   r   taskrQ   rZ   r   ru   rB   s                       r/   rz   zHuggingFaceEmbedding.embedding@  s     	--+) . 
 $''d;	.9z
 	eI Ibjj(		-4I#rzz1		"8"=I GtfAeWU 
 ??-'"!+F4D!Ev4 /! #    $$+ % 
 	'+"% 	 	
 >FK!@ !4F;;y'

4@P;Q 	2D9&	 	 	
 ]]_
j "sJw<OPP //!) 0 
 	
r1   )r   Nr>   )$__name__
__module____qualname__r;   r   httpxClient__annotations__r<   AsyncClientr@   r   strdictrP   r[   rm   r   rt   r   r   r   r}   r5   utilsr	   r   TimeoutLiteLLMLoggingObjr   r   r   boolr   rz   __classcell__)rB   s   @r/   r:   r:   M   s   .2OXell+248hu0018!!)1#!	!* C= 	
   
&T D T 0)) ) ?+	)
 ) ) 
)V@@ *@ 	@
 @ @ 
@\ .2=
=
 =
  77	=

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

 i
 i
 'i
 i
 #i
 3-i
 uemm+,i
 TNi
 {,<<=>i
 
i
 i
r1   r:   )#r*   r   typingr   r   r   r   r   r   r	   r
   r   r5   *litellm.litellm_core_utils.litellm_loggingr   r   &litellm.llms.custom_httpx.http_handlerr   r   r   litellm.types.utilsr   baser   common_utilsr   transformationr   re   rW   r&   r   r0   r8   r:    r1   r/   <module>r      s     	 P P P   S 
 2  + 6	#	%%
P 
#C=47c].#C=47c]2\
7 \
r1   