
    7|hg                        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	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mZmZ d dlmZmZmZmZ  ej6                  e      Zdd	ZddZ eddd       G d d
ee             Z y)    )annotationsN)AnyCallableDictListOptional)
deprecated)
Embeddings)convert_to_secret_strget_from_dict_or_envpre_init)	BaseModel
ConfigDict	SecretStr)before_sleep_logretrystop_after_attemptwait_exponentialc            	         d} d}d}d}t        dt        |      t        | ||      t        t        t
        j                              S )z#Returns a tenacity retry decorator.         T)
multiplierminmax)reraisestopwaitbefore_sleep)r   r   r   r   loggerloggingWARNING)r   min_secondsmax_secondsmax_retriess       c/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/solar.py_create_retry_decoratorr'      sJ     JKKK,+V%fgoo>	     SolarEmbeddingsc                >     t               }|d fd       } ||i |S )z*Use tenacity to retry the completion call.c                 (     j                   | i |S )N)embed)argskwargs
embeddingss     r&   _embed_with_retryz+embed_with_retry.<locals>._embed_with_retry)   s    z000r(   )r-   r   r.   r   returnr   )r'   )r/   r-   r.   retry_decoratorr0   s   `    r&   embed_with_retryr3   %   s/    -/O1 1 d-f--r(   z0.0.34z1.0zlangchain_upstage.ChatUpstage)sinceremovalalternative_importc                      e Zd ZU dZdZded<   	 dZded<   	 dZded	<   	  ed
      Z	e
dd       Z	 	 	 	 ddZddZddZy)r)   aJ  Solar's embedding service.

    To use, you should have the environment variable``SOLAR_API_KEY`` set
    with your API token, or pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import SolarEmbeddings
            embeddings = SolarEmbeddings()

            query_text = "This is a test query."
            query_result = embeddings.embed_query(query_text)

            document_text = "This is a test document."
            document_result = embeddings.embed_documents([document_text])

    z*https://api.upstage.ai/v1/solar/embeddingsstrendpoint_urlzembedding-querymodelNzOptional[SecretStr]solar_api_keyforbid)extrac                <    t        t        |dd            }||d<   |S )z'Validate api key exists in environment.r;   SOLAR_API_KEY)r   r   )clsvaluesr;   s      r&   validate_environmentz$SolarEmbeddings.validate_environmentR   s+     . /J
 #0r(   c                "   | j                   |d}d| j                  j                          dd}t        j                  | j
                  ||      }|j                         }t        |d         dk(  rt        d|d	          |d   d   d
   }|S )N)r:   inputzBearer zapplication/json)AuthorizationzContent-Type)headersjsondatar   zSolar API returned an error: 	base_resp	embedding)	r:   r;   get_secret_valuerequestspostr9   rG   len
ValueError)selftextpayloadrF   responseparsed_responserJ   s          r&   r,   zSolarEmbeddings.embed[   s    
 ZZ
  't'9'9'J'J'L&MN.
 ==!2!2G'R"--/ v&'1,/0L/MN  $F+A.{;	r(   c                D    |D cg c]  }t        | |       }}|S c c}w )zEmbed documents using a Solar embedding endpoint.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        rQ   r3   )rP   textsrQ   r/   s       r&   embed_documentszSolarEmbeddings.embed_documentsx   s-     EJJD&t$7J
J Ks   c                     t        | |      }|S )zEmbed a query using a Solar embedding endpoint.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        rV   rW   )rP   rQ   rJ   s      r&   embed_queryzSolarEmbeddings.embed_query   s     %T5	r(   )rA   r   r1   r   )rQ   r8   r1   List[List[float]])rX   z	List[str]r1   r\   )rQ   r8   r1   zList[float])__name__
__module____qualname____doc__r9   __annotations__r:   r;   r   model_configr   rB   r,   rY   r[    r(   r&   r)   r)   0   st    & EL#D"E3"')-M&- L   
:

r(   )r1   zCallable[[Any], Any])r/   r)   r-   r   r.   r   r1   r   )!
__future__r   r!   typingr   r   r   r   r   rL   langchain_core._apir	   langchain_core.embeddingsr
   langchain_core.utilsr   r   r   pydanticr   r   r   tenacityr   r   r   r   	getLoggerr]   r    r'   r3   r)   rc   r(   r&   <module>rl      s{    "  6 6  * 0 V V 5 5  
		8	$ . 
E6U[i [[r(   