a
    bg                     @   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eee edddZeeeeeddd	Ze	e
eef  ed
ddZee	e
eef  dddZe	e e	e
eef  dddZeee	e f ee	e
eef   d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   sr   zddl m}m} W n ty2   td Y d S 0 || _|| _|| _|| _	|| jd| _
| jrn| j
| j 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	   )Zdriar   r   ImportErrorloggererrorr	   modelsr
   r   dria_clientZset_contract)selfr	   r
   r   r   r    r   v/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/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)datar   c                 C   s    | j |}td|  |S )z$Insert data into the knowledge base.zData inserted: )r   Zinsert_textr   r   )r   r   responser   r   r   insert_data:   s    zDriaAPIWrapper.insert_data)queryr   c                 C   s&   | 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$   @   s    zDriaAPIWrapper.search)vectorr   c                 C   s&   | j j|| jd}td|  |S )zPerform a vector-based query.r#   zVector query results: )r   r"   r   r   r   )r   r&   Zvector_query_resultsr   r   r   query_with_vectorF   s    z DriaAPIWrapper.query_with_vectorc                 C   sL   t |tr| |S t |tr:tdd |D r:| |S td dS 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       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__r.   r   intr   r   r   r   r   r!   r$   r)   r'   r   r1   r   r   r   r   r      s    
 r   )loggingtypingr   r   r   r   r   	getLoggerr2   r   r   r   r   r   r   <module>   s   
