
    q9iS                        d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ er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mZmZ d dlmZ d d	l m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d
l'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z1 d dl2m3Z3 d dl4Z4d dl m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>Z>d dl?Z? e?j                         dk7  rd dlAZAn e?j                         dk(  rd dlBZB G d de      ZCy)    )TYPE_CHECKING)CollectionMetadata
Embeddings	GetResultIDsWhereWhereDocumentInclude	Documents	MetadatasQueryResultURIs)	ServerAPI)AttachedFunction)CreateCollectionConfigurationUpdateCollectionConfiguration+create_collection_configuration_to_json_str+update_collection_configuration_to_json_str)UserIdentity)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)ProductTelemetryClient)CollectionAddEventCollectionDeleteEventCollectionGetEventCollectionUpdateEventCollectionQueryEventClientCreateCollectionEvent)IncludeMetadataDocuments!IncludeMetadataDocumentsDistances"IncludeMetadataDocumentsEmbeddingsSchemaSearchResult)DatabaseTenant
Collection)SearchN)OptionalSequenceListDictAny)override)UUIDWindowsc                       e Zd ZU ej                  ed<   eed<   eed<   def fdZ	e
dLd       Ze
dLd	       Ze
efd
ededdfd       Ze
efd
ededefd       Ze
efd
ededdfd       Ze
ddefdee   dee   dedee   fd       Ze
d
eddfd       Ze
d
edefd       Ze
defd       Ze
eefdededefd       Ze
ddeefdee   dee   dededee   f
d       Z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
eefd
edededefd       Z#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
eefd
edededdfd        Z%e
dddeefd!e&d"ee   d#ee    d$ee'   dededdfd%       Z(e
eefd&e&d"edededef
d'       Z)e
eefd&e&d(e*e+   dedede,f
d)       Z-e
eefd&e&dededefd*       Z.e
d+eefd&e&d,ededede/f
d-       Z0e
ddddde1eefd&e&d.ee2   d/ee3   dee   dee   d0ee4   d1e5dedede/fd2       Z6e
dddeefd.e2d&e&d3e7d4ee8   d5ee9   d6ee:   dedede!fd7       Z;e
ddddeefd&e&d.e2d3ee7   d4ee8   d5ee9   d6ee:   dedede!fd8       Z<e
dddeefd&e&d.e2d3e7d4ee8   d5ee9   d6ee:   dedede!fd9       Z=e
dd+dde>eefd&e&d:e7d.ee2   d;ed/ee3   d0ee4   d1e5dedede?fd<       Z@e
dddeefd&e&d.ee2   d/ee3   d0ee4   dededdfd=       ZAe
de!fd>       ZBe
defd?       ZCe
deDfd@       ZEe
defdA       ZFe
deefdBed
edCe&dDedEeeGeeHf      dededdFfdG       ZIe
eefd
edCe&dededdFf
dH       ZJe
deefd
edCe&dIe!dedede!fdJ       ZKe
deLfdK       ZM xZNS )MRustBindingsAPIbindingshnsw_cache_sizeproduct_telemetry_clientsystemc                 8   t         |   |       | j                  t              | _        t        j                         dk7  r't        j                  t        j                        d   }n(t        j                  j                  j                         }|dz  | _        y )Nr1   r      )super__init__requirer   r6   platformr7   resource	getrlimitRLIMIT_NOFILEctypeswindllmsvcrt_getmaxstdior5   )selfr7   max_file_handles	__class__s      Z/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/chromadb/api/rust.pyr;   zRustBindingsAPI.__init__M   s{     (,5K(L%??	)'11(2H2HI!L%}}33@@B  	    returnNc                    | j                   j                  j                  d      r+| j                   j                  j                  d      }|dz   }nd }d }| j                   j                  j                  d      }|dk(  rt        j                  j
                  nt        j                  j                  }| j                   j                  j                  d      }|dk(  rt        j                  j                  nt        j                  j                  }t        j                  |||      }t        j                  | j                   j                  j                  d	      ||| j                  
      | _        y )Nis_persistentpersist_directoryz/chroma.sqlite3migrations_hash_algorithmmd5
migrationsapply)	hash_typemigration_modeurlallow_reset)rU   sqlite_db_configpersist_pathr5   )_systemsettingsr<   chromadb_rust_bindingsMigrationHashMD5SHA256MigrationModeApplyValidateSqliteDBConfigBindingsr5   r4   )rE   rW   sqlite_persist_pathrR   hash_type_bindingsrS   migration_mode_bindingssqlite_configs           rH   startzRustBindingsAPI.start\   s9    <<  ((9<<00889LML".1B"BL"&LL))112MN	 E! #0044'55<< 	
 ..66|D ( #0066'55>> 	 
 /==(2#
 /77--55mD*% 00	
rI   c                     | ` y N)r4   rE   s    rH   stopzRustBindingsAPI.stop   s    MrI   nametenantc                 :    | j                   j                  ||      S ri   )r4   create_databaserE   rl   rm   s      rH   ro   zRustBindingsAPI.create_database       }},,T6::rI   c                     | j                   j                  ||      }|j                  |j                  |j                  dS N)idrl   rm   )r4   get_databasert   rl   rm   rE   rl   rm   databases       rH   ru   zRustBindingsAPI.get_database   s7    ==--dF;++MMoo
 	
rI   c                 :    | j                   j                  ||      S ri   )r4   delete_databaserp   s      rH   ry   zRustBindingsAPI.delete_database   rq   rI   limitoffsetc                     | j                   j                  |||      }|D cg c]&  }|j                  |j                  |j                  d( c}S c c}w rs   )r4   list_databasesrt   rl   rm   )rE   rz   r{   rm   	databasesrw   s         rH   r}   zRustBindingsAPI.list_databases   sW     MM00G	 &
 	 kk "//
 	
 
s   +Ac                 8    | j                   j                  |      S ri   )r4   create_tenant)rE   rl   s     rH   r   zRustBindingsAPI.create_tenant   s    }}**400rI   c                 d    | j                   j                  |      }t        |j                        S )N)rl   )r4   
get_tenantr'   rl   rp   s      rH   r   zRustBindingsAPI.get_tenant   s%    ))$/6;;''rI   c                 6    | j                   j                         S ri   )r4   	heartbeatrj   s    rH   r   zRustBindingsAPI.heartbeat   s    }}&&((rI   rw   c                 :    | j                   j                  ||      S ri   )r4   count_collections)rE   rm   rw   s      rH   r   z!RustBindingsAPI.count_collections   s     }}..vx@@rI   c                 *   | j                   j                  ||||      }|D cg c]e  }t        |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                        g c}S c c}w )N)rt   rl   serialized_schemaconfiguration_jsonmetadata	dimensionrm   rw   )r4   list_collectionsCollectionModelrt   rl   schemaconfigurationr   r   rm   rw   )rE   rz   r{   rm   rw   collections
collections          rH   r   z RustBindingsAPI.list_collections   s     mm44UFFHU *
  ==__","3"3#-#;#;#,,$..!((#,,	
 	
 
s   A*BFr   r   r   get_or_createc           
         | j                   j                  t        t        t                           |rt        ||      }nd }|r$t        j                  |j                               }	nd }	| j                  j                  |||	||||      }
t        |
j                  |
j                  |
j                  |
j                  |
j                  |
j                   |
j"                  |
j$                        }|S )N)collection_uuidrt   rl   r   r   r   r   rm   rw   )r6   capturer    strrt   r   jsondumpsserialize_to_jsonr4   create_collectionr   rl   r   r   r   r   rm   rw   )rE   rl   r   r   r   r   rm   rw   configuration_json_str
schema_strr   collection_models               rH   r   z!RustBindingsAPI.create_collection   s     	%%--' #B	
 %Px&" &*"F$<$<$>?JJ]]44"

 +}})77(//(( **$$((	
  rI   c           
         | j                   j                  |||      }t        |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                        S )Nr   )r4   get_collectionr   rt   rl   r   r   r   r   rm   rw   )rE   rl   rm   rw   r   s        rH   r   zRustBindingsAPI.get_collection  sm     ]]11$I
}})77(//(( **$$((	
 		
rI   c           	      0    | j                  ||||d||      S )NT)r   )rE   rl   r   r   r   rm   rw   s          rH   get_or_create_collectionz(RustBindingsAPI.get_or_create_collection  s&     %%&-4
 	
rI   c                 >    | j                   j                  |||       y ri   )r4   delete_collectionrv   s       rH   r   z!RustBindingsAPI.delete_collection(  s     	''fh?rI   rt   new_namenew_metadatanew_configurationc                 r    |rt        |      }nd }| j                  j                  t        |      |||       y ri   )r   r4   update_collectionr   )rE   rt   r   r   r   rm   rw   new_configuration_json_strs           rH   _modifyzRustBindingsAPI._modify1  s=     )T!*& *.&''GX|-G	
rI   collection_idc                     t        d      )Nz6Collection forking is not implemented for Local ChromaNotImplementedError)rE   r   r   rm   rw   s        rH   _forkzRustBindingsAPI._forkE  s     "D
 	
rI   searchesc                     t        d      )Nz*Search is not implemented for Local Chromar   )rE   r   r   rm   rw   s        rH   _searchzRustBindingsAPI._searchQ  s     ""NOOrI   c                 N    | j                   j                  t        |      ||      S ri   )r4   countr   )rE   r   rm   rw   s       rH   _countzRustBindingsAPI._count[  s"     }}""3}#5vxHHrI   
   nc                 6    | j                  ||||t              S )N)rz   rm   rw   include)_getr#   )rE   r   r   rm   rw   s        rH   _peekzRustBindingsAPI._peekd  s)     yy6  
 	
rI   idswherewhere_documentr   c
                    |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	        |      ||rt        j                  |      nd ||xs d|rt        j                  |      nd |||		      }t        |j                  |j                  |j                  |j                  |d |j                        S )Nr   	metadatas	documentsuris)r   	ids_countrz   include_metadatainclude_documentsinclude_uris)r   
embeddingsr   r   includeddatar   )lenr6   r   r   r   r4   getr   r   r   r   r   r   r   r   )rE   r   r   r   rz   r{   r   r   rm   rw   
ids_amountrust_responses               rH   r   zRustBindingsAPI._gett  s     "%SX!
%%-- #M 2$$e!/:g/E10;w0F*A+1W+<Z!		
 ))!&DJJuDKa*8DJJ~&d

 !!$//#--###--
 	
rI   r   r   r   r   c	                    | j                   j                  t        t        |      t	        |      |t	        |      nd|t	        |      nd|t	        |      nd             | j
                  j                  |t        |      ||||||      S )Nr   )r   
add_amountwith_metadatawith_documents	with_uris)r6   r   r   r   r   r4   add)	rE   r   r   r   r   r   r   rm   rw   s	            rH   _addzRustBindingsAPI._add  s     	%%-- #M 2s8*3*?c#hQ+4+@s3xa&*&6#c(A	
 }}  	
 		
rI   c	                 8   | j                   j                  t        t        |      t	        |      |rt	        |      nd|rt	        |      nd|rt	        |      nd|rt	        |      nd             | j
                  j                  t        |      |||||||      S )Nr   )r   update_amountwith_embeddingsr   r   r   )r6   r   r   r   r   r4   update	rE   r   r   r   r   r   r   rm   rw   s	            rH   _updatezRustBindingsAPI._update  s     	%%--! #M 2!#h3=J109c)nq1:s9~'+#d)		
 }}##	
 		
rI   c	           
      X    | j                   j                  t        |      |||||||      S ri   )r4   upsertr   r   s	            rH   _upsertzRustBindingsAPI._upsert  s8     }}##	
 		
rI   query_embeddings	n_resultsc
                 6   t        |      }
|rt        |      nd}| 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
             | j
                  j                  t	        |      ||||rt        j                  |      nd |rt        j                  |      nd |||		      }t        |j                  |j                  |j                  |j                  |d |j                  |j                        S )Nr   r   r   r   	distances)
r   query_amountfiltered_ids_amountr   with_metadata_filterwith_document_filterinclude_metadatasr   r   include_distances)r   r   r   r   r   r   r   r   )r   r6   r   r   r   r4   queryr   r   r   r   r   r   r   r   r   )rE   r   r   r   r   r   r   r   rm   rw   r   r   r   s                rH   _queryzRustBindingsAPI._query  s*    +,*-c#h1%%--  #M 2)$7#5:5F\A5C5O\UV2=2H,a2=2H,a-3w->\A2=2H,a	
 ++!&DJJuD*8DJJ~&d

 !!$//#--###--#--	
 		
rI   c                    | j                   j                  t        t        |      d             | j                  j                  t        |      ||rt        j                  |      nd |rt        j                  |      ||      S d ||      S )Nr   )r   delete_amount)r6   r   r   r   r4   deleter   r   )rE   r   r   r   r   rm   rw   s          rH   _deletezRustBindingsAPI._delete2  s     	%%--! !$M 2		
 }}##!&DJJuD*8DJJ~&
 	
 ?C
 	
rI   c                 6    | j                   j                         S ri   )r4   resetrj   s    rH   r   zRustBindingsAPI.resetN  s    }}""$$rI   c                 6    | j                   j                         S ri   )r4   get_versionrj   s    rH   r   zRustBindingsAPI.get_versionR  s    }}((**rI   c                 .    | j                   j                  S ri   )rX   rY   rj   s    rH   get_settingszRustBindingsAPI.get_settingsV  s    ||$$$rI   c                 6    | j                   j                         S ri   )r4   get_max_batch_sizerj   s    rH   r   z"RustBindingsAPI.get_max_batch_sizeZ  s    }}//11rI   function_idinput_collection_idoutput_collectionparamsr   c                     t        d      zPAttached functions are not supported in the Rust bindings (local embedded mode).zAttached functions are only supported when connecting to a Chroma server via HttpClient. The Rust bindings (embedded mode) do not support attached function operations.r   )rE   r   rl   r   r   r   rm   rw   s           rH   attach_functionzRustBindingsAPI.attach_function^  s     "]
 	
rI   c                     t        d      r   r   )rE   rl   r   rm   rw   s        rH   get_attached_functionz%RustBindingsAPI.get_attached_functiono  s     "]
 	
rI   delete_outputc                     t        d      r   r   )rE   rl   r   r   rm   rw   s         rH   detach_functionzRustBindingsAPI.detach_function}  s     "]
 	
rI   c                 0    t        dt        t        g      S )N )user_idrm   r~   )r   r   r   rj   s    rH   get_user_identityz!RustBindingsAPI.get_user_identity  s    !'(
 	
rI   )rJ   N)O__name__
__module____qualname__rZ   rb   __annotations__intr   r   r;   r/   rg   rk   r   r   ro   r&   ru   ry   r*   r+   r}   r   r'   r   r   r   r   r   r   r$   r   r   boolr   r   r   r   r0   r   r   r   r,   r)   r%   r   r   r   r   r!   r   r   r	   r
   r   r   r   r   r   r   r   r   r"   r   r   r   r   r   r   r   r   r-   r.   r   r   r  r   r  __classcell__)rG   s   @rH   r3   r3   H   sb
   $---44
v 
  
  
D  
 7E ;C ; ;$ ; ; 4B 
 
c 
x 
 
 7E ;C ; ;$ ; ;   $ $$	
}
 
 	

 
(	
 
  1# 1$ 1 1 (s (v ( ( )3 ) ) *<LAA69A	A A
   $ $$(
}
 
 	

 
 
/	"
 
,  $(AE15#$(1 1   1    =>	1 
 -.1  1  1  1  
1  1 f  %(	

 
 	

 

 
$  $(AE15$(

  
   =>	

 -.
 
 
 

 
  %(	@@ @ 	@
 
@ @  #'59EI$(

 3-
 12	

 $$AB
 
 
 

 
& 
 %(	
	
 	
 		

 	
 
	
 	
 
 %(PP v,P 	P
 P 
P P  %(	II I 	I
 
I I  $(

 
 	

 
 

 
  "!%# $263$(,
,
 c],
 	,

 },
 ,
 !/,
 ,
 ,
 ,
 
,
 ,
\  *.)-#$(

 
 	

 I&
 I&
 tn
 
 
 

 
@ 
 ,0)-)-#$(

 
 Z(	

 I&
 I&
 tn
 
 
 

 
B  *.)-#$(

 
 	

 I&
 I&
 tn
 
 
 

 
, 
 "!%26<$(2
2
 %2
 c]	2

 2
 2
 !/2
 2
 2
 2
 
2
 2
h  "!%26$(

 c]
 	

 !/
 
 
 

 
6 %t % % +S + + %h % % 2C 2 2  ,0$(

 
 "	

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

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

 
 
 

 
 
< 
 
rI   r3   )Dtypingr   chromadbr   r   r   r   r   r	   r
   r   r   r   r   chromadb.apir   $chromadb.api.models.AttachedFunctionr   %chromadb.api.collection_configurationr   r   r   r   chromadb.authr   chromadb.configr   r   r   r   chromadb.telemetry.productr   !chromadb.telemetry.product.eventsr   r   r   r   r   r    chromadb.api.typesr!   r"   r#   r$   r%   chromadb.typesr&   r'   r(   r   "chromadb.execution.expression.planr)   rZ   r*   r+   r,   r-   r.   	overridesr/   uuidr0   r   r=   r7   r>   rA   r3    rI   rH   <module>r     s         #E  ' N N =   K J 5  7 6    8??	!X__)#K	
i K	
rI   