o
    AgY                     @   s   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	 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                	       s   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dZdeddf fddZededefddZde	dededee fddZ  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                    sB   t  jdi | t| j | j| j| j| jd| _	| 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__r   k/var/www/html/development/chatbot/venv/lib/python3.10/site-packages/langchain_community/retrievers/arcee.pyr    8   s   zArceeRetriever.__init__valuesc                 C   s   t t|dd|d< t|dd|d< t|dd|d< t|dd|d< |d	 r^|d	 }|d
dur<|d
dks<td|ddur^t|dtsOtd|dD ]	}tdi | qT|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fr   r   r&   validate_environmentsG   sB   z$ArceeRetriever.validate_environmentsqueryrun_managerkwargsc              
   K   sP   z| j std| j jdd|i|W S  ty' } ztd| |d}~w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.r5   z"Error while retrieving documents: Nr   )r   r/   retrieve	Exception)r#   r5   r6   r7   er   r   r&   _get_relevant_documentsx   s   z&ArceeRetriever._get_relevant_documents)__name__
__module____qualname____doc__r   r   r   __annotations__r   strr   r   r   r   r   r   r   model_configr    r   r4   r   r   r   r;   __classcell__r   r   r$   r&   r      s>   
 0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   r&   <module>   s    