o
    gN                     @   sH  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 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) d dl*m+Z+ d dl*m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7 e8e9Z:G dd deeZ;dS )    N)AnyDictOptionalcastTuple)Sequence)UUID)override)CollectionConfigurationInternal)BaseHTTPClient)DatabaseTenant
Collection)	ServerAPI)	Documents
EmbeddingsPyEmbeddingsIDsInclude	MetadatasURIsWhereWhereDocument	GetResultQueryResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_list)UserIdentity)ClientAuthProvider)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClientc                       sl  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eefd/e&d0ee d1ee! ded eddfd2d.Z'e	d3e
jeeefdeded eddfd4d3Z(e	d5e
jeeefd6e&ded edefd7d5Z)e	d8e
jed9eefd6e&d:eded ede*f
d;d8Z+e	d<e
jeddddddddd=d>geefd6e&d?ee, d@ee- dAee dee dee dBee dCee dDee. dEe/ded ede*fdFd<Z0e	dGe
jedddeefd6e&d?ee, d@ee- dDee. ded eddfdHdGZ1e	dIe
j2dJe3e,ee4 ee5 ee6 ee7 f dKeddfdLdIZ8e	dMe
j2edddeefd?e,d6e&dNe9d=ee5 d>ee6 dOee7 ded ede"fdPdMZ:e	dQe
j2eddddeefd6e&d?e,dNee9 d=ee5 d>ee6 dOee7 ded ede"fdRdQZ;e	dSe
j2edddeefd6e&d?e,dNe9d=ee5 d>ee6 dOee7 ded ede"fdTdSZ<e	dUe
j2ed9ddg dVeefd6e&dWe9dXed@ee- dDee. dEe/ded ede=fdYdUZ>e	dZe
j2ede"fd[dZZ?e	d\e
jedefd]d\Z@edeAfd^d_ZBe	d`e
jedefdad`ZC  ZDS )bFastAPIsystemc                    s  t  | |jd |jd | t| _| t| _|j| _t	j
t|jj|jj|jj|jjd| _tjd d| _|jj| _| jd urO| jj| j | jjd ur^tj| jjd| _|jjr~| t| _| j }| D ]\}}| | jj|< qqd S d S )Nchroma_server_hostchroma_server_http_port)r*   r+   chroma_server_ssl_enableddefault_api_path)timeout)verify)super__init__settingsrequirer$   _opentelemetry_clientr'   _product_telemetry_client	_settingsr(   resolve_urlstrr*   r+   r,   chroma_server_api_default_path_api_urlhttpxClient_sessionchroma_server_headers_headerheadersupdatechroma_server_ssl_verifychroma_client_auth_providerr   _auth_providerauthenticateitemsget_secret_value)selfr)   _headersheadervalue	__class__ K/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/api/fastapi.pyr1   /   s2   



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quoter:   r=   requestr   r   r   _raise_chroma_errorloadstext)rH   rP   rQ   rR   dataescaped_pathurlresponserN   rN   rO   _make_requestM   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)rh   intrH   	resp_jsonrN   rN   rO   	heartbeat]   s   zFastAPI.create_databasenametenantNc                 C   s    | j dd| dd|id dS )zCreates a databasepost	/tenants/
/databasesrn   rT   Nrh   rH   rn   ro   rN   rN   rO   create_databased   s
   

zFastAPI.get_databasec                 C   s2   |  dd| d| }t|d |d |d dS )zReturns a databaseri   rq   /databases/idrn   ro   rx   rn   ro   )rh   r   )rH   rn   ro   rl   rN   rN   rO   get_databaser   s   zFastAPI.delete_databasec                 C   s   |  dd| d|  dS )zDeletes a databasedeleterq   rw   Nrt   ru   rN   rN   rO   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 databasesri   rq   rr   r}   r~   paramsc                 S   s&   g | ]}t |d  |d |d dqS )rx   rn   ro   ry   )r   ).0dbrN   rN   rO   
<listcomp>   s    z*FastAPI.list_databases.<locals>.<listcomp>rh   r   _clean_params)rH   r}   r~   ro   json_databases	databasesrN   rN   rO   list_databases   s   	

zFastAPI.create_tenantc                 C   s   | j ddd|id d S )Nrp   z/tenantsrn   rs   rt   )rH   rn   rN   rN   rO   create_tenant   s   zFastAPI.get_tenantc                 C   s   |  dd| }t|d dS )Nri   rq   rn   )rn   )rh   r   )rH   rn   rl   rN   rN   rO   
get_tenant   s   zFastAPI.get_user_identityc                 C   s   t di | ddS )Nri   z/auth/identityrN   )r   rh   rH   rN   rN   rO   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 collectionsri   rq   rw   /collectionsr   r   c                 S   s   g | ]}t |qS rN   )CollectionModel	from_json)r   json_collectionrN   rN   rO   r      s    z,FastAPI.list_collections.<locals>.<listcomp>r   )rH   r}   r~   ro   r   json_collectionscollection_modelsrN   rN   rO   list_collections   s   

zFastAPI.count_collectionsc                 C   s$   |  dd| d| d}tt|S )zReturns a count of collectionsri   rq   rw   z/collections_countrh   r   rj   )rH   ro   r   rl   rN   rN   rO   count_collections   s
   
zFastAPI.create_collectionFconfigurationmetadataget_or_createc           	      C   sB   | j dd| d| d|||r| nd|dd}t|}|S )zCreates a collectionrp   rq   rw   r   N)rn   r   r   r   rs   )rh   to_jsonr   r   )	rH   rn   r   r   r   ro   r   rl   modelrN   rN   rO   create_collection   s   
zFastAPI.get_collectionc              	   C   s,   |  dd| d| d| }t|}|S )zReturns a collectionri   rq   rw   /collections/)rh   r   r   )rH   rn   ro   r   rl   r   rN   rN   rO   get_collection   s   	
z FastAPI.get_or_create_collectionc                 C   s   | j |||d||dS )NT)rn   r   r   r   ro   r   )r   )rH   rn   r   r   ro   r   rN   rN   rO   get_or_create_collection
  s   zFastAPI._modifyrx   new_namenew_metadatac                 C   s,   | j dd| d| d| ||dd dS )zUpdates a collectionputrq   rw   r   )r   r   rs   Nrt   )rH   rx   r   r   ro   r   rN   rN   rO   _modify  s
   
zFastAPI.delete_collectionc              	   C   s"   |  dd| d| d|  dS )zDeletes a collectionr{   rq   rw   r   Nrt   )rH   rn   ro   r   rN   rN   rO   delete_collection0  s   	zFastAPI._countcollection_idc              
   C   s*   |  dd| d| d| d}tt|S )z0Returns the number of embeddings in the databaseri   rq   rw   r   z/countr   )rH   r   ro   r   rl   rN   rN   rO   _count>  s
   	
zFastAPI._peek
   nc              	   C   s   t t| j||||g ddS )N)
embeddings	documents	metadatas)ro   r   r}   include)r   r   _get)rH   r   r   ro   r   rN   rN   rO   _peekM  s   	zFastAPI._getr   r   idswheresortpage	page_sizewhere_documentr   c                 C   s   |r|r|d | }|}| j dd| d| d| d||||||	|
dd}t|d	 |d
d |dd |dd d |dd |d|
dS )N   rp   rq   rw   r   z/get)r   r   r   r}   r~   r   r   rs   r   r   r   r   urisincluded)r   r   r   r   rd   r   r   )rh   r   ri   )rH   r   r   r   r   r}   r~   r   r   r   r   ro   r   rl   rN   rN   rO   r   a  s0   




zFastAPI._deletec              	   C   s0   | j dd| d| d| d|||dd dS )	z$Deletes embeddings from the databaserp   rq   rw   r   z/delete)r   r   r   rs   Nrt   )rH   r   r   r   r   ro   r   rN   rN   rO   _delete  s   	zFastAPI._submit_batchbatchrf   c              	   C   s4   | j d||d |d |d |d |d dd d	S )
z?
        Submits a batch of embeddings to the database
        rp   r   r            )r   r   r   r   r   rs   Nrt   )rH   r   rf   rN   rN   rO   _submit_batch  s   
zFastAPI._addr   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_sizerq   rw   r   z/addTr   r   get_max_batch_sizer   r8   )
rH   r   r   r   r   r   r   ro   r   r   rN   rN   rO   _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   rq   rw   r   z/updateTr   
rH   r   r   r   r   r   r   ro   r   r   rN   rN   rO   _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   rq   rw   r   z/upsertTr   r   rN   rN   rO   _upsert   r   zFastAPI._query)r   r   	distancesquery_embeddings	n_resultsc	           
      C   s   | 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|dS )z0Gets the nearest neighbors of a single embeddingrp   rq   rw   r   z/queryN)r   r   r   r   r   rs   r   r   r   r   r   r   r   )r   r   r   r   r   r   rd   r   )rh   r   r   ri   )
rH   r   r   r   r   r   r   ro   r   rl   rN   rN   rO   _query  s,   





zFastAPI.resetc                 C      |  dd}tt|S )zResets the databaserp   z/reset)rh   r   boolrk   rN   rN   rO   resetF     
zFastAPI.get_versionc                 C   r   )z!Returns the version of the serverri   z/version)rh   r   r8   rk   rN   rN   rO   get_versionM  r   c                 C   s   | j S )z"Returns the settings of the client)r6   r   rN   rN   rO   get_settingsT  s   zFastAPI.get_settingszFastAPI.get_max_batch_sizec                 C   s,   | j dkr| dd}tt|d | _ | j S )Nri   z/pre-flight-checksr   )_max_batch_sizerh   r   rj   rk   rN   rN   rO   r   Y  s   
)E__name__
__module____qualname__r#   r1   r8   r   r   rh   r&   r%   	OPERATIONr	   rj   rm   r!   rv   r   rz   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   __classcell__rN   rN   rL   rO   r(   .   s   "

















	

+
	

	

	

	

	

%

r(   )<rZ   loggingtypingr   r   r   r   r   r   uuidr   r;   urllib.parser]   	overridesr	   chromadb.api.configurationr
   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   chromadb.authr   r   chromadb.configr    r!   r"   r#    chromadb.telemetry.opentelemetryr$   r%   r&   chromadb.telemetry.productr'   	getLoggerr   loggerr(   rN   rN   rN   rO   <module>   s(    @
