
    h                         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Zerd dlmZ neZdej                  deee      fd	Z G d
 de      Z G d dee
      Zy)    )TYPE_CHECKINGAnyOptionalUnion)
ConfigDict)DenseEncoder)AsymmetricDenseMixinN)Routerembedsreturnc                     | r&t        | t        j                        r| j                  st	        d      | j                  D cg c]  }|d   	 c}S c c}w )zConvert a LiteLLM embedding response to a list of embeddings.

    :param embeds: The LiteLLM embedding response.
    :return: A list of embeddings.
    z2No embeddings found in LiteLLM embedding response.	embedding)
isinstancelitellmEmbeddingResponsedata
ValueError)r   xs     o/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/router_strategy/auto_router/litellm_encoder.pylitellm_to_listr      sF     &'";";<{{MNN$*KK0qAkN000s   Ac                   >     e Zd Z ed      Zdded   f fdZ xZS )CustomDenseEncoderallow)extralitellm_router_instancer
   c                 \    d|v r|j                  d      }t        |   di | || _        y )Nr    )popsuper__init__r   )selfr   kwargs	__class__s      r   r    zCustomDenseEncoder.__init__!   s3    $.&,jj1J&K#"6"'>$    N)__name__
__module____qualname__r   model_configr   r    __classcell__r#   s   @r   r   r      s#    G,L?0B ? ?r$   r   c            	           e Zd ZU dZdZeed<   	 ddddedeedf   f fd	Z	d
e
e   de
e
e      fdZd
e
e   de
e
e      fdZd
e
e   de
e
e      fdZd
e
e   de
e
e      fdZd
e
e   de
e
e      fdZd
e
e   de
e
e      fdZ xZS )LiteLLMRouterEncoderai  LiteLLM encoder class for generating embeddings using LiteLLM.

    The LiteLLMRouterEncoder class is a subclass of DenseEncoder and utilizes the LiteLLM Router SDK
    to generate embeddings for given documents. It supports all encoders supported by LiteLLM
    and supports customization of the score threshold for filtering or processing the embeddings.
    internal_litellm_routertypeNr   r
   
model_namescore_thresholdc                 L    t         |   |||nd       || _        || _        y)a  Initialize the LiteLLMEncoder.

        :param litellm_router_instance: The instance of the LiteLLM Router.
        :type litellm_router_instance: Router
        :param model_name: The name of the embedding model to use. Must use LiteLLM naming
            convention (e.g. "openai/text-embedding-3-small" or "mistral/mistral-embed").
        :type model_name: str
        :param score_threshold: The score threshold for the embeddings.
        :type score_threshold: float
        Ng333333?)namer1   )r   r    r0   r   )r!   r   r0   r1   r#   s       r   r    zLiteLLMRouterEncoder.__init__4   s6      	/>/JOPS 	 	
 %'>$r$   docsr   c                 (     | j                   |fi |S )zEncode a list of text documents into embeddings using LiteLLM.

        :param docs: List of text documents to encode.
        :return: List of embeddings for each document.)encode_queriesr!   r4   r"   s      r   __call__zLiteLLMRouterEncoder.__call__K   s    
 #t""42622r$   c                 D   K    | j                   |fi | d{   S 7 w)zEncode a list of documents into embeddings using LiteLLM asynchronously.

        :param docs: List of documents to encode.
        :return: List of embeddings for each document.N)aencode_queriesr7   s      r   acallzLiteLLMRouterEncoder.acallR   s&     
 *T))$9&9999s     c                    | j                   t        d      	  | j                   j                  d|| j                  d|}t	        |      S # t
        $ r.}t        | j                  j                          d|       |d }~ww xY wNz"litellm_router_instance is not set)inputmodelz API call failed. Error: r   r   r   r   r0   r   	Exceptionr/   
capitalizer!   r4   r"   r   es        r   r6   z#LiteLLMRouterEncoder.encode_queriesY       ''/ABB
	;T11;; oo F
 #6** 	99'')**CA3G	   3A 	B)A??Bc                    | j                   t        d      	  | j                   j                  d|| j                  d|}t	        |      S # t
        $ r.}t        | j                  j                          d|       |d }~ww xY wr=   r@   rC   s        r   encode_documentsz%LiteLLMRouterEncoder.encode_documentsh   rE   rF   c                 *  K   | j                   t        d      	  | j                   j                  d|| j                  d| d {   }t	        |      S 7 # t
        $ r.}t        | j                  j                          d|       |d }~ww xY wwr=   r   r   
aembeddingr0   r   rA   r/   rB   rC   s        r   r:   z$LiteLLMRouterEncoder.aencode_queriesw        ''/ABB
	B477BB oo  F
 #6**  	99'')**CA3G	:   B,A AA BA 	B")BBBc                 *  K   | j                   t        d      	  | j                   j                  d|| j                  d| d {   }t	        |      S 7 # t
        $ r.}t        | j                  j                          d|       |d }~ww xY wwr=   rJ   rC   s        r   aencode_documentsz&LiteLLMRouterEncoder.aencode_documents   rL   rM   r%   )r&   r'   r(   __doc__r/   str__annotations__r   floatr    listr   r8   r;   r6   rH   r:   rO   r*   r+   s   @r   r-   r-   *   s    *D#) /3	?!)? ? ud{+	?.3T#Y 3T$u+5F 3:S	 :T%[8I :49 4U;L T#Y T$u+=N $s) $tE{BS DI DeDU r$   r-   )typingr   r   r   r   pydanticr   semantic_router.encodersr   semantic_router.encoders.baser	   r   litellm.routerr
   r   rT   rS   r   r   r-   r   r$   r   <module>rZ      sb    6 6  1 > %F1G55 1$tE{:K 1	? 	?i-/C ir$   