o
    3IhI                     @   sN  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 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& d d	l'm(Z(m)Z)m*Z+ d d
l,Z,d dl-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d d
l4Z4d d
l5Z5e56 dkrd d
l7Z7n
e56 dkrd d
l8Z8G dd deZ9d
S )    )CollectionMetadata
Embeddings	GetResultIDsWhereWhereDocumentInclude	Documents	MetadatasQueryResultURIs)	ServerAPI)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)DatabaseTenant
CollectionN)OptionalSequence)override)UUIDWindowsc                       s   e Zd ZU ejed< eed< eed< def fddZ	e
d_d	d
Ze
d_ddZe
efdededdfddZe
efdededefddZe
efdededdfddZe
ddefdee dee dedee fddZe
deddfddZe
dedefddZe
defddZe
eefdededefd d!Ze
ddeefdee dee dededee f
d"d#Z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(d)Z!e
eefdedededefd*d+Z"e
ddeefded%ee d&ee dededefd,d-Z#e
eefdedededdfd.d/Z$e
dddeefd0e%d1ee d2ee d3ee& dededdfd4d5Z'e
eefd6e%d1edededef
d7d8Z(e
eefd6e%dededefd9d:Z)e
d;eefd6e%d<ededede*f
d=d>Z+e
ddddde,eefd6e%d?ee- d@ee. dee dee dAee/ dBe0dedede*fdCdDZ1e
dddeefd?e-d6e%dEe2dFee3 dGee4 dHee5 dedede fdIdJZ6e
ddddeefd6e%d?e-dEee2 dFee3 dGee4 dHee5 dedede fdKdLZ7e
dddeefd6e%d?e-dEe2dFee3 dGee4 dHee5 dedede fdMdNZ8e
dd;dde9eefd6e%dOe2d?ee- dPed@ee. dAee/ dBe0dedede:fdQdRZ;e
dddeefd6e%d?ee- d@ee. dAee/ dededdfdSdTZ<e
de fdUdVZ=e
defdWdXZ>e
de?fdYdZZ@e
defd[d\ZAe
deBfd]d^ZC  ZDS )`RustBindingsAPIbindingshnsw_cache_sizeproduct_telemetry_clientsystemc                    sP   t  | | t| _t dkrttj	d }nt
jj }|d | _d S )Nr(   r      )super__init__requirer   r,   platformr-   resource	getrlimitRLIMIT_NOFILEctypeswindllmsvcrt_getmaxstdior+   )selfr-   max_file_handles	__class__ Q/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/api/rust.pyr0   E   s   zRustBindingsAPI.__init__returnNc                 C   s   | j jdr| j jd}|d }nd }d }| j jd}|dkr&tjjntjj}| j jd}|dkr9tjjntjj	}tj
|||d}tj| j jd	||| jd
| _d S )Nis_persistentpersist_directoryz/chroma.sqlite3migrations_hash_algorithmmd5
migrationsapply)	hash_typemigration_modeurlallow_reset)rJ   sqlite_db_configpersist_pathr+   )_systemsettingsr1   chromadb_rust_bindingsMigrationHashMD5SHA256MigrationModeApplyValidateSqliteDBConfigBindingsr+   r*   )r:   rL   sqlite_persist_pathrG   hash_type_bindingsrH   migration_mode_bindingssqlite_configr>   r>   r?   startT   s4   
zRustBindingsAPI.startc                 C   s   | ` d S N)r*   r:   r>   r>   r?   stopw      zRustBindingsAPI.stopnametenantc                 C      | j ||S r]   )r*   create_databaser:   ra   rb   r>   r>   r?   rd   }      zRustBindingsAPI.create_databasec                 C   s    | j ||}|j|j|jdS )Nidra   rb   )r*   get_databaserh   ra   rb   r:   ra   rb   databaser>   r>   r?   ri      s
   zRustBindingsAPI.get_databasec                 C   rc   r]   )r*   delete_databasere   r>   r>   r?   rl      rf   zRustBindingsAPI.delete_databaselimitoffsetc                 C   s   | j |||}dd |D S )Nc                 S   s   g | ]}|j |j|jd qS )rg   rg   ).0rk   r>   r>   r?   
<listcomp>   s    z2RustBindingsAPI.list_databases.<locals>.<listcomp>)r*   list_databases)r:   rm   rn   rb   	databasesr>   r>   r?   rq      s   zRustBindingsAPI.list_databasesc                 C   s   | j |S r]   )r*   create_tenant)r:   ra   r>   r>   r?   rs      s   zRustBindingsAPI.create_tenantc                 C   s   | j |}t|jdS )N)ra   )r*   
get_tenantr"   ra   re   r>   r>   r?   rt      s   zRustBindingsAPI.get_tenantc                 C   
   | j  S r]   )r*   	heartbeatr^   r>   r>   r?   rv         
zRustBindingsAPI.heartbeatrk   c                 C   rc   r]   )r*   count_collections)r:   rb   rk   r>   r>   r?   rx      s   z!RustBindingsAPI.count_collectionsc                 C   s    | j ||||}dd |D S )Nc                 S   s0   g | ]}t |j|j|j|j|j|j|jd qS )rh   ra   configuration_jsonmetadata	dimensionrb   rk   )CollectionModelrh   ra   configurationr{   r|   rb   rk   )ro   
collectionr>   r>   r?   rp      s    
z4RustBindingsAPI.list_collections.<locals>.<listcomp>)r*   list_collections)r:   rm   rn   rb   rk   collectionsr>   r>   r?   r      s   
z RustBindingsAPI.list_collectionsFr~   r{   get_or_createc           
   	   C   sf   | j tttd |rt|}nd }| j||||||}t|j|j	|j
|j|j|j|jd}	|	S )N)collection_uuidry   )r,   capturer   strrh   r   r*   create_collectionr}   ra   r~   r{   r|   rb   rk   )
r:   ra   r~   r{   r   rb   rk   configuration_json_strr   collection_modelr>   r>   r?   r      s.   	z!RustBindingsAPI.create_collectionc              	   C   s4   | j |||}t|j|j|j|j|j|j|j	dS )Nry   )
r*   get_collectionr}   rh   ra   r~   r{   r|   rb   rk   )r:   ra   rb   rk   r   r>   r>   r?   r      s   zRustBindingsAPI.get_collectionc                 C   s   |  |||d||S )NT)r   )r:   ra   r~   r{   rb   rk   r>   r>   r?   get_or_create_collection  s   	z(RustBindingsAPI.get_or_create_collectionc                 C   s   | j ||| d S r]   )r*   delete_collectionrj   r>   r>   r?   r        z!RustBindingsAPI.delete_collectionrh   new_namenew_metadatanew_configurationc                 C   s,   |rt |}nd }| jt|||| d S r]   )r   r*   update_collectionr   )r:   rh   r   r   r   rb   rk   new_configuration_json_strr>   r>   r?   _modify  s   
zRustBindingsAPI._modifycollection_idc                 C   s   t d)Nz6Collection forking is not implemented for Local Chroma)NotImplementedError)r:   r   r   rb   rk   r>   r>   r?   _fork-  s   zRustBindingsAPI._forkc                 C   s   | j t|||S r]   )r*   countr   )r:   r   rb   rk   r>   r>   r?   _count9  r   zRustBindingsAPI._count
   nc                 C   s   | j ||||tdS )N)rm   rb   rk   include)_getr    )r:   r   r   rb   rk   r>   r>   r?   _peekB  s   zRustBindingsAPI._peekidswherewhere_documentr   c
                 C   s   |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d | jt|||r<t|nd ||pAd|rHt|nd |||		}t	|j
|j|j|j|d |jdS )Nr   	metadatas	documentsuris)r   	ids_countrm   include_metadatainclude_documentsinclude_uris)r   
embeddingsr   r   includeddatar   )lenr,   r   r   r   r*   getjsondumpsr   r   r   r   r   r   )r:   r   r   r   rm   rn   r   r   rb   rk   
ids_amountrust_responser>   r>   r?   r   R  s>   
zRustBindingsAPI._getr   r   r   r   c	           	   
   C   sp   | j tt|t||d urt|nd|d urt|nd|d ur$t|ndd | j|t|||||||S )Nr   )r   
add_amountwith_metadatawith_documents	with_uris)r,   r   r   r   r   r*   add)	r:   r   r   r   r   r   r   rb   rk   r>   r>   r?   _add  s&   
zRustBindingsAPI._addc	           	   
   C   sr   | j tt|t||rt|nd|rt|nd|rt|nd|r%t|ndd | jt||||||||S )Nr   )r   update_amountwith_embeddingsr   r   r   )r,   r   r   r   r   r*   update	r:   r   r   r   r   r   r   rb   rk   r>   r>   r?   _update  s(   zRustBindingsAPI._updatec	           	   
   C   s   | j t||||||||S r]   )r*   upsertr   r   r>   r>   r?   _upsert  s   zRustBindingsAPI._upsertquery_embeddings	n_resultsc
                 C   s   t |}
|r
t |nd}| jtt||
|||d ur|
nd|d ur#|
ndd|v r*|
ndd|v r1|
ndd|v r8|
ndd|v r?|
ndd
 | jt|||||rTt|nd |r\t|nd |||		}t	|j
|j|j|j|d |j|jd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   r,   r   r   r   r*   queryr   r   r   r   r   r   r   r   r   )r:   r   r   r   r   r   r   r   rb   rk   r   r   r   r>   r>   r?   _query  sJ   zRustBindingsAPI._queryc                 C   sT   | j tt|dd | jt|||rt|nd |r%t|||S d ||S )Nr   )r   delete_amount)r,   r   r   r   r*   deleter   r   )r:   r   r   r   r   rb   rk   r>   r>   r?   _delete  s$   
	zRustBindingsAPI._deletec                 C   ru   r]   )r*   resetr^   r>   r>   r?   r   ,  rw   zRustBindingsAPI.resetc                 C   ru   r]   )r*   get_versionr^   r>   r>   r?   r   0  rw   zRustBindingsAPI.get_versionc                 C   s   | j jS r]   )rM   rN   r^   r>   r>   r?   get_settings4  r`   zRustBindingsAPI.get_settingsc                 C   ru   r]   )r*   get_max_batch_sizer^   r>   r>   r?   r   8  rw   z"RustBindingsAPI.get_max_batch_sizec                 C   s   t dttgdS )N )user_idrb   rr   )r   r   r   r^   r>   r>   r?   get_user_identity=  s
   z!RustBindingsAPI.get_user_identity)r@   N)E__name__
__module____qualname__rO   rW   __annotations__intr   r   r0   r&   r\   r_   r   r   rd   r!   ri   rl   r$   r%   rq   rs   r"   rt   rv   r   rx   r}   r   r   r   boolr   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__r>   r>   r<   r?   r)   @   s  
 
"&	
.	
 	
!	
	
4r)   ):chromadbr   r   r   r   r   r   r   r	   r
   r   r   chromadb.apir   %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    chromadb.typesr!   r"   r#   r}   rO   typingr$   r%   	overridesr&   uuidr'   r   r2   r-   r3   r6   r)   r>   r>   r>   r?   <module>   s(   4  	
