
    q9io                        d dl Z d dlZd dl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Zd dlZd dlm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% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 d dl&m8Z8m9Z9m:Z:m;Z; d dl<m=Z= d dl<m>Z> d dl?m@Z@mAZAmBZBmCZC d dlDmEZEmFZFmGZG d dlHmIZI  ej                  eK      ZL G d dee#      ZMy)    N)AnyDictMappingOptionalcastTupleList)Sequence)UUID)override)AttachedFunction)CreateCollectionConfigurationUpdateCollectionConfiguration'update_collection_configuration_to_json'create_collection_configuration_to_json)__version__)BaseHTTPClient)DatabaseTenant
Collection)	ServerAPI)Search)	Documents
EmbeddingsIDsIncludeSchema	MetadatasURIsWhereWhereDocument	GetResultQueryResultSearchResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_listIncludeMetadataDocuments!IncludeMetadataDocumentsDistances)"IncludeMetadataDocumentsEmbeddings%optional_embeddings_to_base64_stringsserialize_metadatadeserialize_metadata)UserIdentity)ClientAuthProvider)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClientc                       e Zd Zdef fdZedeeef   fd       Zede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d%eefded&e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deefded&ee#   d'ee$   d(ee%   ded ede fd.              Z) ed/ej                        edddeefd0e*d1ee   d2ee%   d3ee+   ded eddfd4              Z, ed5ej                        eeefd6e*d1eded ede f
d7              Z- ed8ej                        eeefd6e*d9e.e/   ded ede0f
d:              Z1 ed;ej                        eeefdeded eddfd<              Z2 ed=ej                        eeefd6e*ded edefd>              Z3 ed?ej                        ed@eefd6e*dAeded ede4f
dB              Z5 edCej                        eddddde6eefd6e*dDee7   dEee8   dee   dee   dFee9   dGe:ded ede4fdH              Z; edIej                        edddeefd6e*dDee7   dEee8   dFee9   ded eddfdJ              Z< edKejz                        dLe>e7ee?   ee@   eeA   eeB   f   dMeddfdN       ZC edOejz                        edddeefdDe7d6e*dPe?dQee@   dReeA   dSeeB   ded ede&fdT              ZD edUejz                        eddddeefd6e*dDe7dPee?   dQee@   dReeA   dSeeB   ded ede&fdV              ZE edWejz                        edddeefd6e*dDe7dPe?dQee@   dReeA   dSeeB   ded ede&fdX              ZF edYejz                        edd@ddeGeefd6e*dZe?dDee7   d[edEee8   dFee9   dGe:ded edeHfd\              ZI ed]ejz                        ede&fd^              ZJ ed_ej                        edefd`              ZKedeLfda       ZM edbej                        defdc       ZN eddej                        de&fde       ZO edfej                        edefdg              ZP edhejz                        edeefdiededje*dkedlee
eef      ded eddmfdn              ZQ edoejz                        eeefdedje*ded eddmf
dp              ZR edqejz                        ed%eefdedje*dre&ded ede&fds              ZS xZTS )t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                        | _        | j                  j"                  <t%        j&                  d | j(                  | j                  j"                        | _        n&t%        j&                  d | j(                        | _        |j                  j,                  xs i | _        d| j.                  d<   dt0        z   d	z   | j.                  d
<   | j.                  /| j*                  j2                  j5                  | j.                         |j                  j6                  rt| j                  t8              | _        | j:                  j=                         }|j?                         D ],  \  }}|jA                         | j*                  j2                  |<   . y y )Nchroma_server_hostchroma_server_http_port)r<   r=   chroma_server_ssl_enableddefault_api_path)timeoutlimitsverify)r@   rA   zapplication/jsonzContent-TypezChroma Python Client vz( (https://github.com/chroma-core/chroma)z
User-Agent)!super__init__settingsrequirer4   _opentelemetry_clientr7   _product_telemetry_client	_settingsr9   resolve_urlstrr<   r=   r>   chroma_server_api_default_path_api_urlchroma_server_ssl_verifyhttpxClienthttp_limits_sessionchroma_server_headers_headerr   headersupdatechroma_client_auth_providerr/   _auth_providerauthenticateitemsget_secret_value)selfr:   _headersheadervalue	__class__s        ]/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/chromadb/api/fastapi.pyrD   zFastAPI.__init__B   s     45 9:%)\\2E%F")-6L)M&++"6??#E#EF$*OO$K$K&,oo&O&O#__KK	 , 
 >>22>!LL''~~>>DM "LLd>N>NODM<<B'9^$$89 	\" <<#MM!!((6??66"&,,/A"BD**779H!)!1 I050F0F0H%%f-I 7    returnc                 @    t        | j                  j                        S N)dictrR   rU   r\   s    ra   get_request_headerszFastAPI.get_request_headersl   s    DMM))**rb   c                     | j                   S re   )rM   rg   s    ra   get_api_urlzFastAPI.get_api_urlp   s    }}rb   methodpathkwargsc                    d|v r9t        j                  |j                  d      t         j                        }||d<   t        j
                  j                  |dd d       }| j                  |z   } | j                  j                  ||fi t        t        |      }t        j                  |       t        j                  |j                        S )Njson)optioncontent/)safeencodingerrors)orjsondumpspopOPT_SERIALIZE_NUMPYurllibparsequoterM   rR   requestr   r   r   _raise_chroma_errorloadstext)r\   rk   rl   rm   dataescaped_pathurlresponses           ra   _make_requestzFastAPI._make_requestt   s     V<<

6 26;U;UVD $F9 ||))$S4PT)Umml*(4==((JS&8IJ**84||HMM**rb   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)r   intr\   	resp_jsons     ra   	heartbeatzFastAPI.heartbeat   s'     &&ul;	93455rb   zFastAPI.create_databasenametenantNc                 8    | j                  dd| dd|i       y)zCreates a databasepost	/tenants/
/databasesr   ro   Nr   r\   r   r   s      ra   create_databasezFastAPI.create_database   s-     	xz*$ 	 	
rb   zFastAPI.get_databasec                 `    | j                  dd| d|       }t        |d   |d   |d         S )zReturns a databaser   r   /databases/idr   r   r   r   r   )r   r   )r\   r   r   r   s       ra   get_databasezFastAPI.get_database   sK     &&x{4&1
	 Yv%6y?R
 	
rb   zFastAPI.delete_databasec                 4    | j                  dd| d|        y)zDeletes a databasedeleter   r   Nr   r   s      ra   delete_databasezFastAPI.delete_database   s%     	x{4&1	
rb   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 databasesr   r   r   r   r   paramsr   r   r   r   )r   r   _clean_paramsr   )r\   r   r   r   json_databasesdb	databasess          ra   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 )Nr   z/tenantsr   r   r   )r\   r   s     ra   create_tenantzFastAPI.create_tenant   s     	6:VTNCrb   zFastAPI.get_tenantc                 J    | j                  dd|z         }t        |d         S )Nr   r   r   )r   )r   r   )r\   r   r   s      ra   
get_tenantzFastAPI.get_tenant   s+     &&ukD.@A	9V,--rb   zFastAPI.get_user_identityc                 8    t        di | j                  dd      S )Nr   z/auth/identity )r.   r   rg   s    ra   get_user_identityzFastAPI.get_user_identity   s      Jd008HIJJrb   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 collectionsr   r   r   /collectionsr   r   )r   r   r   CollectionModel	from_json)r\   r   r   r   r   json_collectionsjson_collectioncollection_modelss           ra   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 collectionsr   r   r   z/collections_countr   r   r   )r\   r   r   r   s       ra   count_collectionszFastAPI.count_collections   s9     &&x{8*4FG
	 C##rb   zFastAPI.create_collectionFschemaconfigurationmetadataget_or_createc           
          |rt        ||      nd}|r|j                         nd}	| j                  dd| d| d||||	|d      }
t        j                  |
      }|S )zCreates a collectionNr   r   r   r   )r   r   r   r   r   r   )r   serialize_to_jsonr   r   r   )r\   r   r   r   r   r   r   r   config_jsonserialized_schemar   models               ra   create_collectionzFastAPI.create_collection  s      4M8L 	
 ;AF446d&&x{8*LA$!,+!. ' 

	  )))4rb   zFastAPI.get_collectionc           	      f    | j                  dd| d| d|       }t        j                  |      }|S )zReturns a collectionr   r   r   /collections/r   r   r   )r\   r   r   r   r   r   s         ra   get_collectionzFastAPI.get_collection*  sD     &&x{8*M$H
	
  )))4rb   z FastAPI.get_or_create_collectionc           	      2    | j                  ||||d||      S )NT)r   r   r   r   r   r   r   )r   )r\   r   r   r   r   r   r   s          ra   get_or_create_collectionz FastAPI.get_or_create_collection;  s1     %%' & 
 	
rb   zFastAPI._modifyr   new_namenew_metadatanew_configurationc           	      `    | j                  dd| d| d| |||rt        |      ndd       y)zUpdates a collectionputr   r   r   N)r   r   r   r   )r   r   )r\   r   r   r   r   r   r   s          ra   _modifyzFastAPI._modifyR  sS     	x{8*M"F ,$ % &M%&  	 	
rb   zFastAPI._forkcollection_idc           
      p    | j                  dd| d| d| dd|i      }t        j                  |      }|S )zForks a collectionr   r   r   r   z/forkr   r   r   )r\   r   r   r   r   r   r   s          ra   _forkzFastAPI._forkl  sT     &&x{8*M-PUVh' ' 
	
  )))4rb   zFastAPI._searchsearchesc           
      D   d|D cg c]  }|j                          c}i}| j                  dd| d| d| d|      }|j                  dd	      }|4|D 	
cg c]#  }	|	|	D 
cg c]  }
|
t        |
      nd	 c}
nd	% c}
}	|d<   t	        |      S c c}w c c}
w c c}
}	w )
z&Performs hybrid search on a collectionr   r   r   r   r   z/searchr   	metadatasN)to_dictr   r   r-   r$   )r\   r   r   r   r   spayloadr   metadata_batchesr   r   s              ra   _searchzFastAPI._search~  s     X>		>?&&x{8*M-PWX ' 
	 %==d;' "2&  ( %.  7?6J(2PTT
 &Ik" I&&-  ?&s   BB#B9BBzFastAPI.delete_collectionc           	      :    | j                  dd| d| d|        y)zDeletes a collectionr   r   r   r   Nr   )r\   r   r   r   s       ra   delete_collectionzFastAPI.delete_collection  s+     	x{8*M$H	
rb   zFastAPI._countc           
      Z    | j                  dd| d| d| d      }t        t        |      S )z0Returns the number of embeddings in the databaser   r   r   r   z/countr   )r\   r   r   r   r   s        ra   _countzFastAPI._count  s?     &&x{8*M-PVW
	 C##rb   zFastAPI._peek
   nc           
      R    t        t        | j                  ||||t                    S )N)r   r   r   include)r   r"   _getr*   )r\   r   r   r   r   s        ra   _peekzFastAPI._peek  s4     II!:  	
 		
rb   zFastAPI._getidswherewhere_documentr   c
                 t   |D 
cg c]
  }
|
dk7  s	|
 }}
| j                  dd| d|	 d| d||||||d      }|j                  d	d       }||D cg c]  }|t        |      nd  }}t        |d
   |j                  dd       ||j                  dd       d |j                  dd       |      S c c}
w c c}w )Nr   r   r   r   r   z/get)r   r   r   r   r   r   r   r   r   
embeddings	documentsuris)r   r   r   r   r   r   included)r   r   r-   r"   )r\   r   r   r   r   r   r   r   r   r   ifiltered_includer   r   r   s                  ra   r   zFastAPI._get  s    (/>!!v+A>>&&x{8*M-PTU "0+ ' 
	 MM+t4	  !* 3;2F$X.DPI 
 %  }}\48mmK6vt,
 	
/ ?$s   
B0B0B5zFastAPI._deletec           
      H    | j                  dd| d| d| d|||d       y)	z$Deletes embeddings from the databaser   r   r   r   z/delete)r   r   r   r   Nr   )r\   r   r   r   r   r   r   s          ra   _deletezFastAPI._delete  sF     	x{8*M-PWX"0 	 	
 rb   zFastAPI._submit_batchbatchr   c                     d}|d   |d   D cg c]  }|t        |      nd }}|d   | j                         rt        |d         n|d   ||d   |d   d}| j                  d||	       yc c}w )
z?
        Submits a batch of embeddings to the database
        N   r            )r   r   r   r   r   r   r   )r,   supports_base64_encodingr+   r   )r\   r   r   serialized_metadatasr   r   s         ra   _submit_batchzFastAPI._submit_batch  s       $8 !&a$ 190D"8,$N$  $ 8,,. @aIq-q!H
 	63T2$s   A.zFastAPI._addr   r   r   r   c	                     |||||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_sizer   r   r   z/addTr&   get_max_batch_sizer   rK   )
r\   r   r   r   r   r   r   r   r   r   s
             ra   _addzFastAPI._add<  sj    $ 
 	u/1H1H1JKLx{8*M#mBTAUUYZ	
 rb   zFastAPI._updatec	                     |||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   r   r   r   z/updateTr   
r\   r   r   r   r   r   r   r   r   r   s
             ra   _updatezFastAPI._update[  sq    $ $0Jd
 	u/1H1H1JKLx{8*M#mBTAUU\]	
 rb   zFastAPI._upsertc	                     |||||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   r   r   r   z/upsertTr   r  s
             ra   _upsertzFastAPI._upsertz  sj    $ 
 	u/1H1H1JKLx{8*M#mBTAUU\]	
 rb   zFastAPI._queryquery_embeddings	n_resultsc
                    |D 
cg c]
  }
|
dk7  s	|
 }}
	 | j                  dd| d|	 d| d||t        |      nd ||||d      }|j                  d	d       }|0|D cg c]#  }||D cg c]  }|t        |      nd  c}nd % }}}t	        |d
   |j                  dd       |j                  dd       ||j                  dd       |j                  dd       d |      S c c}
w c c}w c c}}w )Nr   r   r   r   r   z/query)r   r  r  r   r   r   r   r   r   	distancesr   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   s                   ra   _queryzFastAPI._query  sS    (/>!!v+A>>>&&x{8*M-PVW#/ %BBR$S&"0+	 ' 
	  %==d;' "2   ( %.  7?6J(2PTT
     % mmK6 }}\48&mmK6vt,	
 		
? ?, s"   
C#C#"C--C(C-(C-zFastAPI.resetc                 F    | j                  dd      }t        t        |      S )zResets the databaser   z/resetr   r   boolr   s     ra   resetzFastAPI.reset  s#     &&vx8	D)$$rb   zFastAPI.get_versionc                 F    | j                  dd      }t        t        |      S )z!Returns the version of the serverr   z/version)r   r   rK   r   s     ra   get_versionzFastAPI.get_version  s#     &&uj9	C##rb   c                     | j                   S )z"Returns the settings of the client)rI   rg   s    ra   get_settingszFastAPI.get_settings  s     ~~rb   zFastAPI.get_pre_flight_checksc                 d    | j                   | j                  dd      }|| _         | j                   S )Nr   z/pre-flight-checks)pre_flight_checksr   r   s     ra   get_pre_flight_checkszFastAPI.get_pre_flight_checks  s5    !!)**52FGI%.D"%%%rb   z FastAPI.supports_base64_encodingc                 f    | j                         }t        t        |j                  dd            }|S )Nr   F)r  r   r  r   )r\   r  b64_encoding_enableds      ra   r   z FastAPI.supports_base64_encoding  s:     !668##''(BEJ 
 $#rb   zFastAPI.get_max_batch_sizec                 f    | j                         }t        t        |j                  dd            }|S )Nr   )r  r   r   r   )r\   r  r   s      ra   r   zFastAPI.get_max_batch_size  s4     !668c#4#8#89I2#NOrb   zFastAPI.attach_functionfunction_idinput_collection_idoutput_collectionr   r   c                     | j                  dd| d| d| d||||d      }t        | t        |d   d	         |d   d
   |d   d   |||||	      S )z"Attach a function to a collection.r   r   r   r   z/functions/attach)r   r  r  r   r   attached_functionr   r   function_name	clientr   r   r  r  r  r   r   r   )r   r   r   )	r\   r  r   r  r  r   r   r   r   s	            ra   attach_functionzFastAPI.attach_function  s     &&x{8*MBUAVVgh*%6 	 ' 	
	  I12489./7#$78I 3/

 
	
rb   zFastAPI.get_attached_functionc                     | j                  dd| d| d| d|       }|d   }t        | t        |d         |d   |d	   ||d
   |j                  d      ||	      S )z;Get an attached function by name for a specific collection.r   r   r   r   z/functions/r  r   r   r  r  r   r   )r   r   r   r   )r\   r   r  r   r   r   afs          ra   get_attached_functionzFastAPI.get_attached_function!  s     &&x{8*MBUAVVabfagh
	
 *+BtH~F_- 3 !4566(#

 
	
rb   zFastAPI.detach_functiondelete_outputc                 n    | j                  dd| d| d| d| d	d|i      }t        t        |d	         S )
z/Detach a function and prevent any further runs.r   r   r   r   z/attached_functions/z/detachr&  r   successr  )r\   r   r  r&  r   r   r   s          ra   detach_functionzFastAPI.detach_function=  s^     &&x{8*MBUAVVjkojppwx ' 
	 D)I.//rb   )U__name__
__module____qualname__r3   rD   r   r   rK   rh   rj   r   r   r   r6   r5   	OPERATIONr   r   r1   r   r   r   r   r   r
   r   r   r   r   r.   r   r0   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  r2   r  r  r   r   r"  r%  r)  __classcell__)r`   s   @ra   r9   r9   A   sA   (Iv (IT +WS#X%6 + + S  +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 $(AE15#$(     =>	
 -.    
  S@ *,D,N,NO %(	  	
 
  P *,D,N,N  $(AE15$(

  
   =>	

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

 $$AB
 
 
 

  I
0 /#;#E#EF
 %(  	
  
  G  #%=%G%GH
 %('' v,' 	'
 ' 
'  I'B -/G/Q/QR %(	



 

 	


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

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

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

 5
 5
 !/5
 5
 5
 5
 
5
  B5
n /#;#?#?@%t %  A%
 ')A)K)KL$S $  M$
 h   13K3U3UV&s & W& *,D,N,N$$ $$ .0H0R0RSC   T
 +-E-I-IJ ,0$( 
 
  
 "	 

  
 c3h( 
  
  
 
 
  K 
D 13K3O3OP
 %(

 "
 	

 
 

  Q
4 +-E-I-IJ
 $$(00 "0 	0
 0 0 
0  K0rb   r9   )Nrv   loggingtypingr   r   r   r   r   r   r	   r
   uuidr   rO   urllib.parserz   	overridesr   $chromadb.api.models.AttachedFunctionr   %chromadb.api.collection_configurationr   r   r   r   chromadbr   chromadb.api.base_http_clientr   chromadb.typesr   r   r   r   chromadb.apir   "chromadb.execution.expression.planr   chromadb.api.typesr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   chromadb.authr.   r/   chromadb.configr0   r1   r2   r3    chromadb.telemetry.opentelemetryr4   r5   r6   chromadb.telemetry.productr7   	getLoggerr*  loggerr9   r   rb   ra   <module>rC     s      B B B      A  ! 8 J J " 5    (  ' O N 
 >			8	$N0ni N0rb   