§
    æ˜ºh`  ã                  óØ   — 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mZmZ d dl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„Zdd„Z G d„ d
ee
¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚCallableÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚExtraÚroot_validator)Úget_from_dict_or_env)Ú	HTTPError)Úbefore_sleep_logÚretryÚretry_if_exception_typeÚstop_after_attemptÚwait_exponentialÚ
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       úp/var/www/html/services/rag-service/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          |¦  «        k     r¯|||dz   …         | 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        › �|¬¦  «        ‚|dz  }|t          |¦  «        k     °¯|S )Nr   Úinputé   éÈ   r   )i�  i‘  zstatus_code: z	 
 code: z 
 message: z"HTTP error occurred: status_code: )Úresponse© )	ÚlenÚclientÚcallÚstatus_codeÚoutputÚ
ValueErrorÚcodeÚmessager   )r+   ÚresultÚiÚ
input_dataÚrespr   s        €r(   Ú_embed_with_retryz+embed_with_retry.<locals>._embed_with_retry.   sL  ø€ àˆØˆØ˜G”_ˆ
Ø•#�j‘/”/Ò!Ð!Ø(¨¨Q°©V¨Ô4ˆF�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à!ðñ ô ð ð
 �‰GˆAð! •#�j‘/”/Ò!Ð!ð" ˆr*   )r+   r   r   r   r2   )r)   )r   r+   Úretry_decoratorr?   s   `   r(   Úembed_with_retryrA   *   sQ   ø€ å-¨jÑ9Ô9€Oàðð ð ð ð ñ „_ðð. ÐÐ&Ð&˜vÐ&Ð&Ð&r*   c                  óž   — e Zd ZU dZded<   	 dZded<   dZded	<   d
Zded<   	  G d„ d¦  «        Z 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)

    r   r4   ztext-embedding-v1ÚstrÚmodelNzOptional[str]Údashscope_api_keyé   Úintr!   c                  ó    — e Zd ZdZej        ZdS )úDashScopeEmbeddings.Configz'Configuration for this pydantic object.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚforbidÚextrar2   r*   r(   ÚConfigrI   l   s   € € € € € Ø5Ð5à”ˆˆˆr*   rP   Ú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   rE   ÚDASHSCOPE_API_KEYr4   zZCould not import dashscope python package. Please install it with `pip install dashscope`.)Ú	dashscoper   Úapi_keyÚTextEmbeddingÚImportError)ÚclsrQ   rT   s      r(   Úvalidate_environmentz(DashScopeEmbeddings.validate_environmentq   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 )aP  Call out to DashScope's embedding endpoint for embedding search docs.

        Args:
            texts: The list of texts to embed.
            chunk_size: The chunk size of embeddings. If None, will use the chunk size
                specified by the class.

        Returns:
            List of embeddings, one for each text.
        Údocument©r.   Ú	text_typerD   c                ó   — g | ]
}|d          ‘ŒS )Ú	embeddingr2   )Ú.0Úitems     r(   ú
<listcomp>z7DashScopeEmbeddings.embed_documents.<locals>.<listcomp>“   s   € ÐCÐCÐC°˜$˜{Ô+ÐCÐCÐCr*   ©rA   rD   )ÚselfrZ   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.
        Úqueryr_   r   rb   rf   )rg   rj   rb   s      r(   Úembed_queryzDashScopeEmbeddings.embed_query–   s;   € õ %Ø˜¨°t´zð
ñ 
ô 
à
ôàôˆ	ð Ðr*   )rQ   r   r   r   )rZ   r[   r   r\   )rj   rC   r   rk   )rJ   rK   rL   rM   Ú__annotations__rD   rE   r!   rP   r   rY   ri   rn   r2   r*   r(   r   r   I   sÞ   € € € € € € ðð ð6 €K€K�KØØ$€EÐ$Ð$Ð$Ñ$Ø'+ÐÐ+Ð+Ð+Ñ+Ø€KÐÐÐÑØ<ðð ð ð ð ñ ô ð ð
 €^ÑÔðð ð ñ Ôðð&ð ð ð ð"ð ð ð ð ð r*   )r   r   r   r   )r   r   r+   r   r   r   )Ú
__future__r   r#   Útypingr   r   r   r   r   Úlangchain_core.embeddingsr	   Úlangchain_core.pydantic_v1r
   r   r   Úlangchain_core.utilsr   Úrequests.exceptionsr   Útenacityr   r   r   r   r   Ú	getLoggerrJ   r"   r)   rA   r   r2   r*   r(   ú<module>rx      s~  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð'ð 'ð 'ð 'ð>Yð Yð Yð Yð Y˜) Zñ Yô Yð Yð Yð Yr*   