
    ugN                     h   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jp                  e9      Z: G d dee      Z;y)    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                   
    e Zd Zdef fdZdededeeef   defdZ e	de
j                        edefd	              Z e	d
e
j                        eefdededdfd              Z e	de
j                        eefdededefd              Z e	de
j                        eefdededdfd              Z e	de
j                        eddefdee   dee   dedee   fd              Z e	de
j                        ededdfd              Z e	de
j                        ededefd              Z e	de
j                        edef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              Z e	d e
j                        eeefdededef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'              Z# e	d(e
j                        eeefdedededef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+              Z% e	d,e
j                        eddeefd-e&d.ee   d/ee!   dededdfd0              Z' e	d1e
j                        eeefdedededdfd2              Z( e	d3e
j                        eeefd4e&dededefd5              Z) e	d6e
j                        ed7eefd4e&d8ededede*f
d9              Z+ e	d:e
j                        eddddddddd;d<geefd4e&d=ee,   d>ee-   d?ee   dee   dee   d@ee   dAee   dBee.   dCe/dedede*fdD              Z0 e	dEe
j                        edddeefd4e&d=ee,   d>ee-   dBee.   dededdfdF              Z1 e	dGe
jd                        dHe3e,ee4   ee5   ee6   ee7   f   dIeddfdJ       Z8 e	dKe
jd                        edddeefd=e,d4e&dLe9d;ee5   d<ee6   dMee7   dedede"fdN              Z: e	dOe
jd                        eddddeefd4e&d=e,dLee9   d;ee5   d<ee6   dMee7   dedede"fdP              Z; e	dQe
jd                        edddeefd4e&d=e,dLe9d;ee5   d<ee6   dMee7   dedede"fdR              Z< e	dSe
jd                        ed7ddg dTeefd4e&dUe9dVed>ee-   dBee.   dCe/dedede=fdW              Z> e	dXe
jd                        ede"fdY              Z? e	dZe
j                        edefd[              Z@edeAfd\       ZB e	d]e
j                        edefd^              ZC xZDS )_FastAPIsystemc                    t         |   |       |j                  j                  d       |j                  j                  d       | j                  t              | _        | j                  t              | _        |j                  | _        t        j                  t        |j                  j                        |j                  j                  |j                  j                  |j                  j                        | _        t#        j$                  d       | _        |j                  j(                  | _        | j*                  /| j&                  j,                  j/                  | j*                         | j                  j0                  /t#        j$                  | j                  j0                        | _        |j                  j2                  rt| j                  t4              | _        | j6                  j9                         }|j;                         D ],  \  }}|j=                         | j&                  j,                  |<   . y y )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__s        I/var/www/openai/venv/lib/python3.12/site-packages/chromadb/api/fastapi.pyr4   zFastAPI.__init__/   s     45 9:%)\\2E%F")-6L)M&++"6??#E#EF$*OO$K$K&,oo&O&O#__KK	 , 
 T2<<<<#MM!!((6>>22>!LL0W0WXDM??66"&,,/A"BD**779H!)!1050F0F0H%%f- "2 7    methodpathkwargsreturnc                    d|v r)t        j                  |j                  d            }||d<   t        j                  j                  |dd d       }| j                  |z   } | j                  j                  ||fi t        t        |      }t        j                  |       t        j                  |j                        S )Njsoncontent/)safeencodingerrors)orjsondumpspopurllibparsequoter=   r@   requestr   r   r   _raise_chroma_errorloadstext)rK   rR   rS   rT   dataescaped_pathurlresponses           rP   _make_requestzFastAPI._make_requestM   s     V<<

6 23D $F9 ||))$S4PT)Umml*(4==((JS&8IJ**84||HMM**rQ   zFastAPI.heartbeatc                 B    | j                  dd      }t        |d         S )zNReturns the current server time in nanoseconds to check if the server is alivegetz
/heartbeatznanosecond heartbeat)rk   intrK   	resp_jsons     rP   	heartbeatzFastAPI.heartbeat]   s'     &&ul;	93455rQ   zFastAPI.create_databasenametenantNc                 8    | j                  dd| dd|i       y)zCreates a databasepost	/tenants/
/databasesrr   rW   Nrk   rK   rr   rs   s      rP   create_databasezFastAPI.create_databased   s-     	xz*$ 	 	
rQ   zFastAPI.get_databasec                 `    | j                  dd| d|       }t        |d   |d   |d         S )zReturns a databaserm   rv   /databases/idrr   rs   r~   rr   rs   )rk   r   )rK   rr   rs   rp   s       rP   get_databasezFastAPI.get_databaser   sK     &&x{4&1
	 Yv%6y?R
 	
rQ   zFastAPI.delete_databasec                 4    | j                  dd| d|        y)zDeletes a databasedeleterv   r}   Nry   rz   s      rP   delete_databasezFastAPI.delete_database   s%     	x{4&1	
rQ   zFastAPI.list_databaseslimitoffsetc           	          | j                  dd| dt        j                  ||d            }|D cg c]  }t        |d   |d   |d   	       }}|S c c}w )
zReturns a list of all databasesrm   rv   rw   r   r   paramsr~   rr   rs   r   )rk   r   _clean_paramsr   )rK   r   r   rs   json_databasesdb	databasess          rP   list_databaseszFastAPI.list_databases   s     ++xz*!//"$ , 	
 %
$ 4r&z"X,G$ 	 
 	
s   AzFastAPI.create_tenantc                 0    | j                  ddd|i       y )Nru   z/tenantsrr   rx   ry   )rK   rr   s     rP   create_tenantzFastAPI.create_tenant   s     	6:VTNCrQ   zFastAPI.get_tenantc                 J    | j                  dd|z         }t        |d         S )Nrm   rv   rr   )rr   )rk   r   )rK   rr   rp   s      rP   
get_tenantzFastAPI.get_tenant   s+     &&ukD.@A	9V,--rQ   zFastAPI.get_user_identityc                 8    t        di | j                  dd      S )Nrm   z/auth/identity )r   rk   rK   s    rP   get_user_identityzFastAPI.get_user_identity   s      Jd008HIJJrQ   zFastAPI.list_collectionsdatabasec           	          | j                  dd| d| dt        j                  ||d            }|D cg c]  }t        j                  |       }}|S c c}w )z!Returns a list of all collectionsrm   rv   r}   /collectionsr   r   )rk   r   r   CollectionModel	from_json)rK   r   r   rs   r   json_collectionsjson_collectioncollection_modelss           rP   list_collectionszFastAPI.list_collections   s      --x{8*LA!//"$ . 	
 $4
#3 %%o6#3 	 

 ! 
s   AzFastAPI.count_collectionsc                 T    | j                  dd| d| d      }t        t        |      S )zReturns a count of collectionsrm   rv   r}   z/collections_countrk   r   rn   )rK   rs   r   rp   s       rP   count_collectionszFastAPI.count_collections   s9     &&x{8*4FG
	 C##rQ   zFastAPI.create_collectionFconfigurationmetadataget_or_createc           	          | j                  dd| d| d|||r|j                         nd|d      }t        j                  |      }|S )zCreates a collectionru   rv   r}   r   N)rr   r   r   r   rx   )rk   to_jsonr   r   )	rK   rr   r   r   r   rs   r   rp   models	            rP   create_collectionzFastAPI.create_collection   sc     &&x{8*LA$<I!6!6!8t!.	 ' 	
	  )))4rQ   zFastAPI.get_collectionc           	      f    | j                  dd| d| d|       }t        j                  |      }|S )zReturns a collectionrm   rv   r}   /collections/)rk   r   r   )rK   rr   rs   r   rp   r   s         rP   get_collectionzFastAPI.get_collection   sD     &&x{8*M$H
	
  )))4rQ   z FastAPI.get_or_create_collectionc                 0    | j                  |||d||      S )NT)rr   r   r   r   rs   r   )r   )rK   rr   r   r   rs   r   s         rP   get_or_create_collectionz FastAPI.get_or_create_collection
  s.     %%' & 
 	
rQ   zFastAPI._modifyr~   new_namenew_metadatac           	      D    | j                  dd| d| d| ||d       y)zUpdates a collectionputrv   r}   r   )r   r   rx   Nry   )rK   r~   r   r   rs   r   s         rP   _modifyzFastAPI._modify  s8     	x{8*M"F".HE 	 	
rQ   zFastAPI.delete_collectionc           	      :    | j                  dd| d| d|        y)zDeletes a collectionr   rv   r}   r   Nry   )rK   rr   rs   r   s       rP   delete_collectionzFastAPI.delete_collection0  s+     	x{8*M$H	
rQ   zFastAPI._countcollection_idc           
      Z    | j                  dd| d| d| d      }t        t        |      S )z0Returns the number of embeddings in the databaserm   rv   r}   r   z/countr   )rK   r   rs   r   rp   s        rP   _countzFastAPI._count>  s?     &&x{8*M-PVW
	 C##rQ   zFastAPI._peek
   nc                 N    t        t        | j                  ||||g d            S )N)
embeddings	documents	metadatas)rs   r   r   include)r   r   _get)rK   r   r   rs   r   s        rP   _peekzFastAPI._peekM  s4     II!@  	
 		
rQ   zFastAPI._getr   r   idswheresortpage	page_sizewhere_documentr   c                 4   |r|r
|dz
  |z  }|}| j                  dd| d| d| d||||||	|
d      }t        |d	   |j                  d
d       |j                  dd       |j                  dd       d |j                  dd       |j                  d|
            S )N   ru   rv   r}   r   z/get)r   r   r   r   r   r   r   rx   r   r   r   r   urisincluded)r   r   r   r   rg   r   r   )rk   r   rm   )rK   r   r   r   r   r   r   r   r   r   r   rs   r   rp   s                 rP   r   zFastAPI._geta  s    " IQh)+FE&&x{8*M-PTU "0" ' 
	 %  }}\48mmK6mmK6vt,]]:w7
 	
rQ   zFastAPI._deletec           
      H    | j                  dd| d| d| d|||d       y)	z$Deletes embeddings from the databaseru   rv   r}   r   z/delete)r   r   r   rx   Nry   )rK   r   r   r   r   rs   r   s          rP   _deletezFastAPI._delete  sF     	x{8*M-PWX"0 	 	
 rQ   zFastAPI._submit_batchbatchri   c           
      V    | j                  d||d   |d   |d   |d   |d   d       y	)
z?
        Submits a batch of embeddings to the database
        ru   r   r            )r   r   r   r   r   rx   Nry   )rK   r   ri   s      rP   _submit_batchzFastAPI._submit_batch  sE     	Qx#Ah"1X"1Xa 	 
	
rQ   zFastAPI._addr   r   c	                     |t        |      |||f}	t        |	d| j                         i       | j                  |	d| d| dt	        |       d       y)zi
        Adds a batch of embeddings to the database
        - pass in column oriented data lists
        max_batch_sizerv   r}   r   z/addTr   r   get_max_batch_sizer   r;   )
rK   r   r   r   r   r   r   rs   r   r   s
             rP   _addzFastAPI._add  so    $ )*5
 	u/1H1H1JKLx{8*M#mBTAUUYZ	
 rQ   zFastAPI._updatec	                     ||t        |      nd|||f}	t        |	d| j                         i       | j                  |	d| d| dt	        |       d       y)zl
        Updates a batch of embeddings in the database
        - pass in column oriented data lists
        Nr   rv   r}   r   z/updateTr   
rK   r   r   r   r   r   r   rs   r   r   s
             rP   _updatezFastAPI._update  sz    $ % **5
 	u/1H1H1JKLx{8*M#mBTAUU\]	
 rQ   zFastAPI._upsertc	                     |t        |      |||f}	t        |	d| j                         i       | j                  |	d| d| dt	        |       d       y)zl
        Upserts a batch of embeddings in the database
        - pass in column oriented data lists
        r   rv   r}   r   z/upsertTr   r   s
             rP   _upsertzFastAPI._upsert   so    $ )*5
 	u/1H1H1JKLx{8*M#mBTAUU\]	
 rQ   zFastAPI._query)r   r   	distancesquery_embeddings	n_resultsc	                 P   | j                  dd| d| d| d|t        |      nd||||d      }	t        |	d	   |	j                  d
d      |	j                  dd      |	j                  dd      |	j                  dd      |	j                  dd      d|	j                  d|            S )z0Gets the nearest neighbors of a single embeddingru   rv   r}   r   z/queryN)r   r   r   r   r   rx   r   r   r   r   r   r   r   )r   r   r   r   r   r   rg   r   )rk   r   r   rm   )
rK   r   r   r   r   r   r   rs   r   rp   s
             rP   _queryzFastAPI._query  s     &&x{8*M-PVW $/ %BBR$S&"0" ' 
	 % mmK6 }}\48mmK6mmK6vt,]]:w7	
 		
rQ   zFastAPI.resetc                 F    | j                  dd      }t        t        |      S )zResets the databaseru   z/reset)rk   r   boolro   s     rP   resetzFastAPI.resetF  s#     &&vx8	D)$$rQ   zFastAPI.get_versionc                 F    | j                  dd      }t        t        |      S )z!Returns the version of the serverrm   z/version)rk   r   r;   ro   s     rP   get_versionzFastAPI.get_versionM  s#     &&uj9	C##rQ   c                     | j                   S )z"Returns the settings of the client)r9   r   s    rP   get_settingszFastAPI.get_settingsT  s     ~~rQ   zFastAPI.get_max_batch_sizec                     | j                   dk(  r*| j                  dd      }t        t        |d         | _         | j                   S )Nrm   z/pre-flight-checksr   )_max_batch_sizerk   r   rn   ro   s     rP   r   zFastAPI.get_max_batch_sizeY  sF     2%**52FGI#'Y7G-H#ID ###rQ   )E__name__
__module____qualname__r$   r4   r;   r   r   rk   r'   r&   	OPERATIONr
   rn   rq   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   __classcell__)rO   s   @rP   r*   r*   .   sh   Iv I<+C +s +d38n +QT +  %'?'I'IJ63 6  K6
 +-E-O-OP %



 

 
	

  Q

 (*B*L*LM %

 
 
	
  N
 +-E-O-OP %	
	
 	
 
		
  Q	
 *,D,N,NO  $ $$	}  	
 
(	  P. )+C+M+MND# D$ D  OD &(@(J(JK.s .v .  L. -/G/Q/QRK< K  SK ,.F.P.PQ  $ $$(!}! ! 	!
 ! 
/	"!  R!2 -/G/Q/QR*<L$$69$	$  S$ -/G/Q/QR DH15#$(   ?@ -.	
    
  S0 *,D,N,NO %(	  	
 
  P *,D,N,N  DH15$(

   ?@
 -.	

 
 
 

 
" #%=%G%GH #'59$(

 3-
 12	

 
 
 

  I
 -/G/Q/QR %(	



 

 	


 


  S

 "$<$F$FG %(	$$ $ 	$
 
$  H$ /#;#E#EF $(

 
 	

 
 

  G
$ .":"D"DE "!%"# $"#'26'5$()
)
 c])
 	)

 sm)
 })
 )
 sm)
 C=)
 !/)
 )
 )
 )
 
)
  F)
V #%=%G%GH "!%26$( c] 	
 !/   
  I* )+C+G+GH
\"YYTN	

 
 

 I
4 .":">">? *.)-#$(  	
 I& I& tn   
  @: #%=%A%AB
 ,0)-)-#$(  Z(	
 I& I& tn   
  C> #%=%A%AB *.)-#$(  	
 I& I& tn   
  C: "$<$@$@A
 !%26B$(#
#
 %#
 	#

 #
 !/#
 #
 #
 #
 
#
  B#
J /#;#?#?@%t %  A%
 ')A)K)KL$S $  M$
 h   .0H0R0RS$C $  T$rQ   r*   )<r]   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*   r   rQ   rP   <module>r     s      3 3      F 8 J J "     ' O N 
 >			8	$q$ni q$rQ   