
    7|h                     `    d dl Z d dlmZmZmZmZmZ  e j                  e      Z	 G d d      Z
y)    N)AnyDictListOptionalUnionc            
           e Zd ZdZ	 ddedee   defdZdeded	ed
edef
dZde	e
eef      defdZdede	e
eef      fdZde	e   de	e
eef      fdZdeee	e   f   dee	e
eef         fdZy)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                 *   	 ddl m}m} || _        || _        || _        || _	         || j                        | _
        | j                  r&| j                  j                  | j                         y y # t        $ r t        j                  d       Y y w xY w)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   s         g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/dria_index.py__init__zDriaAPIWrapper.__init__   s    
	) &
5))$*:*:;   	LL 	s   A1 1BBnamedescriptioncategory	embeddingreturnc                     | j                   j                  ||||      }t        j                  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   s         r   create_knowledge_basez$DriaAPIWrapper.create_knowledge_base+   sL     &&--X; . 
 	6{mDE&    datac                 l    | j                   j                  |      }t        j                  d|        |S )z$Insert data into the knowledge base.zData inserted: )r   insert_textr   r!   )r   r$   responses      r   insert_datazDriaAPIWrapper.insert_data:   s0    ##//5ohZ01r#   queryc                     | j                   j                  || j                        }t        j	                  d|        |S )zPerform a text-based search.r   zSearch results: )r   searchr   r   r!   )r   r)   resultss      r   r,   zDriaAPIWrapper.search@   s:    ""))%tzz)B&wi01r#   vectorc                     | j                   j                  || j                        }t        j	                  d|        |S )zPerform a vector-based query.r+   zVector query results: )r   r)   r   r   r!   )r   r.   vector_query_resultss      r   query_with_vectorz DriaAPIWrapper.query_with_vectorF   s>    #//55fDJJ5O,-A,BCD##r#   c                     t        |t              r| j                  |      S t        |t              r#t	        d |D              r| j                  |      S t        j                  d       y)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              3   <   K   | ]  }t        |t                y w)N)
isinstancefloat).0items     r   	<genexpr>z%DriaAPIWrapper.run.<locals>.<genexpr>X   s     ,WZe-D,Ws   zrInvalid query type. Please provide a string for text search or a 
                list of floats for vector query.N)r4   strr,   listallr1   r   r   )r   r)   s     r   runzDriaAPIWrapper.runL   s\     eS!;;u%%t$,WQV,W)W))%00LL4 r#   )N
   )__name__
__module____qualname____doc__r9   r   intr   r"   r   r   r   r(   r,   r5   r1   r   r<    r#   r   r	   r	      s    
 MO<<)1#<FI<.  	
  
T#s(^ 4  C Dc3h$8 $U $T#s(^8L $sDK/0 Xd4S>>R5S r#   r	   )loggingtypingr   r   r   r   r   	getLoggerr>   r   r	   rC   r#   r   <module>rG      s,     3 3			8	$X Xr#   