§
    šŠtjB  ã                  óæ   — d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
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mZmZmZmZ  ej        e¦  «        Zd	d	d
d
dœZdd„Zdd„Z G d„ dee
¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚOptional)Ú
Embeddings)Úget_from_dict_or_env)Ú	BaseModelÚ
ConfigDictÚmodel_validator)Ú	HTTPError)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialé   é
   )útext-embedding-v1ztext-embedding-v2ztext-embedding-v3ztext-embedding-v4Ú
embeddingsÚDashScopeEmbeddingsÚreturnúCallable[[Any], Any]c           
     óØ   — d}d}d}t          dt          | j        ¦  «        t          |||¬¦  «        t	          t
          ¦  «        t          t          t          j	        ¦  «        ¬¦  «        S )Né   é   T)ÚminÚmax)ÚreraiseÚstopÚwaitr   Úbefore_sleep)
r   r   Úmax_retriesr   r   r   r   ÚloggerÚloggingÚWARNING)r   Ú
multiplierÚmin_secondsÚmax_secondss       úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/dashscope.pyÚ_create_retry_decoratorr,   "   sg   € Ø€JØ€KØ€Kõ ØÝ 
Ô 6Ñ7Ô7Ý˜j¨k¸{ÐKÑKÔKÝ&¥yÑ1Ô1Ý%¥f­g¬oÑ>Ô>ðñ ô ð ó    Úkwargsr   c                óN   ‡ — t          ‰ ¦  «        }|dˆ fd„¦   «         } |di |¤ŽS )z)Use tenacity to retry the embedding call.r.   r   r   c                 ó,  •— g }d}| d         }t          |t          ¦  «        rt          |¦  «        nd}t                               | d         d¦  «        }||k     r¹t          |t          ¦  «        r||||z   …         n|| d<    ‰j        j        di | ¤Ž}|j        dk    r||j        d         z  }nY|j        dv r't          d	|j        › d
|j
        › d|j        › �¦  «        ‚t          d|j        › d
|j
        › d|j        › �|¬¦  «        ‚||z  }||k     °¹|S )Nr   Úinputr   Úmodelr   éÈ   r   )i�  i‘  zstatus_code: z	 
 code: z 
 message: z"HTTP error occurred: status_code: )Úresponse© )Ú
isinstanceÚlistÚlenÚ
BATCH_SIZEÚgetÚclientÚcallÚstatus_codeÚoutputÚ
ValueErrorÚcodeÚmessager   )r.   ÚresultÚiÚ
input_dataÚ	input_lenÚ
batch_sizeÚrespr   s          €r+   Ú_embed_with_retryz+embed_with_retry.<locals>._embed_with_retry5   s�  ø€ àˆØˆØ˜G”_ˆ
Ý'1°*½dÑ'CÔ'CÐJ•C˜
‘O”O�OÈˆ	Ý—^’^ F¨7¤O°RÑ8Ô8ˆ
Ø�)Šmˆmõ ˜j­$Ñ/Ô/ð �
˜1˜q :™~Ð-Ô.Ð.àð �7‰Oð
 *�:Ô$Ô)Ð3Ð3¨FÐ3Ð3ˆDØÔ 3Ò&Ð&Ø˜$œ+ lÔ3Ñ3��ØÔ! ZÐ/Ð/Ý ðD DÔ$4ð Dð DØ!œYðDð DØ59´\ðDð Dñô ð õ
  ðD¸Ô9Ið Dð DØ!œYðDð DØ59´\ðDð Dà!ðñ ô ð ð
 �‰OˆAð) �)Šmˆmð* ˆr-   )r.   r   r   r   r5   )r,   )r   r.   Úretry_decoratorrH   s   `   r+   Úembed_with_retryrJ   1   sQ   ø€ å-¨jÑ9Ô9€Oàðð ð ð ð ñ „_ðð: ÐÐ&Ð&˜vÐ&Ð&Ð&r-   c                  ó´   — e Zd ZU dZ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„Zdd„ZdS )r   a`  DashScope embedding models.

    To use, you should have the ``dashscope`` python package installed, and the
    environment variable ``DASHSCOPE_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 DashScopeEmbeddings
            embeddings = DashScopeEmbeddings(dashscope_api_key="my-api-key")

    Example:
        .. code-block:: python

            import os
            os.environ["DASHSCOPE_API_KEY"] = "your DashScope API KEY"

            from langchain_community.embeddings.dashscope import DashScopeEmbeddings
            embeddings = DashScopeEmbeddings(
                model="text-embedding-v1",
            )
            text = "This is a test query."
            query_result = embeddings.embed_query(text)

    Nr   r;   r   Ústrr2   zOptional[str]Údashscope_api_keyé   Úintr$   Úforbid)ÚextraÚbefore)ÚmodeÚvaluesr   r   c                ó¬   — dd l }	 t          |dd¦  «        |d<   |d         |_        	 dd l }|j        |d<   n# t          $ r t	          d¦  «        ‚w xY w|S )Nr   rM   ÚDASHSCOPE_API_KEYr;   zZCould not import dashscope python package. Please install it with `pip install dashscope`.)Ú	dashscoper
   Úapi_keyÚTextEmbeddingÚImportError)ÚclsrT   rW   s      r+   Úvalidate_environmentz(DashScopeEmbeddings.validate_environment}   sœ   € ð 	ÐÐÐàMÝ&:ØÐ'Ð)<ñ'
ô '
ˆÐ"Ñ#ð #Ð#6Ô7ˆ	Ôð	ØÐÐÐà(Ô6ˆF�8ÑÐøÝð 	ð 	ð 	ÝðBñô ð ð	øøøð
 ˆs	   ¨7 ·AÚtextsú	List[str]úList[List[float]]c                óN   — t          | |d| j        ¬¦  «        }d„ |D ¦   «         }|S )zÑCall out to DashScope's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        Údocument©r1   Ú	text_typer2   c                ó   — g | ]
}|d          ‘ŒS )Ú	embeddingr5   )Ú.0Úitems     r+   ú
<listcomp>z7DashScopeEmbeddings.embed_documents.<locals>.<listcomp>ž   s   € ÐCÐCÐC°˜$˜{Ô+ÐCÐCÐCr-   ©rJ   r2   )Úselfr]   r   Úembedding_lists       r+   Úembed_documentsz#DashScopeEmbeddings.embed_documents’   s?   € õ &Ø˜¨¸4¼:ð
ñ 
ô 
ˆ
ð DÐC¸
ÐCÑCÔCˆØÐr-   ÚtextúList[float]c                óN   — t          | |d| j        ¬¦  «        d         d         }|S )z·Call out to DashScope's embedding endpoint for embedding query text.

        Args:
            text: The text to embed.

        Returns:
            Embedding for the text.
        Úqueryrb   r   re   ri   )rj   rm   re   s      r+   Úembed_queryzDashScopeEmbeddings.embed_query¡   s;   € õ %Ø˜¨°t´zð
ñ 
ô 
à
ôàôˆ	ð Ðr-   )rT   r   r   r   )r]   r^   r   r_   )rm   rL   r   rn   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r;   Ú__annotations__r2   rM   r$   r   Úmodel_configr   Úclassmethodr\   rl   rq   r5   r-   r+   r   r   V   sæ   € € € € € € ðð ð6 €FÐÐÐÑØØ$€EÐ$Ð$Ð$Ñ$Ø'+ÐÐ+Ð+Ð+Ñ+Ø€KÐÐÐÑØ<à�:Øðñ ô €Lð €_˜(Ð#Ñ#Ô#Øðð ð ñ „[ñ $Ô#ðð&ð ð ð ðð ð ð ð ð r-   )r   r   r   r   )r   r   r.   r   r   r   ) Ú
__future__r   r&   Útypingr   r   r   r   r   Úlangchain_core.embeddingsr	   Úlangchain_core.utilsr
   Úpydanticr   r   r   Úrequests.exceptionsr   Útenacityr   r   r   r   r   Ú	getLoggerrr   r%   r9   r,   rJ   r   r5   r-   r+   ú<module>r�      s™  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð ØØØð	ð €
ðð ð ð ð"'ð "'ð "'ð "'ðJWð Wð Wð Wð W˜) Zñ Wô Wð Wð Wð Wr-   