
    ugF                        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mZmZmZ d dlmZ d dlmZmZ d dlmZ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l+m,Z, d dl-m.Z. d dl/m0Z1 d dl2m3Z3 d dl4m5Z5m6Z6m7Z7 d dl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZKmLZLmMZMmNZNmOZOmPZP d dl/mQZR d dlSmTZTmUZUmVZVmWZWmXZXmYZYmZZZ d dl[m\Z\ d dl]m^Z^m_Z_ d dl`maZa d dlbZbd dlcZcd dldZd eZdeYdeXf         Ze ecj                  eg      ZhdeiddfdZjd eedeefd!Zk G d" d#e      Zl	 	 	 	 d+d$eRj                  d%e:d&eTe;   d'eTe<   d(eTe=   d)eTe>   deVeRj                  ddf   fd*Zoy),    )retrystop_after_attemptretry_if_exception
wait_fixed)	ServerAPI)CollectionConfigurationInternal)UserIdentity)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)SysDB)QuotaEnforcerAction)RateLimitEnforcerAsyncRateLimitEnforcer)SegmentManager)Executor)ScanFilterLimitKNN
Projection)	CountPlanGetPlanKNNPlan)add_attributes_to_current_spanOpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClient)Producer)
Collection__version__)InvalidDimensionExceptionInvalidCollectionExceptionVersionMismatchError)CollectionMetadataIDs
Embeddings	Metadatas	DocumentsURIsWhereWhereDocumentIncludeIncludeEnum	GetResultQueryResultvalidate_metadatavalidate_update_metadatavalidate_wherevalidate_where_documentvalidate_batch)CollectionAddEventCollectionDeleteEventCollectionGetEventCollectionUpdateEventCollectionQueryEventClientCreateCollectionEventN)OptionalSequence	GeneratorListAnyCallableTypeVar)override)UUIDuuid4)wrapsT.)bound
index_namereturnc                     d|  }t        |       dk  st        |       dkD  rt        |      t        j                  d|       st        |      d| v rt        |      t        j                  d|       rt        |      y )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)rM   msgs     I/var/www/openai/venv/lib/python3.12/site-packages/chromadb/api/segment.pycheck_index_namerX   O   s    	 l	  :c*o2o88=zJozo	xxEzRo S    funcc                 T     t               dt        dt        dt        f fd       }|S )NargskwargsrN   c                  P    | d   } |j                   j                        | i |S )Nr   )_rate_limit_enforcer
rate_limit)r\   r]   selfrZ   s      rW   wrapperzrate_limit.<locals>.wrapperd   s/    Aw9t((33D94J6JJrY   )rJ   rD   )rZ   rb   s   ` rW   r`   r`   c   s:    
4[Ks Kc Kc K K NrY   c                   j    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j2                  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j2                     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jD                  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(ded'ede)fd(                     Z* ed)ej*                        ee$ddee%fd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$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e%fded'edefd0                     Z. ed1ej*                        ee$ddee%fd2e/d3ee   d4ee'   ded'eddfd5                     Z0 ed6ej*                        ee$ee%fdeded'eddfd7                     Z1 ed8ej*                        ee$dddee%fd9e2d:e/d;e3d<ee4   d=ee5   d>ee6   ded'ede(fd?                     Z7 ed@ej*                        ee$ddddee%fd:e/d9e2d;ee3   d<ee4   d=ee5   d>ee6   ded'ede(fdA                     Z8 edBej*                        ee$dddee%fd:e/d9e2d;e3d<ee4   d=ee5   d>ee6   ded'ede(fdC                     Z9 edDej*                         e: e;dE        e<dF       e=dG      dHI      ee$ddddddddg dJee%fd:e/d9ee2   dKee>   dLee   dee   dee   dMee   dNee   dOee?   dPe@ded'edeAfdQ                            ZB edRej*                        ee$dddee%fd:e/d9ee2   dKee>   dOee?   ded'eddfdS                     ZC edTej*                         e: e;dU        e<dF       e=dG      dHI      ee$ee%fd:e/ded'edefdV                            ZD edWej*                         e: e;dX        e<dF       e=dG      dHI      ee$dYddg dZee%fd:e/d[e3d\edKee>   dOee?   dPe@ded'edeEfd]                            ZF ed^ej*                        ee$dYee%fd:e/d_eded'edeAf
d`                     ZGedefda       ZHedqdb       ZIede(fdc       ZJedefdd       ZKedefde       ZL edfej                        dgej                  dheOej                     ddfdi       ZQdgej                  djedke(ddfdlZR edmej                        d:e/dej                  fdn       ZS edoej                        d:e/deTfdp       ZU xZVS )r
SegmentAPIzHAPI implementation utilizing the new segment-based internal architecture	_settings_sysdb_manager	_executor	_producer_product_telemetry_client_opentelemetry_client
_tenant_id	_topic_nsr_   systemc                    t         |   |       |j                  | _        | j	                  t
              | _        | j	                  t              | _        | j	                  t              | _
        | j	                  t              | _        | j	                  t              | _        | j	                  t              | _        | j	                  t"              | _        | j&                  j	                  t(              | _        y N)super__init__settingsre   requirer   rf   r   rg   r   rh   r   _quota_enforcerr!   rj   r   rk   r"   ri   _systemr   r_   )ra   rn   	__class__s     rW   rr   zSegmentAPI.__init__z   s     ll5)^4h/#||M:)-6L)M&%)\\2E%F"h/$(LL$8$89J$K!rY   rN   c                 <    t        t        j                               S rp   )inttimetime_nsra   s    rW   	heartbeatzSegmentAPI.heartbeat   s    4<<>""rY   zSegmentAPI.create_databasenametenantNc                     t        |      dk  rt        d      | j                  j                  t        j
                  ||       | j                  j                  t               ||       y )NrP   z0Database name must be at least 3 characters long)actionr   r~   )idr~   r   )	rR   rS   ru   enforcer   CREATE_DATABASErf   create_databaserI   ra   r~   r   s      rW   r   zSegmentAPI.create_database   sg     t9q=OPP$$)) 	% 	
 	##w 	$ 	
rY   zSegmentAPI.get_databasec                 <    | j                   j                  ||      S N)r~   r   )rf   get_databaser   s      rW   r   zSegmentAPI.get_database   s     {{''T&'AArY   zSegmentAPI.delete_databasec                 >    | j                   j                  ||       y r   )rf   delete_databaser   s      rW   r   zSegmentAPI.delete_database   s     	##f#=rY   zSegmentAPI.list_databaseslimitoffsetc                 >    | j                   j                  |||      S )N)r   r   r   )rf   list_databases)ra   r   r   r   s       rW   r   zSegmentAPI.list_databases   s      {{))fV)TTrY   zSegmentAPI.create_tenantc                 n    t        |      dk  rt        d      | j                  j                  |       y )NrP   z.Tenant name must be at least 3 characters longr~   )rR   rS   rf   create_tenantra   r~   s     rW   r   zSegmentAPI.create_tenant   s5     t9q=MNN!! 	" 	
rY   c                 0    t        dt        t        g      S )N )user_idr   	databases)r	   r   r
   r|   s    rW   get_user_identityzSegmentAPI.get_user_identity   s    !'(
 	
rY   zSegmentAPI.get_tenantc                 :    | j                   j                  |      S )Nr   )rf   
get_tenantr   s     rW   r   zSegmentAPI.get_tenant   s     {{%%4%00rY   zSegmentAPI.create_collectionFconfigurationmetadataget_or_createdatabasec                    |t        |       t        |       | j                  j                  t        j
                  |||       t               }t        |||||n	t               ||d       }| j                  j                  |j                  |j                  |j                         g |j                  d |||	      \  }	}
|
r>| j                  j!                  |	      }|D ]  }| j                  j#                  |        nt$        j'                  d| d       | j(                  j+                  t-        t/        |                   t1        dt/        |      i       |	S )Nr   r   r~   r   )r   r~   r   r   r   r   	dimension)	r   r~   r   segmentsr   r   r   r   r   Collection z/ already exists, returning existing collection.)collection_uuidr   )r5   rX   ru   r   r   CREATE_COLLECTIONrI   CollectionModelr   rf   create_collectionr   r~   get_configurationr   rg   #prepare_segments_for_new_collectioncreate_segmentloggerdebugrj   capturer?   strr   )ra   r~   r   r   r   r   r   r   modelcollcreatedr   segments                rW   r   zSegmentAPI.create_collection   sZ    h' 	$$++	 	% 	
 W( (02

 55xx113^^' 6 

g }}HHNH#**73 $ LLdV#RS 	&&..' #B	
 	'(93r7'CDrY   z#SegmentAPI.get_or_create_collectionc                 0    | j                  |||d||      S )NT)r~   r   r   r   r   r   )r   )ra   r~   r   r   r   r   s         rW   get_or_create_collectionz#SegmentAPI.get_or_create_collection  s.     %%' & 
 	
rY   zSegmentAPI.get_collectionc                 j    | j                   j                  |||      }|r|d   S t        d| d      )Nr~   r   r   r   r    does not exist.)rf   get_collectionsr'   ra   r~   r   r   existings        rW   get_collectionzSegmentAPI.get_collection,  sH     ;;..fx / 
 A;,{4&@P-QRRrY   zSegmentAPI.list_collectionc                     | j                   j                  t        j                  ||       | j                  j                  ||||      S )N)r   r   r   )r   r   r   r   )ru   r   r   LIST_COLLECTIONSrf   r   )ra   r   r   r   r   s        rW   list_collectionszSegmentAPI.list_collections>  sS     	$$** 	% 	
 {{**v + 
 	
rY   zSegmentAPI.count_collectionsc                 R    t        | j                  j                  ||            }|S )Nr   r   )rR   rf   r   )ra   r   r   collection_counts       rW   count_collectionszSegmentAPI.count_collectionsR  s.     KK''v'I
  rY   zSegmentAPI._modifyr   new_namenew_metadatac                 z   |rt        |       |rt        |       | j                  |      }| j                  j	                  t
        j                  |||       |r!|r| j                  j                  |||       y |r| j                  j                  ||       y |r| j                  j                  ||       y y )Nr   )r~   r   r   )r   )	rX   r6   _get_collectionru   r   r   UPDATE_COLLECTIONrf   update_collection)ra   r   r   r   r   r   _s          rW   _modifyzSegmentAPI._modify`  s     X&$\2   $$$++!	 	% 	
 KK))"8l)SKK))"8)<KK))"|)D rY   zSegmentAPI.delete_collectionc                    | j                   j                  |||      }|rT| j                   j                  |d   j                  ||       | j                  j                  |d   j                         y t        d| d      )Nr   r   r   r   r   )rf   r   delete_collectionr   rg   delete_segmentsrS   r   s        rW   r   zSegmentAPI.delete_collection  s     ;;..fx / 
 KK))v *  MM))(1+..9{4&0@ABBrY   zSegmentAPI._addidscollection_id
embeddings	metadatas	documentsurisc	                    | j                  |      }	| j                  j                  |t        j                  j
                         t        |||||fd| j                         i       t        t        t        j                  j
                  |||||            }
| j                  |	|
       | j                  j                  t        j
                  ||||||       | j                  j                  ||
       | j                   j#                  t%        t'        |      t)        |      |t)        |      nd|t)        |      nd|t)        |      nd             y)Nmax_batch_sizer   r   r   r   r   r   r   r   r   r   r   r   r   )r   
add_amountwith_metadatawith_documents	with_urisT)r   rg   hint_use_collectiont	OperationADDr9   get_max_batch_sizelist_records_validate_embedding_record_setru   r   r   ri   submit_embeddingsrj   r   r:   r   rR   )ra   r   r   r   r   r   r   r   r   r   records_to_submits              rW   _addzSegmentAPI._add  s<    ##M2))-I*iD9t6689	
 !%##	
 	++D2CD$$::! 	% 	
 	((8IJ&&.. #M 2s8*3*?c#hQ+4+@s3xa&*&6#c(A	
 rY   zSegmentAPI._updatec	                    | j                  |      }	| j                  j                  |t        j                  j
                         t        |||||fd| j                         i       t        t        t        j                  j
                  |||||            }
| j                  |	|
       | j                  j                  t        j
                  ||||||       | j                  j                  ||
       | j                   j#                  t%        t'        |      t)        |      |rt)        |      nd|rt)        |      nd|rt)        |      nd|rt)        |      nd             y)Nr   r   r   r   )r   update_amountwith_embeddingsr   r   r   T)r   rg   r   r   r   UPDATEr9   r   r   r   r   ru   r   r   ri   r   rj   r   r=   r   rR   ra   r   r   r   r   r   r   r   r   r   r   s              rW   _updatezSegmentAPI._update  sB    ##M2))-9K9KL*iD9t6689	
 !""%##	
 	++D2CD$$==! 	% 	
 	((8IJ&&..! #M 2!#h3=J109c)nq1:s9~'+#d)		
 rY   zSegmentAPI._upsertc	           
         | j                  |      }	| j                  j                  |t        j                  j
                         t        |||||fd| j                         i       t        t        t        j                  j
                  |||||            }
| j                  |	|
       | j                  j                  t        j
                  ||||||       | j                  j                  ||
       y)Nr   r   r   T)r   rg   r   r   r   UPSERTr9   r   r   r   r   ru   r   r   ri   r   r   s              rW   _upsertzSegmentAPI._upsert
  s     ##M2))-9K9KL*iD9t6689	
 !""%##	
 	++D2CD$$==! 	% 	
 	((8IJrY   zSegmentAPI._getc                 "    t        | t              S rp   
isinstancer(   es    rW   <lambda>zSegmentAPI.<lambda>:      :a9M+NrY         T)r   waitstopreraise)r   r   r   wheresortpage	page_sizewhere_documentincludec                    t        t        |      |rt        |      ndd       | j                  |      }|t	        |       |	t        |	       | j                  j                  t        j                  ||||	|       |t        d      |r|r
|dz
  |z  }|}|rt        |      nd}| j                  j                  t        t        |      ||r|ndd|
v r|ndd|
v r|ndd|
v r|nd	             | j                  j                  t!        |t#        |||	      t%        |xs d|      t'        t(        j*                  |
v t(        j,                  |
v t(        j.                  |
v d
t(        j0                  |
v                   S )Nr   r   	ids_count)r   r   r   r   r   r   zSorting is not yet supported   r   r   r   )r   r  r   include_metadatainclude_documentsinclude_urisF)r   r   rR   _scanr7   r8   ru   r   r   GETNotImplementedErrorrj   r   r<   rh   getr   r   r   r   r2   r   r   r   r   )ra   r   r   r   r   r   r   r   r   r   r  r   r   scan
ids_amounts                  rW   _getzSegmentAPI._get8  s   0 	'!$]!3),SX!	
 zz-( 5!%#N3$$::) 	% 	
 %&DEEIQh)+FE!$SX!
&&.. #M 2$$e!/:g/E10;w0F*A+1W+<Z!		
 ~~!!sE>2fk5)))W4**g5))W4$$/	
 	
rY   zSegmentAPI._deletec           
         t        t        |      |rt        |      ndd       |t        |       |t	        |       ||=t        |      dk(  r/||+t        |      dk(  r||t        |      dk(  rt        d      | j                  |      }| j                  j                  t        j                  ||||       | j                  j                  |t        j                  j                         |s|s|s4| j                  j!                  t#        |t%        |||                  d   }n|}t        |      dk(  ry t'        t)        t        j                  j                  |            }	| j+                  |j,                  |	       | j.                  j1                  ||	       | j2                  j5                  t7        t        |      t        |                   y )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   )	operationr   )r   delete_amount)r   r   rR   r7   r8   rS   r	  ru   r   r   DELETErg   r   r   r   rh   r  r   r   r   r   r   
collectionri   r   rj   r   r;   )
ra   r   r   r   r   r   r   r  ids_to_deleter   s
             rW   _deletezSegmentAPI._delete  s    	'!$]!3),SX!	
 5!%#N3 [S_SQ5#4Uq&".3~3F!3K   zz-($$==) 	% 	
 	))-9K9KL^C NN..fS%@AM  M}" q{{11}E
 	++DOO=NO((8IJ&&..! #M 2#mBT	
rY   zSegmentAPI._countc                 "    t        | t              S rp   r   r   s    rW   r   zSegmentAPI.<lambda>  r   rY   c                     t        dt        |      i       | j                  j                  t	        | j                  |                  S )Nr   )r   r   rh   countr   r	  )ra   r   r   r   s       rW   _countzSegmentAPI._count  s9     	']9K'LM~~##Idjj.G$HIIrY   zSegmentAPI._queryc                 "    t        | t              S rp   r   r   s    rW   r   zSegmentAPI.<lambda>  r   rY   
   )r   r   	distancesquery_embeddings	n_resultsc	                 H   t        t        |      |t        |      d       t        |      }	| j                  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        |       | j                  |      }
|D ])  }| j                  |
j                  t        |      d	       + | j                  j                  t        j                  |||||
       | j                  j!                  t#        |
t%        ||      t'        d ||      t)        t*        j,                  |v t*        j.                  |v t*        j0                  |v t*        j2                  |v t*        j4                  |v                   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   r   r   r  r  )r   r   rR   rj   r   r>   r7   r8   r	  _validate_dimensionr  ru   r   r   QUERYrh   knnr   r   r   r   r2   r   r   r   r  r   )ra   r   r  r  r   r   r  r   r   r!  r  	embeddings               rW   _queryzSegmentAPI._query  s   6 	'!$]!3&U	
 +,&&..  #M 2)#5:5F\A5C5O\UV2=2H,a2=2H,a-3w->\A2=2H,a
	
 5!%#N3zz-()I$$T__c)nU$S * 	$$<<)- 	% 	
 ~~!!$i0tUN3))W4**g5))W4))W4$$/	
 	
rY   zSegmentAPI._peeknc                 T    t        dt        |      i       | j                  ||      S )Nr   )r   )r   r   r  )ra   r   r-  r   r   s        rW   _peekzSegmentAPI._peek?  s)     	']9K'LMyyay00rY   c                     t         S rp   r$   r|   s    rW   get_versionzSegmentAPI.get_versionL  s    rY   c                      y rp    r|   s    rW   reset_statezSegmentAPI.reset_stateP  s    rY   c                 8    | j                   j                          y)NT)rv   r4  r|   s    rW   resetzSegmentAPI.resetT  s      "rY   c                     | j                   S rp   )re   r|   s    rW   get_settingszSegmentAPI.get_settingsY  s    ~~rY   c                 .    | j                   j                  S rp   )ri   r   r|   s    rW   r   zSegmentAPI.get_max_batch_size]  s    ~~,,,rY   z)SegmentAPI._validate_embedding_record_setr  recordsc                     t        dt        |d         i       |D ](  }|d   	| j                  |t        |d         d       * y)zQValidate the dimension of an embedding record before submitting it to the system.r   r   r+  NTr&  )r   r   r(  rR   )ra   r  r:  records       rW   r   z)SegmentAPI._validate_embedding_record_sete  sT     	'Z=M9N'OPFk".((F;$7 8 )  rY   dimr'  c                     |d   2|r/|j                   }| j                  j                  ||       ||d<   yy|d   |k7  rt        d| d|d          y)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   rf   r   r&   )ra   r  r=  r'  r   s        rW   r(  zSegmentAPI._validate_dimensiont  s{     k"*]]--s-C*-
;'  $++&se+UV`alVmUno  rY   zSegmentAPI._get_collectionc                     | j                   j                  |      }|rt        |      dk(  rt        d| d      |d   S )N)r   r   r   r   )rf   r   rR   r'   )ra   r   collectionss      rW   r   zSegmentAPI._get_collection  sN    kk11]1Cc+.!3,m_,<=  1~rY   zSegmentAPI._scanc           	      N   | j                   j                  |      }|d   D ci c]  }|d   |
 }}t        |d   |t        j                  j
                     |t        j                  j                     |j                  t        j                  j                  d             S c c}w )Nr   scoper  )r  r*  r   r<  )	rf   get_collection_with_segmentsr   r   SegmentScopeVECTORMETADATAr  RECORD)ra   r   collection_and_segmentsr   scope_to_segments        rW   r	  zSegmentAPI._scan  s    "&++"J"J#
 6MZ5X
5X'GGg%5X 	 
 .|< !6!67%ann&=&=>#''(=(=tD
 	

s   B")rN   N)W__name__
__module____qualname____doc__r   __annotations__r   r   r   r"   r!   r   r   r   r   rr   rG   ry   r}   r    r   	OPERATIONr   r   r   Databaser   r   r@   rA   r   r   r	   r   Tenantr   r`   r
   r   r)   boolr   r   r   r   r   r   rH   r   r   r*   r+   r,   r-   r.   r   r   r   r   r   r   r   r/   r0   r1   r3   r  r  r  r4   r,  r/  r1  r4  r6  r8  r   ALLr#   rC   OperationRecordr   r(  r   r   r	  __classcell__)rw   s   @rW   rd   rd   l   s   RM55..ON++
Lv 
L #3 # # .0H0R0RS7E 
C 
 
$ 
  T
  +-E-O-OP4B B Bc Bqzz B  QB .0H0R0RS7E >C > >$ >  T> -/G/Q/QR  $ $$	U}U U 	U
 
!**	U  SU ,.F.P.PQ
# 
$ 
  R
 
< 
 
 )+C+M+MN1s 1qxx 1  O1 02J2T2TU DH15#$(DD   ?@D -.	D
 D D D 
D   VDL -/G/Q/Q  DH15$(

   ?@
 -.	

 
 
 

  

( -/G/Q/QR #$(	SsmS S 	S
 
S   SS .0H0R0RS  $ $$(
}
 
 	

 
 
/	"
   T
" 02J2T2TU %(	 	  	  
		    V	  &(@(J(JK #'59$( E E 3- E 12	 E
  E  E 
 E   L ED 02J2T2TU %(	CC C 	C
 
C   VC$ #%=%G%GH *.)-#$(22 2 	2
 I&2 I&2 tn2 2 2 
2   I2h &(@(J(JK
 ,0)-)-#$(44 4 Z(	4
 I&4 I&4 tn4 4 4 
4   L4l &(@(J(JK *.)-#$()) ) 	)
 I&) I&) tn) ) ) 
)   L)V #%=%G%GH
 !NO]"	  "!%"# $"#'26C$(H
H
 c]H
 	H

 smH
 }H
 H
 smH
 C=H
 !/H
 H
 H
 H
 
H
   IH
T &(@(J(JK "!%26$(I
I
 c]I
 	I

 !/I
 I
 I
 
I
   LI
V %'?'I'IJ
 !NO]"	  %(	JJ J 	J
 
J   KJ %'?'I'IJ  !NO]"	 
 !%26B$(B
B
 %B
 	B

 B
 !/B
 B
 B
 B
 
B
   K B
H $&>&H&HI $(11 1 	1
 1 
1   J1 S     t   h   -C - - 35M5Q5Q	,,	15a6G6G1H				,,-0:>	$ .0H0L0LMT all  N $&>&B&BC
4 
D 
 D
rY   rd   r  r   r   r   r   r   c              #   $  K   |g k(  rd}t        |      D ]w  \  }}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                  ||       }| y yw)ziConvert parallel lists of embeddings, metadatas and documents to a sequence of
    SubmitEmbeddingRecordsNzchroma:documentz
chroma:uri)r   r+  encodingr   r  )	enumerater   rT  ScalarEncodingFLOAT32)r  r   r   r   r   r   ir   r   documenturir<  s               rW   r   r     s      R
32 |H |HDhD(98D-x8q'C:h:c:(#.""'1'=jm4%%--
 5  s   BB)NNNN)ptenacityr   r   r   r   chromadb.apir   chromadb.api.configurationr   chromadb.authr	   chromadb.configr
   r   r   r   chromadb.db.systemr   chromadb.quotar   r   chromadb.rate_limitr   r   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,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   !chromadb.telemetry.product.eventsr:   r;   r<   r=   r>   r?   typesr   typingr@   rA   rB   rC   rD   rE   rF   	overridesrG   uuidrH   rI   	functoolsrJ   rz   loggingrT   rK   	getLoggerrJ  r   r   rX   r`   rd   r   rT  r   r3  rY   rW   <module>ry     s|   N N " F & N N $ 0 I + 9 W W J J  > $ 8   
    &          	CxS)*			8	$  (Q 1 t
 t
t (,%)%),{{,	, $, 	"	,
 	", 4., q  $,-,rY   