
    _j                     X   d dl mZ d dlmZmZmZmZ d dlmZ erd dl	m
Z
 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 d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z6 d dl7m8Z8 d dl9m:Z:m;Z;m<Z< d dl=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZS d dlTmUZUmVZVmWZWmXZXmYZYmZZZ d dl4m[Z\ d dl m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe d dlfmgZg d dlhmiZimjZj d dlkmlZl d dlmZmd dlnZnd dloZod dl'mpZp  eddecdeaf                   Zq enjr        es          Ztd eud!dfd"Zvd#eqd!eqfd$Zw G d% d&e          Zx	 	 	 	 d.d'e\jy        d(e?d)e]e@         d*e]eA         d+e]eB         d,e]eE         d!e_e\jz        ddf         fd-Z{dS )/    )TYPE_CHECKING)retrystop_after_attemptretry_if_exception
wait_fixed)	ServerAPI)AttachedFunction)CreateCollectionConfigurationUpdateCollectionConfiguration'create_collection_configuration_to_json)UserIdentity)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)SysDB)QuotaEnforcerAction)RateLimitEnforcer)SegmentManager)Executor)ScanFilterLimitKNN
Projection)	CountPlanGetPlanKNNPlan)add_attributes_to_current_spanOpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClient)Producer)
Collection__version__)InvalidDimensionExceptionNotFoundErrorVersionMismatchError)CollectionMetadataIDs
Embeddings	Metadatas	Documents	ReadLevelSchemaURIsWhereWhereDocumentInclude	GetResultQueryResultSearchResultvalidate_metadatavalidate_update_metadatavalidate_wherevalidate_where_documentvalidate_batchIncludeMetadataDocuments!IncludeMetadataDocumentsDistancesDeleteResult)CollectionAddEventCollectionDeleteEventCollectionGetEventCollectionUpdateEventCollectionQueryEventClientCreateCollectionEventN)	OptionalSequence	GeneratorListAnyDictCallableTypeVarTuple)override)UUIDuuid4)wraps)SearchT.)bound
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)rX   msgs     Q/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/api/segment.pycheck_index_namerc   `   s    	 	 	  :c*oo22oo8=zJJ oozoo	xEzRR oo     funcc                 h     t                     dt          dt          dt          f fd            }|S )NargskwargsrY   c                  T    | d         } |j                                       | i |S )Nr   )_rate_limit_enforcer
rate_limit)rg   rh   selfre   s      rb   wrapperzrate_limit.<locals>.wrapperu   s2    Aw9t(33D994J6JJJrd   )rT   rL   )re   rm   s   ` rb   rk   rk   t   sV    
4[[Ks Kc Kc K K K K K [K Nrd   c                       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d
<   e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efdededdfd                        Z edej                  eddefdee         dee         dedeej                 fd                        Z edej                  ededdfd                        Zede fd            Z! ed ej                  ededej"        fd!                        Z# ed"ej                  ee$dddd#ee%fded$ee&         d%ee'         d&ee(         d'e)ded(ede*fd)                                    Z+ ed*ej                  ee$dddee%fded$ee&         d%ee'         d&ee(         ded(ede*fd+                                    Z, ed,ej                  ee$dee%fdee         ded(ede*fd-                                    Z- ed.ej                  ee$ee%fd/e.ded(ede*fd0                                    Z/ ed1ej                  ee$ddee%fdee         dee         ded(edee*         f
d2                                    Z0 ed3ej                  ee$ee%fded(edefd4                                    Z1 ed5ej                  ee$dddee%fd6e.d7ee         d8ee(         d9ee2         ded(eddfd:                                    Z3eee%fd/e.d7eded(ede*f
d;            Z4eee%fd/e.ded(edefd<            Z5eee%fd/e.ded(edd=fd>            Z6eee%e7j8        fd/e.d?e9e:         ded(ed@e7de;fdA            Z< edBej                  ee$ee%fdeded(eddfdC                                    Z= edDej                  ee$dddee%fdEe>d/e.dFe?dGee@         dHeeA         dIeeB         ded(ede)fdJ                                    ZC edKej                  ee$ddddee%fd/e.dEe>dFee?         dGee@         dHeeA         dIeeB         ded(ede)fdL                                    ZD edMej                  ee$dddee%fd/e.dEe>dFe?dGee@         dHeeA         dIeeB         ded(ede)fdN                                    ZE edOej                   eF eGdP            eHdQ           eIdR          dST          ee$dddddeJee%fd/e.dEee>         dUeeK         dee         dee         dVeeL         dWeMded(edeNfdX                                                ZO edYej                  ee$ddddee%fd/e.dEee>         dUeeK         dVeeL         dee         ded(edePfdZ                                    ZQ ed[ej                   eF eGd\            eHdQ           eIdR          dST          ee$ee%e7j8        fd/e.ded(ed@e7def
d]                                                ZR ed^ej                   eF eGd_            eHdQ           eIdR          dST          ee$dd`ddeSee%fd/e.dae?dEee>         dbedUeeK         dVeeL         dWeMded(edeTfdc                                                ZU eddej                  ee$d`ee%fd/e.deeded(edeNf
df                                    ZVedefdg            ZWeddh            ZXede)fdi            ZYedefdj            ZZedefdk            Z[edee%fdlededme.dnedoee\ee]f                  ded(ede^dpe)f         fdq            Z_eee%fdedme.ded(eddpf
dr            Z`ed#ee%fdedme.dse)ded(ede)fdt            Za eduejb                  dvejc        dwe9ejd                 ddfdx            Zedvejc        dyedze)ddfd{Zf ed|ejb                  d/e.dejc        fd}            Zg ed~ej                  d/e.dehfd            Zi xZjS )
SegmentAPIzHAPI implementation utilizing the new segment-based internal architecture	_settings_sysdb_manager	_executor	_producer_product_telemetry_client_opentelemetry_client
_tenant_id	_topic_nsrj   systemc                 \   t                                          |           |j        | _        |                     t
                    | _        |                     t                    | _        |                     t                    | _
        |                     t                    | _        |                     t                    | _        |                     t                    | _        |                     t"                    | _        | j                            t(                    | _        d S N)super__init__settingsrp   requirer   rq   r   rr   r   rs   r   _quota_enforcerr$   ru   r!   rv   r%   rt   _systemr   rj   )rl   ry   	__class__s     rb   r}   zSegmentAPI.__init__   s       ll5))^44h//#||M::)-6L)M)M&%)\\2E%F%F"h//$(L$8$89J$K$K!!!rd   rY   c                 B    t          t          j                              S r{   )inttimetime_nsrl   s    rb   	heartbeatzSegmentAPI.heartbeat   s    4<>>"""rd   zSegmentAPI.create_databasenametenantNc                     t          |          dk     rt          d          | j                            t          j        ||           | j                            t                      ||           d S )Nr[   z0Database name must be at least 3 characters long)actionr   r   )idr   r   )	r]   r^   r   enforcer   CREATE_DATABASErq   create_databaserS   rl   r   r   s      rb   r   zSegmentAPI.create_database   s     t99q==OPPP$$) 	% 	
 	
 	
 	##ww 	$ 	
 	
 	
 	
 	
rd   zSegmentAPI.get_databasec                 :    | j                             ||          S N)r   r   )rq   get_databaser   s      rb   r   zSegmentAPI.get_database   s     {''T&'AAArd   zSegmentAPI.delete_databasec                 >    | j                             ||           d S r   )rq   delete_databaser   s      rb   r   zSegmentAPI.delete_database   s%     	##f#=====rd   zSegmentAPI.list_databaseslimitoffsetc                 <    | j                             |||          S )N)r   r   r   )rq   list_databases)rl   r   r   r   s       rb   r   zSegmentAPI.list_databases   s!     {))fV)TTTrd   zSegmentAPI.create_tenantc                     t          |          dk     rt          d          | j                            |           d S )Nr[   z.Tenant name must be at least 3 characters longr   )r]   r^   rq   create_tenantrl   r   s     rb   r   zSegmentAPI.create_tenant   sN     t99q==MNNN!! 	" 	
 	
 	
 	
 	
rd   c                 <    t          dt          t          g          S )N )user_idr   	databases)r   r   r   r   s    rb   get_user_identityzSegmentAPI.get_user_identity   s%    !'(
 
 
 	
rd   zSegmentAPI.get_tenantc                 8    | j                             |          S )Nr   )rq   
get_tenantr   s     rb   r   zSegmentAPI.get_tenant   s     {%%4%000rd   zSegmentAPI.create_collectionFschemaconfigurationmetadataget_or_createdatabasec                    |t          |           t          |           | j                            t          j        |||           t                      }t          |||d t          |pt                      |          ||d           }	| j
                            |	j        |	j        ||pt                      g |	j        d |||
  
        \  }
}|r:| j                            |
          }|D ]}| j
                            |           nt$                              d| d           | j                            t-          t/          |                               t1          dt/          |          i           |
S )Nr   r   r   r   )r   r   r   serialized_schemaconfiguration_jsonr   r   	dimension)
r   r   r   r   segmentsr   r   r   r   r   Collection z/ already exists, returning existing collection.)collection_uuidr   )r:   rc   r   r   r   CREATE_COLLECTIONrS   CollectionModelr   r
   rq   create_collectionr   r   r   rr   #prepare_segments_for_new_collectioncreate_segmentloggerdebugru   capturerG   strr    )rl   r   r   r   r   r   r   r   r   modelcollcreatedr   segments                 rb   r   zSegmentAPI.create_collection   s    h''' 	$$+	 	% 	
 	
 	
 WW"F@!>!@!@(    
 
 
 55x'J+H+J+J^' 6 
 
g  	}HHNNH# 4 4**733334 LLSdSSS   	&..' #B  	
 	
 	
 	'(93r77'CDDDrd   z#SegmentAPI.get_or_create_collectionc           	      :    |                      ||||d||          S )NT)r   r   r   r   r   r   r   )r   )rl   r   r   r   r   r   r   s          rb   get_or_create_collectionz#SegmentAPI.get_or_create_collection'  s6     %%' & 
 
 	
rd   zSegmentAPI.get_collectionc                 v    | j                             |||          }|r|d         S t          d| d          )Nr   r   r   r   r    does not exist.rq   get_collectionsr*   rl   r   r   r   existings        rb   get_collectionzSegmentAPI.get_collectionB  sV     ;..fx / 
 
  	FA; Dd D D DEEErd   zSegmentAPI.get_collection_by_idcollection_idc                 v    | j                             |||          }|r|d         S t          d| d          )N)r   r   r   r   r   r   r   )rl   r   r   r   r   s        rb   get_collection_by_idzSegmentAPI.get_collection_by_idT  sV     ;..Vh / 
 
  	OA; Mm M M MNNNrd   zSegmentAPI.list_collectionc                     | j                             t          j        ||           | j                            ||||          S )N)r   r   r   )r   r   r   r   )r   r   r   LIST_COLLECTIONSrq   r   )rl   r   r   r   r   s        rb   list_collectionszSegmentAPI.list_collectionsf  sZ     	$$* 	% 	
 	
 	
 {**v + 
 
 	
rd   zSegmentAPI.count_collectionsc                 :    | j                             ||          S )Nr   r   )rq   count_collections)rl   r   r   s      rb   r   zSegmentAPI.count_collectionsz  s     {,,FX,NNNrd   zSegmentAPI._modifyr   new_namenew_metadatanew_configurationc                    |rt          |           |rt          |           |                     |          }| j                            t
          j        |||           |r$|r"|r | j                            ||||           d S |r!|r| j                            |||           d S |r!|r| j                            |||           d S |r!|r| j                            |||           d S |r| j                            ||           d S |r| j                            ||           d S |r| j                            ||           d S d S )	Nr   )r   r   r   )r   r   )r   r   )r   r   r   )r   )r   )	rc   r;   _get_collectionr   r   r   UPDATE_COLLECTIONrq   update_collection)rl   r   r   r   r   r   r   _s           rb   _modifyzSegmentAPI._modify  s     	'X&&& 	3$\222   $$$$+!	 	% 	
 	
 	
  	O 	O): 	OK))%/	 *       	O, 	OK))"8l)SSSSS 	O+ 	OK))1B *       		O/ 		OK))\9J *       	OK))"8)<<<<< 	OK))"|)DDDDD 	OK))"<M)NNNNN	O 	Ord   c                      t          d          )Nz4Collection forking is not implemented for SegmentAPINotImplementedError)rl   r   r   r   r   s        rb   _forkzSegmentAPI._fork  s     "B
 
 	
rd   c                      t          d          )Nz,Fork count is not implemented for SegmentAPIr   rl   r   r   r   s       rb   _fork_countzSegmentAPI._fork_count  s     ":
 
 	
rd   IndexingStatusc                      t          d          )Nz1Indexing status is not implemented for SegmentAPIr   r   s       rb   _get_indexing_statuszSegmentAPI._get_indexing_status  s     ""UVVVrd   searches
read_levelc                      t          d          )Nz(Search is not implemented for SegmentAPIr   )rl   r   r   r   r   r   s         rb   _searchzSegmentAPI._search  s     ""LMMMrd   zSegmentAPI.delete_collectionc                    | j                             |||          }|rO| j                            |d         j                   | j                             |d         j        ||           d S t          d| d          )Nr   r   r   r   r   )rq   r   rr   delete_segmentsr   delete_collectionr^   r   s        rb   r   zSegmentAPI.delete_collection  s     ;..fx / 
 
  	CM))(1+.999K))v *      A4AAABBBrd   zSegmentAPI._addids
embeddings	metadatas	documentsurisc	                    |                      |          }	| j                            |t          j        j                   t          |||||fd|                                 i           t          t          t          j        j        |||||                    }
| 
                    |	|
           | j                            t          j        |||||||           | 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   r   r   r   r   r   r   r   )r   
add_amountwith_metadatawith_documents	with_urisT)r   rr   hint_use_collectiont	OperationADDr>   get_max_batch_sizelist_records_validate_embedding_record_setr   r   r   rt   submit_embeddingsru   r   rB   r   r]   )rl   r   r   r   r   r   r   r   r   r   records_to_submits              rb   _addzSegmentAPI._add  s    ##M22))-III*iD9t66889	
 	
 	
 !%##  	
 	
 	++D2CDDD$$:!' 	% 		
 		
 		
 	((8IJJJ&.. #M 2 2s88*3*?c#hhhQ+4+@s3xxxa&*&6#c(((A  	
 	
 	
 trd   zSegmentAPI._updatec	                    |                      |          }	| j                            |t          j        j                   t          |||||fd|                                 i           t          t          t          j        j        |||||                    }
| 
                    |	|
           | j                            t          j        ||||||           | 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   r   r   r   r   r   r   )r   update_amountwith_embeddingsr   r   r   T)r   rr   r   r   r   UPDATEr>   r   r   r   r  r   r   r   rt   r  ru   r   rE   r   r]   rl   r   r   r   r   r   r   r   r   r   r  s              rb   _updatezSegmentAPI._update3  s    ##M22))-9KLLL*iD9t66889	
 	
 	
 !"%##  	
 	
 	++D2CDDD$$=! 	% 	
 	
 	
 	((8IJJJ&..! #M 2 2!#hh3= DJ109@c)nnnq1:As9~~~'+2#d)))  		
 		
 		
 trd   zSegmentAPI._upsertc	           
         |                      |          }	| j                            |t          j        j                   t          |||||fd|                                 i           t          t          t          j        j        |||||                    }
| 
                    |	|
           | j                            t          j        |||||||           | j                            ||
           dS )Nr   r   r   T)r   rr   r   r   r   UPSERTr>   r   r   r   r  r   r   r   rt   r  r	  s              rb   _upsertzSegmentAPI._upsertl  s    ##M22))-9KLLL*iD9t66889	
 	
 	
 !"%##  	
 	
 	++D2CDDD$$=!' 	% 		
 		
 		
 	((8IJJJtrd   zSegmentAPI._getc                 ,    t          | t                    S r{   
isinstancer+   es    rb   <lambda>zSegmentAPI.<lambda>      :a9M+N+N rd         T)r   waitstopreraisewherewhere_documentincludec
                    t          t          |          |rt          |          ndd           |                     |          }
|t	          |           |t          |           | j                            t          j	        |||||           |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                     | j                            t          |
t!          |||          t#          |pd|          t%          d|v d|v d|v d	d|v                               S )
Nr   r   	ids_count)r   r   r   r  r  r   r   r   r   )r   r  r   include_metadatainclude_documentsinclude_urisr   F)r    r   r]   _scanr<   r=   r   r   r   GETru   r   rD   rs   getr   r   r   r   )rl   r   r   r  r   r   r  r  r   r   scan
ids_amounts               rb   _getzSegmentAPI._get  s   * 	'!$]!3!3),3SXXX! 	
 	
 	
 zz-(( 5!!!%#N333$$:) 	% 	
 	
 	
 "%+SXXX!
&.. #M 2 2$$+ee!/:g/E/E10;w0F0F**A+1W+<+<ZZ!  		
 		
 		
 ~!!sE>22fk5))7* G+7*g% 	 
 
 	
rd   zSegmentAPI._deletec           
         t          t          |          |rt          |          ndd           |t          |           |t	          |           ||Pt          |          dk    r=||9t          |          dk    r&||"t          |          dk    rt          d          |                     |          }| j                            t          j
        ||||           | j                            |t          j        j
                   |s|s|s>| j                            t#          |t%          |||                              d         }	n|}	|\t'          |t(                    rt'          |t*                    s|dk     rt          d          ||t          d          |	d |         }	t          |	          dk    rt-          d          S t/          t1          t          j        j
        |		                    }
|                     |j        |
           | j                            ||
           t          |	          }| 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   r  r  r   z$limit must be a non-negative integerzMlimit can only be specified when a where or where_document clause is provided)deleted)	operationr   )r   delete_amount) r    r   r]   r<   r=   r^   r#  r   r   r   DELETErr   r   r   r   rs   r%  r   r   r  r   boolrA   r   r   r  
collectionrt   r  ru   r   rC   )rl   r   r   r  r  r   r   r   r&  ids_to_deleter  deleted_counts               rb   _deletezSegmentAPI._delete  s    	'!$]!3!3),3SXXX! 	
 	
 	
 5!!!%#N333 [S_SQ5#4Uq&".3~3F3F!3K3K    zz-(($$=) 	% 	
 	
 	
 	))-9KLLL 	 ^ 	 C 	  N..fS%@@AA MM  M eS)) IZt-D-D IPQ		 !GHHH}!7 c   *&5&1M}""**** q{1}EEE
 
 	++DO=NOOO((8IJJJM**&..! #M 2 2-  	
 	
 	
 M2222rd   zSegmentAPI._countc                 ,    t          | t                    S r{   r  r  s    rb   r  zSegmentAPI.<lambda>C  r  rd   c                     t          dt          |          i           | j                            t	          |                     |                              S )Nr   )r    r   rs   countr   r#  )rl   r   r   r   r   s        rb   _countzSegmentAPI._countA  sI      	']9K9K'LMMM~##Idjj.G.G$H$HIIIrd   zSegmentAPI._queryc                 ,    t          | t                    S r{   r  r  s    rb   r  zSegmentAPI.<lambda>]  r  rd   
   query_embeddings	n_resultsc
                 @   t          t          |          |t          |          d           t          |          }
|rt          |          nd}| 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          |           |t          |           |                     |          }|D ],}| 	                    |j
        t          |          d	           -| j                            t          j        |||||
           | j                            t#          |t%          ||          t'          d ||          t)          d|v d|v d|v d|v d|v                               S )N)r   r:  r  r   r   r   r   	distances)
r   query_amountfiltered_ids_amountr:  with_metadata_filterwith_document_filterinclude_metadatasr!  r"  include_distancesFupdate)r   r   r  r  r9  r:  r   )r    r   r]   ru   r   rF   r<   r=   r#  _validate_dimensionr/  r   r   r   QUERYrs   knnr   r   r   r   )rl   r   r9  r   r:  r  r  r  r   r   r=  r'  r&  	embeddings                 rb   _queryzSegmentAPI._queryT  s   8 	'!$]!3!3&U 	
 	
 	
 +,,!$+SXXX!
&..  #M 2 2)$.#5:5F\\A5C5O\\UV2=2H2H,,a2=2H2H,,a-3w->->\\A2=2H2H,,a  	
 	
 	
  5!!!%#N333zz-(() 	T 	TI$$T_c)nnU$SSSS$$<)- 	% 	
 	
 	
 ~!!$i00tUN337* G+7*7*g% 	 
 
 	
rd   zSegmentAPI._peeknc                 l    t          dt          |          i           |                     ||          S )Nr   )r   )r    r   r(  )rl   r   rJ  r   r   s        rb   _peekzSegmentAPI._peek  s5     	']9K9K'LMMMyyay000rd   c                     t           S r{   r'   r   s    rb   get_versionzSegmentAPI.get_version  s    rd   c                     d S r{    r   s    rb   reset_statezSegmentAPI.reset_state  s    rd   c                 8    | j                                          dS )NT)r   rQ  r   s    rb   resetzSegmentAPI.reset  s      """trd   c                     | j         S r{   )rp   r   s    rb   get_settingszSegmentAPI.get_settings  s
    ~rd   c                     | j         j        S r{   )rt   r   r   s    rb   r   zSegmentAPI.get_max_batch_size  s    ~,,rd   function_idinput_collection_idoutput_collectionparamsr	   c                      t          d          zNAttached functions are not supported in the Segment API (local embedded mode).zAttached functions are only supported when connecting to a Chroma server via HttpClient. The Segment API (embedded mode) does not support attached function operations.r   )rl   rW  r   rX  rY  rZ  r   r   s           rb   attach_functionzSegmentAPI.attach_function  s     "]
 
 	
rd   c                      t          d          r\  r   )rl   r   rX  r   r   s        rb   get_attached_functionz SegmentAPI.get_attached_function  s     "]
 
 	
rd   delete_outputc                      t          d          r\  r   )rl   r   rX  r`  r   r   s         rb   detach_functionzSegmentAPI.detach_function  s     "]
 
 	
rd   z)SegmentAPI._validate_embedding_record_setr/  recordsc                     t          dt          |d                   i           |D ]5}|d         +|                     |t          |d                   d           6dS )zQValidate the dimension of an embedding record before submitting it to the system.r   r   rH  NTrC  )r    r   rE  r]   )rl   r/  rc  records       rb   r  z)SegmentAPI._validate_embedding_record_set  sz     	'Z=M9N9N'OPPP 	 	Fk".((F;$7 8 8 )   	 	rd   dimrD  c                     |d         .|r*|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   N)r   r   zEmbedding dimension z* does not match collection dimensionality )r   rq   r   r)   )rl   r/  rf  rD  r   s        rb   rE  zSegmentAPI._validate_dimension  s     k"* .]--s-CCC*-
;'''. . $+++osooV`alVmoo   Frd   zSegmentAPI._get_collectionc                     | j                             |          }|rt          |          dk    rt          d| d          |d         S )N)r   r   r   r   )rq   r   r]   r*   )rl   r   collectionss      rb   r   zSegmentAPI._get_collection   sY    k11]1CC 	Oc+..!33 Mm M M MNNN1~rd   zSegmentAPI._scanc           	      &   | j                             |          }d |d         D             }t          |d         |t          j        j                 |t          j        j                 |                    t          j        j        d                     S )Nc                      i | ]}|d          |S )scoperP  ).0r   s     rb   
<dictcomp>z$SegmentAPI._scan.<locals>.<dictcomp>/  s,     
 
 
*1GGg
 
 
rd   r   r/  )r/  rG  r   re  )	rq   get_collection_with_segmentsr   r   SegmentScopeVECTORMETADATAr%  RECORD)rl   r   collection_and_segmentsscope_to_segments       rb   r#  zSegmentAPI._scan'  s    "&+"J"J#
 #

 
5LZ5X
 
 
 .|< !67%an&=>#''(=tDD
 
 
 	
rd   )rY   N)k__name__
__module____qualname____doc__r   __annotations__r   r   r   r%   r$   r!   r   r   r   r}   rQ   r   r   r#   r"   	OPERATIONr   r   r   Databaser   r   rH   rI   r   r   r   r   Tenantr   rk   r   r2   r
   r,   r.  r   r   r   r   rR   r   r   r   r   r   r   r   r   r1   INDEX_AND_WALrK   rU   r9   r   r   r-   r.   r/   r0   r3   r  r
  r  r   r   r   r   r?   r4   r5   r6   r7   r(  rA   r2  r6  r@   r8   rI  rL  rN  rQ  rS  rU  r   rM   rL   rP   r]  r_  rb  ALLr&   OperationRecordr  rE  r   r   r#  __classcell__)r   s   @rb   ro   ro   }   s        RRMMM5555....OOONNN++++
Lv 
L 
L 
L 
L 
L 
L #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 \.0H0RSS7E > >C > >$ > > > X TS> \-/G/QRR  $ $$	U U}U U 	U
 
!*	U U U X SRU \,.F.PQQ
# 
$ 
 
 
 X RQ
 
< 
 
 
 X
 \)+C+MNN1s 1qx 1 1 1 X ON1 \02J2TUU $(AE15#$(G GG  G   =>	G
 -.G G G G 
G G G Z X VUGR \-/G/Q   $(AE15$(
 

  
   =>	

 -.
 
 
 

 
 
 Z X 

, \-/G/QRR #$(	F FsmF F 	F
 
F F F Z X SRF \35M5WXX %(	O OO O 	O
 
O O O Z X YXO \.0H0RSS  $ $$(
 
}
 
 	

 
 
/	"
 
 
 Z X TS
" \02J2TUU %(O OO O 
	O O O Z X VUO \&(@(JKK #'59EI$(2O 2O2O 3-2O 12	2O
 $$AB2O 2O 2O 
2O 2O 2O Z X LK2Oh 
 %(	
 	
	
 	
 		

 	
 
	
 	
 	
 X	
  %(	
 

 
 	

 

 
 
 X
  %(	W WW W 	W
 
W W W XW 
 %( ) 7N NN v,N 	N
 N N 
N N N XN \02J2TUU %(	C CC C 	C
 
C C C Z X VUC$ \#%=%GHH *.)-#$(3 33 3 	3
 I&3 I&3 tn3 3 3 
3 3 3 Z X IH3j \&(@(JKK
 ,0)-)-#$(4 44 4 Z(	4
 I&4 I&4 tn4 4 4 
4 4 4 Z X LK4l \&(@(JKK *.)-#$(* ** * 	*
 I&* I&* tn* * * 
* * * Z X LK*X \#%=%GHH
U  !N!NOOZ]]""	    "!%# $263$(>
 >
>
 c]>
 	>

 }>
 >
 !/>
 >
 >
 >
 
>
 >
 >
 Z X  IH>
@ \&(@(JKK "!%26#$(X3 X3X3 c]X3 	X3
 !/X3 }X3 X3 X3 
X3 X3 X3 Z X LKX3t \%'?'IJJ
U  !N!NOOZ]]""	    %( ) 7J JJ J 	J
 J 
J J J Z X  KJJ \%'?'IJJ U  !N!NOOZ]]""	   
 "!%26<$(E
 E
E
 %E
 c]	E

 E
 E
 !/E
 E
 E
 E
 
E
 E
 E
 Z X  KJ E
N \$&>&HII $(1 11 1 	1
 1 
1 1 1 Z X JI1 S    X    X t    X h    X -C - - - X-  ,0$(
 

 
 "	

 
 c3h(
 
 
 
!4'	(
 
 
 X
  
 %(
 

 "
 	

 
 

 
 
 X
 
 $$(
 

 "
 	

 
 
 

 
 
 X
$ \35M5Q 	,	15a6G1H			 	 	 	,-0:>	   $ \.0H0LMMT al    NM \$&>&HII
4 
D 
 
 
 JI
 
 
 
 
rd   ro   r+  r   r   r   r   r   c              #   ,  K   |g k    rd}t          |          D ]y\  }}d}|r||         }|r||         }	|r	i |d|	i}nd|	i}|r||         }
|r	i |d|
i}nd|
i}t          j        ||||         ndt          j        j        ||           }|V  zdS )ziConvert parallel lists of embeddings, metadatas and documents to a sequence of
    SubmitEmbeddingRecordsNzchroma:documentz
chroma:uri)r   rH  encodingr   r+  )	enumerater   r  ScalarEncodingFLOAT32)r+  r   r   r   r   r   ir   r   documenturire  s               rb   r   r   ;  s
      R
3  2 	$ |H 	9 |H 9DhD(98DD-x8 	/q'C /:h:c::(#."'1'=jmm4%-
 
 
 5 rd   )NNNN)|typingr   tenacityr   r   r   r   chromadb.apir   $chromadb.api.models.AttachedFunctionr	   %chromadb.api.collection_configurationr
   r   r   chromadb.authr   chromadb.configr   r   r   r   chromadb.db.systemr   chromadb.quotar   r   chromadb.rate_limitr   chromadb.segmentr   $chromadb.execution.executor.abstractr   &chromadb.execution.expression.operatorr   r   r   r   r   "chromadb.execution.expression.planr   r   r    chromadb.telemetry.opentelemetryr    r!   r"   r#   chromadb.telemetry.productr$   chromadb.ingestr%   chromadb.typesr&   r   chromadbr(   chromadb.errorsr)   r*   r+   chromadb.api.typesr,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   !chromadb.telemetry.product.eventsrB   rC   rD   rE   rF   rG   typesr   rH   rI   rJ   rK   rL   rM   rN   rO   rP   	overridesrQ   uuidrR   rS   	functoolsrT   r   loggingr_   rU   rV   	getLoggerrv  r   r   rc   rk   ro   r   r  r   rP  rd   rb   <module>r     s               N N N N N N N N N N N N " " " " " " FEEEEEE         
 ' & & & & & N N N N N N N N N N N N $ $ $ $ $ $ 0 0 0 0 0 0 0 0 1 1 1 1 1 1 + + + + + + 9 9 9 9 9 9 W W W W W W W W W W W W W W J J J J J J J J J J            > = = = = = $ $ $ $ $ $ 8 8 8 8 8 8                     
                                               0                     
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                       				 5 5 5 5 5 5GCxS)***		8	$	$     (Q 1    {
 {
 {
 {
 {
 {
 {
 {
B (,%)%), ,{,	, $, 	"	,
 	", 4., q $,-, , , , , ,rd   