o
    g                     @   s   d dl mZmZ d dlmZ d dlmZmZmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZ d dlmZ d d	lmZmZmZ d
ee dee fddZd
ee dee fddZd
ee dee fddZG dd deZdS )    )OptionalSequence)	overrides)	GetResultIncludeEnumMetadataQueryResult)System)Executor)	CountPlanGetPlanKNNPlan)MetadataReaderVectorReader)LocalSegmentManager)
CollectionVectorQueryVectorQueryResultmetadatareturnc                 C   sD   | sdS i }|   D ]\}}|ds|||< q
t|dkr dS |S )z[Remove any chroma-specific metadata keys that the client shouldn't see from a metadata map.Nzchroma:r   )items
startswithlen)r   resultkv r   X/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/execution/executor/local.py_clean_metadata   s   
r   c                 C      | rd| v rt | d S dS )z2Retrieve the document (if any) from a Metadata mapzchroma:documentNstrr   r   r   r   _doc      r#   c                 C   r   )z-Retrieve the uri (if any) from a Metadata mapz
chroma:uriNr    r"   r   r   r   _uri#   r$   r%   c                       s   e Zd ZU eed< def fddZedede	fddZ
ededefd	d
ZededefddZdedefddZdedefddZ  ZS )LocalExecutor_managersystemc                    s   t  | | t| _d S N)super__init__requirer   r'   )selfr(   	__class__r   r   r+   .   s   zLocalExecutor.__init__planr   c                 C   s   |  |jj|jjS r)   )_metadata_segmentscan
collectioncountversion)r-   r0   r   r   r   r4   2   s   zLocalExecutor.countc           
   	   C   s,  |  |jjj|jj|jj|jj|jj|j	j
|j	jdd}dd |D }d }d }d }d }t }|jjrXt|dkrO| |jjj||jjd}	dd |	D }nt }|tj |jjridd |D }|tj |jjrzd	d |D }|tj |jjrd
d |D }|tj t||||d ||dS )NTrequest_version_contextwherewhere_documentidslimitoffsetinclude_metadatac                 S      g | ]}|d  qS idr   .0rr   r   r   
<listcomp>B       z%LocalExecutor.get.<locals>.<listcomp>r   )r:   r7   c                 S   r>   	embeddingr   )rB   r   r   r   r   rD   N   rE   c                 S      g | ]}t |d  qS r"   )r#   rA   r   r   r   rD   T       c                 S   rH   r"   )r%   rA   r   r   r   rD   X   rI   c                 S   rH   r"   )r   rA   r   r   r   rD   \   rI   )r:   
embeddings	documentsurisdata	metadatasincluded)r1   r2   r3   get_metadatar5   filterr8   r9   user_idsr;   fetchskiplist
projectionrG   r   _vector_segmentget_vectorsappendr   rJ   documentrK   urirL   r   rN   r   )
r-   r0   recordsr:   rJ   rK   rL   rN   rO   vectorsr   r   r   get6   sR   
zLocalExecutor.getc              
      s  d }|j js|j js|j jr.| |jjj|jj|j j|j j|j jd ddd}dd |D }g gt	|j
j }|d u sAt	|dkr]t|j
j|j
j||jjd |jjd}| |jj|}dd |D }d }d }d }	d }
d }t }|jjrdd |D }|tj |jjrd	d |D }|tj |jjs|jjs|jjrttd
d |D }| |jjj|jjd d |d ddd}dd |D  |jjrׇ fdd|D }|tj |jjr fdd|D }	|tj |jjr fdd|D }
|tj t||||	d |
||dS )Nr   Fr6   c                 S   r>   r?   r   rA   r   r   r   rD   w   rE   z%LocalExecutor.knn.<locals>.<listcomp>)r]   r   allowed_idsinclude_embeddingsoptionsr7   c                 S      g | ]	}d d |D qS )c                 S   r>   r?   r   rA   r   r   r   rD      rE   0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>r   rB   r   r   r   r   rD          c                 S   rb   )c                 S   r>   rF   r   rA   r   r   r   rD      rE   rc   r   rd   r   r   r   rD      re   c                 S   rb   )c                 S   r>   )distancer   rA   r   r   r   rD      rE   rc   r   rd   r   r   r   rD      re   c                 S   s   g | ]	}|D ]}|qqS r   r   )rB   r   r@   r   r   r   rD      re   Tc                 S   s   i | ]	}|d  |d qS )r@   r   r   rA   r   r   r   
<dictcomp>   re   z%LocalExecutor.knn.<locals>.<dictcomp>c                       g | ]} fd d|D qS )c                       g | ]
}t  |d qS r)   )r#   r^   rB   r@   metadata_by_idr   r   rD          rc   r   rd   rk   r   r   rD          c                    rh   )c                    ri   r)   )r%   r^   rj   rk   r   r   rD      rm   rc   r   rd   rk   r   r   rD      rn   c                    rh   )c                    ri   r)   )r   r^   rj   rk   r   r   rD      rm   rc   r   rd   rk   r   r   rD      rn   )r:   rJ   rK   rL   rM   rN   	distancesrO   )rQ   rR   r8   r9   r1   r2   r3   rP   r5   r   knnrJ   r   rS   rV   rG   rW   query_vectorsrU   rY   r   rankro   rZ   r   r[   setrK   rL   rN   r   )r-   r0   prefiltered_idsr\   knnsqueryr:   rJ   rK   rL   rN   ro   rO   
merged_idshydrated_recordsr   rk   r   rp   j   s   	


zLocalExecutor.knnr3   c                 C      | j |jtS r)   )r'   get_segmentr@   r   r-   r3   r   r   r   r1         zLocalExecutor._metadata_segmentc                 C   ry   r)   )r'   rz   r@   r   r{   r   r   r   rW      r|   zLocalExecutor._vector_segment)__name__
__module____qualname__r   __annotations__r	   r+   r   r   intr4   r   r   r^   r   r   rp   r   r   r1   r   rW   __classcell__r   r   r.   r   r&   +   s   
 3^r&   N)typingr   r   r   chromadb.api.typesr   r   r   r   chromadb.configr	   $chromadb.execution.executor.abstractr
   "chromadb.execution.expression.planr   r   r   chromadb.segmentr   r   #chromadb.segment.impl.manager.localr   chromadb.typesr   r   r   r   r!   r#   r%   r&   r   r   r   r   <module>   s    