o
    Zh
                     @   s\   d Z ddl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 G dd de
Zd	S )
zWrapper around Dria Retriever.    )AnyListOptional)CallbackManagerForRetrieverRunDocument)BaseRetriever)DriaAPIWrapperc                       s   e Zd ZU dZeed< ddedee def fddZ				
ddededededef
ddZ
deddfddZdededee fddZ  ZS )DriaRetrieverz*`Dria` retriever using the DriaAPIWrapper.api_wrapperNapi_keycontract_idkwargsc                    s&   t ||d}t jdd|i| dS )z
        Initialize the DriaRetriever with a DriaAPIWrapper instance.

        Args:
            api_key: The API key for Dria.
            contract_id: The contract ID of the knowledge base to interact with.
        )r   r   r   N )r	   super__init__)selfr   r   r   r   	__class__r   `/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/retrievers/dria_index.pyr      s   zDriaRetriever.__init__Unspecifiedjinanamedescriptioncategory	embeddingreturnc                 C   s   | j ||||}|S )aw  Create a new knowledge base in Dria.

        Args:
            name: The name of the knowledge base.
            description: The description of the knowledge base.
            category: The category of the knowledge base.
            embedding: The embedding model to use for the knowledge base.


        Returns:
            The ID of the created knowledge base.
        )r   create_knowledge_base)r   r   r   r   r   responser   r   r   r      s   z#DriaRetriever.create_knowledge_basetextsc                 C   s   dd |D }| j | dS )zAdd texts to the Dria knowledge base.

        Args:
            texts: An iterable of texts and metadatas to add to the knowledge base.

        Returns:
            List of IDs representing the added texts.
        c                 S   s   g | ]}|d  |d dqS )textmetadata)r    r!   r   ).0r    r   r   r   
<listcomp>@   s    z+DriaRetriever.add_texts.<locals>.<listcomp>N)r   Zinsert_data)r   r   datar   r   r   	add_texts4   s   zDriaRetriever.add_textsqueryrun_managerc                C   s   | j |}dd |D }|S )a*  Retrieve relevant documents from Dria based on a query.

        Args:
            query: The query string to search for in the knowledge base.
            run_manager: Callback manager for the retriever run.

        Returns:
            A list of Documents containing the search results.
        c                 S   s*   g | ]}t |d  |d |d ddqS )r!   idscore)r(   r)   )Zpage_contentr!   r   )r"   resultr   r   r   r#   P   s    z9DriaRetriever._get_relevant_documents.<locals>.<listcomp>)r   search)r   r&   r'   resultsdocsr   r   r   _get_relevant_documentsC   s
   z%DriaRetriever._get_relevant_documents)N)r   r   )__name__
__module____qualname____doc__r	   __annotations__strr   r   r   r   r   r%   r   r   r.   __classcell__r   r   r   r   r
      s:   
  

r
   N)r2   typingr   r   r   Zlangchain_core.callbacksr   Zlangchain_core.documentsr   Zlangchain_core.retrieversr   Zlangchain_community.utilitiesr	   r
   r   r   r   r   <module>   s    