o
    1XxiD                     @   s4  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' d dl(m)Z) d dl*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4 e5e6Z7G dd deeZ8dS )    N)AnyDictOptionalcastTuple)Sequence)UUID)override)CollectionConfigurationInternal)BaseHTTPClient)DatabaseTenant
Collection)	ServerAPI)	Documents
EmbeddingsIDsInclude	MetadatasURIsWhereWhereDocument	GetResultQueryResultCollectionMetadatavalidate_batch)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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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deefd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d ee d!ee dededefd(d'Z"e	d)e
je		d\d%e d*ee d+ee ddfd,d)Z#e	d-e
jeeefdedededdfd.d-Z$e	d/e
jed0e defd1d/Z%e	d2e
je	3d]d0e d4ede&fd5d2Z'e	d6e
jedi dddddi d7d8g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&fd@d6Z,e	dAe
jedi i fd0e d9ee( d:ee) d>ee* de(f
dBdAZ-e	dCe
j.dDe/e(ee0 ee1 ee2 ee3 f dEeddfdFdCZ4e	dGe
j.e			d^d9e(d0e dHe0d7ee1 d8ee2 dIee3 defdJdGZ5e	dKe
j.e				d_d0e d9e(dHee0 d7ee1 d8ee2 dIee3 defdLdKZ6e	dMe
j.e			d^d0e d9e(dHe0d7ee1 d8ee2 dIee3 defdNdMZ7e	dOe
j.ed3i i g dPfd0e dQe0dRed:ee) d>ee* d?e+de8fdSdOZ9e	dTe
j.edefdUdTZ:e	dVe
jedefdWdVZ;ede<fdXdYZ=e	dZe
jedefd[dZZ>  Z?S )`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__ S/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/api/fastapi.pyr.   ,   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data/)safeencodingerrors)orjsondumpspopurllibparsequoter7   r:   requestr   r   r   _raise_chroma_errorloadstext)rE   rM   rN   rO   rR   escaped_pathurlresponserK   rK   rL   _make_requestJ   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)rd   intrE   	resp_jsonrK   rK   rL   	heartbeatZ   s   zFastAPI.create_databasenametenantNc                 C   s   | j ddd|id|id dS )zCreates a databasepostz
/databasesrj   rk   rQ   paramsNrd   )rE   rj   rk   rK   rK   rL   create_databasea   s   
zFastAPI.get_databasec                 C   s2   | j dd| d|id}t|d |d |d dS )zReturns a databasere   z/databases/rk   rn   idrj   )rr   rj   rk   )rd   r   )rE   rj   rk   rh   rK   rK   rL   get_databasep   s   zFastAPI.create_tenantc                 C   s   | j ddd|id d S )Nrl   z/tenantsrj   rQ   ro   )rE   rj   rK   rK   rL   create_tenant   s   zFastAPI.get_tenantc                 C   s   |  dd| }t|d dS )Nre   z	/tenants/rj   )rj   )rd   r   )rE   rj   rh   rK   rK   rL   
get_tenant   s   zFastAPI.list_collectionslimitoffsetdatabasec              
   C   s2   | j ddt||||dd}dd |D }|S )z!Returns a list of all collectionsre   /collections)rk   ry   rw   rx   rq   c                 S   s   g | ]}t |qS rK   )CollectionModel	from_json).0json_collectionrK   rK   rL   
<listcomp>   s    z,FastAPI.list_collections.<locals>.<listcomp>)rd   r   _clean_params)rE   rw   rx   rk   ry   json_collectionscollection_modelsrK   rK   rL   list_collections   s   
zFastAPI.count_collectionsc                 C   s    | j dd||dd}tt|S )zReturns a count of collectionsre   z/count_collectionsrk   ry   rq   )rd   r   rf   )rE   rk   ry   rh   rK   rK   rL   count_collections   s   
zFastAPI.create_collectionFconfigurationmetadataget_or_createc           	      C   s<   | j dd|||r| nd|d||dd}t|}|S )zCreates a collectionrl   rz   N)rj   r   r   r   r   rm   )rd   to_jsonr{   r|   )	rE   rj   r   r   r   rk   ry   rh   modelrK   rK   rL   create_collection   s   
zFastAPI.get_collectionrr   c                 C   st   |du r|du s|dur|durt d||d}|dur#t||d< | jd|r,d| nt||d}t|}|S )zReturns a collectionNz*Name or id must be specified, but not bothr   typere   /collections/rq   )
ValueErrorr5   rd   r{   r|   )rE   rj   rr   rk   ry   _paramsrh   r   rK   rK   rL   get_collection   s    


z FastAPI.get_or_create_collectionc                 C   s   | j |||d||dS )NT)rj   r   r   r   rk   ry   )r   )rE   rj   r   r   rk   ry   rK   rK   rL   get_or_create_collection   s   zFastAPI._modifynew_namenew_metadatac                 C   s"   | j ddt| ||dd dS )zUpdates a collectionputr   )r   r   rt   N)rd   r5   )rE   rr   r   r   rK   rK   rL   _modify   s
   	

zFastAPI.delete_collectionc                 C   s   | j dd| ||dd dS )zDeletes a collectiondeleter   r   rq   Nro   )rE   rj   rk   ry   rK   rK   rL   delete_collection  s
   	
zFastAPI._countcollection_idc                 C   s"   |  ddt| d }tt|S )z0Returns the number of embeddings in the databasere   r   z/count)rd   r5   r   rf   )rE   r   rh   rK   rK   rL   _count  s
   
zFastAPI._peek
   nc                 C   s   t t| j||g ddS )N)
embeddings	documents	metadatas)rw   include)r   r   _get)rE   r   r   rK   rK   rL   _peek+  s   zFastAPI._getr   r   idswheresortpage	page_sizewhere_documentr   c                 C   s   |r|r|d | }|}| j ddt| d ||||||	|
dd}t|d |dd |d	d |d
d d |dd |d|
dS )N   rl   r   z/get)r   r   r   rw   rx   r   r   rt   r   r   r   r   urisincluded)r   r   r   r   rR   r   r   )rd   r5   r   re   )rE   r   r   r   r   rw   rx   r   r   r   r   rh   rK   rK   rL   r   ;  s0   




zFastAPI._deletec                 C   s.   | j ddt| d |||dd}tt|S )z$Deletes embeddings from the databaserl   r   z/delete)r   r   r   rt   )rd   r5   r   r   )rE   r   r   r   r   rh   rK   rK   rL   _deletef  s   

	zFastAPI._submit_batchbatchrb   c              	   C   s4   | j d||d |d |d |d |d dd d	S )
z?
        Submits a batch of embeddings to the database
        rl   r   r            )r   r   r   r   r   rt   Nro   )rE   r   rb   rK   rK   rL   _submit_batch{  s   
zFastAPI._addr   r   c                 C   s<   |||||f}t |d|  i | |dt| d  dS )zi
        Adds a batch of embeddings to the database
        - pass in column oriented data lists
        max_batch_sizer   z/addTr   get_max_batch_sizer   r5   )rE   r   r   r   r   r   r   r   rK   rK   rL   _add     zFastAPI._updatec                 C   <   |||||f}t |d|  i | |dt| d  dS )zl
        Updates a batch of embeddings in the database
        - pass in column oriented data lists
        r   r   z/updateTr   rE   r   r   r   r   r   r   r   rK   rK   rL   _update  r   zFastAPI._upsertc                 C   r   )zl
        Upserts a batch of embeddings in the database
        - pass in column oriented data lists
        r   r   z/upsertTr   r   rK   rK   rL   _upsert  r   zFastAPI._query)r   r   	distancesquery_embeddings	n_resultsc                 C   st   | j ddt| 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 embeddingrl   r   z/query)r   r   r   r   r   rt   r   r   Nr   r   r   r   r   )r   r   r   r   r   r   rR   r   )rd   r5   r   re   )rE   r   r   r   r   r   r   rh   rK   rK   rL   _query  s(   





zFastAPI.resetc                 C      |  dd}tt|S )zResets the databaserl   z/reset)rd   r   boolrg   rK   rK   rL   reset     
zFastAPI.get_versionc                 C   r   )z!Returns the version of the serverre   z/version)rd   r   r5   rg   rK   rK   rL   get_version  r   c                 C   s   | j S )z"Returns the settings of the client)r3   )rE   rK   rK   rL   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 )Nre   z/pre-flight-checksr   )_max_batch_sizerd   r   rf   rg   rK   rK   rL   r     s   
)NN)r   )NNN)NNNN)@__name__
__module____qualname__r    r.   r5   r   r   rd   r#   r"   	OPERATIONr	   rf   ri   r   rp   r   rs   ru   r   rv   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   __classcell__rK   rK   rI   rL   r%   +   s~   "













	

)
	





!

r%   )9rW   loggingtypingr   r   r   r   r   r   uuidr   r8   urllib.parserZ   	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   chromadb.authr   chromadb.configr   r   r   r     chromadb.telemetry.opentelemetryr!   r"   r#   chromadb.telemetry.productr$   	getLoggerr   loggerr%   rK   rK   rK   rL   <module>   s&    8
