
    Ng(                        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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-v3
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       d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/dashscope.py_create_retry_decoratorr,      sg    JKK 
 677jk{KKK&y11%fgo>>       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     rt          |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_retry0   s   G_
'1*d'C'CJC
OOO	^^F7OR88
)mm j$// 
1q:~-.. 7O
 *:$)33F33D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!   
 OA) )mm* r-   )r.   r   r   r   r5   )r,   )r   r.   retry_decoratorrH   s   `   r+   embed_with_retryrJ   ,   sQ    -j99O     _: &&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_environmentx   s     	M&:')<'
 '
"# ##67		(6F8 	 	 	B  	
 s	   7 Atexts	List[str]List[List[float]]c                N    t          | |d| j                  }d |D             }|S )zCall 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 )zCall 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;     %tz
 
 

	 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   Q   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	$	$#%BUVWW
   "' "' "' "'JW W W W W)Z W W W W Wr-   