U
    hy                     @   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 d dlmZ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)	SecretStr)BaseRetriever)convert_to_secret_strget_from_dict_or_envpre_init)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< G dd dZedd fddZeeedddZe	eeee d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_urlZv2arcee_api_versionzhttps://app.arcee.aiarcee_app_urlmodel_kwargsc                   @   s   e Zd ZdZdZdS )zArceeRetriever.ConfigZforbidTN)__name__
__module____qualname__extraZunderscore_attrs_are_private r   r   H/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/retrievers/arcee.pyConfig4   s   r   )datareturnc                    s>   t  jf | t| j | j| j| j| jd| _	| j	
  dS )zInitializes private fields.)r   r   r   r   Z
model_nameN)super__init__r   r   Zget_secret_valuer   r   r   r   r   Zvalidate_model_training_status)selfr   	__class__r   r   r!   8   s    zArceeRetriever.__init__)valuesr   c                 C   s   t t|dd|d< t|dd|d< t|dd|d< t|dd|d< |d	 r|d	 }|d
dk	rx|d
dksxtd|ddk	rt|dtstd|dD ]}tf | q|S )z%Validate Arcee environment variables.r   ZARCEE_API_KEYr   ZARCEE_API_URLr   ZARCEE_APP_URLr   ZARCEE_API_VERSIONr   sizeNr   z`size` must not be negative.filtersz`filters` must be a list.)r
   r   get
ValueError
isinstancer   r   )clsr%   kwfr   r   r   validate_environmentsG   sB    z$ArceeRetriever.validate_environments)queryrun_managerkwargsr   c              
   K   s^   z&| j std| j jf d|i|W S  tk
rX } ztd| |W 5 d}~X Y nX dS )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.r/   z"Error while retrieving documents: N)r   r)   retrieve	Exception)r"   r/   r0   r1   er   r   r   _get_relevant_documentsx   s    z&ArceeRetriever._get_relevant_documents)r   r   r   __doc__r   r   r   __annotations__r   strr   r   r   r   r   r   r   r!   r   r.   r   r   r   r5   __classcell__r   r   r#   r   r      s"   
1  r   N)typingr   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.documentsr   Zlangchain_core.pydantic_v1r   Zlangchain_core.retrieversr	   Zlangchain_core.utilsr
   r   r   Z#langchain_community.utilities.arceer   r   r   r   r   r   r   <module>   s   