o
    ȳg                     @   s@   d dl Z d dlmZmZmZmZmZ e eZ	G dd dZ
dS )    N)AnyDictListOptionalUnionc                
   @   s   e Zd ZdZ	ddedee defddZd	ed
edededef
ddZde	e
eef  defddZdede	e
eef  fddZde	e de	e
eef  fddZdeee	e f dee	e
eef   fddZdS )DriaAPIWrappera  Wrapper around Dria API.

    This wrapper facilitates interactions with Dria's vector search
    and retrieval services, including creating knowledge bases, inserting data,
    and fetching search results.

    Attributes:
        api_key: Your API key for accessing Dria.
        contract_id: The contract ID of the knowledge base to interact with.
        top_n: Number of top results to fetch for a search.
    N
   api_keycontract_idtop_nc                 C   sv   z
ddl m}m} W n ty   td Y d S w || _|| _|| _|| _	|| jd| _
| jr9| j
| j d S d S )Nr   )DriaModelszDria is not installed. Please install Dria to use this wrapper.
                
                You can install Dria using the following command:
                pip install dria
                )r	   )driar   r   ImportErrorloggererrorr	   modelsr
   r   dria_clientset_contract)selfr	   r
   r   r   r    r   d/var/www/html/chatdoc2/venv/lib/python3.10/site-packages/langchain_community/utilities/dria_index.py__init__   s    
zDriaAPIWrapper.__init__namedescriptioncategory	embeddingreturnc                 C   s.   | j j||||d}td|  || _|S )zCreate a new knowledge base.)r   r   r   r   z Knowledge base created with ID: )r   creater   infor
   )r   r   r   r   r   r
   r   r   r   create_knowledge_base+   s   z$DriaAPIWrapper.create_knowledge_basedatac                 C   s    | j |}td|  |S )z$Insert data into the knowledge base.zData inserted: )r   insert_textr   r   )r   r!   responser   r   r   insert_data:   s   zDriaAPIWrapper.insert_dataqueryc                 C   &   | j j|| jd}td|  |S )zPerform a text-based search.r   zSearch results: )r   searchr   r   r   )r   r%   resultsr   r   r   r(   @      zDriaAPIWrapper.searchvectorc                 C   r&   )zPerform a vector-based query.r'   zVector query results: )r   r%   r   r   r   )r   r+   vector_query_resultsr   r   r   query_with_vectorF   r*   z DriaAPIWrapper.query_with_vectorc                 C   sH   t |tr
| |S t |trtdd |D r| |S td dS )a
  Method to handle both text-based searches and vector-based queries.

        Args:
            query: A string for text-based search or a list of floats for
            vector-based query.

        Returns:
            The search or query results from Dria.
        c                 s   s    | ]}t |tV  qd S )N)
isinstancefloat).0itemr   r   r   	<genexpr>X   s    z%DriaAPIWrapper.run.<locals>.<genexpr>zrInvalid query type. Please provide a string for text search or a 
                list of floats for vector query.N)r.   strr(   listallr-   r   r   )r   r%   r   r   r   runL   s   



zDriaAPIWrapper.run)Nr   )__name__
__module____qualname____doc__r3   r   intr   r    r   r   r   r$   r(   r/   r-   r   r6   r   r   r   r   r      s2    

"2r   )loggingtypingr   r   r   r   r   	getLoggerr7   r   r   r   r   r   r   <module>   s    
