
    7|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 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j2                  e      Zd	d	d
dZddZddZ G d dee
      Zy)    )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DashScopeEmbeddingsc           
         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)
embeddings
multipliermin_secondsmax_secondss       g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/dashscope.py_create_retry_decoratorr*      sS    JKK 
 6 67jk{K&y1%fgoo>     c                @     t               }|d fd       } |di |S )z)Use tenacity to retry the embedding call.c                 D   g }d}| d   }t        |t              rt        |      nd}t        j	                  | d   d      }||k  rt        |t              r||||z    n|| d<    j
                  j                  di | }|j                  dk(  r||j                  d   z  }nt|j                  dv r2t        d	|j                   d
|j                   d|j                         t        d|j                   d
|j                   d|j                   |      ||z  }||k  r|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   )kwargsresulti
input_data	input_len
batch_sizerespr%   s          r)   _embed_with_retryz+embed_with_retry.<locals>._embed_with_retry0   sL   G_
'1*d'CC
O	^^F7OR8
)m j$/ 1q:~. 7O
 *:$$))3F3D3&$++l33!!Z/ #D$4$4#5 6!YYK}T\\ND 
  89I9I8J K!YYK}T\\ND! 
 OA) )m* r+   )r?   r   returnr   r2   )r*   )r%   r?   retry_decoratorrF   s   `   r)   embed_with_retryrI   ,   s/    -j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y)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   r8   r   strr/   zOptional[str]dashscope_api_key   intr!   forbid)extrabefore)modec                    dd l }	 t        |dd      |d<   |d   |_        	 dd l }|j                  |d<   |S # t        $ r t	        d      w xY w)Nr   rL   DASHSCOPE_API_KEYr8   zZCould not import dashscope python package. Please install it with `pip install dashscope`.)	dashscoper
   api_keyTextEmbeddingImportError)clsvaluesrU   s      r)   validate_environmentz(DashScopeEmbeddings.validate_environmentx   sv     	M&:')<'
"# ##67		(66F8   	B 	s	   6 Ac                f    t        | |d| j                        }|D cg c]  }|d   	 }}|S c c}w )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r.   	text_typer/   	embeddingrI   r/   )selftextsr%   itemembedding_lists        r)   embed_documentsz#DashScopeEmbeddings.embed_documents   sB     &4::

 9CC${+CC Ds   .c                D    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.
        queryr^   r   r`   ra   )rb   textr`   s      r)   embed_queryzDashScopeEmbeddings.embed_query   s3     %tzz

	 r+   )rZ   r   rG   r   )rc   z	List[str]rG   zList[List[float]])ri   rK   rG   zList[float])__name__
__module____qualname____doc__r8   __annotations__r/   rL   r!   r   model_configr   classmethodr[   rf   rj   r2   r+   r)   r   r   Q   sp    6 FC$E3$'+}+K<L (#  $&r+   )r%   r   rG   zCallable[[Any], Any])r%   r   r?   r   rG   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   	getLoggerrk   r"   r6   r*   rI   r   r2   r+   r)   <module>rz      sl    "   1 5 ; ; )  
		8	$#%BUVW
"'JW)Z Wr+   