a
    bg(                     @  s   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eZd	d	d
dZdddddZddddddZG d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DashScopeEmbeddingszCallable[[Any], Any])
embeddingsreturnc                 C  s:   d}d}d}t dt| jt|||dtttttj	dS )N      T)minmax)reraisestopwaitr   before_sleep)
r   r   max_retriesr   r   r   r   loggerloggingWARNING)r   
multiplierZmin_secondsZmax_seconds r&   v/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/dashscope.py_create_retry_decorator   s    
r(   r   )r   kwargsr   c                   s.   t  }|ddd fdd}|f i |S )z)Use tenacity to retry the embedding call.r   )r)   r   c                    s   g }d}| d }t |tr"t|nd}t| d d}||k rt |trX||||  n|| d<  jjf i | }|jdkr||jd 7 }nP|jdv rt	d	|j d
|j
 d|j n$td|j d
|j
 d|j |d||7 }q6|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iZ
input_dataZ	input_lenZ
batch_sizerespr   r&   r'   _embed_with_retry0   s>    




z+embed_with_retry.<locals>._embed_with_retry)r(   )r   r)   Zretry_decoratorr>   r&   r=   r'   embed_with_retry,   s    r?   c                   @  s   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dZ
eddedddddZdddddZddd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   r3   r   strr+   zOptional[str]dashscope_api_key   intr!   Zforbid)extrabefore)moder   )valuesr   c                 C  sX   dd l }t|dd|d< |d |_zdd l }|j|d< W n tyR   tdY n0 |S )Nr   rA   ZDASHSCOPE_API_KEYr3   zZCould not import dashscope python package. Please install it with `pip install dashscope`.)	dashscoper	   Zapi_keyZTextEmbeddingImportError)clsrG   rH   r&   r&   r'   validate_environmentx   s    

z(DashScopeEmbeddings.validate_environmentz	List[str]zList[List[float]])textsr   c                 C  s$   t | |d| jd}d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.
        Zdocumentr*   	text_typer+   c                 S  s   g | ]}|d  qS )	embeddingr&   ).0itemr&   r&   r'   
<listcomp>       z7DashScopeEmbeddings.embed_documents.<locals>.<listcomp>r?   r+   )selfrL   r   Zembedding_listr&   r&   r'   embed_documents   s
    	
z#DashScopeEmbeddings.embed_documentszList[float])textr   c                 C  s   t | |d| jd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.
        queryrM   r   rO   rT   )rU   rW   rO   r&   r&   r'   embed_query   s    	
zDashScopeEmbeddings.embed_query)__name__
__module____qualname____doc__r3   __annotations__r+   rA   r!   r   Zmodel_configr   classmethodrK   rV   rY   r&   r&   r&   r'   r   Q   s   
) 
__future__r   r#   typingr   r   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr	   Zpydanticr
   r   r   Zrequests.exceptionsr   tenacityr   r   r   r   r   	getLoggerrZ   r"   r1   r(   r?   r   r&   r&   r&   r'   <module>   s   
%