o
    ɭRhGU                     @   sl  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/m0Z0m1Z1 d dl2m3Z3 d dl2m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z? e@eAZBG dd deeZCd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)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edefd`d_ZG  ZHS )a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)r1   r2   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	_settingsr/   resolve_urlstrr1   r2   r3   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)selfr0   r7   _headersheadervalue	__class__ V/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/chromadb/api/fastapi.pyr:   8   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quoterC   rH   requestr   r   r   _raise_chroma_errorloadstext)rS   r[   r\   r]   dataescaped_pathurlresponserY   rY   rZ   _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)rs   intrS   	resp_jsonrY   rY   rZ   	heartbeatn   s   zFastAPI.create_databasenametenantNc                 C   s    | j dd| dd|id dS )zCreates a databasepost	/tenants/
/databasesry   r_   Nrs   rS   ry   rz   rY   rY   rZ   create_databasev   s
   

zFastAPI.get_databasec                 C   s2   |  dd| d| }t|d |d |d dS )zReturns a databasert   r|   /databases/idry   rz   r   ry   rz   )rs   r   )rS   ry   rz   rw   rY   rY   rZ   get_database   s   zFastAPI.delete_databasec                 C   s   |  dd| d|  dS )zDeletes a databasedeleter|   r   Nr   r   rY   rY   rZ   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 databasesrt   r|   r}   r   r   paramsc                 S   s&   g | ]}t |d  |d |d dqS )r   ry   rz   r   )r   ).0dbrY   rY   rZ   
<listcomp>   s    z*FastAPI.list_databases.<locals>.<listcomp>rs   r   _clean_params)rS   r   r   rz   json_databases	databasesrY   rY   rZ   list_databases   s   	

zFastAPI.create_tenantc                 C   s   | j ddd|id d S )Nr{   z/tenantsry   r~   r   )rS   ry   rY   rY   rZ   create_tenant   s   zFastAPI.get_tenantc                 C   s   |  dd| }t|d dS )Nrt   r|   ry   )ry   )rs   r   )rS   ry   rw   rY   rY   rZ   
get_tenant   s   zFastAPI.get_user_identityc                 C   s   t di | ddS )Nrt   z/auth/identityrY   )r%   rs   rS   rY   rY   rZ   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 collectionsrt   r|   r   /collectionsr   r   c                 S   s   g | ]}t |qS rY   )CollectionModel	from_json)r   json_collectionrY   rY   rZ   r      s    z,FastAPI.list_collections.<locals>.<listcomp>r   )rS   r   r   rz   r   json_collectionscollection_modelsrY   rY   rZ   list_collections   s   

zFastAPI.count_collectionsc                 C   s$   |  dd| d| d}tt|S )zReturns a count of collectionsrt   r|   r   z/collections_countrs   r   ru   )rS   rz   r   rw   rY   rY   rZ   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)ry   r   r   r   r~   )rs   r   r   r   )	rS   ry   r   r   r   rz   r   rw   modelrY   rY   rZ   create_collection   s   

zFastAPI.get_collectionc              	   C   s,   |  dd| d| d| }t|}|S )zReturns a collectionrt   r|   r   /collections/rs   r   r   )rS   ry   rz   r   rw   r   rY   rY   rZ   get_collection  s   	
z FastAPI.get_or_create_collectionc                 C   s   | j |||d||dS )NT)ry   r   r   r   rz   r   )r   )rS   ry   r   r   rz   r   rY   rY   rZ   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~   )rs   r   )rS   r   r   r   r   rz   r   rY   rY   rZ   _modify4  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   )rS   r   r   rz   r   rw   r   rY   rY   rZ   _forkN  s   

zFastAPI.delete_collectionc              	   C   s"   |  dd| d| d|  dS )zDeletes a collectionr   r|   r   r   Nr   )rS   ry   rz   r   rY   rY   rZ   delete_collection`  s   	zFastAPI._countc              
   C   s*   |  dd| d| d| d}tt|S )z0Returns the number of embeddings in the databasert   r|   r   r   z/countr   )rS   r   rz   r   rw   rY   rY   rZ   _countn  s
   	
zFastAPI._peek
   nc              	   C   s   t t| j||||tdS )N)rz   r   r   include)r   r   _getr$   )rS   r   r   rz   r   rY   rY   rZ   _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 ro   rY   r   irY   rY   rZ   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   ro   r   included)rs   r   rt   )rS   r   r   r   r   r   r   r   rz   r   filtered_includerw   rY   rY   rZ   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   )rS   r   r   r   r   rz   r   rY   rY   rZ   _delete  s   	zFastAPI._submit_batchbatchrq   c              	   C   s4   | j d||d |d |d |d |d dd d	S )
z?
        Submits a batch of embeddings to the database
        r{   r               )r   r   r   r   r   r~   Nr   )rS   r   rq   rY   rY   rZ   _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   rA   )
rS   r   r   r   r   r   r   rz   r   r   rY   rY   rZ   _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   
rS   r   r   r   r   r   r   rz   r   r   rY   rY   rZ   _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   rY   rY   rZ   _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   rY   r   rY   rY   rZ   r   Y  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   ro   r   )rs   r!   r   rt   )rS   r   r   r   r   r   r   r   rz   r   r   rw   rY   rY   rZ   _queryJ  s2   




zFastAPI.resetc                 C      |  dd}tt|S )zResets the databaser{   z/reset)rs   r   boolrv   rY   rY   rZ   resetv     
zFastAPI.get_versionc                 C   r   )z!Returns the version of the serverrt   z/version)rs   r   rA   rv   rY   rY   rZ   get_version}  r   c                 C   s   | j S )z"Returns the settings of the client)r?   r   rY   rY   rZ   get_settings  s   zFastAPI.get_settingszFastAPI.get_max_batch_sizec                 C   s,   | j dkr| dd}tt|d | _ | j S )Nrt   z/pre-flight-checksr   )_max_batch_sizers   r   ru   rv   rY   rY   rZ   r     s   
)I__name__
__module____qualname__r*   r:   rA   r   r   rs   r-   r,   	OPERATIONr	   ru   rx   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   __classcell__rY   rY   rW   rZ   r/   7   s2   "&


















	

&
	

	

	

	

	

*

r/   )Dre   loggingtypingr   r   r   r   r   r   uuidr   rD   urllib.parserh   	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$   chromadb.authr%   r&   chromadb.configr'   r(   r)   r*    chromadb.telemetry.opentelemetryr+   r,   r-   chromadb.telemetry.productr.   	getLoggerr   loggerr/   rY   rY   rY   rZ   <module>   s*    L
