o
    \h6X                     @   sp  d dl Z d dlZd dlmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlZd dl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 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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d dl3m5Z5 d dl6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=m>Z> d dl?m@Z@ eAeBZCG dd deeZDdS )    N)AnyDictOptionalcastTuple)Sequence)UUID)override)CreateCollectionConfigurationUpdateCollectionConfiguration'update_collection_configuration_to_json'create_collection_configuration_to_json)__version__)BaseHTTPClient)DatabaseTenant
Collection)	ServerAPI)	Documents
EmbeddingsPyEmbeddingsIDsInclude	MetadatasURIsWhereWhereDocument	GetResultQueryResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_listIncludeMetadataDocuments!IncludeMetadataDocumentsDistances"IncludeMetadataDocumentsEmbeddings%optional_embeddings_to_base64_strings)UserIdentity)ClientAuthProvider)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClientc                       s  e Zd Zdef fddZdededeeef defdd	Ze	d
e
jedefdd
Ze	de
jeefdededdfddZe	de
jeefdededefddZe	de
jeefdededdfddZe	de
jeddefdee dee dedee fddZe	de
jededdfddZe	de
jededefddZe	de
jedefddZe	de
jeddeefdee dee ded edee f
d!dZe	d"e
jeeefded edefd#d"Ze	d$e
j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	d*e
jeeefdeded edefd+d*Z$e	d,e
j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	d.e
jedddeefd/e&d0ee d1ee! d2ee' ded eddfd3d.Z(e	d4e
jeeefd5e&d0eded edef
d6d4Z)e	d7e
jeeefdeded eddfd8d7Z*e	d9e
jeeefd5e&ded edefd:d9Z+e	d;e
jed<eefd5e&d=eded ede,f
d>d;Z-e	d?e
jeddddde.eefd5e&d@ee/ dAee0 dee dee dBee1 dCe2ded ede,fdDd?Z3e	dEe
jedddeefd5e&d@ee/ dAee0 dBee1 ded eddfdFdEZ4e	dGe
j5dHe6e/ee7 ee8 ee9 ee: f dIeddfdJdGZ;e	dKe
j5edddeefd@e/d5e&dLe<dMee8 dNee9 dOee: ded ede"fdPdKZ=e	dQe
j5eddddeefd5e&d@e/dLee< dMee8 dNee9 dOee: ded ede"fdRdQZ>e	dSe
j5edddeefd5e&d@e/dLe<dMee8 dNee9 dOee: ded ede"fdTdSZ?e	dUe
j5edd<dde@eefd5e&dVe<d@ee/ dWedAee0 dBee1 dCe2ded edeAfdXdUZBe	dYe
j5ede"fdZdYZCe	d[e
jedefd\d[ZDedeEfd]d^ZFe	d_e
jdefd`d_ZGe	dae
jde"fdbdaZHe	dce
jedefdddcZI  ZJS )eFastAPIsystemc                    s4  t  | |jd |jd | t| _| t| _|j| _t	j
t|jj|jj|jj|jjd| _tj| jd}tjd |d| _|jjpJi | _d| jd< dt d	 | jd
< | jjd uritj| jjd| _| jd urv| jj| j |jjr| t| _| j }|  D ]\}}|! | jj|< qd S d S )Nchroma_server_hostchroma_server_http_port)r2   r3   chroma_server_ssl_enableddefault_api_path)max_keepalive_connections)timeoutlimitszapplication/jsonzContent-TypezChroma Python Client vz( (https://github.com/chroma-core/chroma)z
User-Agent)verify)"super__init__settingsrequirer,   _opentelemetry_clientr/   _product_telemetry_client	_settingsr0   resolve_urlstrr2   r3   r4   chroma_server_api_default_path_api_urlhttpxLimitskeepalive_secsClient_sessionchroma_server_headers_headerr   chroma_server_ssl_verifyheadersupdatechroma_client_auth_providerr'   _auth_providerauthenticateitemsget_secret_value)selfr1   r8   _headersheadervalue	__class__ W/home/air/segue/gemini/backup/venv/lib/python3.10/site-packages/chromadb/api/fastapi.pyr;   9   sB   



zFastAPI.__init__methodpathkwargsreturnc                 K   sp   d|v rt |d}||d< tjj|dd d d}| j| }| jj||fi t	t
|}t| t |jS )Njsoncontent/)safeencodingerrors)orjsondumpspopurllibparsequoterD   rI   requestr   r   r   _raise_chroma_errorloadstext)rT   r\   r]   r^   dataescaped_pathurlresponserZ   rZ   r[   _make_request_   s   

zFastAPI._make_requestzFastAPI.heartbeatc                 C   s   |  dd}t|d S )zNReturns the current server time in nanoseconds to check if the server is alivegetz
/heartbeatznanosecond heartbeat)rt   intrT   	resp_jsonrZ   rZ   r[   	heartbeato   s   zFastAPI.create_databasenametenantNc                 C   s    | j dd| dd|id dS )zCreates a databasepost	/tenants/
/databasesrz   r`   Nrt   rT   rz   r{   rZ   rZ   r[   create_databasew   s
   

zFastAPI.get_databasec                 C   s2   |  dd| d| }t|d |d |d dS )zReturns a databaseru   r}   /databases/idrz   r{   r   rz   r{   )rt   r   )rT   rz   r{   rx   rZ   rZ   r[   get_database   s   zFastAPI.delete_databasec                 C   s   |  dd| d|  dS )zDeletes a databasedeleter}   r   Nr   r   rZ   rZ   r[   delete_database   s   zFastAPI.list_databaseslimitoffsetc                 C   s6   | j dd| dt||dd}dd |D }|S )zReturns a list of all databasesru   r}   r~   r   r   paramsc                 S   s&   g | ]}t |d  |d |d dqS )r   rz   r{   r   )r   ).0dbrZ   rZ   r[   
<listcomp>   s    z*FastAPI.list_databases.<locals>.<listcomp>rt   r   _clean_params)rT   r   r   r{   json_databases	databasesrZ   rZ   r[   list_databases   s   	

zFastAPI.create_tenantc                 C   s   | j ddd|id d S )Nr|   z/tenantsrz   r   r   )rT   rz   rZ   rZ   r[   create_tenant   s   zFastAPI.get_tenantc                 C   s   |  dd| }t|d dS )Nru   r}   rz   )rz   )rt   r   )rT   rz   rx   rZ   rZ   r[   
get_tenant   s   zFastAPI.get_user_identityc                 C   s   t di | ddS )Nru   z/auth/identityrZ   )r&   rt   rT   rZ   rZ   r[   get_user_identity   s   zFastAPI.list_collectionsdatabasec                 C   s<   | j dd| d| dt||dd}dd |D }|S )	z!Returns a list of all collectionsru   r}   r   /collectionsr   r   c                 S   s   g | ]}t |qS rZ   )CollectionModel	from_json)r   json_collectionrZ   rZ   r[   r      s    z,FastAPI.list_collections.<locals>.<listcomp>r   )rT   r   r   r{   r   json_collectionscollection_modelsrZ   rZ   r[   list_collections   s   

zFastAPI.count_collectionsc                 C   s$   |  dd| d| d}tt|S )zReturns a count of collectionsru   r}   r   z/collections_countrt   r   rv   )rT   r{   r   rx   rZ   rZ   r[   count_collections   s
   
zFastAPI.create_collectionFconfigurationmetadataget_or_createc           	      C   sB   | j dd| d| d|||rt|nd|dd}t|}|S )zCreates a collectionr|   r}   r   r   N)rz   r   r   r   r   )rt   r   r   r   )	rT   rz   r   r   r   r{   r   rx   modelrZ   rZ   r[   create_collection   s   

zFastAPI.get_collectionc              	   C   s,   |  dd| d| d| }t|}|S )zReturns a collectionru   r}   r   /collections/rt   r   r   )rT   rz   r{   r   rx   r   rZ   rZ   r[   get_collection  s   	
z FastAPI.get_or_create_collectionc                 C   s   | j |||d||dS )NT)rz   r   r   r   r{   r   )r   )rT   rz   r   r   r{   r   rZ   rZ   r[   get_or_create_collection   s   zFastAPI._modifyr   new_namenew_metadatanew_configurationc                 C   s:   | j dd| d| d| |||rt|nddd dS )zUpdates a collectionputr}   r   r   N)r   r   r   r   )rt   r   )rT   r   r   r   r   r{   r   rZ   rZ   r[   _modify5  s   
zFastAPI._forkcollection_idc              	   C   s6   | j dd| d| d| dd|id}t|}|S )zForks a collectionr|   r}   r   r   z/forkr   r   r   )rT   r   r   r{   r   rx   r   rZ   rZ   r[   _forkO  s   

zFastAPI.delete_collectionc              	   C   s"   |  dd| d| d|  dS )zDeletes a collectionr   r}   r   r   Nr   )rT   rz   r{   r   rZ   rZ   r[   delete_collectiona  s   	zFastAPI._countc              
   C   s*   |  dd| d| d| d}tt|S )z0Returns the number of embeddings in the databaseru   r}   r   r   z/countr   )rT   r   r{   r   rx   rZ   rZ   r[   _counto  s
   	
zFastAPI._peek
   nc              	   C   s   t t| j||||tdS )N)r{   r   r   include)r   r   _getr$   )rT   r   r   r{   r   rZ   rZ   r[   _peek~  s   	zFastAPI._getidswherewhere_documentr   c
              
   C   sz   dd |D }
| j dd| d|	 d| d||||||
dd	}t|d
 |dd |dd |dd d |dd |dS )Nc                 S      g | ]}|d kr|qS rp   rZ   r   irZ   rZ   r[   r         z FastAPI._get.<locals>.<listcomp>r|   r}   r   r   z/get)r   r   r   r   r   r   r   r   
embeddings	metadatas	documentsuris)r   r   r   r   rp   r   included)rt   r   ru   )rT   r   r   r   r   r   r   r   r{   r   filtered_includerx   rZ   rZ   r[   r     s*   



zFastAPI._deletec              	   C   s0   | j dd| d| d| d|||dd dS )	z$Deletes embeddings from the databaser|   r}   r   r   z/delete)r   r   r   r   Nr   )rT   r   r   r   r   r{   r   rZ   rZ   r[   _delete  s   	zFastAPI._submit_batchbatchrr   c                 C   sL   |d |   rt|d n|d |d |d |d d}| jd||d d	S )
z?
        Submits a batch of embeddings to the database
        r               )r   r   r   r   r   r|   r   N)supports_base64_encodingr%   rt   )rT   r   rr   rp   rZ   rZ   r[   _submit_batch  s   
zFastAPI._addr   r   r   r   c	           
   
   C   sL   |t ||||f}	t|	d|  i | |	d| d| dt| d dS )zi
        Adds a batch of embeddings to the database
        - pass in column oriented data lists
        max_batch_sizer}   r   r   z/addTr!   r    get_max_batch_sizer   rB   )
rT   r   r   r   r   r   r   r{   r   r   rZ   rZ   r[   _add     zFastAPI._updatec	           
   
   C   sX   ||dur	t |nd|||f}	t|	d|  i | |	d| d| dt| d dS )zl
        Updates a batch of embeddings in the database
        - pass in column oriented data lists
        Nr   r}   r   r   z/updateTr   
rT   r   r   r   r   r   r   r{   r   r   rZ   rZ   r[   _update  s   	zFastAPI._upsertc	           
   
   C   sL   |t ||||f}	t|	d|  i | |	d| d| dt| d dS )zl
        Upserts a batch of embeddings in the database
        - pass in column oriented data lists
        r   r}   r   r   z/upsertTr   r   rZ   rZ   r[   _upsert,  r   zFastAPI._queryquery_embeddings	n_resultsc
              
   C   s   dd |D }
	 | j dd| d|	 d| d||d urt|nd ||||
dd	}t|d
 |dd |dd |dd |dd |dd d |dS )Nc                 S   r   r   rZ   r   rZ   rZ   r[   r   Z  r   z"FastAPI._query.<locals>.<listcomp>r|   r}   r   r   z/query)r   r   r   r   r   r   r   r   	distancesr   r   r   r   )r   r   r   r   r   r   rp   r   )rt   r!   r   ru   )rT   r   r   r   r   r   r   r   r{   r   r   rx   rZ   rZ   r[   _queryK  s2   




zFastAPI.resetc                 C      |  dd}tt|S )zResets the databaser|   z/reset)rt   r   boolrw   rZ   rZ   r[   resetw     
zFastAPI.get_versionc                 C   r   )z!Returns the version of the serverru   z/version)rt   r   rB   rw   rZ   rZ   r[   get_version~  r   c                 C   s   | j S )z"Returns the settings of the client)r@   r   rZ   rZ   r[   get_settings  s   zFastAPI.get_settingszFastAPI.get_pre_flight_checksc                 C   s"   | j d u r| dd}|| _ | j S )Nru   z/pre-flight-checks)pre_flight_checksrt   rw   rZ   rZ   r[   get_pre_flight_checks  s   
z FastAPI.supports_base64_encodingc                 C      |   }tt|dd}|S )Nr   F)r   r   r   ru   )rT   r   b64_encoding_enabledrZ   rZ   r[   r     s
   zFastAPI.get_max_batch_sizec                 C   r   )Nr   )r   r   rv   ru   )rT   r   r   rZ   rZ   r[   r     s   )K__name__
__module____qualname__r+   r;   rB   r   r   rt   r.   r-   	OPERATIONr	   rv   ry   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   ALLr   r   r   r   r   r   r   r   r   r   r#   r   r   r   r   r*   r   r   r   r   __classcell__rZ   rZ   rX   r[   r0   8   s>   "&


















	

&
	

	

	

	

	

*


r0   )Erf   loggingtypingr   r   r   r   r   r   uuidr   rE   urllib.parseri   	overridesr	   %chromadb.api.collection_configurationr
   r   r   r   chromadbr   chromadb.api.base_http_clientr   chromadb.typesr   r   r   r   chromadb.apir   chromadb.api.typesr   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   chromadb.authr&   r'   chromadb.configr(   r)   r*   r+    chromadb.telemetry.opentelemetryr,   r-   r.   chromadb.telemetry.productr/   	getLoggerr   loggerr0   rZ   rZ   rZ   r[   <module>   s*    P
