
    Ng                     (   d dl mZ 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mZ d dlmZ d dlmZmZ d dlmZmZmZmZ d dlmZmZmZmZ  ej        e           Z!ddZ"ddZ#ddZ$ eddd           G d d
ee                      Z%dS )    )annotationsN)AnyCallableDictListOptionalTupleUnioncast)
deprecated)
Embeddings)convert_to_secret_strget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validator)before_sleep_logretrystop_after_attemptwait_exponential
embeddingsVoyageEmbeddingsreturnCallable[[Any], Any]c           	         d}d}t          dt          | j                  t          d||          t	          t
          t          j                            S )N   
   T   )
multiplierminmax)reraisestopwaitbefore_sleep)r   r   max_retriesr   r   loggerloggingWARNING)r   min_secondsmax_secondss      c/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/voyageai.py_create_retry_decoratorr.      sW    KK 
 677MMM%fgo>>	       responsedictc                V    d| vr$t          dt          j        |                      | S )NdatazVoyage API Error. Message: )RuntimeErrorjsondumps)r0   s    r-   _check_responser7   ,   s3    XOH9M9MOOPPPOr/   kwargsr   c                H    t          |           }|dd            } |di |S )z)Use tenacity to retry the embedding call.r8   r   r   c                 f    t          j        di | }t          |                                          S )N )requestspostr7   r5   )r8   r0   s     r-   _embed_with_retryz+embed_with_retry.<locals>._embed_with_retry6   s-    =**6**x}}///r/   )r8   r   r   r   r;   )r.   )r   r8   retry_decoratorr>   s       r-   embed_with_retryr@   2   sF    -j99O0 0 0 _0 &&v&&&r/   z0.0.29z1.0z%langchain_voyageai.VoyageAIEmbeddings)sinceremovalalternative_importc                     e Zd ZU dZded<   dZded<   dZded<   d	ed
<   	 dZd	ed<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	  ed          Z ed          ed,d                        Z	 d-d.d!Z	 	 d/d0d%Zd1d&Zd2d)Zdd*d3d+ZdS )4r   a  Voyage embedding models.

    To use, you should have the environment variable ``VOYAGE_API_KEY`` set with
    your API key or pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import VoyageEmbeddings

            voyage = VoyageEmbeddings(voyage_api_key="your-api-key", model="voyage-2")
            text = "This is a test query."
            query_result = voyage.embed_query(text)
    strmodelz&https://api.voyageai.com/v1/embeddingsvoyage_api_baseNzOptional[SecretStr]voyage_api_keyint
batch_size   r'   z+Optional[Union[float, Tuple[float, float]]]request_timeoutFboolshow_progress_barT
truncationforbid)extrabefore)modevaluesr   r   r   c                    t          t          |dd                    |d<   d|vrd|d<   t                              d           d|vrd|v r|d         dv rdnd	|d<   |S )
z?Validate that api key and python package exists in environment.rH   VOYAGE_API_KEYrF   z	voyage-01zmodel will become a required arg for VoyageAIEmbeddings, we recommend to specify it when using this class. Currently the default is set to voyage-01.rJ   )zvoyage-2z	voyage-02H      )r   r   r(   warning)clsrT   s     r-   validate_environmentz%VoyageEmbeddings.validate_environmentj   s     $9 )9;KLL$
 $
  &  )F7ONN=   v%% f$$&/=V*V*V  <  r/   input	List[str]
input_typeOptional[str]c                    t          t          | j                                                  }| j        dd| i| j        ||| j        d| j        d}|S )NAuthorizationzBearer )rF   r\   r^   rO   )urlheadersr5   timeout)r   r   rH   get_secret_valuerG   rF   rO   rL   )selfr\   r^   api_keyparamss        r-   _invocation_paramsz#VoyageEmbeddings._invocation_params   sn     y$"566GGII'')<7)<)<=("o	  +

 

 r/   textsOptional[int]List[List[float]]c                   g }|| j         }| j        rR	 ddlm} n"# t          $ r}t	          d          |d }~ww xY w |t          dt          |          |                    }nt          dt          |          |          }|r|dvrt          d| d          |D ]T}t          | fi | 	                    ||||z            |          }	|
                    d |	d	         D                        U|S )
Nr   )tqdmzgMust have tqdm installed if `show_progress_bar` is set to True. Please install with `pip install tqdm`.)querydocumentzinput_type z0 is invalid. Options: None, 'query', 'document'.)r\   r^   c              3  &   K   | ]}|d          V  dS )	embeddingNr;   ).0rs     r-   	<genexpr>z3VoyageEmbeddings._get_embeddings.<locals>.<genexpr>   s&      GGanGGGGGGr/   r3   )rJ   rN   	tqdm.autorn   ImportErrorrangelen
ValueErrorr@   ri   extend)
rf   rj   rJ   r^   r   rn   e_iterir0   s
             r-   _get_embeddingsz VoyageEmbeddings._get_embeddings   sz    )+
J! 	5*******   !>   Dq#e**j99::EE!SZZ44E 	*,AAAj     
  	H 	HA' ))A
N 23
 *   H GGhv6FGGGGGGGs    
:5:c                <    |                      || j        d          S )zCall out to Voyage Embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        rp   rJ   r^   r   rJ   )rf   rj   s     r-   embed_documentsz VoyageEmbeddings.embed_documents   s*     ##do* $ 
 
 	
r/   textList[float]c                J    |                      |g| j        d          d         S )zCall out to Voyage Embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        ro   r   r   r   )rf   r   s     r-   embed_queryzVoyageEmbeddings.embed_query   s4     ##Ft7 $ 
 

 	r/   )r^   c               <    |                      || j        |          S )aP  Call out to Voyage Embedding endpoint for embedding general text.

        Args:
            texts: The list of texts to embed.
            input_type: Type of the input text. Default to None, meaning the type is
                unspecified. Other options: query, document.

        Returns:
            Embedding for the text.
        r   r   )rf   rj   r^   s      r-   embed_general_textsz$VoyageEmbeddings.embed_general_texts   s*     ##do* $ 
 
 	
r/   )rT   r   r   r   )N)r\   r]   r^   r_   r   r   )NN)rj   r]   rJ   rk   r^   r_   r   rl   )rj   r]   r   rl   )r   rE   r   r   )rj   r]   r^   r_   r   rl   )__name__
__module____qualname____doc____annotations__rG   rH   r'   rL   rN   rO   r   model_configr   classmethodr[   ri   r   r   r   r   r;   r/   r-   r   r   >   s          JJJCOCCCC*.N....OOO?K<CGOGGGG1#####J@ :  L _(###   [ $#0 =A    ( %)$(	' ' ' ' 'R
 
 
 
    @D
 
 
 
 
 
 
 
r/   )r   r   r   r   )r0   r1   r   r1   )r   r   r8   r   r   r   )&
__future__r   r5   r)   typingr   r   r   r   r   r	   r
   r   r<   langchain_core._api.deprecationr   langchain_core.embeddingsr   langchain_core.utilsr   r   pydanticr   r   r   r   tenacityr   r   r   r   	getLoggerr   r(   r.   r7   r@   r   r;   r/   r-   <module>r      s   " " " " " "  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  6 6 6 6 6 6 0 0 0 0 0 0 L L L L L L L L F F F F F F F F F F F F            
	8	$	$
 
 
 
   	' 	' 	' 	' 
>  
c
 c
 c
 c
 c
y* c
 c
 
c
 c
 c
r/   