o
    3Ih                     @   s   d dl mZmZmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ G dd deZG d	d
 d
eZededZG dd deZG dd deZG dd deZdS )    )OptionalSequenceTypeVar)abstractmethod)
CollectionMetadataEmbeddingRecord	OperationRequestVersionContextVectorEmbeddingRecordWhereWhereDocumentVectorQueryVectorQueryResultSegmentSeqIdMetadata)	ComponentSystem)UUID)Enumc                   @   s$   e Zd ZdZdZdZdZdZdZdS )SegmentTypez"urn:chroma:segment/metadata/sqlitez+urn:chroma:segment/vector/hnsw-local-memoryz.urn:chroma:segment/vector/hnsw-local-persistedz*urn:chroma:segment/vector/hnsw-distributedz#urn:chroma:segment/record/blockfilez%urn:chroma:segment/metadata/blockfileN)	__name__
__module____qualname__SQLITEHNSW_LOCAL_MEMORYHNSW_LOCAL_PERSISTEDHNSW_DISTRIBUTEDBLOCKFILE_RECORDBLOCKFILE_METADATA r    r    Y/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/segment/__init__.pyr      s    r   c                   @   sr   e Zd ZededefddZededefddZ	ede
fd	d
Zededee fddZedddZdS )SegmentImplementationsytstemsegmentc                 C   s   d S Nr    )selfr#   r$   r    r    r!   __init__    s   zSegmentImplementation.__init__request_version_contextreturnc                 C      dS )z,Get the number of embeddings in this segmentNr    )r&   r(   r    r    r!   count$      zSegmentImplementation.countc                 C   r*   )z7Get the maximum SeqID currently indexed by this segmentNr    r&   r    r    r!   	max_seqid)   r,   zSegmentImplementation.max_seqidmetadatac                 C   r*   )zGiven an arbitrary metadata map (e.g, from a collection), validate it and
        return metadata (if any) that is applicable and should be applied to the
        segment. Validation errors will be reported to the user.Nr    )r/   r    r    r!   propagate_collection_metadata.      z3SegmentImplementation.propagate_collection_metadataNc                 C   r*   )z#Delete the segment and all its dataNr    r-   r    r    r!   delete5   r,   zSegmentImplementation.delete)r)   N)r   r   r   r   r   r   r'   r	   intr+   r   r.   staticmethodr   r   r0   r2   r    r    r    r!   r"      s    r"   S)boundc                   @   sh   e Zd ZdZe						ddedee dee dee	e
  dee d	ee d
ede	e fddZdS )MetadataReaderz$Embedding Metadata segment interfaceNTr(   wherewhere_documentidslimitoffsetinclude_metadatar)   c                 C   r*   )zQuery for embedding metadata.Nr    )r&   r(   r8   r9   r:   r;   r<   r=   r    r    r!   get_metadataA   s   zMetadataReader.get_metadata)NNNNNT)r   r   r   __doc__r   r	   r   r   r   r   strr3   boolr   r>   r    r    r    r!   r7   >   s4    
	r7   c                	   @   sX   e Zd ZdZe	ddedeee  dee	 fddZ
ededeee  fd	d
ZdS )VectorReaderz"Embedding Vector segment interfaceNr(   r:   r)   c                 C   r*   )z]Get embeddings from the segment. If no IDs are provided, all embeddings are
        returned.Nr    )r&   r(   r:   r    r    r!   get_vectorsS   s   zVectorReader.get_vectorsqueryc                 C   r*   )zYGiven a vector query, return the top-k nearest neighbors for vector in the
        query.Nr    )r&   rD   r    r    r!   query_vectors]      zVectorReader.query_vectorsr%   )r   r   r   r?   r   r	   r   r   r@   r
   rC   r   r   rE   r    r    r    r!   rB   P   s"    
	
rB   c                   @   s^   e Zd ZdZededee fddZede	dee	 fddZ
ede	d	edd
fddZd
S )SegmentManagerzfInterface for a pluggable strategy for creating, retrieving and instantiating
    segments as required
collectionr)   c                 C   r*   )zsReturn the segments required for a new collection. Returns only segment data,
        does not persist to the SysDBNr    )r&   rH   r    r    r!   #prepare_segments_for_new_collectionj   rF   z2SegmentManager.prepare_segments_for_new_collectioncollection_idc                 C   r*   )zDelete any local state for all the segments associated with a collection, and
        returns a sequence of their IDs. Does not update the SysDB.Nr    )r&   rJ   r    r    r!   delete_segmentsr   s   zSegmentManager.delete_segments	hint_typeNc                 C   r*   )zSignal to the segment manager that a collection is about to be used, so that
        it can preload segments as needed. This is only a hint, and implementations are
        free to ignore it.Nr    )r&   rJ   rL   r    r    r!   hint_use_collectionx   r1   z"SegmentManager.hint_use_collection)r   r   r   r?   r   r   r   r   rI   r   rK   r   rM   r    r    r    r!   rG   f   s    rG   N) typingr   r   r   abcr   chromadb.typesr   r   r   r	   r
   r   r   r   r   r   r   r   chromadb.configr   r   uuidr   enumr   r   r"   r5   r7   rB   rG   r    r    r    r!   <module>   s    8	