
    7|hY                         d dl mZmZmZmZ d dl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mZ d dlmZmZ  G d d	e
      Zy
)    )AnyDictListOptional)CallbackManagerForRetrieverRun)Document)BaseRetriever)convert_to_secret_strget_from_dict_or_envpre_init)
ConfigDict	SecretStr)ArceeWrapper
DALMFilterc            	            e Zd ZU dZdZee   ed<   	 eed<   	 e	ed<   	 dZ
e	ed<   	 dZe	ed	<   	 d
Ze	ed<   	 dZeee	ef      ed<   	  ed      Zdeddf fdZededefd       Zde	dededee   fdZ xZS )ArceeRetrievera  Arcee Domain Adapted Language Models (DALMs) retriever.

    To use, set the ``ARCEE_API_KEY`` environment variable with your Arcee API key,
    or pass ``arcee_api_key`` as a named parameter.

    Example:
        .. code-block:: python

            from langchain_community.retrievers import ArceeRetriever

            retriever = ArceeRetriever(
                model="DALM-PubMed",
                arcee_api_key="ARCEE-API-KEY"
            )

            documents = retriever.invoke("AI-driven music therapy")
    N_clientarcee_api_keymodelzhttps://api.arcee.aiarcee_api_urlv2arcee_api_versionzhttps://app.arcee.aiarcee_app_urlmodel_kwargsforbid)extradatareturnc                    t        |   di | t        | j                  j	                         | j
                  | j                  | j                  | j                        | _	        | j                  j                          y)zInitializes private fields.)r   r   r   r   
model_nameN )super__init__r   r   get_secret_valuer   r   r   r   r   validate_model_training_status)selfr   	__class__s     c/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/retrievers/arcee.pyr#   zArceeRetriever.__init__8   sg     	 4 #,,==?,,"44**zz
 	335    valuesc                    t        t        |dd            |d<   t        |dd      |d<   t        |dd      |d<   t        |dd      |d<   |d	   r|d	   }|j                  d
      |j                  d
      dk\  st        d      |j                  d      Kt	        |j                  d      t
              st        d      |j                  d      D ]  }t        di |  |S )z%Validate Arcee environment variables.r   ARCEE_API_KEYr   ARCEE_API_URLr   ARCEE_APP_URLr   ARCEE_API_VERSIONr   sizer   z`size` must not be negative.filtersz`filters` must be a list.r!   )r
   r   get
ValueError
isinstancer   r   )clsr*   kwfs       r(   validate_environmentsz$ArceeRetriever.validate_environmentsG   s   
 #8 #
 #7#
 #7#
 ';'
"# .!'B vvf~)vvf~*$%CDD vvi ,!"&&"3T:$%@AA	* $AOO$ r)   queryrun_managerkwargsc                     	 | j                   st        d       | j                   j                  dd|i|S # t        $ r}t        d|       |d}~ww xY w)aG  Retrieve {size} contexts with your retriever for a given query

        Args:
            query: Query to submit to the model
            size: The max number of context results to retrieve.
            Defaults to 3. (Can be less if filters are provided).
            filters: Filters to apply to the context dataset.
        zClient is not initialized.r9   z"Error while retrieving documents: Nr!   )r   r3   retrieve	Exception)r&   r9   r:   r;   es        r(   _get_relevant_documentsz&ArceeRetriever._get_relevant_documentsx   sa    	N<< !=>>(4<<((?u??? 	NA!EFAM	Ns   47 	A AA)__name__
__module____qualname____doc__r   r   r   __annotations__r   strr   r   r   r   r   r   r   model_configr#   r   r8   r   r   r   r@   __classcell__)r'   s   @r(   r   r      s    $ '+GXl#*J/M3/!s!/M3/-1L(4S>*11L6s 6t 6 .4 .D . .`NN'ENQTN	hNr)   r   N)typingr   r   r   r   langchain_core.callbacksr   langchain_core.documentsr   langchain_core.retrieversr	   langchain_core.utilsr
   r   r   pydanticr   r   #langchain_community.utilities.arceer   r   r   r!   r)   r(   <module>rP      s0    , , C - 3 V V * H}N] }Nr)   