
    NgY                         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d
S )    )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                      j        di | t          | j                                        | j        | j        | j        | j                  | _	        | j	        
                                 dS )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     `/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/retrievers/arcee.pyr#   zArceeRetriever.__init__8   s}     	  4   #,==??,"4*z
 
 
 	3355555    valuesc                 :   t          t          |dd                    |d<   t          |dd          |d<   t          |dd          |d<   t          |dd          |d<   |d	         r|d	         }|                    d
          (|                    d
          dk    st          d          |                    d          [t	          |                    d          t
                    st          d          |                    d          D ]}t          di | |S )z%Validate Arcee environment variables.r   ARCEE_API_KEYr   ARCEE_API_URLr   ARCEE_APP_URLr   ARCEE_API_VERSIONr   sizeNr   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   sN   
 #8  #
 #
 #7#
 #
 #7#
 #
 ';'
 '
"# .! 	$'B vvf~~)vvf~~**$%CDDD vvi  ,!"&&"3"3T:: B$%@AAA	** $ $AOOOOOO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   s}    	N< ? !=>>>(4<(??u???? 	N 	N 	NE!EEFFAM	Ns   ), 
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      sr         $ '+GXl#***JJJ/M3///!s!!!/M3///-1L(4S>*1111:  L6s 6t 6 6 6 6 6 6 .4 .D . . . X.`NN'ENQTN	hN N N N N N N 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      s    , , , , , , , , , , , , C C C C C C - - - - - - 3 3 3 3 3 3 V V V V V V V V V V * * * * * * * * H H H H H H H H}N }N }N }N }N] }N }N }N }N }Nr)   