
    ti                        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
mZ d dlmZ d dlmZmZ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 d dlmZ d dlm Z m!Z! d dl"m#c m$Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZG d dlHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZP d dlQmRZR d dlSmTZTmUZU d dlVZVd dlWZWd dlXZX eWjY        eZ          Z[de\ddfdZ] G d de          Z^	 	 	 	 d$deGj_        de-deJe.         deJe1         deJe2         deJe3         deLeGj`        ddf         fdZadeJeGjb                 deJe\         fd ZcdeJeGjb                 deJe\         fd!ZddeMeJeGjb                          deMeJeGjb                          fd"ZedeJeGjb                 deJeGjb                 fd#ZfdS )%    )	ServerAPI)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)SysDB)QuotaEnforcerResource)
rate_limit)SegmentManagerMetadataReaderVectorReader)add_attributes_to_current_spanOpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClient)Producer)
Collection__version__)InvalidDimensionExceptionInvalidCollectionExceptionN)URICollectionMetadata
EmbeddableDocumentEmbeddingFunction
DataLoaderIDs
Embeddings	EmbeddingLoadable	Metadatas	DocumentsURIsWhereWhereDocumentInclude	GetResultQueryResultvalidate_metadatavalidate_update_metadatavalidate_wherevalidate_where_documentvalidate_batch)CollectionAddEventCollectionDeleteEventCollectionGetEventCollectionUpdateEventCollectionQueryEventClientCreateCollectionEvent)AnyOptionalSequence	GeneratorListcastSetDict)override)UUIDuuid4
index_namereturnc                 0   d|  }t          |           dk     st          |           dk    rt          |          t          j        d|           st          |          d| v rt          |          t          j        d|           rt          |          d S )Na  Expected collection name that (1) contains 3-63 characters, (2) starts and ends with an alphanumeric character, (3) otherwise contains only alphanumeric characters, underscores or hyphens (-), (4) contains no two consecutive periods (..) and (5) is not a valid IPv4 address, got    ?   z'^[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]$z..z0^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$)len
ValueErrorrematch)rB   msgs     G/var/www/icac/venv/lib/python3.11/site-packages/chromadb/api/segment.pycheck_index_namerM   B   s    	 	 	  :c*oo22oo8=zJJ oozoo	xEzRR oo     c                   v    e Zd ZU dZeed<   eed<   eed<   eed<   e	ed<   e
ed<   eed<   eed	<   eeej        f         ed
<   def fdZedefd            Z edej                  eefdededdfd                        Z edej                  eefdededej        fd                        Z edej                  ededdfd                        Z edej                  ededej        fd                        Z edej                  ed ej                     ddee!fdede"e#         de"e$e%                  de"e&e'                  de(ded edefd!                        Z) ed"ej                  ed ej                     dee!fdede"e#         de"e$e*                  de"e&e'                  ded edefd#                        Z+ ed$ej                  edd ej                     dee!fde"e         d%e"e         de"e$e*                  de"e&e'                  ded edefd&                        Z, ed'ej                  eddee!fd(e"e         d)e"e         ded ede-e         f
d*                        Z. ed+ej                  eee!fded edefd,                        Z/ ed-ej                  e	 	 dfd%ed.e"e         d/e"e#         ddfd0                        Z0 ed1ej                  eee!fdeded eddfd2                        Z1 ed3ej                   e2d4e3j4        5          e	 	 	 dgd6e5d4ed7e6d8e"e7         d9e"e8         d:e"e9         de(fd;                                    Z: ed<ej                  e	 	 	 	 dhd4ed6e5d7e"e6         d8e"e7         d9e"e8         d:e"e9         de(fd=                        Z; ed>ej                  e	 	 	 dgd4ed6e5d7e6d8e"e7         d9e"e8         d:e"e9         de(fd?                        Z< ed@ej                   e2d4e3j=        5          edi dddddi g dAf	d4ed6e"e5         dBe"e>         dCe"e         d(e"e         d)e"e         dDe"e         dEe"e         dFe"e?         dGe@deAfdH                                    ZB edIej                  e	 	 	 dgd4ed6e"e5         dBe"e>         dFe"e?         de5f
dJ                        ZC edKej                  ed4edefdL                        ZD edMej                   e2d4e3jE        5          edNi i g dOfd4edPe6dQedBe>dFe?dGe@deFfdR                                    ZG edSej                  edid4edTedeAfdU                        ZHedefdV            ZIedjdW            ZJede(fdX            ZKedefdY            ZLedefdZ            ZM ed[ejN                  d\ej        d]ejO        ddfd^            ZP ed_ejN                  d\ej        d`edae(ddfdb            ZQ edcejN                  d4edej        fdd            ZRd4eddfdeZS xZTS )k
SegmentAPIzHAPI implementation utilizing the new segment-based internal architecture	_settings_sysdb_manager	_producer_product_telemetry_client_opentelemetry_client
_tenant_id	_topic_ns_collection_cachesystemc                    t                                          |           |j        | _        |                     t
                    | _        |                     t                    | _        |                     t                    | _
        |                     t                    | _        |                     t                    | _        |                     t                    | _        i | _        d S N)super__init__settingsrQ   requirer   rR   r   rS   r	   _quotar   rU   r   rV   r   rT   rY   )selfrZ   	__class__s     rL   r^   zSegmentAPI.__init__c   s       ll5))^44ll=11)-6L)M)M&%)\\2E%F%F"h//!#rN   rC   c                 B    t          t          j                              S r\   )inttimetime_nsrb   s    rL   	heartbeatzSegmentAPI.heartbeatn   s    4<>>"""rN   zSegmentAPI.create_databasenametenantNc                     t          |          dk     rt          d          | j                            t	                      ||           d S )NrE   z0Database name must be at least 3 characters long)idrj   rk   )rG   rH   rR   create_databaserA   rb   rj   rk   s      rL   rn   zSegmentAPI.create_databaser   sX     t99q==OPPP##ww 	$ 	
 	
 	
 	
 	
rN   zSegmentAPI.get_databasec                 :    | j                             ||          S )N)rj   rk   )rR   get_databasero   s      rL   rq   zSegmentAPI.get_database~   s     {''T&'AAArN   zSegmentAPI.create_tenantc                     t          |          dk     rt          d          | j                            |           d S )NrE   z.Tenant name must be at least 3 characters longrj   )rG   rH   rR   create_tenantrb   rj   s     rL   rt   zSegmentAPI.create_tenant   sN     t99q==MNNN!! 	" 	
 	
 	
 	
 	
rN   zSegmentAPI.get_tenantc                 8    | j                             |          S )Nrs   )rR   
get_tenantru   s     rL   rw   zSegmentAPI.get_tenant   s     {%%4%000rN   zSegmentAPI.create_collectionFmetadataembedding_functiondata_loaderget_or_createdatabasec           	      <   |t          |           t          |           t                      }| j                            |||d |||          \  }	}
|
r:| j                            |	          }|D ]}| j                            |           nt          	                    d| d           | j
                            t          t          |          |j        j                             t!          dt          |          i           t#          | |	||          S )N)rm   rj   rx   	dimensionr{   rk   r|   Collection z/ already exists, returning existing collection.)collection_uuidry   r   clientmodelry   rz   )r,   rM   rA   rR   create_collectionrS   create_segmentscreate_segmentloggerdebugrU   capturer6   strrc   __name__r   r   )rb   rj   rx   ry   rz   r{   rk   r|   rm   collcreatedsegmentssegments                rL   r   zSegmentAPI.create_collection   sX    h''' 	WW55' 6 
 
g  	}44T::H# 4 4**733334 LLSdSSS  
 	&..' #B#5#?#H  	
 	
 	
 	'(93r77'CDDD1#	
 
 
 	
rN   z#SegmentAPI.get_or_create_collectionc           	      :    |                      ||||d||          S )NT)rj   rx   ry   rz   r{   rk   r|   )r   )rb   rj   rx   ry   rz   rk   r|   s          rL   get_or_create_collectionz#SegmentAPI.get_or_create_collection   s6     %%1# & 
 
 	
rN   zSegmentAPI.get_collectionrm   c                     ||||t          d          | j                            ||||          }|rt          | |d         ||          S t          d| d          )Nz*Name or id must be specified, but not both)rm   rj   rk   r|   r   r   r    does not exist.)rH   rR   get_collectionsr   )rb   rj   rm   ry   rz   rk   r|   existings           rL   get_collectionzSegmentAPI.get_collection   s     :$,2>d>NIJJJ;..Vh / 
 
  	Cqk#5'	    A4AAABBBrN   zSegmentAPI.list_collectionlimitoffsetc                     g }| j                             ||||          }|D ]&}|                    t          | |                     '|S )N)r   r   rk   r|   )r   r   )rR   r   appendr   )rb   r   r   rk   r|   collectionsdb_collectionsdb_collections           rL   list_collectionszSegmentAPI.list_collections  s|     44v 5 
 
 , 	 	M'      rN   zSegmentAPI.count_collectionsc                 X    t          | j                            ||                    }|S )Nrk   r|   )rG   rR   r   )rb   rk   r|   collection_counts       rL   count_collectionszSegmentAPI.count_collections  s4     K''v'II
 
  rN   zSegmentAPI._modifynew_namenew_metadatac                 :   |rt          |           |rt          |           |                     |           |r!|r| j                            |||           d S |r| j                            ||           d S |r| j                            ||           d S d S )N)rj   rx   rs   rx   )rM   r-   _validate_collectionrR   update_collection)rb   rm   r   r   s       rL   _modifyzSegmentAPI._modify+  s      	'X&&& 	3$\222!!"%%%  	E 	EK))"8l)SSSSS 	EK))"8)<<<<< 	EK))"|)DDDDD	E 	ErN   zSegmentAPI.delete_collectionc                    | j                             |||          }|r| j                             |d         d         ||           | j                            |d         d                   D ]}| j                             |           |r+|d         d         | j        v r| j        |d         d         = d S d S d S t          d| d          )N)rj   rk   r|   r   rm   r   r   r   )rR   r   delete_collectionrS   delete_segmentsdelete_segmentrY   rH   )rb   rj   rk   r|   r   ss         rL   r   zSegmentAPI.delete_collectionE  s    ;..fx / 
 
  		CK))D!&8 *    ]228A;t3DEE . .**1---- >HQK-1GGG*8A;t+<===> >GG A4AAABBBrN   zSegmentAPI._addcollection_id)subjectresourceids
embeddings	metadatas	documentsurisc                    | j                             |||t          |                     |                     |          }| j                            |t          j        j                   t          |||||fd| 
                                i           g }t          t          j        j        |||||          D ]-}	|                     ||	           |                    |	           .| j                            ||           | j                            t%          t          |          t'          |          |t'          |          nd|t'          |          nd|t'          |          nd                     dS )Nmax_batch_sizer   r   r   r   r   r   )r   
add_amountwith_metadatawith_documents	with_urisT)ra   static_checkr   _get_collectionrS   hint_use_collectiont	OperationADDr0   get_max_batch_size_records_validate_embedding_recordr   rT   submit_embeddingsrU   r   r1   rG   )
rb   r   r   r   r   r   r   r   records_to_submitrs
             rL   _addzSegmentAPI._add\  s    	  Iz3}CUCUVVV##M22))-III*iD9t66889	
 	
 	
 KO!
 
 
 		( 		(A ++D!444$$Q''''((8IJJJ&.. #M 2 2s88*3*?c#hhhQ+4+@s3xxxa&*&6#c(((A  	
 	
 	
 trN   zSegmentAPI._updatec                    | j                             |||t          |                     |                     |          }| j                            |t          j        j                   t          |||||fd| 
                                i           g }t          t          j        j        |||||          D ]-}	|                     ||	           |                    |	           .| j                            ||           | j                            t%          t          |          t'          |          |rt'          |          nd|rt'          |          nd|rt'          |          nd|rt'          |          nd                     dS )Nr   r   r   )r   update_amountwith_embeddingsr   r   r   T)ra   r   r   r   rS   r   r   r   UPDATEr0   r   r   r   r   rT   r   rU   r   r4   rG   
rb   r   r   r   r   r   r   r   r   r   s
             rL   _updatezSegmentAPI._update  s    	  Iz3}CUCUVVV##M22))-9KLLL*iD9t66889	
 	
 	
 K!
 
 
 		( 		(A ++D!444$$Q''''((8IJJJ&..! #M 2 2!#hh3= DJ109@c)nnnq1:As9~~~'+2#d)))  		
 		
 		
 trN   zSegmentAPI._upsertc                    | j                             |||t          |                     |                     |          }| j                            |t          j        j                   t          |||||fd| 
                                i           g }t          t          j        j        |||||          D ]-}	|                     ||	           |                    |	           .| j                            ||           dS )Nr   r   T)ra   r   r   r   rS   r   r   r   UPSERTr0   r   r   r   r   rT   r   r   s
             rL   _upsertzSegmentAPI._upsert  s    	  Iz3}CUCUVVV##M22))-9KLLL*iD9t66889	
 	
 	
 K!
 
 
 		( 		(A ++D!444$$Q''''((8IJJJtrN   zSegmentAPI._get)r   r   r   wheresortpage	page_sizewhere_documentincludec                    t          t          |          |rt          |          ndd           |                     |           |"t          |          dk    rt	          |          nd }|	"t          |	          dk    rt          |	          nd }	| j                            |t                    }|t          d          |r|r
|dz
  |z  }|}|
                    ||	|||          }t          |          dk    r4t          g d|
v rg nd d|
v rg nd d|
v rg nd d	|
v rg nd d
|
v rg nd |
          S g }d|
v rBd |D             }| j                            |t                    }|                    |          }d |D             }d|
v rd |D             }d	|
v rd |D             }|rt          |          nd}| j                            t!          t          |          ||r|ndd|
v r|ndd|
v r|ndd	|
v r|nd                     t          d |D             d|
v rd |D             nd d|
v rt#          |          nd d|
v r|nd d	|
v r|nd d |
          S )Nr   r   	ids_countzSorting is not yet supported   )r   r   r   r   r   r   r   r   r   data)r   r   r   r   r   r   includedc                     g | ]
}|d          S rm    .0r   s     rL   
<listcomp>z#SegmentAPI._get.<locals>.<listcomp>  s    333a!D'333rN   r   c                     g | ]
}|d          S r   r   r   s     rL   r   z#SegmentAPI._get.<locals>.<listcomp>  s    444qQz]444rN   c                 ,    g | ]}t          |          S r   _docr   ms     rL   r   z#SegmentAPI._get.<locals>.<listcomp>  s    444Qa444rN   c                 ,    g | ]}t          |          S r   _urir   s     rL   r   z#SegmentAPI._get.<locals>.<listcomp>!  s    ///DGG///rN   )r   r   r   include_metadatainclude_documentsinclude_urisc                     g | ]
}|d          S r   r   r   s     rL   r   z#SegmentAPI._get.<locals>.<listcomp>0  s    ***Q4***rN   c                     g | ]
}|d          S 	embeddingr   r   s     rL   r   z#SegmentAPI._get.<locals>.<listcomp>1  s    8881+888rN   )r   r   rG   r   r.   r/   rS   get_segmentr   NotImplementedErrorget_metadatar*   r   get_vectorsrU   r   r3   _clean_metadatas)rb   r   r   r   r   r   r   r   r   r   r   metadata_segmentrecordsvectors
vector_idsvector_segmentr   r   r   
ids_amounts                       rL   _getzSegmentAPI._get  so     	'!$]!3!3),3SXXX! 	
 	
 	
 	!!-000).):s5zzA~~u%%%SW )c..A.AA.E.E $N333 	  =44]NSS%&DEEE 	I 	Qh)+FE"//) 0 
 
 w<<1!-!8!822d +w 6 6""D +w 6 6""D!W,,RR$!W,,RR$     687""337333J!]66}lSSN$00Z0@@G 54G444	'!!44)444IW//Y///D!$+SXXX!
&.. #M 2 2$$+ee!/:g/E/E10;w0F0F**A+1W+<+<ZZ!  		
 		
 		
 **'***w&& 988888g%% 'y111#.'#9#9iit7**
 
 
 	
rN   zSegmentAPI._deletec                 D   t          t          |          |rt          |          ndd           |"t          |          dk    rt          |          nd }|"t          |          dk    rt	          |          nd }||Pt          |          dk    r=||9t          |          dk    r&||"t          |          dk    rt          d          |                     |          }| j                            |t          j
        j                   |s|s|sE| j                            |t                    }|                    |||          }d |D             }n|}t          |          dk    rg S g }	t          t          j
        j        |          D ]-}
|                     ||
           |	                    |
           .| j                            ||	           | j                            t-          t          |          t          |                               |S )Nr   r   aU  
                You must provide either ids, where, or where_document to delete. If
                you want to delete all data in a collection you can delete the
                collection itself using the delete_collection method. Or alternatively,
                you can get() all the relevant ids and then delete them.
                )r   r   r   c                     g | ]
}|d          S r   r   r   s     rL   r   z&SegmentAPI._delete.<locals>.<listcomp>n  s    666QtW666rN   )	operationr   )r   delete_amount)r   r   rG   r.   r/   rH   r   rS   r   r   r   DELETEr   r   r   r   r   r   rT   r   rU   r   r2   )rb   r   r   r   r   r   r   r   ids_to_deleter   r   s              rL   _deletezSegmentAPI._delete=  sk    	'!$]!3!3),3SXXX! 	
 	
 	
 */):s5zzA~~u%%%SW )c..A.AA.E.E $N333 	 [S_SQ5#4Uq&".3~3F3F!3K3K    ##M22))-9KLLL 	 ^ 	 C 	 #}88WW&33N 4  G 76g666MMM}""IAK$6MJJJ 	( 	(A++D!444$$Q''''((8IJJJ&..! #M 2 2#mBTBT  	
 	
 	

 rN   zSegmentAPI._countc                     t          dt          |          i           |                     |           | j                            |t
                    }|                                S )Nr   )r   r   r   rS   r   r   count)rb   r   r   s      rL   _countzSegmentAPI._count  s]     	']9K9K'LMMM!!-000=44]NSS%%'''rN   zSegmentAPI._query
   )r   r   	distancesquery_embeddings	n_resultsc                 B   t          t          |          |t          |          d           t          |          }| j                            t          t          |          ||||nd||ndd|v r|ndd|v r|ndd|v r|ndd|v r|nd	  	                   |"t          |          dk    rt          |          n|}|"t          |          dk    rt          |          n|}d }|                     |          }	|D ]'}
| 	                    |	t          |
          d	           (|s|rC| j
                            |t                    }|                    ||
          }d |D             }g }g }g }g }g }g }||g k    rt          t          |                    D ]}|                    g            d|v r|                    g            d|v r|                    g            d|v r|                    g            d|v r|                    g            d|v r|                    g            nt!          j        |||d|v d           }| j
                            |t$                    }|                    |          }|D ]g}|                    d |D                        d|v r|                    d |D                        d|v r|                    d |D                        hd|v sd|v sd|v rt)                      }|D ]}|                    |           | j
                            |t                    }|                    t-          |                    }d |D             |D ]}fd|D             }d|v r"|                    t/          |                     d|v r!d |D             }|                    |           d|v r!d |D             }|                    |           t1          ||r|nd |r|nd |r|nd |r|nd |r|nd d |          S )N)r   r  r   r   r   r   r   r  )	r   query_amountr  with_metadata_filterwith_document_filterinclude_metadatasr   r   include_distancesFupdate)r   r   c                     g | ]
}|d          S r   r   r   s     rL   r   z%SegmentAPI._query.<locals>.<listcomp>  s    444q1T7444rN   r   )r   kallowed_idsinclude_embeddingsoptionsc                     g | ]
}|d          S r   r   r   s     rL   r   z%SegmentAPI._query.<locals>.<listcomp>  s    444AdG444rN   c                     g | ]
}|d          S )distancer   r   s     rL   r   z%SegmentAPI._query.<locals>.<listcomp>  s    %D%D%Da
m%D%D%DrN   c                 D    g | ]}t          t          |d                    S r   )r<   r"   r   s     rL   r   z%SegmentAPI._query.<locals>.<listcomp>  s&    &W&W&W1tIq~'F'F&W&W&WrN   r   c                 ,    i | ]}|d          |d         S )rm   rx   r   r   s     rL   
<dictcomp>z%SegmentAPI._query.<locals>.<dictcomp>  s"    !J!J!JQ!D'1Z=!J!J!JrN   c                 <    g | ]}                     |d           S r\   )get)r   rm   metadata_by_ids     rL   r   z%SegmentAPI._query.<locals>.<listcomp>  s)    $T$T$Tb^%7%7D%A%A$T$T$TrN   c                 ,    g | ]}t          |          S r   r   r   s     rL   r   z%SegmentAPI._query.<locals>.<listcomp>      #C#C#CDGG#C#C#CrN   c                 ,    g | ]}t          |          S r   r   r   s     rL   r   z%SegmentAPI._query.<locals>.<listcomp>  r(  rN   )r   r  r   r   r   r   r   r   )r   r   rG   rU   r   r5   r.   r/   r   _validate_dimensionrS   r   r   r   ranger   r   VectorQueryr   query_vectorssetr  listr   r+   )rb   r   r  r  r   r   r   r  r  r   r   metadata_readerr   r   r  r   r   r   r   emqueryvector_readerresultsresultall_idsid_listmetadata_listdoc_listuri_listr&  s                                @rL   _queryzSegmentAPI._query  st    	'!$]!3!3&U 	
 	
 	
 +,,&..  #M 2 2)#5:5F\\A5C5O\\UV2=2H2H,,a2=2H2H,,a-3w->->\\A2=2H2H,,a
 
 
	
 	
 	
 */):s5zzA~~u%%%SX )c..A.AA.E.E $N333 	 ##M22) 	I 	II$$T3y>>%$HHHH 	5N 	5"m77~VVO%22N 3  G 54G444K!')	,.
*,	 ",.	 "{b'8'8C 01122 $ $

2'))$$R(((7**%%b)))'))$$R((('))$$R(((W$$KKOOO$ M('#/7#:  E !M55m\RRM#11%88G! Y Y

44V444555'))$$%D%DV%D%D%DEEE7**%%&W&WPV&W&W&WXXXg%%)?)?6WCTCT$'EE" , ,GNN7++++"&-";";!># # *664==6II!J!J'!J!J!J" . .G %U$T$T$TG$T$T$TM"g--!(()9-)H)HIII"g--#C#C]#C#C#C!((222((#C#C]#C#C#CH---#,6ii$#,6ii$%/9zzT#,6ii$'4	
 	
 	
 		
rN   zSegmentAPI._peeknc                 l    t          dt          |          i           |                     ||          S )Nr   )r   )r   r   r  )rb   r   r<  s      rL   _peekzSegmentAPI._peek  s5     	']9K9K'LMMMyyay000rN   c                     t           S r\   r   rh   s    rL   get_versionzSegmentAPI.get_version  s    rN   c                     i | _         d S r\   )rY   rh   s    rL   reset_statezSegmentAPI.reset_state  s    !#rN   c                 8    | j                                          dS )NT)_systemrB  rh   s    rL   resetzSegmentAPI.reset!  s      """trN   c                     | j         S r\   )rQ   rh   s    rL   get_settingszSegmentAPI.get_settings&  s
    ~rN   c                     | j         j        S r\   )rT   r   rh   s    rL   r   zSegmentAPI.get_max_batch_size*  s    ~,,rN   z%SegmentAPI._validate_embedding_record
collectionrecordc                     t          dt          |d                   i           |d         r-|                     |t          |d                   d           dS dS )zQValidate the dimension of an embedding record before submitting it to the system.r   rm   r   Tr  N)r   r   r*  rG   )rb   rI  rJ  s      rL   r   z%SegmentAPI._validate_embedding_record2  sm    
 	'Z=M9N9N'OPPP+ 	X$$ZVK5H1I1IRV$WWWWW	X 	XrN   zSegmentAPI._validate_dimensiondimr  c                     |d         :|r6|d         }| j                             ||           || j        |         d<   dS dS |d         |k    rt          d| d|d                    dS )zValidate that a collection supports records of the given dimension. If update
        is true, update the collection if the collection doesn't already have a
        dimension.r~   Nrm   )rm   r~   zEmbedding dimension z* does not match collection dimensionality )rR   r   rY   r   )rb   rI  rL  r  rm   s        rL   r*  zSegmentAPI._validate_dimension;  s     k"* >%--s-CCC:=&r*;777> > $+++osooV`alVmoo   FrN   zSegmentAPI._get_collectionc                     || j         vr@| j                            |          }|st          d| d          |d         | j         |<   | j         |         S )z&Read-through cache for collection datar   r   r   r   )rY   rR   r   r   )rb   r   r   s      rL   r   zSegmentAPI._get_collectionN  st      666+555GGK 0A-AAA   5@ND"=1%m44rN   c                 0    |                      |           d S r\   )r   )rb   r   s     rL   r   zSegmentAPI._validate_collectionZ  s    ]+++++rN   )NN)NNNNNNN)r  )rC   N)Ur   
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r>   r@   r   r   r   r^   r?   re   ri   r   r   	OPERATIONr   rn   Databaserq   rt   Tenantrw   efDefaultEmbeddingFunctionr   r8   r   r   r7   r   r#   boolr   r   r   r   r9   r   r   r   r   r   r
   ADD_PER_MINUTEr    r!   r$   r%   r&   r   r   r   GET_PER_MINUTEr'   r(   r)   r*   r  r	  r  QUERY_PER_MINUTEr+   r;  r>  r@  rB  rE  rG  r   ALLOperationRecordr   r*  r   r   __classcell__)rc   s   @rL   rP   rP   V   s        RRMMM5555....OOONNND!,.////	$v 	$ 	$ 	$ 	$ 	$ 	$ #3 # # # X# \.0H0RSS7E 
 
C 
 
$ 
 
 
 X TS
 \+-E-OPP4B B B Bc Bqz B B B X QPB \,.F.PQQ
# 
$ 
 
 
 X RQ
 \)+C+MNN1s 1qx 1 1 1 X ON1 \02J2TUU 26 (B'))6:#$(6
 6
6
 -.6
 %c"
	6
 j236
 6
 6
 6
 
6
 6
 6
 X VU6
p \-/G/Q   26 (B'))6:$(
 

 -.
 %j)
	
 j23
 
 
 

 
 
 X 
0 \-/G/QRR #! (B'))6:$(C CsmC TNC %j)
	C j23C C C 
C C C X SRC6 \.0H0RSS  $ $$( }  	
  
*	   X TS( \02J2TUU %(	  	 	  	  
		  	  	  X VU	  \&(@(JKK #'59	E EE 3-E 12	E
 
E E E X LKE0 \02J2TUU %(	C CC C 	C
 
C C C X VUC* \#%=%GHHZ(2IJJJ *.)-#& && & 	&
 I&& I&& tn& 
& & & X KJ IH&P \&(@(JKK
 ,0)-)-#( (( ( Z(	(
 I&( I&( tn( 
( ( ( X LK(T \&(@(JKK *.)-#   	
 I& I& tn 
   X LK> \#%=%GHHZ(2IJJJ "!#"# $"#'24CCCd
 d
d
 c]d
 	d

 smd
 }d
 d
 smd
 C=d
 !/d
 d
 
d
 d
 d
 X KJ IHd
L \&(@(JKK "!%26A AA c]A 	A
 !/A 
A A A X LKAF \%'?'IJJ(D (S ( ( ( X KJ( \%'?'IJJZ(2KLLL
 (*BBBC
 C
C
 %C
 	C

 C
 &C
 C
 
C
 C
 C
 X ML KJC
J \$&>&HII1 14 1C 1 1 1 1 X JI1 S    X $ $ $ X$ t    X h    X -C - - - X- \9;S;WXXX,X010AX	X X X YXX \24L4PQQ,-0:>	   RQ$ \.0H0LMM	5T 	5al 	5 	5 	5 NM	5,$ ,4 , , , , , , , ,rN   rP   r  r   r   r   r   r   c              #     K   t          |          D ]y\  }}d}|r||         }|r||         }	|r	i |d|	i}nd|	i}|r||         }
|r	i |d|
i}nd|
i}t          j        ||r||         ndt          j        j        ||           }|V  zdS )ziConvert parallel lists of embeddings, metadatas and documents to a sequence of
    SubmitEmbeddingRecordsNchroma:document
chroma:uri)rm   r   encodingrx   r  )	enumerater   r_  ScalarEncodingFLOAT32)r  r   r   r   r   r   irm   rx   documenturirJ  s               rL   r   r   ^  s       3  2 	$ |H 	9 |H 9DhD(98DD-x8 	/q'C /:h:c::(#."'1;jmmt%-
 
 
 5 rN   rx   c                 <    | rd| v rt          | d                   S dS )z2Retrieve the document (if any) from a Metadata maprb  Nr   r   s    rL   r   r     s0      0%118-.///4rN   c                 <    | rd| v rt          | d                   S dS )z-Retrieve the uri (if any) from a Metadata maprc  Nrl  r   s    rL   r   r     s.      +LH,,8L)***4rN   c                     d | D             S )zhRemove any chroma-specific metadata keys that the client shouldn't see from a
    list of metadata maps.c                 ,    g | ]}t          |          S r   )_clean_metadatar   s     rL   r   z$_clean_metadatas.<locals>.<listcomp>  s     1111OA111rN   r   r   s    rL   r   r     s    
 211111rN   c                     | sdS i }|                                  D ]\  }}|                    d          s|||<    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
startswithrG   )rx   r5  r  vs       rL   rp  rp    sl      tF    1||I&& 	F1I
6{{atMrN   rP  )gchromadb.apir   chromadb.configr   r   r   r   chromadb.db.systemr   chromadb.quotar	   r
   chromadb.rate_limitingr   chromadb.segmentr   r   r    chromadb.telemetry.opentelemetryr   r   r   r   chromadb.telemetry.productr   chromadb.ingestr   chromadb.api.models.Collectionr   chromadbr   chromadb.errorsr   r   "chromadb.utils.embedding_functionsutilsembedding_functionsrX  chromadb.api.typesr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   !chromadb.telemetry.product.eventsr1   r2   r3   r4   r5   r6   chromadb.typestypesr   typingr7   r8   r9   r:   r;   r<   r=   r>   	overridesr?   uuidr@   rA   rf   loggingrI   	getLoggerr   r   r   rM   rP   r   r_  r   Metadatar   r   r   rp  r   rN   rL   <module>r     s   " " " " " " N N N N N N N N N N N N $ $ $ $ $ $ 2 2 2 2 2 2 2 2 - - - - - - I I I I I I I I I I            > = = = = = $ $ $ $ $ $ 5 5 5 5 5 5             Q Q Q Q Q Q Q Q / / / / / / / / /                                                 2                      L L L L L L L L L L L L L L L L L L L L                 						8	$	$     (E, E, E, E, E, E, E, E,V (,%)%)) ){)	) $) 	"	)
 	") 4.) q $,-) ) ) )X8AJ' HSM    8AJ' HSM    28AJ'(2	(1:
2 2 2 2hqz2 x
7K      rN   