§
    šŠtj   ã                  ó(  — 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      úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/voyageai.pyÚ_create_retry_decoratorr.      sW   € Ø€KØ€Kõ ØÝ 
Ô 6Ñ7Ô7Ý¨°ÀÐMÑMÔMÝ%¥f­g¬oÑ>Ô>ð	ñ ô ð ó    Ú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½¼ÀHÑ9MÔ9MÐ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Ô9€Oàð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-01z•model 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-02éH   é   )r   r   r(   Úwarning)ÚclsrT   s     r-   Úvalidate_environmentz%VoyageEmbeddings.validate_environmentj   sŸ   € õ $9Ý  Ð)9Ð;KÑLÔLñ$
ô $
ˆÐÑ ð ˜&Ð Ð Ø)ˆF�7‰OÝ�NŠNð=ñô ð ð ˜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Ñ:Ô:ˆEˆEå˜!�S ™ZœZ¨Ñ4Ô4ˆEàð 	˜*Ð,AÐAÐAÝð˜jð ð ð ñô ð ð
 ð 	Hð 	HˆAÝ'Øðð à×)Ò)Ø  A¨
¡NÐ 2Ô3À
ð *ñ ô ðð ˆHð ×ÒÐGÐG°h¸vÔ6FÐGÑGÔGÑGÔGÐGÐGàÐs   ” ›
:¥5µ:c                ó<   — |                       || j        d¬¦  «        S )zÌCall 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*   € ð ×#Ò#Ø˜dœo¸*ð $ñ 
ô 
ð 	
r/   ÚtextúList[float]c                óJ   — |                       |g| j        d¬¦  «        d         S )z²Call 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   € ð ×#Ò#ØˆF˜tœ¸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*   € ð ×#Ò#Ø˜dœo¸*ð $ñ 
ô 
ð 	
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�  € € € € € € ðð ð €J€J�JØC€OÐCÐCÐCÑCØ*.€NÐ.Ð.Ð.Ñ.Ø€O€O�OØ?Ø€KÐÐÐÑØ<ØCG€OÐ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/   