
    dh                        S SK Jr  S SKrS SKrS SKJrJrJrJrJ	r	J
r
JrJr  S SKrS SKJr  S SKJr  S SKJrJr  S SKJrJrJrJr  S SKJrJrJrJr  \R>                  " \ 5      r!SS
 jr"SS jr#SS jr$\" SSSS9 " S S	\\5      5       r%g)    )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VoyageEmbeddingsc           
         SnSn[        S[        U R                  5      [        SXS9[	        [
        [        R                  5      S9$ )N   
   T   )
multiplierminmax)reraisestopwaitbefore_sleep)r   r   max_retriesr   r   loggerloggingWARNING)
embeddingsmin_secondsmax_secondss      _/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/voyageai.py_create_retry_decoratorr,      sD    KK 
 6 67M%fgoo>	     c                V    SU ;  a"  [        S[        R                  " U 5       35      eU $ )NdatazVoyage API Error. Message: )RuntimeErrorjsondumps)responses    r+   _check_responser4   ,   s,    X8H9M8NOPPOr-   c                <    [        U 5      nUSS j5       nU" S0 UD6$ )z)Use tenacity to retry the embedding call.c                 `    [         R                  " S0 U D6n[        UR                  5       5      $ )N )requestspostr4   r1   )kwargsr3   s     r+   _embed_with_retry+embed_with_retry.<locals>._embed_with_retry6   s$    ==*6*x}}//r-   )r:   r   returnr   r7   )r,   )r(   r:   retry_decoratorr;   s       r+   embed_with_retryr?   2   s.    -j9O0 0 &v&&r-   z0.0.29z1.0z%langchain_voyageai.VoyageAIEmbeddings)sinceremovalalternative_importc                  (   \ rS rSr% SrS\S'   SrS\S'   SrS\S	'   S
\S'    SrS
\S'    Sr	S\S'    Sr
S\S'    SrS\S'    \" SS9r\" SS9\S!S j5       5       r S"     S#S jjr  S$       S%S jjrS&S jrS'S jrSS.     S(S jjrS rg))r   >   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)modec                    [        [        USS5      5      US'   SU;  a  SUS'   [        R                  S5        SU;  a  SU;   a  US   S;   a  SOS	US'   U$ )
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)clsvaluess     r+   validate_environment%VoyageEmbeddings.validate_environmentj   s     $9 )9;KL$
  & )F7ONN= v% f$&/=V*V  <  r-   c                    [        [        U R                  5      R                  5       nU R                  SSU 30U R
                  UUU R                  S.U R                  S.nU$ )NAuthorizationzBearer )rF   input
input_typerO   )urlheadersr1   timeout)r   r   rH   get_secret_valuerG   rF   rO   rL   )selfr_   r`   api_keyparamss        r+   _invocation_params#VoyageEmbeddings._invocation_params   si     y$"5"56GGI'''77))<=("oo	 ++

 r-   c                   / nUc  U R                   nU R                  (       a$   SSKJn  U" [        S[        U5      U5      5      nO[        S[        U5      U5      nU(       a  US;  a  [        SU S35      eU H<  n[        U 40 U R                  XX-    US9D6n	UR                  S U	S	    5       5        M>     U$ ! [         a  n[	        S5      UeS nAff = f)
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  (   #    U H	  oS    v   M     g7f)	embeddingNr7   ).0rs     r+   	<genexpr>3VoyageEmbeddings._get_embeddings.<locals>.<genexpr>   s     G6Fn6Fs   r/   )rJ   rN   	tqdm.autork   ImportErrorrangelen
ValueErrorr?   rh   extend)
re   textsrJ   r`   r(   rk   e_iterir3   s
             r+   _get_embeddings VoyageEmbeddings._get_embeddings   s    )+
J!!* q#e*j9:E!SZ4E*,AAj\ *  
 A'))AN3
 * H Ghv6FGG  3  !> s   B= =
CCCc                6    U R                  XR                  SS9$ )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.
rm   rJ   r`   r~   rJ   )re   rz   s     r+   embed_documents VoyageEmbeddings.embed_documents   s%     ##oo* $ 
 	
r-   c                @    U R                  U/U R                  SS9S   $ )zCall out to Voyage Embedding endpoint for embedding query text.

Args:
    text: The text to embed.

Returns:
    Embedding for the text.
rl   r   r   r   )re   texts     r+   embed_queryVoyageEmbeddings.embed_query   s1     ##Ft7 $ 

 	r-   )r`   c               6    U R                  XR                  US9$ )a  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   )re   rz   r`   s      r+   embed_general_texts$VoyageEmbeddings.embed_general_texts   s%     ##oo* $ 
 	
r-   r7   )rZ   r   r=   r   )N)r_   	List[str]r`   Optional[str]r=   r   )NN)rz   r   rJ   zOptional[int]r`   r   r=   List[List[float]])rz   r   r=   r   )r   rE   r=   zList[float])rz   r   r`   r   r=   r   )__name__
__module____qualname____firstlineno____doc____annotations__rG   rH   r$   rL   rN   rO   r   model_configr   classmethodr[   rh   r~   r   r   r   __static_attributes__r7   r-   r+   r   r   >   s     JCOSC*.N'.O?K<CGO@G1#t#J@ L (#  $0 =A,9	( %)$(	'' "' "	'
 
'R
 @D

/<
	
 
r-   )r(   r   r=   zCallable[[Any], Any])r3   dictr=   r   )r(   r   r:   r   r=   r   )&
__future__r   r1   r&   typingr   r   r   r   r   r	   r
   r   r8   langchain_core._api.deprecationr   langchain_core.embeddingsr   langchain_core.utilsr   r   pydanticr   r   r   r   tenacityr   r   r   r   	getLoggerr   r%   r,   r4   r?   r   r7   r-   r+   <module>r      s    "  	 	 	  6 0 L F F  
		8	$
	' 
>
c
y* c

c
r-   