o
    ɭRh:X                     @   sl  d dl Z d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZ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 d dlmZ d d	lmZmZmZmZ d d
lmZm Z m!Z!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/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA eBeCZDG dd deeZEdS )    N)UUID)AnyOptionalcastTupleSequenceDict)override)__version__)UserIdentity)AsyncServerAPI)BaseHTTPClient)CreateCollectionConfigurationUpdateCollectionConfiguration'create_collection_configuration_to_json'update_collection_configuration_to_json)DEFAULT_DATABASEDEFAULT_TENANTSystemSettings)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClient)async_to_sync)DatabaseTenant
Collection)	Documents
EmbeddingsPyEmbeddingsIDsInclude	MetadatasURIsWhereWhereDocument	GetResultQueryResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_listIncludeMetadataDocuments!IncludeMetadataDocumentsDistances"IncludeMetadataDocumentsEmbeddingsc                       s  e Zd ZU i Zeeejf ed< de	f fddZ
doddZdpd	d
ZdedededdfddZedp fddZdej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d0ejeee%fded.edefd1d0Z(ed2ejeddd3ee%fded4ee) d5ee* d6e+ded.ede&fd7d2Z,ed8ejeee%fdeded.ede&fd9d8Z-ed:ejeddee%fded4ee) d5ee* 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e0 ded.eddfdAd<Z1edBejeee%fdCe/d>eded.ede&f
dDdBZ2edEejeee%fdeded.eddfdFdEZ3edGejeee%fdCe/ded.edefdHdGZ4edIejedJee%fdCe/dKeded.ede5f
dLdIZ6edMejeddddde7ee%fdCe/dNee8 dOee9 d$ee d%ee dPee: dQe;ded.ede5fdRdMZ<edSejedddee%fdCe/dNee8 dOee9 dPee: ded.eddfdTdSZ=edUej>dVe?e8ee@ eeA eeB eeC f dWedefdXdUZDedYej>edddee%fdNe8dCe/dZeEd[eeA d\eeB d]eeC ded.ede+fd^dYZFed_ej>eddddee%fdCe/dNe8dZeeE d[eeA d\eeB d]eeC ded.ede+fd`d_ZGedaej>edddee%fdCe/dNe8dZeEd[eeA d\eeB d]eeC ded.ede+fdbdaZHedcej>eddJddeIee%fdCe/ddeEdNee8 deedOee9 dPee: dQe;ded.edeJfdfdcZKedgej>ede+fdhdgZLediejedefdjdiZMedeNfdkdlZOedmejedefdndmZP  ZQS )qAsyncFastAPI_clientssystemc                    sp   t  | |jd |jd | t| _| t| _|j| _t	j
t|jj|jj|jj|jjd| _d S )Nchroma_server_hostchroma_server_http_port)r2   r3   chroma_server_ssl_enableddefault_api_path)super__init__settingsrequirer   _opentelemetry_clientr   _product_telemetry_client	_settingsr/   resolve_urlstrr2   r3   r4   chroma_server_api_default_path_api_url)selfr1   	__class__ \/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/chromadb/api/async_fastapi.pyr7   A   s   
zAsyncFastAPI.__init__returnc                    s   |    | S N)_get_clientrA   rD   rD   rE   
__aenter__R   s   zAsyncFastAPI.__aenter__Nc                    sB   t | jdkr| j \}}| I d H  t | jdksd S d S )Nr   )lenr0   popitemaclose)rA   _clientrD   rD   rE   _cleanupV   s
   zAsyncFastAPI._cleanupexc_type	exc_value	tracebackc                    s   |   I d H  d S rG   rP   )rA   rQ   rR   rS   rD   rD   rE   	__aexit__[   s   zAsyncFastAPI.__aexit__c                    s&   t    td fdd}|  d S )NrF   c                      s      I d H  d S rG   rT   rD   rI   rD   rE   sync_cleanupb   s   z'AsyncFastAPI.stop.<locals>.sync_cleanuprF   N)r6   stopr   )rA   rV   rB   rI   rE   rX   ^   s   

zAsyncFastAPI.stopc                 C   s   d }z
t  }| }W n ty   d}Y nw || jvrH| jjp"i  }d|d< dt d |d< t	j
| jd}t	jd || jjpAd|d	| j|< | j| S )
Nr   zapplication/jsonzContent-TypezChroma Python Client vz( (https://github.com/chroma-core/chroma)z
User-Agent)max_keepalive_connectionsF)timeoutheadersverifylimits)asyncioget_event_loop__hash__RuntimeErrorr0   r<   chroma_server_headerscopyr
   httpxLimitskeepalive_secsAsyncClientchroma_server_ssl_verify)rA   	loop_hashloopr[   r]   rD   rD   rE   rH   h   s0   


zAsyncFastAPI._get_clientmethodpathkwargsc                    sz   d|v rt |d}||d< tjj|dd d d}| j| }|  j||fi t	t
|I d H }t| t |jS )Njsoncontent/)safeencodingerrors)orjsondumpspopurllibparsequoter@   rH   requestr   r   r   _raise_chroma_errorloadstext)rA   rk   rl   rm   dataescaped_pathurlresponserD   rD   rE   _make_request   s   
$
zAsyncFastAPI._make_requestzAsyncFastAPI.heartbeatc                    s    |  ddI d H }t|d S )Nget znanosecond heartbeat)r   int)rA   r   rD   rD   rE   	heartbeat   s   zAsyncFastAPI.create_databasenametenantc                    s(   | j dd| dd|idI d H  d S )Npost	/tenants/
/databasesr   rn   r   rA   r   r   rD   rD   rE   create_database   s   
zAsyncFastAPI.get_databasec                    sB   | j dd| d| d|idI d H }t|d |d |d dS )	Nr   r   /databases/r   paramsidr   r   r   r   )r   r   )rA   r   r   r   rD   rD   rE   get_database   s   zAsyncFastAPI.delete_databasec                    s$   |  dd| d| I d H  d S )Ndeleter   r   r   r   rD   rD   rE   delete_database   s
   zAsyncFastAPI.list_databaseslimitoffsetc                    s:   | j dd| dt||ddI d H }dd |D S )Nr   r   r   r   r   r   c                 S   s&   g | ]}t |d  |d |d dqS )r   r   r   r   )r   ).0dbrD   rD   rE   
<listcomp>   s    z/AsyncFastAPI.list_databases.<locals>.<listcomp>r   r   _clean_params)rA   r   r   r   r   rD   rD   rE   list_databases   s   
zAsyncFastAPI.create_tenantc                    s    | j ddd|idI d H  d S )Nr   z/tenantsr   r   r   )rA   r   rD   rD   rE   create_tenant   s   zAsyncFastAPI.get_tenantc                    s&   |  dd| I d H }t|d dS )Nr   r   r   )r   )r   r   )rA   r   	resp_jsonrD   rD   rE   
get_tenant   s   
zAsyncFastAPI.get_user_identityc                    s   t di | ddI d H S )Nr   z/auth/identityrD   )r   r   rI   rD   rD   rE   get_user_identity   s   zAsyncFastAPI.list_collectionsdatabasec                    sD   | j dd| d| dt||ddI d H }dd |D }|S )	Nr   r   r   /collectionsr   r   c                 S   s   g | ]}t |qS rD   )CollectionModel	from_json)r   json_collectionrD   rD   rE   r     s    
z1AsyncFastAPI.list_collections.<locals>.<listcomp>r   )rA   r   r   r   r   r   modelsrD   rD   rE   list_collections   s   	zAsyncFastAPI.count_collectionsc                    s,   |  dd| d| dI d H }tt|S )Nr   r   r   z/collections_countr   r   r   )rA   r   r   r   rD   rD   rE   count_collections  s   

zAsyncFastAPI.create_collectionFconfigurationmetadataget_or_createc           
         sN   |rt |nd}| jdd| d| d||||ddI dH }t|}	|	S )zCreates a collectionNr   r   r   r   )r   r   r   r   r   )r   r   r   r   )
rA   r   r   r   r   r   r   config_jsonr   modelrD   rD   rE   create_collection  s    


zAsyncFastAPI.get_collectionc              	      s4   |  dd| d| d| I d H }t|}|S )Nr   r   r   /collections/r   r   r   )rA   r   r   r   r   r   rD   rD   rE   get_collection>  s   

z%AsyncFastAPI.get_or_create_collectionc                    s   | j |||d||dI d H S )NT)r   r   r   r   r   r   )r   )rA   r   r   r   r   r   rD   rD   rE   get_or_create_collectionO  s   zAsyncFastAPI._modifyr   new_namenew_metadatanew_configurationc                    sB   | j dd| d| d| |||rt|nd ddI d H  d S )Nputr   r   r   )r   r   r   r   )r   r   )rA   r   r   r   r   r   r   rD   rD   rE   _modifyd  s   zAsyncFastAPI._forkcollection_idc              	      s>   | j dd| d| d| dd|idI d H }t|}|S )Nr   r   r   r   z/forkr   r   r   )rA   r   r   r   r   r   r   rD   rD   rE   _fork}  s   	
zAsyncFastAPI.delete_collectionc              	      s*   |  dd| d| d| I d H  d S )Nr   r   r   r   r   )rA   r   r   r   rD   rD   rE   delete_collection  s
   zAsyncFastAPI._countc              
      s2   |  dd| d| d| dI dH }tt|S )z0Returns the number of embeddings in the databaser   r   r   r   z/countNr   )rA   r   r   r   r   rD   rD   rE   _count  s   	

zAsyncFastAPI._peek
   nc                    s    | j ||||tdI d H }|S )N)r   r   r   include)_getr.   )rA   r   r   r   r   resprD   rD   rE   _peek  s   	zAsyncFastAPI._getidswherewhere_documentr   c
              
      s   dd |D }
| j dd| d|	 d| d||||||
dd	I d H }t|d
 |dd |dd |dd d |dd |dS )Nc                 S      g | ]}|d kr|qS r~   rD   r   irD   rD   rE   r         z%AsyncFastAPI._get.<locals>.<listcomp>r   r   r   r   z/get)r   r   r   r   r   r   r   r   
embeddings	metadatas	documentsuris)r   r   r   r   r~   r   included)r   r'   r   )rA   r   r   r   r   r   r   r   r   r   filtered_includer   rD   rD   rE   r     s,   



zAsyncFastAPI._deletec              	      s8   | j dd| d| d| d|||ddI d H  d S )Nr   r   r   r   z/delete)r   r   r   r   r   )rA   r   r   r   r   r   r   rD   rD   rE   _delete  s   
zAsyncFastAPI._submit_batchbatchr   c              	      s8   | j d||d |d |d |d |d ddI d	H S )
z?
        Submits a batch of embeddings to the database
        r   r               )r   r   r   r   r   r   Nr   )rA   r   r   rD   rD   rE   _submit_batch  s   zAsyncFastAPI._addr   r   r   r   c	           
   
      sZ   |t ||||f}	t|	d|  I d H i | |	d| d| dt| dI d H  dS )Nmax_batch_sizer   r   r   z/addTr+   r*   get_max_batch_sizer   r>   )
rA   r   r   r   r   r   r   r   r   r   rD   rD   rE   _add     
zAsyncFastAPI._updatec	           
   
      sf   ||d ur
t |nd |||f}	t|	d|  I d H i | |	d| d| dt| dI d H  dS )Nr   r   r   r   z/updateTr   
rA   r   r   r   r   r   r   r   r   r   rD   rD   rE   _update.  s   	
zAsyncFastAPI._upsertc	           
   
      sZ   |t ||||f}	t|	d|  I d H i | |	d| d| dt| dI d H  dS )Nr   r   r   r   z/upsertTr   r   rD   rD   rE   _upsertM  r   zAsyncFastAPI._queryquery_embeddings	n_resultsc
              
      s   dd |D }
| j dd| d|	 d| d||d urt|nd ||||
dd	I d H }t|d
 |dd |dd |dd |dd |dd d |dS )Nc                 S   r   r   rD   r   rD   rD   rE   r   w  r   z'AsyncFastAPI._query.<locals>.<listcomp>r   r   r   r   z/query)r   r   r   r   r   r   r   r   	distancesr   r   r   r   )r   r   r   r   r   r   r~   r   )r   r+   r(   r   )rA   r   r   r   r   r   r   r   r   r   r   r   rD   rD   rE   _queryh  s2   




zAsyncFastAPI.resetc                       |  ddI d H }tt|S )Nr   z/reset)r   r   boolrA   r   rD   rD   rE   reset     
zAsyncFastAPI.get_versionc                    r   )Nr   z/version)r   r   r>   r   rD   rD   rE   get_version  r   c                 C   s   | j S rG   )r<   rI   rD   rD   rE   get_settings  s   zAsyncFastAPI.get_settingszAsyncFastAPI.get_max_batch_sizec                    s4   | j dkr| ddI d H }tt|d | _ | j S )Nr   z/pre-flight-checksr   )_max_batch_sizer   r   r   r   rD   rD   rE   r     s
   
)rF   r/   rW   )R__name__
__module____qualname__r0   r   r   rd   rg   __annotations__r   r7   rJ   rP   r   rU   r	   rX   rH   r>   r   r   r   	OPERATIONr   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&   r"   r   r   ALLr   r    r#   r   r$   r   r   r   r   r   r-   r(   r   r   r   r   r   r   __classcell__rD   rD   rB   rE   r/   6   sP  
 	

	 





















	

&
	

	

	

	

	

)

r/   )Fr^   uuidr   urllib.parserw   rt   typingr   r   r   r   r   r   loggingrd   	overridesr	   chromadbr
   chromadb.authr   chromadb.api.async_apir   chromadb.api.base_http_clientr   %chromadb.api.collection_configurationr   r   r   r   chromadb.configr   r   r   r    chromadb.telemetry.opentelemetryr   r   r   chromadb.telemetry.productr   chromadb.utils.async_to_syncr   chromadb.typesr   r   r   r   chromadb.api.typesr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   	getLoggerr   loggerr/   rD   rD   rD   rE   <module>   s*     L
