o
    3Ih^                     @   s   d dl mZmZ d dlmZ d dl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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   a/home/air/sanwanet/gpt-api/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,   r/   r   r   r   r3   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rWt|dkrO| |jjj||jjd}	dd |	D }nt }|d |jjrgd	d |D }|d
 |jjrwdd |D }|d |jjrdd |D }|d 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   )r9   r6   c                 S   r=   	embeddingr   )rA   r   r   r   r   rC   N   rD   
embeddingsc                 S      g | ]}t |d  qS r!   )r"   r@   r   r   r   rC   T       	documentsc                 S   rH   r!   )r$   r@   r   r   r   rC   X   rI   urisc                 S   rH   r!   )r   r@   r   r   r   rC   \   rI   	metadatas)r9   rG   rJ   rK   datarL   included)r0   r1   r2   get_metadatar4   filterr7   r8   user_idsr:   fetchskiplist
projectionrF   r   _vector_segmentget_vectorsappenddocumenturir   r   )
r,   r/   recordsr9   rG   rJ   rK   rL   rN   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 }|d	 |jjrd
d |D }|d |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 }|d |jjr fdd|D }	|d |jjr fdd|D }
|d t||||	d |
||dS )Nr   Fr5   c                 S   r=   r>   r   r@   r   r   r   rC   w   rD   z%LocalExecutor.knn.<locals>.<listcomp>)r\   r   allowed_idsinclude_embeddingsoptionsr6   c                 S      g | ]	}d d |D qS )c                 S   r=   r>   r   r@   r   r   r   rC      rD   0LocalExecutor.knn.<locals>.<listcomp>.<listcomp>r   rA   r   r   r   r   rC          c                 S   ra   )c                 S   r=   rE   r   r@   r   r   r   rC      rD   rb   r   rc   r   r   r   rC      rd   rG   c                 S   ra   )c                 S   r=   )distancer   r@   r   r   r   rC      rD   rb   r   rc   r   r   r   rC      rd   	distancesc                 S   s   g | ]	}|D ]}|qqS r   r   )rA   r   r?   r   r   r   rC      rd   Tc                 S   s   i | ]	}|d  |d qS )r?   r   r   r@   r   r   r   
<dictcomp>   rd   z%LocalExecutor.knn.<locals>.<dictcomp>c                       g | ]} fd d|D qS )c                       g | ]
}t  |d qS r(   )r"   r]   rA   r?   metadata_by_idr   r   rC          rb   r   rc   rk   r   r   rC          rJ   c                    rh   )c                    ri   r(   )r$   r]   rj   rk   r   r   rC      rm   rb   r   rc   rk   r   r   rC      rn   rK   c                    rh   )c                    ri   r(   )r   r]   rj   rk   r   r   rC      rm   rb   r   rc   rk   r   r   rC      rn   rL   )r9   rG   rJ   rK   rM   rL   rf   rN   )rP   rQ   r7   r8   r0   r1   r2   rO   r4   r   knnrG   r   rR   rU   rF   rV   query_vectorsrT   rX   rankrY   r   rZ   setr   )r,   r/   prefiltered_idsr[   knnsqueryr9   rG   rJ   rK   rL   rf   rN   
merged_idshydrated_recordsr   rk   r   ro   j   s   	







zLocalExecutor.knnr2   c                 C      | j |jtS r(   )r&   get_segmentr?   r   r,   r2   r   r   r   r0         zLocalExecutor._metadata_segmentc                 C   rx   r(   )r&   ry   r?   r   rz   r   r   r   rV      r{   zLocalExecutor._vector_segment)__name__
__module____qualname__r   __annotations__r   r*   r   r
   intr3   r   r   r]   r   r   ro   r   r   r0   r   rV   __classcell__r   r   r-   r   r%   +   s   
 3^r%   N)typingr   r   r   chromadb.api.typesr   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    