
    Fd	                         d dl Z d dlZd dlmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ ddlmZmZ ddlmZmZ  G d	 d
ee         e          ZdS )    N)
MutableSetSequence)Config)logger)AbstractSingleton   )
MemoryItemMemoryItemRelevance)	Embeddingget_embeddingc            	           e Zd Zej        defd            Zdedededz  fdZ	dede
dedee         fdZd	ededee         fd
Zdee
e
f         fdZdS )VectorMemoryProviderconfigc                     d S N )selfr   s     XC:\Users\Administrator\Downloads\Auto-GPT-master\autogpt\memory\vector\providers\base.py__init__zVectorMemoryProvider.__init__   s        queryreturnNc                 H    |                      |d|          }|r|d         ndS )z
        Gets the data from the memory that is most relevant to the given query.

        Args:
            query: The query used to retrieve information.
            config: The config Object.

        Returns: The most relevant Memory
           r   N)get_relevant)r   r   r   results       r   getzVectorMemoryProvider.get   s.     ""5!V44",vayy,r   kc           
      n   t          |           dk     rg S t          j        d| d| dt          |            d           |                     ||          t          j        dd D                         t	          j        d D                       | d	         d	d	d
         }fd|D             S )aX  
        Returns the top-k most relevant memories for the given query

        Args:
            query: the query to compare stored memories to
            k: the number of relevant memories to fetch
            config: The config Object.

        Returns:
            list[MemoryItemRelevance] containing the top [k] relevant memories
        r   zSearching for z relevant memories for query 'z'; z memories in indexzMemory relevance scores: c                 ,    g | ]}t          |          S r   )str.0rs     r   
<listcomp>z5VectorMemoryProvider.get_relevant.<locals>.<listcomp>8   s    1M1M1MQ#a&&1M1M1Mr   c                     g | ]	}|j         
S r   )scorer"   s     r   r%   z5VectorMemoryProvider.get_relevant.<locals>.<listcomp>;   s    #@#@#@AG#@#@#@r   Nc                      g | ]
}|         S r   r   )r#   i
relevancess     r   r%   z5VectorMemoryProvider.get_relevant.<locals>.<listcomp>=   s    555!
1555r   )lenr   debugscore_memories_for_relevancenpargsort)r   r   r   r   top_k_indicesr+   s        @r   r   z!VectorMemoryProvider.get_relevant!   s     t99q==I-Q - -e - -4yy- - -	
 	
 	

 66ufEE
O1M1M*1M1M1MOOPPP 
#@#@Z#@#@#@AA1"##FtttL5555}5555r   	for_queryc                 D    t          |          fd| D             S )z
        Returns MemoryItemRelevance for every memory in the index.
        Implementations may override this function for performance purposes.
        c                 <    g | ]}|                               S r   )relevance_for)r#   me_queryr2   s     r   r%   zEVectorMemoryProvider.score_memories_for_relevance.<locals>.<listcomp>G   s'    BBB	733BBBr   )r   )r   r2   r   r7   s    ` @r   r.   z1VectorMemoryProvider.score_memories_for_relevance?   s2     +9f==BBBBBTBBBBr   c                 N    t          |           t          j        d | d          fS )zl
        Returns:
            tuple (n_memories: int, n_chunks: int): the stats of the memory index
        c                 0    | t          |j                  z   S r   )r,   e_chunks)tr6   s     r   <lambda>z0VectorMemoryProvider.get_stats.<locals>.<lambda>N   s    C
OO8K r   r   )r,   	functoolsreduce)r   s    r   	get_statszVectorMemoryProvider.get_statsI   s)    
 4yy)*+K+KTSTUUUUr   )__name__
__module____qualname__abcabstractmethodr   r   r!   r
   r   intr   r   r.   tupler?   r   r   r   r   r      s	       v    - -f -1Dt1K - - - -66 6*06	%	&6 6 6 6<CC&,C	%	&C C C CV5c? V V V V V Vr   r   )rC   r=   typingr   r   numpyr/   autogpt.config.configr   autogpt.logsr   autogpt.singletonr    r	   r
   utilsr   r   r   r   r   r   <module>rN      s    



     ' ' ' ' ' ' ' '     ( ( ( ( ( (       / / / / / / . . . . . . . . , , , , , , , ,?V ?V ?V ?V ?V:j13D ?V ?V ?V ?V ?Vr   