
    IgeJ                     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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d,              Z% e	d-e
j                        eeefdedededdfd.              Z& e	d/e
j                        eeefd0e$dededefd1              Z' e	d2e
j                        ed3eefd0e$d4ededede(f
d5              Z) e	d6e
j                        eddddddddd7d8geefd0e$d9ee*   d:ee+   d;ee   dee   dee   d<ee   d=ee   d>ee,   d?e-dedede(fd@              Z. e	dAe
j                        edddeefd0e$d9ee*   d:ee+   d>ee,   dededdfdB              Z/ e	dCe
j`                        dDe1e*ee2   ee3   ee4   ee5   f   dEeddfdF       Z6 e	dGe
j`                        edddeefd9e*d0e$dHe7d7ee3   d8ee4   dIee5   dedede fdJ              Z8 e	dKe
j`                        eddddeefd0e$d9e*dHee7   d7ee3   d8ee4   dIee5   dedede fdL              Z9 e	dMe
j`                        edddeefd0e$d9e*dHe7d7ee3   d8ee4   dIee5   dedede fdN              Z: e	dOe
j`                        ed3ddg dPeefd0e$dQe7dRed:ee+   d>ee,   d?e-dedede;fdS              Z< e	dTe
j`                        ede fdU              Z= e	dVe
j                        edefdW              Z>ede?fdX       Z@ e	dYe
j                        edefdZ              ZA xZBS )[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        Q/var/www/html/answerous/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 I050F0F0H%%f-I 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/z
/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.create_tenantc                 0    | j                  ddd|i       y )Nru   z/tenantsrr   rw   rx   )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limitoffset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{   /collections)r   r   )params)rk   r   _clean_params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
 %%o6
 

 ! 
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   rw   )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   rw   Nrx   )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 collectiondeleterv   r{   r   Nrx   )rK   rr   rs   r   s       rP   delete_collectionzFastAPI.delete_collection
  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._peek'  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   rw   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._get;  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   rw   Nrx   )rK   r   r   r   r   rs   r   s          rP   _deletezFastAPI._deleteh  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   rw   Nrx   )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   rw   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.reset   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_version'  s#     &&uj9	C##rQ   c                     | j                   S )z"Returns the settings of the client)r9   r   s    rP   get_settingszFastAPI.get_settings.  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_size3  sF     2%**52FGI#'Y7G-H#ID ###rQ   )C__name__
__module____qualname__r$   r4   r;   r   r   rk   r'   r&   	OPERATIONr
   rn   rq   r"   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   ALLr   r   r   r   r   r   r   r   r   r   r   r   r   r   r#   r   r   __classcell__)rO   s   @rP   r*   r*   .   s
   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
 )+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	$K$ni K$rQ   